thinkphp5框架SQL注入分析:parseArrayData
前言
漏洞位置在Mysql类的parseArrayData方法,update注入
漏洞影响版本: 5.1.6<=ThinkPHP<=5.1.7 (非最新的 5.1.8 版本也可利用)。
环境搭建
下载源码
1 |
|
修改composer.json,然后执行 composer update
1 |
|
创建数据库,在database.php配置连接信息
1 |
|
/application/index/controller/Index.php
添加控制器
1 |
|
漏洞复现
payload
1 |
|
漏洞分析
/thinkphp/library/think/db/Query.php
调用了$this->connection->update,也就是\think\db\connector\Mysql类的update
/thinkphp/library/think/db/Conection.php
进入$this->builder->update,生成sql语句后带入execute执行
/thinkphp/library/think/db/Builder.php
先用parseData解析,再执行str_replace拼接update语句
最终生成的sql语句
/thinkphp/library/think/db/Builder.php
再来看parseData,其中调用了parseArrayData
/thinkphp/library/think/db/Mysql.php
这里的$data就是payload中的username数组。list函数的功能是把数组中的值赋给一组变量 ,在这里就是把$data的前两位赋值给$type和$value,当$type也就是$data[0]为point时,按这种方式拼接sql语句
1 |
|
实际上就是
1 |
|
$data就是我们传入的username数组
parseArrayData返回的结果
/thinkphp/library/think/db/Conection.php
执行拼接好的sql语句
1 |
|
总结
总结一下
参考链接
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!