分析微软程序一段时间,虽然找到了一堆漏洞,但还是赞叹微软程序接口的规范、分明的层次结构,又在程序中感受到了数学中那种严密的逻辑思维的美,所以经常留言灌水的时候我会留下一句"I love Microsoft."
程序有BUG是很正常的,这也可以得到大家的理解,可BUG之外的一些东西就不能让人理解了。今天分析到一段程序,破坏了微软给我的这种好印象,真让我搞不懂微软到底要干什么。还是先让大家看看例子吧,中文简体WIN2000+IIS5.0环境。
http://192.168.8.48/A.ida/%c1%00.ida
文件 E:\Inetpub\wwwroot\A.ida\@.ida。 系统找不到指定的路径。
解释:
%c1%00解码成了c1 00,这正常。但再一次解码成了(c1-c0)*40+00=40='@'
http://192.168.8.48/A.ida/%c1%01.ida
文件 E:\Inetpub\wwwroot\A.ida\A.ida。 系统找不到指定的路径。
解释:
%c1%01解码成了c1 01,这正常。但再一次解码成了(c1-c0)*40+01=41='A'
http://192.168.8.48/A.ida/%c1%02.ida
文件 E:\Inetpub\wwwroot\A.ida\B.ida。 系统找不到指定的路径。
....
http://192.168.8.48/A.ida/%c1%3a.ida
文件 E:\Inetpub\wwwroot\A.ida\z.ida。 系统找不到指定的路径。
....
大家可能还没意思到这能干什么,那看看我们能干什么吧。把计数器e: \inetpub\wwwroot\counter.asp拷贝成e:\inetpub\count.asp,也就是到了WEB目录的上级目录,文件名也改了避免混淆,这时在浏览器里面输入:http://192.168.8.48/..%c1%1ccount.asp,乖乖,计数器界面出来了,也就是说你访问到了WEB目录的上级目录。再结合一些别的技巧,可以看到虚拟目录所在盘任意文件。这点危害性不用我再多说,懂一点安全的就知道这是严重的"漏洞"了。打上SP1仍然还有这种编码问题。
c1 1c,中文简体里面没有这种字,照正常的情况该根据内码转换文件\winnt\system32\c_936.nls会编码成"?"。大家会SOFT-ICE的可以实验,设置断点 bpx CreateFileA拦截文件打开操作,再打开一个文件,断点出来后把文件名最后修改成c1 1c,再设置断点bpx CreateFileW,g运行出来看看这个c1 1c 解码成了什么?解码成了3f就是"?"号,这是正常的汉字转换成内码结果。但对中文简体版IIS中c1 1c解码成了(c1-c0)*40+1c=5c='\',作为一个程序员,我真的不能读懂这段程序,虽然自认为长期看别人程序,能轻易看出编程程序员的思想,但在微软面前我还是只能承认我的水平还不到家。
相关文章:
【相关论坛】 【发表评论】