当前位置: 首页 > news >正文

PHP-ThinkPhp漏洞学习-MVC模型路由访问模版渲染安全写法版本漏洞(2024小迪安全Day31)

TP框架-开发技术

参考:https://www.kancloud.cn/manual/thinkphp5/118003

1、配置框架-导入使用(入口配置,数据库配置,调试开关等)

image-20250922151344661

2、路由访问-URL访问

参考文档的URL访问板块

ThinkPHP5.0在没有启用路由的情况下典型的URL访问规则是:

http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/参数值…]

image-20250922152307125

访问的URL为http://192.168.43.28:83/index.php/index/index/test


原生访问开发

   public function test1(){$x=$_GET['x'];return $x;}

访问的URL为http://192.168.43.28:83/index.php/index/index/test1?x=888

这样的开发是不能使用ThinkPHP的访问规则的


不用原来的目录,尝试自己新建功能模块

image-20250922154817893

访问地址http://192.168.43.28:83/index.php/admin/index/login

3、请求变量-数据接受

请求对象,提交方法,助手函数等

4、数据库操作-应用对象

引用DB类,基本查询,助手函数等

5、前端页面渲染-MVC模型

引擎配置,渲染变量,模版输出等

TP框架-写法安全

1、自写代码逻辑

例子1:自己不合规的代码写法

    public function testsqlin1(){$con=mysqli_connect('localhost','root','123456','phpstudy','3306');$id=$_GET['id'];$sql="select * from admin where id=$id";$data=mysqli_query($con,$sql);if(mysqli_num_rows($data) > 0){echo "ok";$row = mysqli_fetch_assoc($data);echo 'Username: ' . $row['username'] . '<br>';echo 'Password: ' . $row['password'] . '<br>';//var_dump($data);//exit();}else{//判断用户登录失败echo '<script>alert("登录失败!")</script>';}}

例子2:一半框架一半自写代码(可接收sql语句)

    public function testsqlin2(){$id=request()->param('id');$data=Db::query("select * from admin where id=$id");return json($data);}

例子3:框架标准内置代码写法(不可接收)

    public function testsqlin3(){$id=request()->param('id');$data=Db::table('admin')->where('id',$id)->select();return json($data);}

2、框架版本安全

如果用的框架标准内置代码写法还有没有办法绕过?有,用版本安全

https://github.com/Mochazz/ThinkPHP-Vuln

用法级别绕过(必须以特定写法才能触发)
开发者按照框架提供的某个 API/模式去写时,若该 API 设计存在缺陷(比如内部未做严格参数校验、在特定上下文拼接 SQL、或错误使用反序列化),攻击者才能利用。换言之:漏洞依赖于“脆弱的编码习惯/特定内置写法”。

版本级别漏洞(通杀某版本)
框架核心或组件在某个版本内存在严重缺陷(如不安全的反序列化入口、命令执行链、路由解析缺陷等),无论开发者是否遵循某特殊写法,只要应用使用该框架版本并暴露入口就可能被利用。


TP框架-代审案例:

WeMall-TP5框架开发(站长之家源码获取)

为伪静态(配置注意按照下面的步骤)

image-20250922195018451

http://www.dtcms.com/a/394707.html

相关文章:

  • [已修复] iTunes 无法识别您的 iPhone
  • EC2 实例的操作系统 (OS) 未能成功从 AWS 的网络服务 (DHCP) 中获取到分配给它的私有 IPv4 地址
  • Vercel、Netlify、AWS 与 Cloudflare:前端部署与边缘计算平台全景对比
  • 【Threejs】【工具类】Raycaster实现 3D 交互(如鼠标拾取、碰撞检测)的核心工具
  • Fay数字人QA功能详解
  • NETSTAT命令详解
  • FFmpeg 5.x 编译 so 文件的记录
  • 以开启https的nginx转发流量到minio
  • StarRocks 各类索引以及存储位置详解
  • PromptPilot 技术深解,工程化提示词开发如何让大模型准确率大大提高
  • RTX4090:AI与深度学习应用实践的革命性推动者
  • Cursor Multi-Root Workspace 新特性深度实战:一次打开 React 前端 + Go 后端,AI 自动跨项目跳转、联调、写代码!
  • 如何处理单位换算的问题
  • Docker部署 MySQL+Mycat
  • RTX4090:极致性能探索与硬核评测
  • DM物理存储结构及内存结构
  • ASP.NET Core MVC 路由逻辑初探
  • 【Python办公】文字转视频(可自定义颜色、字体大小)
  • 数据洪流时代,如何挑选一款面向未来的时序数据库?IoTDB 的答案
  • python+django/flask的吉安红色旅游平台 红色教育景区展示+图文资讯发布+评论互动功能系统java+nodejs
  • 设计模式(C++)详解——代理模式 (Proxy Pattern)(2)
  • 详解 Kubernetes 命令:kubectl exec -it nginx -- bash 及实战场景
  • Android挂机短信模板和多台手机同步短信模板
  • Solid Edge 转换为 IGS 全流程技术指南:含迪威模型网在线转换方案
  • 设计模式(C++)详解——代理模式 (Proxy Pattern)(1)
  • 聊聊AI agents MCP 开发
  • 【C++进阶】智能指针的使用及其原理
  • 极客天成让统一存储从云原生‘进化’到 AI 原生: 不是版本升级,而是基因重组
  • 【JavaScript 性能优化实战】第五篇:运行时性能优化进阶(懒加载 + 预加载 + 资源优先级)
  • Java基础(十二):抽象类与接口详解