URL 跳转漏洞
URL 跳转漏洞
0x00.参考文章
0x01.概念
这类漏洞属于低危漏洞,但是如果有操作或许可以打组合拳
此类漏洞会出现在造成网页跳转的页面
- 登录、注册、修改密码
- 支付成功跳回原页
- 用户分享、收藏内容过后
- 跨站点认证、授权后
- 站内点击其它网址链接时
- 等等一切可跳转的页面…
利用方式是,给受害者一个有跳转漏洞的安全链接,然后一点击就会跳到我们指定的页面,可以作为钓鱼使用
1 | http://127.0.0.1/url.php?username=&password=&redict=http://127.0.0.1/fish.php |
我们可以使用谷歌语法去 fuzz 要查的网站
1 | site:baidu.com inurl:以下fuzz参数 |
0x02.常见后端代码如下
1 | Java: |
0x03.利用
一般的网站 redict 参数后面是有一个人家网站正规的跳转后链接的
所以我们要做的就是在那个链接附近加一些恶意参数,让其跳到我们要的网站
- 有的时候 redirct=后面的内容是加密的,给自己的 payload 也加密 bypass 即可
1.直接跳转
1 | www.baidu.com/url.php?username=&password=&redict=www.evil.com |
2.协议一致性
1 | www.baidu.com/redirect.php?url=https://www.evil.com/untrust.html |
3.域名是否包含白名单要求的字符串
代码
1 |
|
有的检测域名结尾是不是当前域名(Django 实现)
1 | redirect_url = request.GET.get("url") |
我们可以通过直接输入恶意域名后,衔接正常域名
1 | www.baidu.com/redirect.php?url=http://www.evil.com/www.baidu.com |
或者直接购买或谷歌语法 inurl 搜索一个包含 baidu 的域名
1 | www.baidu.com/redirect.php?url=http://hahabaidu.com |
可以利用公共白名单的可信站
例如 google.com 是可信站,而谷歌下有个缓存功能
1 | google.com/linkurl=www.evil.com |
那么我们可以在有跳转漏洞的 url 后加上有我们恶意页面缓存的可信站 url来进行绕过
1 | www.baidu.com/redirect.php?url=google.com/linkurl=www.evil.com |
如果要求只能是本站域,那么可以本站其他有跳转漏洞的 url 来套娃
1 | www.baidu.com/redirect.php?url=www.baidu.com/redirect.php?url=http://hahabaidu.com |
4.加特殊字符绕过
脱离不了这几个字符:
1 | ; |
例子是:
1 | www.baidu.com/url.php?username=1&redict=http://www.evil.com@tieba.baidu.com |
5.一些奇异的基于不同框架的绕过法
1 | # 很多斜杠、反斜杠、点奇异绕过 |
6.其他绕过方法
跳转到 IP 地址,而不是域名
跳转到 IPV6 地址,而不是 IPv4 地址
将要跳转到的 IP 地址用 10 进制、8 进制、16 进制形式表示
更换协议,使用 ftp、gopher 协议等
借鉴[[SSRF]]漏洞绕过的 tricks
CRLF 注入不能 xss 时,转向利用任意 URL 跳转漏洞