一句代码 拿下PHP168系统

安全阵线

每周小编陈邓新都会监控网络安全,挖掘最新安全威胁,报道当前最危险的漏洞、最新的挂马网站分析。精彩内容,不容错过。欢迎大家踊跃爆料,来信请发到pcw-chendx@vip.sina.com。

本期主角 PHP168整站系统

问题所在 上传木马

主要危害 夺取网站最高权限

调研时间 2009.6.1~2009.9.6

PHP168是一款较为流行的PHP整站系统,在谷歌中搜索“PHP168 整站系统”(图1),可以得到约879万条结果,可见该系统的影响力非同寻常。最近,我们电脑报的安全研究人员发现该整站系统存在严重的漏洞,该漏洞允许黑客直接上传木马,危及所有使用该整站系统的网站(漏洞补丁下载地址:http://www.shudoo.com/bzsoft)。

38-f7-1.jpg

我是AV0Day组织的阿杰,几个月前我们组织得到PHP168整站系统的登录文件漏洞。该漏洞的利用方式比较简单,我们曾经在1个小时内利用该漏洞检测了上百个网站。目前,我们还有许多中小型网站没有打上漏洞补丁。

通过该漏洞,黑客只要一句代码就可以将PHP木马写入网站中,从而得到网站的控制权。

网站内容可能被黑客窜改,数据可能被窃取,甚至首页上被挂上网页木马,严重危害网站的形象及用户的安全。而对于普通用户而言,浏览被挂马的网站后,很可能成为黑客的“肉鸡”,任其宰割。

Login.php是祸首

登录文件漏洞,很容易就联想到漏洞出在Login.php文件中,没有错,的确是这样。该文件的作用主要是负责PHP168的用户登录,可是该文件却存在设计不严的问题,允许访问者直接将恶意文件写入网站的目录中。

利用的代码是login.php?makehtml=1&chdb[htmlname]=shell.php&chdb[path]=cache&content=,这句代码的意思是通过login.php将shell.php写入网站的cache目录中,shell.php的内容为

安全小百科:利用登录文件的设计不严进行入侵是黑客常用的入侵手段,例如经典的'or' '='代码。不少网站程序由于对登录文件的变量没有进行足够的过滤,可以在登录框中输入'or' '='就直接登录网站后台,甚至不需要知道管理员密码。即使到今日,利用此方法同样还能入侵不少网站。

利用漏洞控制网站

38-f7-3.jpg

第一步:打开谷歌搜索页面,输入关键字“powered by php168”进行搜索(图2),可以找到70多万条搜索结果。随意挑选一个网站作为目标网站进行测试,然后在网站域名后输入login.php?makehtml=1&chdb[htmlname]=shell.php&chdb[path]=cache&content=,回车后如果出现登录界面就表示漏洞被成功利用(图3)。

38-f7-4.jpg

第二步:如果代码被成功执行,木马的客户端就保存在cache\shell.php文件中了。因此只要通过服务端进行连接就可以了。运行《lanker微型PHP后门客户端》(图4),在“木马地址”中填入http://www.***.com/cache/shell.php,其中www.***.com是网站的域名。填写后在“基本功能列表”下拉框中选择“读取目录”,如果连接成功将会显示当前网站所在服务器的绝对路径。

38-f7-5.jpg

第三步:一句话木马的功能是很弱的,因此它只是一个桥梁,通过它将事先准备好的功能更强大的PHP木马传上去。在“基本功能列表”下拉框中选择“上传文件”,点击“浏览”按钮选择PHP木马,点击“提交”按钮就可以将PHP木马传上去了(图5)。

38-f7-6.jpg

安全小百科:什么是一句话木马?可以这样理解,一句话木马其实不算是真正的木马,只是利用一句话代码给网站开个口子,然后黑客利用那个口子上传木马。

第四步:如果客户端提示“OK”,说明文件已经上传成功了。上传的文件会保存在cache目录中,现在只要在网站域名后输入“cache/php木马文件名”就可以运行上传的PHP木马了(图6)。

38-f7-7.jpg

至此,黑客已经获取了网站的控制权,可以对网站内的任意文件进行删除、修改操作,可以说整个网站已经被黑客完全控制。只要黑客愿意,他们还能进一步地提权,从而控制整台服务器,然后就肆无忌惮地挂马了。

深度分析

PHP168的Login.php漏洞实质上是一个注入漏洞,不同于传统的注入漏洞通过猜解管理员的账户密码来进行入侵,这次的入侵速度更快,威力更大,仅通过一句代码就完成了PHP木马的上传,可见网站注入漏洞的危害非常大,还有更大的潜力可供挖掘。

存在漏洞的PHP整站系统肯定不止PHP168一家,那么如何对PHP168类似的漏洞进行检测呢?如果你具备一定的PHP编程能力和黑客知识,通过阅读代码的方式是一个不错的选择,这样虽然没有用漏洞扫描工具查找来得快捷,但是却可以发现漏洞扫描工具无法发现的一些漏洞。

如果你没有阅读PHP代码的能力,那么也可以借助一些PHP注入漏洞扫描工具来完成PHP网站的检测,例如CASI、PHP-Mysql注射分析器、ZBSI等。通过这些软件对网站进行完整的扫描,很有可能会发现新的注入点,再有针对性地进行修补。

那么作为PHP程序的编写者,如何才能避免此类漏洞呢?程序员在编写PHP程序时一定要对程序文件中的变量过滤情况进行详细的检查,确保不会存在过滤不严的情况。编写完成后,应该对文件进行相应的注入测试,找到可能存在问题的页面。

对普通用户而言,上网时一定要开启杀毒软件的实时监控功能,最好使用带网页木马拦截功能的安全辅助工具。遇到网址,不要盲目点击,先看看网址是不是被加密过,如果网址被加密过就最好不要点击。