【PHP代码审计】ThinkPHP代码审计

2023-11-13


0x001 开发方式

在这里插入图片描述
在审计源码时根据不同的开发方式对应不同的审计方法。

  • 自写:有的站点虽然使用了thinkphp但并没有按照官方给的开发文档进行开发,没有引入内置的过滤机制导致出现安全问题。 (正常审计流程。)
  • 不安全写法:未全部引用内置过滤。(寻找没有引用内置过滤的地方。)
  • 规则写法:这种开发方式是相对安全的,因为框架的过滤机制比较完善。审计方式一般分为两种,寻找对应的版本漏洞或自己挖掘框架内置的安全问题(通杀)。

0x002 审计流程

1)启用调试开关
  • 查看index.php入口文件
  • config.php
  • app_debug=“true”
  • app_trace-“true”

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

配置好后打开网站

访问url对应所执行的文件在这里插入图片描述
查看执行的sql语句
在这里插入图片描述
debug模式可能会监控不到sql语句的输出,这种情况可以使用开源工具进行监控:

MySQL监控:https://github.com/cw1997/MySQL-Monitor

2)版本查看
  • /thinkphp/base.php
  • /ThinkPHP/ThinkPHP.php
  • /thinkphp/library/think/App.php

在这里插入图片描述

3)定位函数

定位相关函数:

  • 查看路由匹配规则 --> 可以直接定位到函数
  • 通过调试debug模式 --> 只能定位到文件

我们访问的网页为:http://192.168.8.130/hsycms/news/146.html则如何定位所对应的执行函数?

查看路由匹配规则,全局搜索use think\Route
在这里插入图片描述
我们访问的url对应的路由匹配规则为Route::rule($v['entitle'].'/:id','index/Show/index');

程序入口文件为app,即如下图所示:

在这里插入图片描述

4)测试是否存在漏洞

在这里插入图片描述
这里我们监控http://192.168.8.130/hsycms/news/150.html页面所执行的sql语句,

在这里插入图片描述
可以看到我们传入的id被直接带入到sql语句执行,接下来就是测试input函数是否有过滤

在这里插入图片描述

对比ThinkPHP5.0完全开发手册发现这里并没有按照官方文档进行编写,这种自写的方式可能没有调用框架内置的过滤机制,从而导致安全问题,剩下就是测试自写的方式是否存在漏洞就可以了,我就不测试了。
在这里插入图片描述
在这里插入图片描述

5)版本自身漏洞

如何完全按照官方开发文档进行开发的,那么我们就考虑当前版本安全问题。

ThinkPHP各版本漏洞:https://github.com/Mochazz/ThinkPHP-Vuln

使用搜索引擎查看当前版本是否存在安全漏洞。

利用官方更新版本信息查看:https://github.com/Mochazz/ThinkPHP-Vuln/blob/master/ThinkPHP5/ThinkPHP5%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90%E4%B9%8BSQL%E6%B3%A8%E5%85%A52.md
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【PHP代码审计】ThinkPHP代码审计 的相关文章

  • php curl 使用 GET 发送变量 奇怪的结果

    我正在尝试调用远程站点上页面中的网址 决定使用curl 在远程站点上 url 变量显示为 REQUEST Array var1 gt val1 amp var2 gt val2 amp var3 gt val3 被调用的url是 http
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio
  • 为什么我的会话仍然存在?

    我一定很愚蠢 因为似乎一件相当明显的事情现在让我完全困惑 我有一个会议 ie SESSION handbag id 在某个时刻 我需要彻底终止这个会话 ie at the start of the page session start el
  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • 无法访问 localhost/xampp/index.php

    我刚刚安装了 Windows 7 的 XAMPP 控制面板似乎工作正常 我启动了 MySql 和 Apache 我遇到的问题是 当我在浏览器 Google Chrome 中输入 localhost 时 它会将我发送到 http localh
  • jQuery ajax 调用包含重音字符的 url 将错误的 Uri 从 IE 发送到服务器

    我在使用 IE 发送包含重音字符的 url 时遇到问题 这是一个简单的函数 function runjQueryTest var url test Beyonc get url function 在服务器 PHP 上我记录了请求uri的值
  • AWS-PHP-SDK / SNS 直接寻址返回错误

    您好 我正在使用 Laravel 4 设置来利用 AWS SNS 向我的 iOS 设备发送推送消息 从 AWS 控制台向我的设备发布命令效果很好 然后我尝试从 PHP sns AWS get sns sns gt publish array
  • PHP WCF 集成

    是不是如果我想支持php客户端访问我的服务 我必须有一个基本的http端点 这是因为php仍然只支持soap 1 1吗 据我所知 自从我使用 PHP 以来已经两年了 情况仍然如此 如果客户端应用程序将使用 PHP 的内置 SoapClien
  • 如何在 GitHub Action 中使用不同版本的 PHP 进行测试

    我有一些 PHP 代码 其中包含使用以下命令运行的测试PHPUnit并想对其进行测试GitHub Actions 我在他们的文档中找不到测试 PHP 包的方法 我想使用不同版本的 PHP 进行测试 但他们只有最新的版本7 3安装 您可以添加
  • 在 foreach 中使用 QueryPath 的多个查找

    我正在使用 QueryPath 和 PHP 这发现 eventdate 没问题 但不会为 dtstart 返回任何内容 qp htmlqp url foreach qp gt find table schedule gt find tr a
  • 如何在 Windows 上安装 Zend 框架

    安装 Zend Framework 就是这么简单 是的 对 好吧 我正在写一本初学者的书 有一件不太详细的事情是最重要的部分 安装该死的东西 浏览了几个小时的快速入门指南后 它只说 下载 Zend 添加包含目录 bla bla 然后就完成了
  • PHP 编码风格回归;在开关/外壳中

    我们正在尝试为我们的团队实施新的编码风格指南 当未找到 break 时 php codeniffer 会在 switch case 语句上打印警告 如下所示 switch foo case 1 return 1 case 2 return
  • 带倒计时的php循环

    假设我从 400 开始计数器 我将如何执行一个向后运行直到 0 的 foreach 循环 伪代码 i 400 foreach SOMETHING do stuff i for i 400 i gt 0 i do stuff 其他方法 i 4
  • 如何使用更新资源控制器 laravel 4?

    我有带有索引 编辑 更新方法的客户控制器 Route resource customer CustomerController 控制器方法更新 public function update id echo id 我的 HTML 表单
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • 雄辩的第一个 where 子句

    我想知道 Laravel 如何实现雄辩的语法 以便可以静态调用第一个 where 子句User where User where id 23 gt where email email gt first 他们有吗public static f
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p
  • 使用会话 php 创建 cookie?

    我使用会话来登录我网站中的用户 问题是 我想让用户remember密码 因此关闭 打开浏览器后他们不需要再次登录 我需要使用 cookie 和 session 来实现它吗 my code user POST user pass POST p
  • Laravel 搜索关系

    我有两个相关的模型 我正在尝试在产品中进行搜索 并且仅显示实际搜索结果 而不是找到该产品的类别的所有产品 我不想搜索任何类别 因为无论搜索什么或找到什么 类别都会始终显示 Example I have the following categ
  • PHP更改小数点分隔符

    在某些情况下 PHP 会在操作后更改小数点分隔符 下面是一个示例 为什么小数点分隔符变成 这是一个多语言网站 在西班牙语版本中 区域设置设置为西班牙语 es ES 小数点分隔符为 这就是为什么正在改变 解决方案是强制 LC NUMERIC

随机推荐

  • 活动报名

    活动议程 日期 8月25日 周五 时间 主题 10 00 10 05 开场简介 马恺声 清华大学交叉信息研究院助理教授 青源会会员 10 05 10 50 基于商用硬件的同态加密加速 张明喆 中国科学院信息工程研究所信息安全国家重点实验室副
  • layui table直接编辑

    修改lay modules table js 在TPL HEADER中 if item2 type checkbox 复选框 修改为不显示标题行复选框 if item2 type checkbox item2 header undefine
  • 移动开发期末大作业-备忘录app

    备忘录app 资源链接在文末 前言 2022年软件工程专业上学期的一个安卓的课设 开发工具 androidStudio 开发语言 Java 介绍 这是一个备忘录APP 具有基本的备忘录功能和云端同步功能 实现备忘录功能的部分借鉴了xmenw
  • python接收易语言数据中文乱码

    易语言代码 book name 发送到发 txt 提交信息 引号 book name 引号 引号 编辑框 下载 内容 引号 到文本 网页 访问 对象 http 127 0 0 1 8000 download 1 提交信息 Content T
  • bootstrap click事件自动刷新页面问题

    1 将按钮的type类型改为button
  • Linux线程编程

    参考 Linux多线程编程初探 作者 峰子 仰望阳光 网址 https www cnblogs com xiehongfeng100 p 4620852 html 目录 线程概述 线程概念 线程与进程区别 为何用线程 线程开发api概要 线
  • 存储过程与控制结构

    存储过程与函数的区别 存储过程是没有返回值的函数 函数是有返回值的存储过程 创建存储过程 delimiter create procedure procedureName begin sql 语句 end delimiter 查看已有存储过
  • VUE.js

    VUE 1 1 概述 Vue 是一套前端框架 免除原生JavaScript中的DOM操作 简化书写 之前也学习过后端的框架 Mybatis Mybatis 是用来简化 jdbc 代码编写的 而 VUE 是前端的框架 是用来简化 JavaSc
  • STM32(HAL库)驱动st7789LCD屏幕(7引脚240*240)

    目录 1 简介 2 CubeMX初始化配置 2 1 基础配置 2 1 1 SYS配置 2 1 2 RCC配置 2 2 屏幕引脚配置 2 3 项目生成 3 KEIL端程序整合 3 1 LCD驱动添加 3 2 函数修改 3 2 1 lcd h修
  • pyqt5_tools下找不到designer.exe的问题

    pyqt tools 5 15 版本 designer exe在路径 Lib site packages qt5 applications Qt bin下
  • 第11讲:vue脚手架集成ElementUI

    一 创建vue路由项目并添加ElementUI支持 ElementUI官方网站 ElementUI组件 创建路由项目请参考 路由开发 使用如下命令集成ElementUI npm i element ui S 在src main js文件中引
  • MySQL日期函数

    MySQL日期函数 1 adddate 语法 adddate date interval expr unit 或 adddate expr days 用于给时间类型增加时间间隔 默认为天 unit year month day day ho
  • STM32 USB CDC VPC

    STM32 USB CDC VPC 关键字 STM32 STM32CubeMX HAL库 USB 虚拟串口 串口不定长接收 1 简介 通过使用stm32cubemx 实现USB CDC虚拟串口 并与硬件串口进行数据传输 实现了硬件串口数据的
  • 手机怎么访问服务器未响应,手机设置路由器服务器未响应怎么办

    手机设置路由器服务器未响应怎么办 内容精选 换一换 自定义线路解析 支持DNS根据访问者的IP地址返回特定的IP地址 如果访问者所属Local DNS不支持扩展DNS机制 Extension Mechanisms for DNS EDNS
  • 将数组作为参数进行传递(转)

    有两种传递方法 一种是function int a 另一种是function int a 这两种两种方法在函数中对数组参数的修改都会影响到实参本身的值 对于第一种 根据之前所学 形参是实参的一份拷贝 是局部变量 但是数组是个例外 因为数组的
  • MySQL5.7_空间数据操作

    MySQL5 7 空间数据操作 创建数据库 空间数据库 spatialDB进行测试 USE spatialDB DROP TABLE t point CREATE TABLE t point id int 11 NOT NULL AUTO
  • 论文阅读笔记(四十七):Attention Is All You Need

    Abstract The dominant sequence transduction models are based on complex recurrent or convolutional neural networks that
  • 将python程序文件隐藏源码(windows下转换成.pyd)

    将编写好的Python程序给别人调用 隐藏源码步骤 1 安装Cython库 pip install Cython 2 新建一个转换程序Change py 内容如下 import Cython Build import distutils c
  • 【深入QT】信号槽机制浅析

    一 信号槽的基本概念 关于QT信号槽的基本概念大家都懂 通过信号槽机制 QT使对象间的通信变得非常简单 A对象声明信号 signal B对象实现与之参数相匹配的槽 slot 通过调用connect进行连接 合适的时机A对象使用emit把信号
  • 【PHP代码审计】ThinkPHP代码审计

    目录 0x001 开发方式 0x002 审计流程 1 启用调试开关 2 版本查看 3 定位函数 4 测试是否存在漏洞 5 版本自身漏洞 0x001 开发方式 在审计源码时根据不同的开发方式对应不同的审计方法 自写 有的站点虽然使用了thin