简介
ThinkPHP 是国内著名的 php开发框架,2007年元旦正式更名为ThinkPHP,著名MVC框架集大成者。
配置文件
在ThinkPHP中,一般来说应用的配置文件是自动加载的,加载的顺序是:
惯例配置->应用配置->模式配置->调试配置->状态配置->模块配置->扩展配置->动态配置
以上是配置文件的加载顺序,后面的配置会覆盖之前的同名配置
惯例重于配置是系统遵循的一个重要思想,框架内置有一个惯例配置文件(位于ThinkPHP/Conf/convention.php)
应用配置文件也就是调用所有模块之前都会首先加载的公共配置文件(默认位于Application/Common/Conf/config.php)
每个模块会自动加载自己的配置文件(位于Application/当前模块名/Conf/config.php)
如果能获取到程序代码,一般优先看系统的配置文件,能翻到数据库配置信息这些还是很赚的
另外也可以翻翻模型代码,可能会有意外收获(在TP 3中实例化模型的时候可以使用dns连接数据库)
new \Home\Model\NewModel(‘blog’,‘think_’,‘mysql://root:1234@localhost/demo’);
另外一点需要注意的是,TP中一个配置文件就可以实现很多信息的配置,如数据库信息的配置,路由规则配置等都会放在一个文件中。在TP5中则是通过专门的文件去配置不同的需求,如路由配置文件专门负责配置路由,数据库配置文件专门负责配置数据库信息
版本查看
/thinkphp/base.php
/ThinkPHP/ThinkPHP.php
/thinkphp/library/think/App.php
定位函数
定位相关函数:
查看路由匹配规则 --> 可以直接定位到函数
通过调试debug模式 --> 只能定位到文件
我们访问的网页为:http://192.168.8.130/hsycms/news/146.html则如何定位所对应的执行函数?
查看路由匹配规则,全局搜索use think\Route
我们访问的url对应的路由匹配规则为Route::rule($v[‘entitle’].‘/:id’,‘index/Show/index’);
程序入口文件为app,即如下图所示:
版本自身漏洞
如何完全按照官方开发文档进行开发的,那么我们就考虑当前版本安全问题。
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
快速定位
如果以上参考没有用处,可以考虑从危险函数开始,例如fwrite\file_get_content、unserialize、等可以操作文件、执行命令的入口点作为代码审计重点,考虑任意文件写+文件包含、反序列化、登入绕过等利用方式