hi.baidu vphoto Dom-Xss Bug Author: pz Blog: http://hi.baidu.com/p__z Team: http://www.80vul.com date: 2010年5月19日 一 综述 百度空间的动感影集处,JS进行DOM操作时,直接输出用户输入的数据进行编码,造成XSS. 二 分析 在http://hi.baidu.com/p__z/album中,存在这么一段JS: BdAjax.loadJS('/p__z/vphoto/list/data?callback=getVphotoList&asyn=1'); 加载了外部JS "/p__z/vphoto/list/data?callback=getVphotoList&asyn=1" 打开/p__z/vphoto/list/data?callback=getVphotoList&asyn=1 getVphotoList([ { id:"xxx", name:"1", psrc:"http://hiphotos.baidu.com/p__z/abpic/item/xxxx.jpg", pnum:"1" } ]) getVphotoList函数: function getVphotoList(list, total) { vphotoList = list; total = list.length; //list数组的长度,存在动感影集就大于零 G("vphotoContainer").style.display = "block"; if (total > 0) { return buildVphotoList(); //返回函数buildVphotoList() } G("vphotoContainer").innerHTML = "<div style=\"padding:10px;height:60px;margin-top:30px;\">\u60F3\u8BA9\u4F60\u7684\u7167\u7247\u70AB\u52A8\u8D77\u6765\u5417\uFF1F\u53EA\u9700\u7B80\u5355\u4E09\u6B65\u64CD\u4F5C\uFF0C\u5373\u53EF\u642D\u914D\u51FA\u52A8\u611F\u7EB7\u5448\u7684\u9B45\u529B\u76F8\u518C\uFF01<a href=\"/p__z/vphoto/add/\" target=\"_blank\">\u7ACB\u5373\u5236\u4F5C\u52A8\u611F\u5F71\u96C6</a></div>"; } buildVphotoList函数: function buildVphotoList(){ G('vphotoListUl').innerHTML = ''; for(var i = 0,len = vphotoList.length; i < len; i++){ var div = document.createElement('div'), html = G('vphotoItemTpl').value .replace(/IMG-SRC/g,vphotoList[i].psrc) .replace(/LINK-HREF/g,'/sobb_poc/vphoto/item/'+vphotoList[i].id+'.html') .replace(/LINK-NAME/g,stripStrLen(vphotoList[i].name)) .replace(/TITLE-NAME/g,vphotoList[i].name) //直接输出取得的name .replace(/NUM/,vphotoList[i].pnum) .replace(/VPHOTO-ID/g,vphotoList[i].id); div.innerHTML = html; var li = div.getElementsByTagName('li')[0]; singleLiWidth = G('vphotoList').offsetWidth/g_cols; li.style.width = singleLiWidth + 'px'; G('vphotoListUl').appendChild(li); } G('vphotoList').scrollLeft = 0; if(len > g_cols){ G('vListPrev').style.cssText = 'display:block'; G('vListNext').style.cssText = 'display:block'; G('vListNext').className = 'nnormal'; }else{ G('vListPrev').style.cssText = 'display:none'; G('vListNext').style.cssText = 'display:none'; } } 所以只需要构造一个特殊的name,就可以引发DOM XSS. 三 利用 POC :新建个动感影集,名称为 : 1" onload=alert(2)// 四 补丁[fix] 等待官方补丁
0 条评论。