tp5.1注入分析
背景
上次遇到的盲猜的注入,其实我之前跟过流程,但是很明显的失败了
不知道为什么在cltphp
中可以爆出数据库及一些数据
- 最终结果是
cltphp
在linux
下无法完成注入- 在
Windows
下可以完成,因为不区分大小写
但是在之前的测试中默认的配置是不存在notlike
的注入问题的
故记录:
tp5.0
和tp5.1
关于notlike
的框架差异cltphp
和默认tp5.1
的差异
分析
tp5.0和5.1差异
在tp5.0
中,notlike
的注入支持#
和--+
等符号来注释
如下
但是在tp5.1
中,使用#
或者--+
都会出现参数绑定的问题
#
绑定参数是出现错误
--+
则是不匹配的问题
经过分析发现
tp5.0
中在绑定参数是,bind
为空,无需进行绑定
tp5.1
中则是需要进行绑定
那么问题肯定就是出在对like
表达式的处理上了
tp5.0
对like
的处理
通过parseValue
对传入的参数值进行处理,此时的item
值依然为111'
跟进方法
可以发现,不存在:
绑定符号,进入qoute
方法进行处理
进入此方法后,只是通过PDO
参数的类型进行了转义,并未进行bind
之类的操作
所以返回的值直接为转义后的值,无需进行参数绑定
下面就是直接将logic
拼接,所以在query
方法中bind
参数为空
tp5.1
对like
的处理
tp5.1
就很简单了,定义了parseLike
方法,方法中进行了参数绑定的操作
1 | protected function parseLike(Query $query, $key, $exp, $value, $field, $bindType, $logic) |
tp5.1和cltphp配置差异
默认情况下,如下代码,未进行警告或者error
1 |
|
但是在默认的tp
框架中会爆下标1
不存在
原因:目标cms
的配置文件中关闭了错误
end
结语:
tp5.1
中Request
类去掉了表达式的过滤- 导致
like
可注入
- 导致
tp5.1
中exists
表达式的写法问题,可能导致注入
1 | protected function parseWhereItem($logic, $field, $op, $condition, $param = []) |