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注入的主要内容,如果未能解决你的问题,请参考以下文章
10-PHP代码审计——thinkphp3.2.3 update注入漏洞
10-PHP代码审计——thinkphp3.2.3 update注入漏洞