vulhub thinkPHP5 SQL注入&&敏感信息泄露漏洞复现

漏洞原理

<?php
...
$bindName = $bindName ?: 'where_' . str_replace(['.', '-'], '_', $field);
if (preg_match('/\W/', $bindName)) {
    // 处理带非单词字符的字段名
    $bindName = md5($bindName);
}
...
} elseif (in_array($exp, ['NOT IN', 'IN'])) {
    // IN 查询
    if ($value instanceof \Closure) {
        $whereStr .= $key . ' ' . $exp . ' ' . $this->parseClosure($value);
    } else {
        $value = is_array($value) ? $value : explode(',', $value);
        if (array_key_exists($field, $binds)) {
            $bind  = [];
            $array = [];
            foreach ($value as $k => $v) {
                if ($this->query->isBind($bindName . '_in_' . $k)) {
                    $bindKey = $bindName . '_in_' . uniqid() . '_' . $k;
                } else {
                    $bindKey = $bindName . '_in_' . $k;
                }
                $bind[$bindKey] = [$v, $bindType];
                $array[]        = ':' . $bindKey;
            }
            $this->query->bind($bind);
            $zone = implode(',', $array);
        } else {
            $zone = implode(',', $this->parseValue($value, $field));
        }
        $whereStr .= $key . ' ' . $exp . ' (' . (empty($zone) ? "''" : $zone) . ')';
    }

$bindName 在前面进行了一次检测,正常来说是不会出现漏洞的。但如果 $value 是一个数组的情况下,这里会遍历 $value ,并将 $k 拼接进 $bindName

进行了预编译后为什么还存在SQL注入呢?因为设置了 PDO::ATTR_EMULATE_PREPARES => false ,那么预编译的过程中PDO不会进行模拟预处理,参数化绑定的整个过程都是和Mysql交互进行的,导致了SQL注入漏洞的出现。预编译虽然是一种防护SQL注入的一种方式,但是如果配置不当或者实现存在缺陷,任可能存在SQL注入漏洞。

详细的漏洞原理地址:ThinkPHP5 SQL注入漏洞 && PDO真/伪预处理分析 | 离别歌

环境搭建

cd vulhub/thinkphp/in-sqlinjection docker-compose up -d

漏洞复现(SQL注入漏洞)

访问 靶机ip:/index.php?ids[]=1&ids[]=2 查看靶场是否正常启动

通过在 ids[] 中添加单引号触发漏洞

构建payload进行sql注入

漏洞复现(敏感信息泄露)

在通过网页报错页面可以发现敏感信息泄露

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值