URL相关Bypass总结

任意URL跳转绕过

常规绕过方式

1
2
3
4
5
6
7
8
<!--以下绕过方法均跳转到admintony.com-->
http://admintony.com?jd.com
http://admintony.com#jd.com
http://admintony.com/jd.com
http://admintony.com\jd.com
http://admintony.com\\jd.com
http://jd.com@admintony.com
http://jd.com.admintony.com

HPP参数污染绕过

1
2
3
http://sso.jd.com/?redir=http://jd.com&redir=a@admintony.com

那么跳转会变成:Location:http://jd.com,@admintony.com

跳转至目录的绕过

先看这么一个案例:

这是跳转到子目录的一个URL跳转,如果令redir=http://admintony.com,则会报错;如果令redir=admintony.com,则会跳转到目标IP/admintony.com/groupon/detail?aid=1234

想到前两天看到p神写的python web的任意URL跳转,想到了//,在chrome、firefox等主流浏览器中,如果url以//domain开头,浏览器将会默认认为这个url是当前数据包的协议。比如,我们访问http://目标IP.com/?redir=//baidu.com/,则浏览器会默认认为跳转到http://baidu.com,而不是跳转到.//baidu.com/目录。

畸形绕过

昨晚遇到一个情况,当redir的参数为:http://localhost?.dianping.com时,正常跳转到localhost,当参数为:http://localhost.?.dianping.com时依然正常跳转,但是在localhost.后面加上任意数字或字母,马上就跳转到m.dianping.com了,因此使用数字地址进行任意URL跳转。

数字地址计算方式1

可以是十六进制,八进制等。
115.239.210.26 >>> 16373751032
首先把这四段数字给分别转成16进制,结果:73 ef d2 1a
然后把 73efd21a 这十六进制一起转换成8进制
记得访问的时候加0表示使用八进制(可以是一个0也可以是多个0 跟XSS中多加几个0来绕过过滤一样),十六进制加0x。

访问:http://016373751032 ,即可访问到百度。

数字地址计算方式2

111.13.100.92 转成数字地址的方式为:111256256256 + 13256256+100256+92*1
这样得到:1863148636

这种数字地址不需要在前面加0,即访问:http://1863148636 即可访问到百度。

数字地址计算

跨域资源访问绕过

由于Origin中不存在带path情况,所以跨域资源访问绕过方式只有以下几点:

1
2
3
http://www.jd.com.admintony.com
http://hhjd.com
http://m.jd.com-.admintony.com #适用于匹配jd.com后面是数字、字符、"."的情况。

CSRF的refer绕过

从域名下手

1
2
3
4
http://admintony.com/?jd.com
http://admintony.com/#jd.com
http://admintony.com/jd.com/
http://jd.com.admintony.com

其他方式

  • refer为空

利用ftp://,file://,javascript:,data:协议,当浏览器地址栏是这些协议开头的,如果这个HTML页面向任何http站点提交请求的话,这些请求的Referer都是空的。

  • img标签的src属性

如果该站点的子域名内,存在发帖,img的src属性可控的情况,也可以使用<img src='CSRF地址'>来绕过。

  • 站内URL跳转

有很多时候,URL跳转可以跳转到其任意子域名,可以利用URL跳转的方式来绕过refer。

SSRF绕过方式

我觉得这个已经有总结的很详细的了,传送门SSRF绕过方法总结