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

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

缺陷编号:wooyun-2015-0152299

漏洞标题:中国电信某站注射到webshell(可影响充值系统)

相关厂商:中国电信

漏洞作者: 路人甲

提交时间:2015-11-06 13:50

修复时间:2015-12-25 10:44

公开时间:2015-12-25 10:44

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-11-06: 细节已通知厂商并且等待厂商处理中
2015-11-10: 厂商已经确认,细节仅向厂商公开
2015-11-20: 细节向核心白帽子及相关领域专家公开
2015-11-30: 细节向普通白帽子公开
2015-12-10: 细节向实习白帽子公开
2015-12-25: 细节向公众公开

简要描述:

这事还得从一个被忽略掉的漏漏开始(其实是我特么上网被电信愁死了,早上起来网页直接打不开,我打客户投诉之后的5分钟网络还是OK的,不过10分钟后还得继续投诉。恶意循环,简直不能忍).

详细说明:

地址:http://**.**.**.**/ 程序采用的是PHPCMSV9。这个最近被爆的很火..过程就泄漏KEY,然后注射拿到密码(次期间再次投诉了几次).最后拿到webshell

1.png

发现权限比较大.意外的列出来了**.**.**.**的源码

2.png

不知道给自己的多充点,然后把宽带提升到100M什么的。结果想的有点多,但是找到一些接口

3.png

漏洞证明:

操着审计的那啥,学着看了下相关的代码,发现一个有意思的地方.
url:http://**.**.**.**/web/flows.php这页面有个流量加装包的功能,是通过发送短信给机主,机主输入验证码后再进行下一步操作
如果我想给人恶意支付开通什么超值功能的时候,会有个验证码提示

/*------------------------------------------------------ */
//-- 相关操作
/*------------------------------------------------------ */
if( $action=='getvcode') {
$phone = $_POST["phone"];
$sjm=rand(100000,999999); //验证码
//发送验证码至手机
//发送短信
$contents = '欢迎办理流量加装包业务,您本次获取的手机验证码为:'.$sjm;
$datat = array('phone'=>$phone, 'content'=>$contents, 'pwd'=>Md5($phone.'**********'));
$message = array();
$api = autoLoad('api', 'plugin', 'api'); //加载插件,用于发短信
try {
if(getOperators($datat['phone'])=="1"){
$result = $api->SendSms($datat['phone'],$datat['content']);
if($result["respCode"]=="0"){
$_SESSION['checkcode'.$phone]=$sjm;
$message['code'] = "1";
$message['message'] = "验证码发送成功";
echo json_encode($message);
exit;
} else{
$message['code'] = "0";
$message['message'] = "验证码发送失败";
echo json_encode($message);
exit;
}
} else {
$message['code'] = "3";
$message['message'] = "请输入电信手机号码";
echo json_encode($message);
exit;
}
} catch (Exception $e) {
$message['code'] = "2";
$message['message'] = $e;
echo json_encode($message);
exit;
}


验证码是随机的6位数。rand(100000,999999).而且这里还没有发送一次到下一次的间隔时间,导致可以造成一个对电信手机的短信轰炸机.(拿基友的号码测试的.)

1.png

1.png

对验证码的验证过程

$action=='checkvcode'){
$message= array();
$phone=$_POST['phone'];
$vcode = $_POST['vcode'];
if(empty($_SESSION['checkcode'.$phone])){
$message['code'] = "2";
$message['message'] = "取验证码已过期,请重新获取";
echo json_encode($message);
exit;
}
if($vcode!=$_SESSION['checkcode'.$phone]){
$ctimes = !empty($_SESSION['checkcode'.$phone.'ctimes']) ? $_SESSION['checkcode'.$phone.'ctimes'] : 1;

$_SESSION['checkcode'.$phone.'ctimes'] = $ctimes+1;
if($_SESSION['checkcode'.$phone.'ctimes']==4){
unset($_SESSION['checkcode'.$phone]);
unset($_SESSION['checkcode'.$phone.'ctimes']);
}

$message['code'] = "0";
$message['message'] = "验证码错误";
echo json_encode($message);
exit;
}else{
$message['code'] = "1";
$message['message'] = "验证码正确";
echo json_encode($message);
exit;
}

想生成验证码爆破的,基友说如果开通了立马来我家打死我.所以并没有尝试.因为这个验证过程中并没有看到其他相关的验证,所以如果想给谁开个什么套餐之类的.只是需要填入号码,然后生成100000到999999的验证码跑一下~就可以开通了。
仔细思考了下,这里应该还有存在一个10000号码给任意电信用户发生任意短信内容的漏洞.

修复方案:

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2015-11-10 10:43

厂商回复:

CNVD确认并复现所述情况,已经转由CNCERT向中国电信集团公司通报,由其后续协调网站管理部门处置.

最新状态:

暂无