首页 > 后端开发 > 正文

Thinkphp框架 < 5.0.16 sql注入漏洞分析(Thinkphp框架 3.2.x sql注入漏洞分析)

2025-02-11 06:14:11 | 我爱编程网

今天我爱编程网小编整理了Thinkphp框架 < 5.0.16 sql注入漏洞分析(Thinkphp框架 3.2.x sql注入漏洞分析)相关信息,希望在这方面能够更好的大家。

本文目录一览:

Thinkphp框架 < 5.0.16 sql注入漏洞分析(Thinkphp框架 3.2.x sql注入漏洞分析)

Thinkphp框架 < 5.0.16 sql注入漏洞分析

本文讨论的是ThinkPHP框架版本<5.0.16的SQL注入漏洞分析。文章首先介绍了环境搭建和漏洞复现的流程。在分析过程中,重点讲解了助手函数input()的使用以及数据库操作的基本框架,强调了使用框架的便捷性和安全性。

接着,文章深入分析了漏洞发生的具体步骤。通过访问特定payload,程序跳转到入口文件,接着分析了sql执行的逻辑。主要关注了loader.php文件中的数据库连接操作,以及Query.php文件中的update执行部分。在解析过程中,文章指出了在处理数组传入值时,缺乏必要的数据处理,直接返回了用户提供的SQL语句,使得SQL注入成为可能。

文章进一步解释了为什么需要以特定数组格式传递三个字段,并详细分析了parseData函数的实现,揭示了如何在返回结果时将这些字段组合起来。通过代码逻辑的追踪,文章清晰地描绘了整个漏洞流程。

最后,文章鼓励读者先了解ThinkPHP框架,如果遇到不明白的PHP代码,建议复习PHP基础知识。在文章的结尾,提供了相关链接供读者进一步研究。

Thinkphp框架 < 5.0.16 sql注入漏洞分析(Thinkphp框架 3.2.x sql注入漏洞分析)

Thinkphp框架 3.2.x sql注入漏洞分析

0x01 前言

Thinkphp 3.2.x版本的框架使用广泛,尤其对于较大型的项目,升级至2版本操作复杂,小程序虽然简单,但大程序则需考虑更多因素。

问题出现在`WHERE`子句中,涉及SQL注入风险。

0x02 环境搭建和漏洞复现

用于测试的程序从thinkphp.cn下载,使用PHPstudy搭建环境,包含Apache+php7.1+MySQL,开发工具为PHPstorm。I函数类似于5版本的input助手函数,具体可参考官方文档。

仅进行基础的CRUD操作,通过`M`方法实例化数据库对象。实例化模型可参考官方文档。执行payload:` [0]=bind&name[1]=0 and updatexml(2,concat(0x7e,user()),0)`。

0x03 漏洞分析

访问payload后,程序跳转至入口文件,主要分析I函数执行部分。通过F8进入文件`thinkphp/ThinkPHP/Common/functions.php`,判断输入值的处理方式。

对`bind`值进行过滤,然后执行数据库更新操作。F7追踪至`save`函数,进而到`update`函数。继续追踪至`parseSet`函数,密码赋值为111111。在`parseSet`执行后,进入`parseWhere`函数。

在`parseWhereItem`函数中,判断数组[0]为`bind`时进行拼接操作。确保第二个数组元素为0,以匹配`parseSet`中的占位符,避免执行SQL语句时出错。

进入预处理语句执行阶段,使用`bindValue`绑定值到参数,将密码绑定到指定位置。继续追踪至SQL执行报错的检查点,清晰显示`updatexml`值。

在`error`函数中,替换占位符,最终调试至SQL执行点。若传入特定值,程序将无法执行下去。

0x04 结束

调试过程中若感觉混乱,可多次重复调试,逐步理解流程。

0x05 参考

详细信息可参考`php.net`手册、Thinkphp官方文档及安全相关公众号文章。

ThinkPHP 5.0和ThinkPHP 3.2的区别

我爱编程网(https://www.52biancheng.com)小编还为大家带来ThinkPHP 5.0和ThinkPHP 3.2的区别的相关内容。

5.0版本和之前版本的差异较大,本篇对熟悉3.2版本的用户给出了一些5.0的主要区别。
URL和路由
5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式:
主要改进如下;
增加路由变量规则;
增加组合变量支持;
增加资源路由;
增加路由分组;
增加闭包定义支持;
增加MISS路由定义;
支持URL路由规则反解析;
请求对象和响应对象
5.0新增了请求对象Request和响应对象Response,Request统一处理请求和获取请求信息,Response对象负责输出客户端或者浏览器响应。
模块和控制器
控制器的命名空间有所调整,并且可以无需继承任何的控制器类。
应用命名空间统一为app(可定义)而不是模块名;
控制器的类名默认不带Controller后缀,可以配置开启use_controller_suffix参数启用控制器类后缀;
控制器操作方法采用return方式返回数据 而非直接输出;
废除原来的操作前后置方法;
增加beforeActionList属性定义前置操作;
支持任意层次的控制器定义和访问;
URL访问支持自动定位控制器;
数据库
5.0的数据库查询功能增强,原先需要通过模型才能使用的链式查询可以直接通过Db类调用,原来的M函数调用可以改用db函数,例如:
3.2版本
M('User')->where(['name'=>'thinkphp'])->find();
5.0版本
db('User')->where('name','thinkphp')->find();
主要改进如下:
支持链式查询操作;
数据查询支持返回对象、数组和PDOStatement对象;
数据集查询支持返回数组和Collection对象;
增加查询构造器,查询语法改变;
支持闭包查询;
支持分块查询;
支持视图查询;
增加SQL监听事件;
模型
5.0的模型变化是最大的,基本上模型是完全面向对象的概念,包括关联模型,模型类的后缀不再带Model,直接由命名空间区分,原来的D函数调用改为model函数,并且必须创建对应的模型类,例如:
3.2版本
D('User')->where(['name'=>'thinkphp'])->find();
5.0版本
model('User')->where('name','thinkphp')->find();
主要改进包括:
重构关联模型;
支持聚合模型;
废除视图模型(改为数据库的视图查询方法);
模型的扩展采用Trait机制;
增加获取器和修改器;
增加时间戳自动写入;
增加类型字段转换;
数组访问支持;
JSON序列化支持;
自动验证和自动完成
5.0的数据自动验证和自动完成和3.2版本区别较大,5.0的数据验证采用验证器定义并且通过think\Validate类进行统一的验证。自动完成则通过在模型里面定义修改器来完成。
异常
5.0对错误零容忍,默认情况下会对任何级别的错误抛出异常(但可以在应用公共文件中设置错误级别),并且重新设计了异常页面,展示了详尽的错误信息,便于调试。
调试和日志
5.0的页面Trace强化,支持浏览器控制台查看Trace信息。
5.0的日志驱动增加Socket方式,采用SocketLog支持远程调试。
常量
5.0版本废弃了原来的大部分常量定义,仅仅保留了框架的路径常量定义,其余的常量可以使用App类或者Request类的相关属性或者方法来完成,或者自己重新定义需要的常量。
废除的常量包括:
REQUEST_METHOD IS_GET IS_POST IS_PUT IS_DELETE IS_AJAX __EXT__ COMMON_MODULE MODULE_NAME CONTROLLER_NAME ACTION_NAME APP_NAMESPACE APP_DEBUG MODULE_PATH
函数
5.0版本核心框架不依赖任何自定义函数,但仍然封装了一些常用功能到助手函数,你可以随意重新定义或者增加助手函数。
我爱编程网

以上就是我爱编程网小编给大家带来的Thinkphp框架 < 5.0.16 sql注入漏洞分析(Thinkphp框架 3.2.x sql注入漏洞分析)全部内容,希望对大家有所帮助!更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“Thinkphp框架 < 5.0.16 sql注入漏洞分析(Thinkphp框架 3.2.x sql注入漏洞分析)”相关推荐