ThinkPHP设计缺陷导致逻辑漏洞造成密码找回绕过等问题

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

### 简要描述: 在不正确使用 ThinkPHP 时,可能会造成参数处理流程导致的逻辑漏洞。 ### 详细说明: ThinkPHP 处理传入的参数的时候,如果直接带入一个数组,接着数组带入 SQL 语句,会产生之前 phithon 大牛爆的 0day: [WooYun: ThinkPHP框架架构上存在SQL注入](http://www.wooyun.org/bugs/wooyun-2014-086737) 利用方式很简单: ``` data[0]=exp&data[1]=SQLI ``` 然而,thinkphp 支持的不仅仅是 exp,像 like、in,都会支持。 也就是说,我们可以在很多地方精心构造一个参数,导致造成逻辑漏洞。比如找回密码、权限验证等。 我们传入: ``` data[0]=like&data[1]=x%25 ``` 这样就会编译成如下 mysql 语句: ``` select xx from xx where data like 'x%' ``` 举个例子: 找回密码的地方,总会有一个 token,这个token如果储存在数据库,又从 url 接受的话,就会有如下情况。 假如 token 为 202cb962ac59075b964b07152d234b70,找回密码的 url 为: ``` http://localhost/reset?token=202cb962ac59075b964b07152d234b70 ``` 那么我们传入: ``` http://localhost/reset?token[0]=like&token[1]=2%25 ``` 不用知道全部的 token 即可重置管理员的密码,因为 2% 在 mysql 中匹配正好会匹配到 202cb962ac59075b964b07152d234b70。 比如在 ThinkOX 登录的地方: POST 内容: ``` username[0]=like&username[1]=tes%25&password=bb ``` 执行的 SQL 语句为: [<img src="https://images.seebug.org/upload/201506/192325019316991566af60df0c6e4817f7be548c.png"...

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