|
XSS 7: 百度搜藏XSS
这个漏洞有点特别。搜藏可以从很多地方点进去,这里不赘述。
打开搜藏页面后,控制网址的内容为 javascript:alert(/XSS/);
页面打开时候是没有问题的,但是点击“添加收藏”后,则会执行我们的JS
实际上,这里baidu是用ajax来做了一系列操作,比如判断URL是否重复,判断提交是否成功。
ajax的返回是用json来做的,主要处理返回结果的js为 itemadd.js
返回页面:
以下是引用片段:
{
resultNo:
"url重复" ,
resultBool:
false,
resultNum:30005,
userLogin: "1",
itemId: "026aec1d90a1e9e5ea1182a1"
}
如果仅仅是分析HTML页面,是看不到任何执行了我们JS的地方的,但我们的小框框确实是弹出来了。
这又是一个典型的DOM XSS
原因出在这里,在itemadd.js中:
| 以下是引用片段: function checkForm(){ var f=document.fadd,oit=f.it,oiu=f.iu,odc=f.dc,otn=f.tn,vst=0; if(f.st.checked==true) vst=1; if(chek_submit(oit,oiu,odc,otn)){ var vit=oit.value,viu=oiu.value,vdc=odc.value,vtn=otn.value,url=’/do/cm’; var p_pars=’iu=’+encode(viu)+’&st=’+encode(vst)+’&dc=’+encode(vdc)+’&it=’+encode(vit)+’&tn=’+encode(vtn); var pars=’ct=5&’+p_pars; new Ajax.Request(url,{ method:’post’, parameters:pars, onComplete:function(xmlHttp){ var jsonResults=’(’+xmlHttp.responseText+’)’; var retno=eval(jsonResults); if(parseInt(retno.userLogin)==0){ if(nw==true) location.href=”http://passport.baidu.com/?login&tpl=fa1&next_target=_blank&skip_ok=1&u=”+checkUrl(location.href,1800); else location.href=”http://passport.baidu.com/?login&tpl=fa&skip_ok=1&u=”+checkUrl(location.href,1800); return } var retTxt=retno.resultNo; var resultNum=retno.resultNum; if(retTxt==”url重复”){ var itemId=retno.itemId; if(confirm(”url重复,是否覆盖?”)){ new Ajax.Request(url,{ method:’post’, parameters:”iid=”+itemId+”&ct=8&”+p_pars, onComplete:function(xmlHttp){ var jsonResults=’(’+xmlHttp.responseText+’)’; var retno=eval(jsonResults); if(parseInt(retno.userLogin)==0){ if(nw==true) location.href=”http://passport.baidu.com/?login&tpl=fa1&next_target=_blank&skip_ok=1&u=”+checkUrl(location.href,1800); else location.href=”http://passport.baidu.com/?login&tpl=fa&skip_ok=1&u=”+checkUrl(location.href,1800); return } var retTxt=retno.resultNo; var resultNum=retno.resultNum; checkResult(retTxt,resultNum) } }) } } else{ checkResult(retTxt,resultNum) } } }) } else return false }; …… function checkResult(retTxt,resultNum){ if(nw==true){ if(retTxt==”添加成功”){ hide(G(”DivShm”)); window.resizeTo(600,507); hide(G(”iaMain”)); hide(G(”iaMain”)); G(”DivSucess”).innerHTML=”<p><table align=’center’ width=’50%’><tr><td height=’50px’></td></tr><tr><td style=’text-align:center;height:100px;font-size:16px;’><img src=’/-/imgs/icn_ok.gif’/> 恭喜您,添加搜藏成功!</td></tr& gt;<tr><td align=’center’ style=’font-size:12px;color:#808080′>本窗口将在<span id=’autoTime’>3</span>秒内自动关闭…</td></tr><tr& gt;<td align=’center’><input type=’button’ onclick=’javascript:self.close();’ value=’ 立即关闭 ’></td>< /tr></table></p>”; show(G(”DivSucess”)); IntervalObj3=window.setInterval(”w_close()”,1000) } else{ switch(resultNum){ case 30101:showEM(document.fadd.it.parentNode.childNodes[1],errmsg[1]); break; case 30102:showEM(document.fadd.dc.parentNode.childNodes[1],errmsg[3]); break; case 30103:showEM(document.fadd.tn.parentNode.childNodes[1],errmsg[4]); break; case 30100:showEM(document.fadd.iu.parentNode.childNodes[1],errmsg[2]); break; default:{hide(G(”DivShm”));hide(G(”iaMain”)); window.resizeTo(600,507); var c=G(”errDiv”); show(c); var s=”<p>添加失败!”+retTxt+” <a href=’javascript:back();’>点击返回</a></p>”; c.innerHTML=s } } } } else{ if(retTxt==”添加成功”) location.href=redirectUrl; else{ switch(resultNum){ case 30101:showEM(document.fadd.it.parentNode.childNodes[1],errmsg[1]); break; case 30102:showEM(document.fadd.dc.parentNode.childNodes[1],errmsg[3]); break; case 30103:showEM(document.fadd.tn.parentNode.childNodes[1],errmsg[4]); break; case 30100:showEM(document.fadd.iu.parentNode.childNodes[1],errmsg[2]); break; default:{var c=G(”errDiv”); show(c); var s=”<p>添加失败!”+retTxt+” <a href=’javascript:back();’>点击返回</a></p>”; c.innerHTML=s; hide(G(”DivShm”)); hide(G(”iaMain”)) } } } } }; |
| 以下是引用片段: </style> <script src=”/-/js/base.js?v=1.1″></script> <script src=”/-/js/checkform.js?v=1.1″></script> <script src=”/-/js/suggest.js?v=1.1″></script> <script src=”/-/js/itemadd.js?v=1.2″></script> <script language=’javascript’> <!– var redirectUrl=”javascript:alert(2);”; var s_tags=”未分类”; var s1_tags=”"; var a_tags = []; |
而最要命的就是,这个变量是直接取了我们输入进去的网址的值。
所以在ajax提交后,页面返回后,会重新赋值location.href,改变ajax的 redirectUrl
从而会以伪协议执行我们的javascript,所以可爱的小框框就弹出来了。
分析到这里,我们就顺便发现了另外一个XSS漏洞,就是出在
| 以下是引用片段: var redirectUrl=”javascript:alert(2);”; |
| 实例讲解跨站入侵攻防战之攻击篇 | 05-08 |
| 对偶偶娱乐分站服务器的安全检测 | 04-23 |
| 入侵88red系统的详细过程 | 04-07 |
| 对趋势科技等数万网站被攻击的分 | 03-21 |
| 凡人网络购物系统 V8.0 简体中文 | 03-18 |
| linux平台下渗透日本著名XXXXXX. | 03-18 |
| 搜索框所引起的XSS漏洞 | 03-05 |
| 跳转漏洞的利用 | 03-05 |
| 对复旦大学的一次漫长渗透 | 03-03 |
| .net一句话马以及dx论坛拿shell | 03-01 |
| php渗透入侵过程图文详解 | 03-01 |
| DJ网站的入侵详细过程 | 02-26 |