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)
- 1
文章来源: libai.blog.csdn.net,作者:李白你好,版权归原作者所有,如需转载,请联系作者。
原文链接:libai.blog.csdn.net/article/details/122253601
- 点赞
- 收藏
- 关注作者
评论(0)