乌云(WooYun.org)历史漏洞查询---http://wy.zone.ci/
乌云 Drops 文章在线浏览--------http://drop.zone.ci/
2013-12-24: 细节已通知厂商并且等待厂商处理中 2013-12-29: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放 2014-02-22: 细节向核心白帽子及相关领域专家公开 2014-03-04: 细节向普通白帽子公开 2014-03-14: 细节向实习白帽子公开 2014-03-21: 细节向公众公开
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:
//获取ipfunction 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:
可以看到我们添加的内容,执行成功了,返回的result为true。看看sql语句的执行情况,是否正常执行了:
过滤。
危害等级:无影响厂商忽略
忽略时间:2014-03-21 10:26
2014-05-19:感谢@xfkxfk 提供代码审计,sql注入漏洞已修复!