用途
php-tpl-audit 用于对 PHP 项目源码进行模板注入(SSTI)与危险表达式执行风险审计。其目标是识别用户可控内容影响模板选择、渲染表达式解析,或进一步转为可执行代码的风险点。
主要能力
TPL Sink 识别(必做) 工具聚焦模板相关的渲染/执行点,覆盖:
- Twig:
Environment->load($templateName)/createTemplate($name)/render($template);|raw或关闭自动转义策略(需有证据点)。 - Laravel Blade(Illuminate/View,PHP 原生常见):
view($templateName, $data)/View::make($templateName, $data);Illuminate\View\Factory->make($template)/ 渲染入口$engine->render({value})。当模板可控时,Blade raw 输出({!! !!})与@php指令属于高危执行链,必须用证据点落到渲染/编译入口。 - Smarty:
Smarty->fetch($template)/display($template)。 - 自定义模板引擎:
eval()、preg_replace('/e')、create_function等被用于模板表达式;call_user_func/call_user_func_array参数来自用户输入(可能触发表达式)。
可控性分析(必做) 必须输出:用户输入如何进入“模板名/模板片段/表达式字符串”;是否存在严格的白名单模板名映射;是否存在沙箱/表达式限制。
tracer 触发条件(必做) 当模板选择/表达式构造跨多个函数或经过字符串拼接时触发。
证据引用(强制,来自 php-route-tracer) 每条模板注入/SSTI 疑似漏洞必须逐项引用 trace 输出中 “## 9) Sink Evidence Type Checklist” 的 TPL 行对应证据要点(允许状态为待验证,但证据引用必须存在):
- EVID_TPL_ENGINE_RENDER_OR_PARSE_ENTRY:模板引擎渲染/表达式解析点位置证据(load/createTemplate/fetch/render 或等价入口)
- EVID_TPL_TEMPLATE_OR_EXPR_CONTROL:模板名或表达式是否可控证据(来自路由参数到模板构造变量的映射)
- EVID_TPL_EXEC_CHAIN_ENTRY:执行链入口证据(表达式求值/编译/执行:如 raw/disable escape、eval/use of call_user_func 等)
tracer 证据缺失处理(强制) 若无法定位上述 1~3 任一关键证据要点:该漏洞状态只能标记为 ⚠️待验证,不得直接给出 ✅已确认可利用。
分级与编号
严重级别详见 shared/SEVERITY_RATING.md。漏洞编号格式:{C/H/M/L}-TPL-{序号}。
使用方式与报告输出
报告输出到 {output_path}/vuln_audit/tpl_{timestamp}.md。条目必须包含:数据流链、可利用前置条件、可执行 PoC 框架、修复建议与搜索语句。
适用场景
适用于对 PHP 项目源码进行模板注入/SSTI 专项安全审计,尤其涉及 Twig、Laravel Blade、Smarty 及自定义模板引擎的项目。
限制
关于该工具的具体安装命令、运行环境要求、价格与平台支持等信息,资料中暂未提供。