CGI漏洞大多分为以下几种类型: ()
1.暴露不该暴露的信息如:
暴露密码文件, 暴露自身源代码, 暴露文件存放绝对路径等(这种往往是WEB SERVER的毛病)
2.执行不该执行的命令如:
执行SHELL指令等(这种往往是CGI自身编写的问
)
3.溢出:
如iishacker(这种往往是WEB SERVER的毛病)
第一种漏洞一般是因为SERVER编写不当造成的,如我发现的在NT下用PHP查看硬盘任何文件的
BUG,首先你要了解PHP的执行过程,在NT下PHP3文件被请求后,经过PHP.EXE解释,然后将解释后结
果返回给浏览器,而PHP.EXE本身就可以读任何文件(你可以在自己机器上试验)所以PHP.EXE是无罪
的,那就只有怪APACHE为什么不好好判断用户的输入了.像ASP文件为什么加上xxx.asp%81就会暴露
源代码也是相同道理,Server认为asp%81不是一个asp文件,所以不加以解释就返回给浏览器,当然这
其中还有些判断过程,Server肯定是先判断对方的请求是否合法,但xx.asp%81翻译过来为
:xx.asp?这种请求是合法的,所以Server找到这文件并不经过解释器而直接把它的内容读出来给用
户.像我昨天夜里发现的暴露JSP源代码的方法也是一样,开始我试验的时候Server老认为我的请求
不合法,所以我就骗它,:)骗到它认为我的请求是合法的它就就范了!(脱个精光)哈哈!
在谈第二种漏洞的原理:
这种漏洞容易出问题的地方一般是UNIX下SHELL命令的直接执行和fopen()等对文件操作的函数
的使用。往往是因为程序员不对用户输入做精确的判断造成的,这类例子太多了,如著名的
http://www.victim.com/cgi-bin/phf?Qalias=x%0a/bin/cat%20/etc/passwd就是一个最好的例子
,unix认为第一条命令结束后将要执行第二条命令,然后Hacker的指令就顺利的执行了.所以CGI的漏
洞经常是因为“;”等特殊符号造成的,还值得我一提的是../欺骗,很多BUG都因为../造成的,道理
其实和前边的差不多,如NT4上的SHOWCODE.ASP,大家看它的源代码都知道,其实它做了限制的,只允
许看/msadc/Samples/目录下的东东的,不过我们可以欺骗它,(搞的黑客技术和欺骗技术一样)然后
达到目的查看它诸如:winnt/repair/sam._这样的核心文件(顺便提一下,我以前用JAVA写过一个
showcode的利用程序,有兴趣的朋友可以下载它).
在谈谈FOPEN()函数吧,其实它的作用就是打开文件,也就是读文件内容,它这个特性就可以让我
们利用它做我们想做的事情,如:看弱智女子洗澡,但你千万别像我一样被诬告强奸哦:),使用这个函
数和WEB程序员的水平有关,弱智力的一般就可以让我们利用了,最好的例子就是看我当时是怎么使
用抓X龙爪手抓下来的那副图http://go.163.com/~lovehacker/passwd.jgp想必你也就会明白其中
的道理了!
第三种漏洞原理:最著名的就是EEYE发现的IIS的溢出,也就是当年的IISHACKER(呵呵,他的取名
和我还很像哦,CGIHACKER,IISHACKER)靠,有兴趣的朋友可以多看看关于溢出方面的文章和
IISHACKER的源代码.其实是因为没有判断用户输入边界造成的,应用我们安盟大虾的话就是:本来我
做电梯上五楼,234楼是机密单位别人无权进入,谁知道电梯超载了,到了二楼电梯停了,我也就进了
我不该进的地方,干了我不该干的事情.(形象吧,经典吧,大家鼓掌)