pc软件 文章资讯 手机软件

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

QQ空间的DOM XSS


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

传统的依靠特征码探测的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空间视频自动播放?方法一1、打开手机QQ,进入“联系人”主界面,点击屏幕右下方的“动态”,再点击“好友动态”,然后点击“我的头像”,...。

二维码QQ怎么查找摩拜单车?:QQ怎么查找摩拜单车?从现在起,QQ用户可以通过以下两种方式快捷使用摩拜单车。

快速还原QQ空间已删照片的图文教学,误删了的照片怎么恢复呢?:很多小伙伴会把值得纪念的照片上传到QQ空间进行分享,但有时候会不小心误删了QQ空间的照片,那这些删除的照片还能找回吗?误删了的照片怎么恢复呢?针对这些问题呢,下面小编就给大家详细说说。

发表评论
网站帮助 - 广告合作 - 下载声明 - 网站地图