ThinkPHP框架架构上存在SQL注入

- AV AC AU C I A
发布: 2025-04-13
修订: 2025-04-13

### 简要描述: ThinkPHP框架本身缺陷导致SQL注入漏洞,基本影响所有使用ThinkPHP开发的应用,包括thinksns、onethink等,这里以thinkphp自家的OneThink为例。 这个猛料,希望能加精呀~ ### 详细说明: 很多人天真的以为,使用了框架提供的数据库查询方法,不再进行SQL语句拼接,就能完美避免SQL注入。那么你就错了,有时候框架反而成为带你进入陷阱的人。 我们翻开最新版thinkphp框架文档,其中的“表达式查询”章节:http://document.thinkphp.cn/manual_3_2.html#express_query [<img src="https://images.seebug.org/upload/201412/110006351d9b1a98b63583c96f9089925b8937c6.jpg" alt="01.jpg" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201412/110006351d9b1a98b63583c96f9089925b8937c6.jpg) WTF,如果where语句的条件是数组,而且数组的第一个值是'exp',那么第二个值就可以直接写SQL语句? WTF,那岂不是一个完美的SQL注入? 可能有些人不明白。我说细一点,很多站长写查询语句会这样: ``` $data = array(); $data['user'] = $_POST['username']; $data['pass'] = md5($_POST['password']); M('user')->where($data)->find(); ``` 这应该是一个ThinkPHP对数据库查询的基础方法。那么,如果我传入的参数是这样: username[0]=exp&username[1]=aa'or 1=1%23&password=1,那么,是不是就是一个完美的万能密码? 这个特性在thinkphp3.1、3.2版本中均存在,通用性比较广,危害很大。 有的同学可能觉得有一定局限性,因为thinkphp的I函数中有如下代码: ```...

0%
暂无可用Exp或PoC
当前有0条受影响产品信息