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


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
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用 开发和简化企业级应用开发而诞生的。拥有众多的优秀功能和特性,经历了三年多发展的同时,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和 改进,众多的典型案例确保可以稳定用于商业以及门户级的开发。 ThinkPHP5.1对底层架构做了进一步的改进,减少依赖,其主要特性包括: 采用容器统一管理对象 支持Facade 注解路由支持 路由跨域请求支持 配置和路由目录独立 取消系统常量 助手函数增强 类库别名机制 增加条件查询 改进查询机制 配置采用二级 依赖注入完善 支持PSR-3日志规范 中间件支持(V5.1.6+) Swoole/Workerman支持(V5.1.18+) ThinkPHP5的运行环境要求PHP5.6以上,兼容PHP8.0。 更新日志: V5.1.40 LTS(2020-10-09) 本版本为常规更新,主要包括: 改进redis驱动`has`方法 修正XA事务 修正`HasManyThrough`关联 增加mysql json类型字段->>方式获取支持 改进路由加载 避免加载编辑器临时文件影响 修复关联模型的属性直接附加到当前模型,当关联模型字段名为name时获取的值为模型的属性name值 修复多态关联预加载`field`无效 改进Collection类的`column`方法的PHP兼容性问题 改进mysql驱动 改进`parseclosure`方法 SoftDelete删除条件做空判断 改进验证类`append`方法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多学点技术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值