SSRF总结

地址解析绕过

成因

在php中url_parse和curl对地址的解析不同,如对地址http://xxx@127.0.0.1@baidu.com

url_parse会解析成baidu.com

而curl会请求127.0.0.1,高版本中的PHP中修复了但是可以加空格绕过

即构造http://xxx@127.0.0.1 @baidu.com可以绕过url_parse的限制对127.0.0.1进行解析

进行实验:

parse_url进行正常解析:

 

 parse_url进行构造的url进行解析:

 

发现parse_url只解析@后面的东西所以可以根据这个进行绕过

而curl会对@  @中间的地址进行解析,

 gopher协议进行post数据

在进行ssrf请求时如何向请求的url发送post数据呢,可以使用gopher协议

使用ctfhub中的题目学习

 

直接访问127.0.0.1/flag.php

 

 是一个Post提示post的数据为key

然后告诉我们需要本地

就需要使用服务器去向flag.php去post数据使用gopher协议

gopher://127.0.0.1:80/_

以上是gopher的格式,我们先post一下flag

 

 这个长度一定要对

然后整体进行url编码

 

然后传入

 

 再进行url编码(因为先传给服务器,进行一次解码,服务端再post给flag.php再解码一次所以需要编码两次)

然后获取flag:

 URL绕过

例如:127.0.0.1 或 localhost
-> (10进制) 2130706433
-> (16进制) 0x7F0000010x7F.0x00.0x00.0x01
-> (8进制) 0177.0.0.10177.00.00.01017700000001
-> (省略写法) 127.10
-> (ipv6) [::ffff:7f00:1] 或 [::1] 或 [::]

一些编码方式绕过

⓪①②③④⑤⑥⑦⑧⑨⑩ꋷꋸꋹꋺꋻꋼꋽꋾꋿꌀ
⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾
⓿⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴
⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛
⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵
ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄ℗ⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏ
ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ

还可以利用句号绕过

127。0。0。1 ==> 127.0.0.1

还可以利用

127.1.1.1/127.1.1.2/127.0.0.2

进行绕过

 

 

 利用xip.io进行绕过

xip.io 是⼀个公开的 DNS 解析站,提供内⽹ DNS 解析,功能就是将 *.IP地址.xip.io 解析 对应的 IP 地址。例如:

10.0.0.1.xip.io resolves to 10.0.0.1
 www.10.0.0.1.xip.io resolves to 10.0.0.1
 mysite.127.0.0.1.xip.io:4000 resolves to 127.0.0.1:4000
 foo.bar.127.0.0.1.xip.io:4000 resolves to 127.0.0.1:4000

 302跳转

利用短网址绕过

当过滤127.0.0.1时可以利用

https://4m.cn/user
https://tinyurl.com/app
https://www.985.so/

这些网址进行短网址生成

 

可以看到直接会被识别成127.0.0.1

 DNS重绑定攻击

要完成 DNS 重绑定攻击,我们需要⼀个域名,并且这个域名解析指定的 DNS Server DNS Server 的 TTL TTL 时间设置为 0 0,这样就可以进⾏攻击了。 完整的攻击流程为:

1. 服务器端获得 URL 参数,进⾏第⼀次 DNS 解析,获得了⼀个⾮内⽹的IP
2. 对于获得的 IP 进⾏判断,发现为⾮⿊名单 IP,则通过验证
3. 服务器端对于 URL 进⾏访问,由于 DNS 服务器设置的 TTL 为 0,所以再次进⾏ DNS 解析,这⼀
次 DNS 服务器返回的是内⽹地址。
4. 由于已经绕过验证,所以服务器端会返回访问内⽹资源的结果。

可借助⼀些在线平台完成 DNS Rebinding 攻击。

http://ceye.io/dns-rebinding
https://lock.cmpxchg8b.com/rebinder.html1

 

posted @ 2021-10-30 09:02  无据  阅读(129)  评论(0编辑  收藏  举报