thinkphp代码审计需聚焦入口可控点、参数流转链与危险函数调用上下文,而非仅读语法;从public/index.php切入,但关键逻辑在start.php和app.php,重点追踪$_get['s']等输入如何经路由映射为控制器/方法、request类是否无条件信任用户数据导致rce,以及日志缓存目录权限等配置风险。

ThinkPHP代码审计不是“看懂语法就行”,而是要盯住框架特性和开发者惯用错误的交汇点。直接上手就翻index.php或App.php,大概率绕晕自己——真正该先抓的是入口可控点、参数流转链和危险函数调用上下文。
从public/index.php开始,但别只读它
ThinkPHP所有请求都经由public/index.php,但它只是个引导器,真正的逻辑在start.php和app.php里。重点不是“它写了什么”,而是“它把哪些用户输入交给了谁”:
-
$_GET['s'](或PATH_INFO)被路由模块解析后,映射成控制器/方法,这个映射过程是否可控?比如?s=index/\think\app/invokefunction这种写法,就是靠s参数触发反射调用 -
$_POST和$_REQUEST数据进Request类后,有没有被直接赋值给对象属性?像_method=__construct能覆盖filter属性,就是因为Request::__construct()里用了array_walk_recursive()遍历并赋值 - 调试模式开启时,
APP_DEBUG === true会激活Log::record()和异常堆栈输出——这些日志路径(如Runtime/Logs/24_10_15.log)可能被直接访问,暴露SQL语句或变量值
Request类是多数RCE漏洞的起点
ThinkPHP 5.0.x的RCE(CVE-2018-20062)和5.1.x的反序列化问题,几乎都绕不开Request类对用户输入的“无条件信任”。它不校验键名合法性,也不限制值类型,导致攻击者能用filter[]=system覆盖内置过滤器:
-
filter属性本用于模板输出过滤,但被滥用为函数指针;一旦配合method=get和server[REQUEST_METHOD],就能把任意字符串当PHP代码执行 - 5.1.31之后版本加了
is_callable()检查,但若你项目还用着filter[]=assert且没禁用assert函数,依然可打 - 审计时搜
$this->filter、input(、param(这三个关键词,看它们返回值是否直接进了call_user_func_array()、eval()或file_get_contents()
SQL注入别只盯Db::query(),重点查whereRaw()和buildSql()
ThinkPHP默认的查询构造器(如where('name', $input))自带参数绑定,但开发者常为“灵活性”退回到原生SQL场景:
-
whereRaw('username = "'.$username.'"')——双引号拼接+未转义,$username填" OR 1=1 --直接爆库 -
buildSql()生成的SQL若被记录到日志(尤其DB_DEBUG=true时),会连带泄露表结构和字段名,为后续注入铺路 - 注意
view模板里的{:db()->query(...)}写法:模板引擎不处理PHP函数安全边界,这里执行的SQL同样不受框架绑定保护
日志和缓存目录权限是生产环境最容易忽略的雷
ThinkPHP的Runtime/目录默认可写,但没人规定它必须可读。很多线上系统仍开着APP_DEBUG=true,且Runtime/Logs/目录能被直接HTTP访问:
- 日志文件名是
Y_m_d.log格式(如24_10_15.log),攻击者用脚本批量请求/Runtime/Logs/24_10_{01..31}.log就能下载全部日志 -
Runtime/Cache/里存的可能是序列化后的用户会话或数据库结果,若缓存文件后缀是.php(某些自定义缓存驱动会这样),且内容可控,就构成文件包含漏洞 - 修复不是删掉
Runtime目录,而是:① 关闭APP_DEBUG;② 把Runtime移出Web根目录;③ 或在Web服务器配置中禁止Runtime/路径的HTTP访问(如Nginx加location ^~ /Runtime/ { deny all; })
框架本身不会自动产生漏洞,但它的便捷性会放大开发者的一个疏忽:把用户输入当“可信数据”传递。审计ThinkPHP,本质是逆向追踪每一份$_GET、$_POST、$_COOKIE最终去了哪——中间只要经过一次eval、assert、system或未过滤的file_get_contents,链路就算通了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











