ThinkPHP3.2.3 where注入
在 D:\phpstudy_pro\WWW\thinkphp3\Application\Home\Controller下的IndexController.class.php添加代码
先用正常id去走一遍流程,然后再使用payload
http://127.0.0.1/thinkphp3/index.php/home/index/getuserid?id=1)%20and%20database()=%27thinkphp3%27%20--
断点调试
首先进入M方法,I方法。官方文档很详细。不再累述。我们看重要部分
I方法的默认过滤filter是html实体编码,还有一个think_filter
看条件 is_array( d a t a ) 就 这 一 条 , data)就这一条, data)就这一条,data不满足要求,进入不了think_filter()函数里面
也可以看看里面到底过滤了什么
报错注入没有过滤。。
接着来到where方法
大体意思是把where的值放到options[‘where’]里面
接着来到find方法
跟进_parseOptions函数()
获取表名别名。跟进到重要部分
这儿的判断条件不满足(如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true。)
也看看里面到底是什么
强转类型
跟进到_options_filter函数
一个空函数
紧接着跟进select
进入select跟到parsesql()函数
进入parseSql函数后来到parsewhere函数
进入parseWhere函数
一直跟进到parsethinkwhere
进入函数
满足$key为_string
进入字符串查询条件,把val的值直接赋给wherestr
后面就很清楚明了。