QQ空间的DOM XSSpc软件 文章资讯 手机软件

您当前的位置→图文中心安全防范QQ空间的DOM XSS

QQ空间的DOM XSS


2009/4/20  编辑:佚名 来源:本站整理  关键词:

QQ空间的DOM XSS

 

传统的依靠特征码探测的Web漏洞扫描器是扫不到DOM XSS的, 为了更好的发现和修复漏洞, 所以有必要研究下DOM XSS的检测。

     一年多以前, 针对公司一些带参数的HTML页面我写了一个vbs脚本来实现DOM XSS检测。 大体思想是先使用爬虫抓一些含有参数的HTML页面(例如Google Hacking:inurl:html?url= site:xxx.com.cn), 之后就在vbs中建造IE对象(InternetExplorer.Application)修改url中的参数访问页面, url参数的字符是“javascript:window.status="xsstest"”, 之后就在vbs中调用IE对象的StatusTextChange事件, 如果StatusText等于xsstest就可以能够判断出基于DOM的XSS。

    这个方案不是很好, 所以公司的DOM XSS会一直不断没有解决处理, 参考了一些业界的商业/免费漏洞扫描器, 这个问题都没有解决处理。

    所以就在今天又旧话重提, 继续来改进该方案。

    嗯, 请先学习一下预备知识, JavaScript的函数重载。 我们我自己新的思路是利用函数重载, 我自己构造代码替换掉造成XSS的几个JS函数, 之后检查函数中的参数值, 发现特殊字符就大叫一声:It is DOM XSS!

    先看一段模拟代码:

<title>DOM XSS Detect Demo</title>

<script>
//保存本来的document.getElementById
sss = document.getElementById;
//保存本来的document.write(ln)
_echo = document.write;
_echoln = document.writeln;
//保存本来的eval
_eval = eval;
//保存本来的window.navigate
_navigate = window.navigate

var vs;
function _document(){
this.write = hookecho;
this.writeln = hookecho;
this.location = hooklocation;
this.getElementById = _getElementById;
this.navigate = hooknavigate;
}

function _getElementById(s){
vs = s;
setTimeout("GetinnerHTML();", 1000);
return sss(s);
}
function GetinnerHTML(){
var tmpString = sss(vs).innerHTML;
if(tmpString.toLowerCase().indexOf("<hacker>")!=-1){
   alert("没有过滤<>, 或许有XSS");
}
}
function hookecho(s){
var tmpString = s;
if(tmpString.toLowerCase().indexOf("<hacker>")!=-1){
   alert("没有过滤<>, 或许有XSS");
}
_echo(tmpString);
}
function hookeval(s){
if(s.toLowerCase().indexOf("securitytest")!=-1){
   alert("eval可控, 存就在XSS");
}
_eval(s);
}
function hooknavigate(s){
alert(s);
}

var mydocument = new _document();
document.write = mydocument.write;
document.writeln = mydocument.writeln;
document.getElementById = mydocument.getElementById;
eval = hookeval;
window.navigate = hookeval;
</script>
<div id="hi">ss</div>
<script language="javascript">
var g_url;
function QueryList()
{
   var url = window.location.href;
   var pos = url.indexOf("?");
   var suburl= url.substring(pos+1,url.length);
   var pos1 = suburl.indexOf("=");
   g_url = suburl.substring(pos1+1,url.length);

}
QueryList();
</script>

<script>eval( g_url);</script>

    嗯, 很好, 我自己看代码, url里面要构造我们我自己的关键字哦。 我们我自己实现了对函数document.write、document.writeln、eval的重载, 一旦代码中调用这些函数就一定会先进入我们我自己的代码检查是否被XSS。 innerHTML是属性, 没法重载, 所以我们我自己先放过它, 之后用setTimeout查看改变为我们我自己的特征字符没有。

    等等, 转向的函数window.navigate、属性document.location等没法重载啊, 没关系, 前面不是说了用IE对象吗, 就在关联的事件中检查要转向的值。

    最后一个问题, 这段JS要就在整个页面之前执行, 怎么弄?不复杂, 您一定见过ARP劫持会话插入一段HTML代码就在页面最前面吧——不是叫您ARP欺骗, 可以能够我自己架一个HTTP道理, 把可以通过代理的HTTP请求都加一段script。

    可以说是上就是这样, 效率肯定不敢保证, 也不敢保证一定能够解决处理所有造成XSS的JS函数, 其实解析JS才是王道, 呃, 或许您以后可以能够再看到我或者别人写这个题目。

相关文章
  • 生活中的QQ农场
  • QQ比心活动是什么?QQ比心接力活动介绍
  • QQ音乐怎么能够更换皮肤?QQ音乐更换皮肤的方法
  • 如何屏蔽QQ空间的游戏邀请?QQ空间屏蔽游戏邀请的方法
  • QQ音乐如何关注好友?
  • 官方微信推送的一个福利活动绑定公众号免费抽QQ豪华绿钻奖励
  • QQ钱包用户领取2元充值10元可抵扣
  • 至9月6日QQ旋风宣布即将停止使用
  • QQ输入法怎么截图?QQ输入法截图功能怎么用?
  • QQ应用管理器找不到?QQ应用管理器用来干什么?
  • 发表评论
    阅读排行
    相关热门
    网站帮助 - 广告合作 - 下载声明 - 网站地图