【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');

扫描二维码关注公众号,回复: 12889902 查看本文章

程序入口文件为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
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44032232/article/details/114017973