今天发现一个 asp/com 在传输文件方面出现的漏洞:
页面程序由用户提交的内容作为文件名在服务器上存储文件。ASP程序在处理的时候对于文件名进行判断,比如,判断文件扩展名(文件名字符串后缀)是否为 .gif 等。最后通过 ADODB.Stream 服务器组件将文件保存。
这里,如果用户提交的内容中包含有 ascii 0,就出现了问题。ASP程序在进行文件名字符串后缀判断时,将整个文件名字符串做为一个统一的字符串处理。但 ADODB.Stream 在进行文件保存时,却认为 ascii 0 为这个字符串的结束符。也就是说,如果提交内容为: "myattack.asp"&chr(0)&"a.gif" 时,在ASP中验证 .gif 扩展名是通过的,而保存文件时却成了 myattack.asp。如果恶意用户通过此法上传一个带有恶意代码的ASP程序的话,就可以做进一步的攻击。
通过这个问题,又想到了许多相关问题。在用户提交的内容通过ASP到COM组件中进行处理时,如果没有对 ascii 0 进行有效判断,很可能会导致恶意代码执行。
要记住的是:C语言是多以 ascii 0 为字符串结束符的,而ASP看样子并不是以 ascii 0 作为结束。Delphi(Pascal)语言中的 string 虽然不是以 ascii 0 为字符串结束,但操作系统也免不了有这些问题。所以,开发内容如果涉及这方面内容的话,还是多想想各种情况吧。
见“动网论坛上传文件漏洞的原理以及攻击的代码实现”:http://www.xfocus.net/articles/200405/700.html
2004年06月15日 18:23 沙发
太好了,这么有意义的帖子,一定要顶!
2004年06月16日 08:08 板凳
顶!
2004年06月16日 10:17 地板
这儿顶,能上上冒吗?
2004年06月17日 11:32 4楼
2004年07月19日 00:04 5楼
那么,干脆判断文件名是否是A..z,0..9
2004年11月29日 17:03 6楼
顶。。。。