PHPSHE SQL注入2(全版通杀)

基本字段

漏洞编号:
SSV-94723
披露/发现时间:
2013-12-24
提交时间:
2013-12-24
漏洞等级:
漏洞类别:
其他类型
影响组件:
PHPSHE
漏洞作者:
xfkxfk
提交者:
Knownsec
CVE-ID:
补充
CNNVD-ID:
补充
CNVD-ID:
补充
ZoomEye Dork:
补充

来源

漏洞详情

贡献者 Knownsec 共获得  0KB

简要描述:

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:

4.png

可以看到我们添加的内容,执行成功了,返回的result为true。 看看sql语句的执行情况,是否正常执行了:

5.png

共 0  兑换了

PoC

暂无 PoC

参考链接

解决方案

临时解决方案

暂无临时解决方案

官方解决方案

暂无官方解决方案

防护方案

暂无防护方案

人气 814
评论前需绑定手机 现在绑定

暂无评论

※本站提供的任何内容、代码与服务仅供学习,请勿用于非法用途,否则后果自负