不安全的URL跳转(Pikachu)

原理

URL跳转漏洞学习 - FreeBuf网络安全行业门户

修复

1.若跳转的URL事先是可以确定的,包括url和参数的值,则可以在后台先配置好,url参数只需传对应url的索引即可,通过索引找到对应具体url再进行跳转;
2.若跳转的URL事先不确定,但其输入是由后台生成的(不是用户通过参数传人),则可以先生成好跳转链接然后进行签名,而跳转cg首先需要进行验证签名通过才能进行跳转;
3.若1和2都不满足,url事先无法确定,只能通过前端参数传入,则必须在跳转的时候对url进行按规则校验:即控制url是否是你们公司授权的白名单或者是符合你们公司规则的url:

function checkURL ( sURL) {
return (/^(https?:\/\/)?[\w-.]+.(yourDomainA|yourDomainB|yourDomainC).com($|\/|\)/i).test(sUrl)||(/^[\w][\w\/.-_%]+$/i).test(sUrl)||(/^[\/\][^\/\]/i).test(sUrl) ? true : false;    }

4.XSS漏洞的注意事项 :跳转url检测中也加入了CRLF头部注入漏洞的检测逻辑, 具体就是在请求参数中加入了%0d%0a这种测试代码,需要对这些参数进行删除处理(事实上:在判断到一个参数中包含 %00 -> %1f 的控制字符时都是不合法的,需对其进行删除)。

pikachu

打开题目,点击链接抓包

第一二个链接,看不出什么

image-20240510110726386

第三个链接

image-20240510110502513

第四个链接

image-20240510110627941

看源代码,发现url重定向是通过 urlredirect.php?url=xxx来实现的

image-20240510111041291

我们可以构造Payload即更改xxx的值来实现跳转。

posted @ 2024-05-12 14:10  machacha  阅读(19)  评论(0编辑  收藏  举报