ssrf绕过
1.“@”符号绕过
http://www.baidu.com@10.10.10.10与http://10.10.10.10请求是相同的。
该请求得到的内容都是10.10.10.10的内容,此绕过同样在URL跳转绕过中适用。
2.点分割符号替换(钓鱼邮件常用于绕过检测)
在浏览器中可以使用不同的分割符号来代替域名中的.分割,可以使用。、。、.来代替:
3.本地回环地址的其他表现形式
127.0.0.1,通常被称为本地回环地址(Loopback Address),指本机的虚拟接口,一些表示方法如下(ipv6的地址使用http访问需要加[]):
127.0.0.1 - 127.255.255.254
http://[::1]
http://[::ffff:7f00:1]
http://[::ffff:127.0.0.1]
4.IP的进制转换(钓鱼邮件常用于绕过检测)
IP地址是一个32位的二进制数,通常被分割为4个8位二进制数。通常用“点分十进制”表示成(a.b.c.d)的形式,所以IP地址的每一段可以用其他进制来转换。使用如win系统自带的计算机(程序员模式)就可简单实现IP地址的进制转换。
由于一些系统会直接提取邮件中内嵌的链接进行检测,而一种此类URL混淆技术采用了URL主机名部分中使用的编码十六进制IP地址格式来逃避检测。
由于IP地址可以用多种格式表示,因此可以在URL中如下所示使用:
- 点分十进制IP地址:http://216.58.199.78
- 八进制IP地址:http://0330.0072.0307.0116(将每个十进制数字转换为八进制)
- 十六进制IP地址:http://0xD83AC74E或者http://0xD8.0x3A.0xC7.0x4E(将每个十进制数字转换为十六进制)
- 整数或DWORD IP地址:http://3627730766(将十六进制IP转换为整数)
5.利用短网址
网上有很多将网址转换为短网址(短链接)的工具网站,黑客会利用短网址来绕过情报检测。
6.特殊数字(例如②)
有时候可以用特殊数字来绕过,构造特殊的127.0.0.1,如1②7.0.0.1
7.句号替代.绕过
用。来代替.
8.省略0
当过滤127.0.0.1整体时,还有一种绕过方式就是省略中间的0,这个时候也是可以访问的
9.进制转换
将127.0.0.1进行转换,转换为其他进制的数从而绕过检测
进制转换结果如下
0177.0.0.1 //八进制 0x7f.0.0.1 //十六进制 2130706433 //
10.特殊0
在windows中,0代表
0.0.0.0,而在linux下,0代表
127.0.0.1,如下所示
url=
http://0/flag.php
11.enclosed alphanumerics 绕过(特殊情况)
Enclosed Alphanumerics是一种Unicode字符集,其中包括被圆圈、括号或其他类型的封闭图形所包围的字母和数字。例如,数字 “1” 可以表示为 “①”。在某些情况下,攻击者可能会尝试使用这些特殊字符来绕过输入校验。
随附的字母数字[1] 官方 Unicode 联盟代码表(PDF) 0 1 2 3 4 5 6 7 8 9 A 乙 C D 乙 F U+246x ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ U+247x ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ U+248x ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇ ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ U+249x ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛ ⒜ ⒝ ⒞ ⒟ U+24斧 ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ U+24Bx ⒰ ⒱ ⒲ ⒳ ⒴ ⒵ Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ U+24Cx Ⓚ Ⓛ Ⓜ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ U+24Dx ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ U+24Ex ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ U+24Fx ⓰ ⓱ ⓲ ⓳ ⓴ ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
11 利用短网址绕过
baidu.com 不允许出现baidu
或者限制了url长度,我们可以切换为短网址,来绕过长度的限制
风险警告【http://rurl.vip/eW7AU】_短网址_网址缩短_短网址还原 - rurl.vip
13DNS重绑定
DNS是Domain Name Service的缩写,计算机域名服务器,在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,而域名解析需要由专门的域名解析服务器来完成,这就是DNS域名服务器。
在网页浏览过程中,用户在地址栏中输入包含域名的网址。浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户。而对于域名所有者,他可以设置域名所对应的IP地址。当用户第一次访问,解析域名获取一个IP地址;然后,域名持有者修改对应的IP地址;用户再次请求该域名,就会获取一个新的IP地址。对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的。这就造成了DNS 重绑定攻击。
攻击过程如下
对于用户请求的URL参数,首先服务器端会对其进行DNS解析,然后对于DNS服务器返回的IP地址进行判断,如果在黑名单中,就pass掉。
但是在整个过程中,第一次去请求DNS服务进行域名解析到第二次服务端去请求URL之间存在一个时间差,利用这个时间差,我们可以进行DNS 重绑定攻击。我们利用DNS Rebinding技术,在第一次校验IP的时候返回一个合法的IP,在真实发起请求的时候,返回我们真正想要访问的内网IP即可。
要完成DNS重绑定攻击,我们需要一个域名,并且将这个域名的解析指定到我们自己的DNS Server,在我们的可控的DNS Server上编写解析服务,设置TTL时间为0,这是为了防止有DNS服务器对解析结果进行缓存。这样就可以进行攻击了,完整的攻击流程为:
服务器端获得URL参数,进行第一次DNS解析,获得了一个非内网的IP
对于获得的IP进行判断,发现为非黑名单IP,则通过验证
服务器端对于URL进行访问,由于DNS服务器设置的TTL为0,所以再次进行DNS解析,这一次DNS服务器返回的是内网地址。
DNS重绑定这里简单的说就是我们先提供一个ip,然后在服务端进行解析的过程中再传127.0.0.1,此时就可能会出现访问到本地文件的情况
rbndr.us dns rebinding service
举个栗子,我们设置一个为127.0.0.1,另一个随便写一下
ping这个地址,可以发现有两种情况,一种是192.168.0.68,另一种是127.0.0.1(这玩意很玄学不一定能成)