本文仅作学习记录,如有侵权,请联系删除!
一、SSRF漏洞介绍
1、漏洞定义与成因
SSRF(Server-Side Request Forgery)—— 服务器端请求伪造
SSRF漏洞是一种由攻击者构造形成由服务端发起请求的一个安全漏洞,hacker可以利用存在此漏洞的Web服务器作为代理攻击远程和本地的服务器。
漏洞成因:由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
攻击流程图:
1、hacker向存在ssrf漏洞的Web服务器A发起请求告知要请求的目标,如内网端口、服务或外网文件访问下载等;
2、服务器A帮助hacker去请求目标应用;
3、目标应用将返回结果返回给服务器A;
4、服务器A将返回结果返回给hacker。
如下链接为hacker探测www.aaa.com本地7001端口是否开放:
http://www.aaa.com.cn/contract/download.html?url=http://127.0.0.1:8080
2、漏洞危害与常见攻击方式
漏洞危害:
1)可以对外网、服务器所在内网、本地 进行端口探测,获取一些服务的banner信息;
2)攻击运行在内网或本地的应用程序,如redis、strus2;
3)对内网web应用进行指纹识别(如一些cms会存在一些默认文件,可访问默认文件实现);
4)攻击内外网的Web应用,主要是使用Get参数就可以实现的攻击(如struts2、SQL注入);
5)利用file协议读取本地文件。
常见攻击方式:
1)利用redis从而RCE;
2)探测并利用内网struts2漏洞;
3)利用gopher://协议,在php-fpm里执行任意代码;
4)利用redis/memcache里存储的数据,反序列化或权限绕过;
5)利用phar://协议来触发反序列化漏洞;
6)利用file://协议读取本地文件。等等。
二、SSRF漏洞类型与利用方式
类型:
(1)有回显型(会把hacker请求的数据返回给攻击者)
(2)无回显型(不会把hacker请求的数据返回给攻击者,要确定这种SSRF,需要利用DNSlog)
(3)Semi-ssrf(与无回显型相似。不会返回相关请求的所有详细信息,但会暴露一些数据)
利用方式:
(1)gopher
(2)dict
(3)file
(4)http/https
1、gopher协议
Gopher 协议在SSRF中属于万金油,可以攻击内网的 FTP、Telnet、Redis、Memcache,
也可以进行 GET、POST 请求,还可以攻击内网未授权MySQL。
2、dict协议结合端口探测内网服务
探测Mysql端口:
192.168.10.111:8888/index.php?url=dict://192.168.10.111:3306/info
探测redis端口:
192.168.10.111:8888/index.php?url=dict://192.168.10.111:6379/info
3、file协议用来读取本地文件
?url=file:///etc/passwd
?url=file:///c:/windows
4、http/https探测内网存活主机
但是很多不会开http协议,利用方式:
三、SSRF漏洞攻击应用
SSRF挖掘第一步:
从Web功能上寻找,
1)通过URL地址分享网页内容;
2)通过URL地址翻译对应文本的内容;
3)通过URL地址加载或下载图片;
4)图片、文章收藏功能。等等
观察是否为http://www.xxx.com/a.php?url=(地址)资源地址类型,如果是,可以尝试测试是否存在SSRF漏洞。
从URL关键字中找,
share、URL、link、src、source、target、imageURL等等。
观察是否为http://www.xxx.com/a.php?url=(地址)资源地址类型,如果是,可以尝试测试是否存在SSRF漏洞。
SSRF挖掘第二步:
找到SSRF漏洞后,尝试是否可以请求对应的内网地址,测试漏洞危害,如访问:
http://www.xxx.com/a.php?url=127.0.0.1:8080,测试是否可探测服务器所在内网IP。
四、SSRF漏洞绕过与防御
1、SSRF漏洞绕过
写几个常用的吧。
(1)xip.io
网络上存在一个魔法域名,网址为http://xip.io,当把任何域名后面加上.xip.io后,都会重定向到这个域名。
当我们访问http://127.0.0.1.xip.io/flag.php,那么实际上我们访问的是就http://127.0.0.1/flag.php
(2)利用进制的转换
可以使用一些不同的进制替代ip地址,从而绕过WAF。
127.0.0.1:
八进制:0177.0.0.1
十六进制:0x7f.0.0.1
十进制:2130706433
如访问:
(3) @绕过
请求http://[email protected]与请求http:10.10.10.10 是相同的。
(4)利用其他各种指向127.0.0.1的地址
http://[0:0:0:0:0:ffff:127.0.0.1]/
2、SSRF漏洞防御
1)禁用不需要的协议,限制协议为HTTP、HTTPS;
2)禁止30x跳转;
3)设置URL白名单或者限制内网IP。