ThinkPHP3.2.3 find注入

举报
新网工李白 发表于 2022/01/01 00:19:13 2022/01/01
【摘要】 find(),select(),delete()注入方法类似 主要是在解析完$options之后,还对$options['where']判断了一下是否为空 在 D:\phpstudy_pro\WWW\...

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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。