### 简要描述: ### 详细说明: 74cms 20141128最新版 漏洞文件:/wap/plus/wap_ajax.php 610-654行: ``` elseif ($act == 'invited_add') { $smarty->cache = false; $resume=resume_one($_POST["resume_id"]); $jobs=jobs_one($_POST["jobs_id"]); if($_SESSION['utype']!=1){ exit("企业会员请登录后邀请面试"); } if (check_interview($_POST["resume_id"],$_POST["jobs_id"],$_SESSION['uid'])) { exit("repeat"); } $addarr['resume_id']=$resume['id']; $addarr['resume_addtime']=$resume['addtime']; if ($resume['display_name']=="2") { $addarr['resume_name']="N".str_pad($resume['id'],7,"0",STR_PAD_LEFT); } elseif ($resume['display_name']=="3") { $addarr['resume_name']=cut_str($resume['fullname'],1,0,"**"); } else { $addarr['resume_name']=$resume['fullname']; } $addarr['resume_uid']=$resume['uid']; $addarr['company_id']=$jobs['company_id']; $addarr['company_addtime']=$jobs['company_addtime']; $addarr['company_name']=$jobs['companyname']; $addarr['company_uid']=$_SESSION['uid']; $addarr['jobs_id']=$jobs['id'];...
### 简要描述: ### 详细说明: 74cms 20141128最新版 漏洞文件:/wap/plus/wap_ajax.php 610-654行: ``` elseif ($act == 'invited_add') { $smarty->cache = false; $resume=resume_one($_POST["resume_id"]); $jobs=jobs_one($_POST["jobs_id"]); if($_SESSION['utype']!=1){ exit("企业会员请登录后邀请面试"); } if (check_interview($_POST["resume_id"],$_POST["jobs_id"],$_SESSION['uid'])) { exit("repeat"); } $addarr['resume_id']=$resume['id']; $addarr['resume_addtime']=$resume['addtime']; if ($resume['display_name']=="2") { $addarr['resume_name']="N".str_pad($resume['id'],7,"0",STR_PAD_LEFT); } elseif ($resume['display_name']=="3") { $addarr['resume_name']=cut_str($resume['fullname'],1,0,"**"); } else { $addarr['resume_name']=$resume['fullname']; } $addarr['resume_uid']=$resume['uid']; $addarr['company_id']=$jobs['company_id']; $addarr['company_addtime']=$jobs['company_addtime']; $addarr['company_name']=$jobs['companyname']; $addarr['company_uid']=$_SESSION['uid']; $addarr['jobs_id']=$jobs['id']; $addarr['jobs_name']=$jobs['jobs_name']; $addarr['jobs_addtime']=$jobs['addtime']; $addarr['personal_look']= 1; $addarr['interview_addtime']=time(); $user=get_user_info($resume['uid']); $resume_user=get_user_info($resume['uid']); if ($_CFG['operation_mode']=="2") { inserttable(table('company_interview'),$addarr); ``` $resume=resume_one($_POST["resume_id"]);//resume_id相当于个人用户id及简历 resume_one函数选取部分代码 ``` unction resume_one($id) { global $db; $id=intval($id); $db->query("update ".table('resume')." set click=click+1 WHERE id='{$id}' LIMIT 1"); $wheresql=" WHERE id='{$id}'"; $sql = "select * from ".table('resume').$wheresql." LIMIT 1"; $val=$db->getone($sql); ``` resume_one()为查询出简历信息 查询出来放入$resume数组 $jobs=jobs_one($_POST["jobs_id"]);//jobs_id 为企业用户发布职位id Jobs_one函数部分代码 ``` function jobs_one($id) { global $db; $id=intval($id); $db->query("update ".table('jobs')." set click=click+1 WHERE id='{$id}' LIMIT 1"); $db->query("update ".table('jobs_search_hot')." set click=click+1 WHERE id='{$id}' LIMIT 1"); $wheresql=" WHERE id='".$id."'"; $sql = "select * from ".table('jobs').$wheresql." LIMIT 1"; $val=$db->getone($sql); ``` jobs_one()为查询职位的信息 查询出来放入数组$jobs 把2个数组的部分放入$addarr数组 带入 inserttable(table('company_interview'),$addarr); 进行insert操作 而仅仅能实现控制的变量 只有$resume['fullname'] 和 $jobs['jobs_name'] $jobs['companyname']则不行 注册做了限制 引进不了 \ 或 ’ insert进去的信息得找个地方出来 文件:wap/personal/wap_interview.php ``` elseif ($act == 'interview') { $uid=intval($_SESSION["uid"]); $wheresql=" WHERE i.resume_uid=$uid "; $perpage = 5; $count = 0; $page = empty($_GET['page'])?1:intval($_GET['page']); if($page<1) $page = 1; $start = ($page-1)*$perpage; $total_sql="SELECT COUNT(*) AS num FROM ".table('company_interview')." as i {$wheresql}"; $count=$db->get_total($total_sql); $limit=" LIMIT {$start},{$perpage}"; $smarty->assign('title','收到的面试邀请 - 个人会员中心 - '.$_CFG['site_name']); $sql="select * from ".table("company_interview")." as i $wheresql order by i.interview_addtime ".$limit; $interview=$db->getall($sql); $smarty->assign('interview',$interview); $smarty->display("wap/personal/wap-interview.html"); } ``` 就是查出个人用户收到的企业的邀请 而上面insert操作就是企业对个人用户的职位邀请 smarty->assign('title','收到的面试邀请 - 个人会员中心 - '.$_CFG['site_name']); 显示出来 显示出来的数据只有 企业名称$jobs['companyname'] 和 职位名称$jobs['jobs_name'] 要实现二次注入,需注册一个个人用户(发布简历,简历姓名可控但有位数限制10位左右), 注册一个企业用户 发布一个职位 职位名称可控,同样有位数限制 不是前端做的限制,无奈!!! 经过不断尝试终于找到了方法 2个可控变量 $resume['fullname'] 改为 ',1,"\ //其中 此处 1 为 个人id $jobs['jobs_name']改为 ",1,1,1,1,1,user(),1,1,1)# 则可完美insert进去 ,user()则 刚好为$jobs['jobs_name'] ### 漏洞证明: 注册个人用户创建简历 更改姓名为 ',1,"\ [<img src="https://images.seebug.org/upload/201412/140516322fc71aca7b492bd607fcfd8c155b21b5.png" alt="geren1.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/140516322fc71aca7b492bd607fcfd8c155b21b5.png) 注册企业用户 发布职位更改职位名称为 ",1,1,1,1,user(),1,1,1)# [<img src="https://images.seebug.org/upload/201412/14051702b9e6874af36ce130423ef5bee021d63a.jpg" alt="qiye1.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/14051702b9e6874af36ce130423ef5bee021d63a.jpg) [<img src="https://images.seebug.org/upload/201412/140517170ef6d21a151838c39876addb1f7efd89.jpg" alt="qiye2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/140517170ef6d21a151838c39876addb1f7efd89.jpg) 访问上面链接 其中resume_id为个人简历id jobs_id为职位id 访问完成 insert操作 最后登录个人用户 [<img src="https://images.seebug.org/upload/201412/14051750128761e7a355cfc98a9c654264196109.jpg" alt="geren2.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/14051750128761e7a355cfc98a9c654264196109.jpg) 访问 http://127.0.0.1/wap/personal/wap_interview.php?act=interview 看到user()已经出来了