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

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

缺陷编号: WooYun-2014-81795

漏洞标题: 74cms(20141027)多处二次注入

相关厂商: 74cms.com

漏洞作者: JJ Fly

提交时间: 2014-11-05 14:05

公开时间: 2015-02-03 14:06

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 15

漏洞状态: 厂商已经确认

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

Tags标签: 无

1人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

看完了xfkxfk大神的
http://wooyun.org/bugs/wooyun-2010-070827
http://wooyun.org/bugs/wooyun-2014-070858
对74cms尝试了下,果然有收货。

详细说明:

1.

code 区域
user/company/company_ajax.php
elseif($act=="promotion_add_save"){
************************
report_deal($uid,2,$points);
$user_points=get_user_points($uid);
write_memberslog($uid,1,9001,$_SESSION['username'],"{$pro_cat['cat_name']}:<strong>{$jobs['jobs_name']}</strong>,推广 {$days} 天,(-{$points}),(剩余:{$user_points})",1,1018,"{$pro_cat['cat_name']}","-{$points}","{$user_points}");
}elseif($_CFG['operation_mode']=='2'){
$user_pname=trim($_POST['pro_name']);
action_user_setmeal($uid,$user_pname); //更新套餐中相应推广方式的条数
$setmeal=get_user_setmeal($uid);//获取会员套餐
write_memberslog($uid,1,9002,$_SESSION['username'],"{$pro_cat['cat_name']}:<strong>{$jobs['jobs_name']}</strong>,推广 {$days} 天,套餐内剩余{$pro_cat['cat_name']}条数:{$setmeal[$user_pname]}条。",2,1018,"{$pro_cat['cat_name']}","-{$days}","{$setmeal[$user_pname]}");//9002是套餐操作
}
write_memberslog($uid,1,3004,$_SESSION['username'],"{$pro_cat['cat_name']}:<strong>{$jobs['jobs_name']}</strong>,推广 {$days} 天。");
*******************
}



会调用write_memberslog这个函数。

然后重点看这个变量$jobs['jobs_name']

从上面我们可以得知

$jobs=get_jobs_one($jobid,$uid);

然后再继续看下去

code 区域
function get_jobs_one($id,$uid='')
{
global $db,$timestamp;
$id=intval($id);
if (!empty($uid)) $wheresql=" AND uid=".intval($uid);
$tb1=$db->getone("select * from ".table('jobs')." where id='{$id}' {$wheresql} LIMIT 1");
$tb2=$db->getone("select * from ".table('jobs_tmp')." where id='{$id}' {$wheresql} LIMIT 1");
$val=!empty($tb1)?$tb1:$tb2;
if (empty($val)) return false;
$val['contact']=$db->getone("select * from ".table('jobs_contact')." where pid='{$val['id']}' LIMIT 1 ");
$val['deadline_days']=($val['deadline']-$timestamp)>0?"距到期时间还有<strong style=\"color:#FF0000\">".sub_day($val['deadline'],$timestamp)."</strong>":"<span style=\"color:#FF6600\">目前已过期</span>";
return $val;
}



直接进行调用,没有处理。

So

我们可以这样,

新建一个职位,名称为

code 区域
1','1','1',user(),'1','9')#



图片1.png



然后去为其消费,让其创建记录。置顶,变色,紧急,推荐都行。

图片2.png



然后在积分消费明细中可以看到

图片3.png



经过上面,我们可以得知,经过函数get_jobs_one

返回的值没有就行处理。

然后可以搜索下喊函数,看看在什么地方调用了,而且进入了数据库。

图片4.png







2.

下面继续看了一下申请职位名称这。

图片5.png



这一处,在 个人简历名称 职位名称 企业名称 三处都没有进行过滤,

随后我们可以去查看一下源码。

我们可以找出 上面这三处 数据 是怎么获取的,然后尝试是否可以扩大战果。

$jobsarr=app_get_jobs($jobsid);

foreach($jobsarr as $jobs){

$addarr['company_name']=$jobs['companyname'];

$addarr['jobs_name']=$jobs['jobs_name'];

}

简历信息在这

$resume_basic=get_resume_basic($_SESSION['uid'],$resumeid);



3.

在邀请面试的地方

同样发现了二次注入。

图片6.png



这个构造一下吧 。

把企业名称修改成这样

code 区域
m',1,3,'zz',1,user(),1,1)#



随后我们可以见下图

图片8.png





4.

经过测试,又发现,收藏职位处也可二次注入,

图片10.png



m'为企业名称



5.

发现一个有问题的函数

code 区域
function get_company($uid)
{
global $db;
$sql = "select * from ".table('company_profile')." where uid=".intval($uid)." LIMIT 1 ";
$result = $db->getone($sql);
return $result;
}



获取企业资料不检测直接返回,随后找了这个函数进行了调用,然后执行了数据操作。

code 区域
function add_down_resume($resume_id,$company_uid,$resume_uid,$resume_name)
{
global $db,$timestamp;
$resume_id=intval($resume_id);
$company_uid=intval($company_uid);
$resume_uid=intval($resume_uid);
$resume_name=trim($resume_name);

$company=get_company($company_uid);
$sql = "INSERT INTO ".table('company_down_resume')." (resume_id,resume_uid,resume_name,company_uid,company_name,down_addtime) VALUES ('{$resume_id}','{$resume_uid}','{$resume_name}','{$company_uid}','{$company['companyname']}','{$timestamp}')";
return $db->query($sql);
}



然后再挖掘这个函数的

下载记录。

图片11.png



漏洞证明:

图片3.png



图片8.png



修复方案:

根据函数进行处理吧。

希望你们也自行检查一下,不要指哪补哪

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2014-11-08 11:50

厂商回复:

感谢反馈!

最新状态:

暂无


漏洞评价:

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

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

评价

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