这就是最重要的地方:信件的内容,也就是放EXP代码的地方。msn会在这里过滤很多东西,以免出现XSS攻击。作者发信的时候,在信件里输入了“ddddd”,然后点“加粗”按钮,原内容只有一个<STRONG>ddddd</STRONG>,而这个数据包,是修改后的内容。
为了测试MSN对邮件内容的过滤,同时为了研究大牛的EXP代码中一个特殊的地方,作者在信件源内容里,加了一个script标签,和一个div,并给div的id和name以及title给定了值。如果只看EXP代码,有些地方能一眼看懂,而有些地方看起来很茫然。特别奇怪的就是前面定义了一个div叫tap,乍一看似乎没用,而后面又有一个EC_tap的js变量,这个变量居然还有个title属性。原本看起来没有关联的代码,等我用NC把修改后的包提交出去以后(发乐信),再打开信件时,终于明白了。再看看收到的邮件源代码:
邮件中的dddddd还在,div的id由原来的test,变成了EC_test,title的值和div标签之间的值(innerHTML)也在,MSN没有对其过滤。而script标签,就找不到了。这么看起来,就很容易搞明白EXP的代码了。
MSN过滤了很多内容,但是却把“div{background-image:expression(”中的表达式执行了。而表达式中的内容也被过滤一部分,不允许出现定义变量,不允许出现“<”等等,大牛无奈之下,定义了一堆div。用div的title属性和innerHTML来存储shellcode,而特殊的值例如“<”一类,也经过编码后储存,最终巧妙的在msn的严密过滤下执行了恶意代码。不得不佩服的说一句,很邪恶,很强大!