ThinkPHP3.2.3 find注入

Posted 李白你好

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ThinkPHP3.2.3 find注入相关的知识,希望对你有一定的参考价值。

find(),select(),delete()注入方法类似

主要是在解析完$options之后,还对$options['where']判断了一下是否为空

在 D:\\phpstudy_pro\\WWW\\thinkphp3\\Application\\Home\\Controller下的IndexController.class.php添加代码

一样的思路,首先用id=1 and走一遍流程

一直走,注意到这个地方,我们条件满足进入parseType函数

注意,这时候我们的data还是1 and

经过强制转换后我们变成了int类型

说明这样注入是行不通。我们来分析原因,M()->I()->find()

重点看

这儿$options已经变成数组,紧接着进入条件判断 不成立

往下走来到

进入函数

满足条件,然后来到parseType函数

由此可见,我们不进入parseType函数就可以不会被强转即我们不满足第一个条件(is_array$options[‘where’])即可

回过头来看find函数,里面有构造options的重要方法

如果传入的是id,那么$options就会变成一个二维数组,$options[where][id]才是字符串,$options[where]是一个数组

如果传入的是id[where],那么$options[where]就是一个字符串

那么我们就由此构造参数id[where]

明显,这样options[where]就是一个字符串了

如果这样构造参数也会带来一个问题,

data就会是一个数组,那么会进入think_filter函数的校验

但,正是上一个文章所说,这个函数没有过滤and updatexml

所以可以构造报错注入(还需看后面有没有限制)后面是无限制的

payload:

http://127.0.0.1/thinkphp3/index.php/home/index/getuserid?id[where]=1%20and%201=updatexml(1,concat(0x7e,(database()),0x7e),1)

以上是关于ThinkPHP3.2.3 find注入的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP3.2.3 where注入

thinkPHP3.2.3sql注入漏洞

10-PHP代码审计——thinkphp3.2.3 update注入漏洞

10-PHP代码审计——thinkphp3.2.3 update注入漏洞

thinkphp3.2.3 查询时使用where+select查询出来的比find查询多一个空数组

ThinkPHP3.2.x SQL注入