hi.baidu vphoto Dom-Xss Bug

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 条评论。

发表评论