地址解析绕过
成因
在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进制) 0x7F000001 或 0x7F.0x00.0x00.0x01 -> (8进制) 0177.0.0.1 或 0177.00.00.01 或 017700000001 -> (省略写法) 127.1 或 0 -> (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