### 简要描述: PHPSHE SQL注入,全版本通杀。 ### 详细说明: 在/module/index/product.php文件 在商品咨询,和商品评价时未对参数请求头部信息过滤,导致sql注入。 看看商品评价的代码: ``` //#####################@ 商品评价 @#####################// case 'commentadd': if (isset($_p_pesubmit)) { $info['product_id'] = intval($_g_id); $info['comment_text'] = pe_texthtml(pe_dbhold($_p_comment_text)); $info['comment_atime'] = time(); $info['user_id'] = $_s_user_id; $info['user_name'] = $_s_user_name; $info['user_ip'] = pe_ip(); if ($db->pe_insert('comment', $info)) { product_num("commentnum", $info['product_id']); $result = true; $info['comment_atime'] = pe_date($info['comment_atime']); $info['comment_text'] = htmlspecialchars($_p_comment_text); ``` 有一个info[‘user_ip’]的提交内容,这个是从pe_ip函数获取:/include/function/global.func.php: ``` //获取ip function pe_ip() { if (isset($_SERVER)){ if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ $realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if (isset($_SERVER["HTTP_CLIENT_IP"])) { $realip = $_SERVER["HTTP_CLIENT_IP"]; } else { $realip...
### 简要描述: PHPSHE SQL注入,全版本通杀。 ### 详细说明: 在/module/index/product.php文件 在商品咨询,和商品评价时未对参数请求头部信息过滤,导致sql注入。 看看商品评价的代码: ``` //#####################@ 商品评价 @#####################// case 'commentadd': if (isset($_p_pesubmit)) { $info['product_id'] = intval($_g_id); $info['comment_text'] = pe_texthtml(pe_dbhold($_p_comment_text)); $info['comment_atime'] = time(); $info['user_id'] = $_s_user_id; $info['user_name'] = $_s_user_name; $info['user_ip'] = pe_ip(); if ($db->pe_insert('comment', $info)) { product_num("commentnum", $info['product_id']); $result = true; $info['comment_atime'] = pe_date($info['comment_atime']); $info['comment_text'] = htmlspecialchars($_p_comment_text); ``` 有一个info[‘user_ip’]的提交内容,这个是从pe_ip函数获取:/include/function/global.func.php: ``` //获取ip function pe_ip() { if (isset($_SERVER)){ if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){ $realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } else if (isset($_SERVER["HTTP_CLIENT_IP"])) { $realip = $_SERVER["HTTP_CLIENT_IP"]; } else { $realip = $_SERVER["REMOTE_ADDR"]; } } else { if (getenv("HTTP_X_FORWARDED_FOR")){ $realip = getenv("HTTP_X_FORWARDED_FOR"); } else if (getenv("HTTP_CLIENT_IP")) { $realip = getenv("HTTP_CLIENT_IP"); } else { $realip = getenv("REMOTE_ADDR"); } } return $realip; } ``` 这里取到的IP没有过滤,直接带人pe_insert语句。 ``` public function pe_insert($table, $set) { //处理设置语句 $sqlset = $this->_doset($set); return $this->sql_insert("insert into `".dbpre."{$table}` {$sqlset}"); } //处理设置语句 protected function _doset($set) { if (is_array($set)) { foreach ($set as $k => $v) { $set_arr[] = "`{$k}` = '{$v}'"; } $sqlset = 'set '.implode($set_arr, ' , '); } else { $sqlset = "set {$set}"; } return $sqlset; } public function sql_insert($sql) { $this->query($sql); if ($insert_id = mysql_insert_id()) { return $insert_id; } else { $result = mysql_affected_rows(); return $result > 0 ? $result : 0; } } ``` 最后导致insert型sql注入。 ### 漏洞证明: 我们来评价商品,然后抓包修改头部,添加Client-ip: [<img src="https://images.seebug.org/upload/201312/23212908449a54d2463b581c1ef3086e94a2a4fc.png" alt="4.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201312/23212908449a54d2463b581c1ef3086e94a2a4fc.png) 可以看到我们添加的内容,执行成功了,返回的result为true。 看看sql语句的执行情况,是否正常执行了: [<img src="https://images.seebug.org/upload/201312/23212922c4af66038cd194100a29534324499d2e.png" alt="5.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201312/23212922c4af66038cd194100a29534324499d2e.png)