php-ldap-audit
PHP LDAP 注入审计(php-ldap-audit)
分析 PHP 项目源码,识别 LDAP 查询相关代码(filter/DN 构造),检测 LDAP 注入风险:攻击者可通过控制 filter 或 DN 片段改变 LDAP 查询语义,从而导致未授权查询、数据泄露或认证绕过。
分级与编号
- 详见:
shared/SEVERITY_RATING.md - 漏洞编号:
{C/H/M/L}-LDAP-{序号}
LDAP Sink(必做)
识别以下函数/语句作为最终执行点:
ldap_search({value})/ldap_read({value})/ldap_list({value})- 以及它们的项目封装(只要最终还是传入 filter/DN 字符串)
必检证据点(必做,trace 契约对齐)
每条 LDAP 疑似漏洞必须逐项引用 php-route-tracer trace 中 ## 9) Sink Evidence Type Checklist 的 LDAP 行对应证据点 ID:
EVID_LDAP_EXEC_POINT:LDAP 查询执行点(ldap_* 函数调用/封装最终传参处)证据EVID_LDAP_FILTER_STRING_CONSTRUCTION:LDAP filter/DN 字符串构造位置(拼接/模板化)证据EVID_LDAP_USER_PARAM_TO_FILTER_FRAGMENT:用户可控参数到 filter/DN 片段的映射证据
可控性与注入点确认(必做)
必须输出并判断:
- 用户输入从哪里来:
$_GET/$_POST/json/php://input/$_COOKIE/$_FILES或其衍生字段 - filter/DN 是如何构造:是否直接字符串拼接、是否经过转义、是否存在 allowlist 白名单
- 注入可改变的语义点:例如可否注入
*、(、)等 LDAP filter 语法相关字符(或通过编码绕过转义) - 是否存在转义/净化:优先使用
ldap_escape(或自定义等价函数),且必须能证明用于最终 filter/DN 构造
tracer 触发条件(必做)
当满足任一条件时,应触发 php-route-tracer(或同等深度追踪):
- filter/DN 由多个变量/函数层级拼接或经过 JSON 解码后拼接
- filter/DN 进入
ldap_search/read/list之前存在分支(if/switch/try)或提前 return/throw - 转义逻辑存在条件分支(某些分支没转义、或仅转义部分字段)
报告输出
输出到:
{output_path}/vuln_audit/ldap_{timestamp}.md
漏洞条目模板(强制)
每条 LDAP 漏洞必须包含以下结构:
### [{等级前缀}-LDAP-{序号}] LDAP 注入漏洞(filter/DN 拼接导致查询语义被改变)
| 项目 | 信息 |
|------|------|
| 严重等级 | {🔴/🟠/🟡/🔵} (CVSS {score}) |
| 可达性 (R) | {0-3} - {理由} |
| 影响范围 (I) | {0-3} - {理由} |
| 利用复杂度 (C) | {0-3} - {理由} |
| 可利用性 | ✅ 已确认 / ⚠️ 待验证 / ❌ 不可利用 / 🔍 环境依赖 |
| 位置 | {file}:{line} ({Function}) |
#### 数据流链(Source → Sink)
(按路由逐行写出:输入读取 -> 变量拼接/转换/转义 -> filter/DN 最终生成 -> 调用 ldap_* 执行,禁止省略)
#### 可利用前置条件
- 鉴权要求:{无需/需登录/需特定权限}
- 输入可控性:{完全可控/条件可控/不可控}
- 触发条件:{分支/异常/环境依赖}
- 转义/白名单可靠性:{已可靠防护/防护缺失/防护可绕过}
#### 证据引用(强制:来自 php-route-tracer)
- `EVID_LDAP_EXEC_POINT`:{对应证据要点简述}
- `EVID_LDAP_FILTER_STRING_CONSTRUCTION`:{对应证据要点简述}
- `EVID_LDAP_USER_PARAM_TO_FILTER_FRAGMENT`:{对应证据要点简述}
#### 验证 PoC(强制:给出可执行请求)
```http
{HTTP Method} {真实路由与完整参数} HTTP/1.1
Host: {host}
{必要 Cookie/Auth}
{Payload}
PoC 生成策略(必须写清楚):
- 先用“探测 payload”证明 filter/DN 被求值(返回数量/状态码/响应差异)
- 再用“注入 payload”证明可改变查询语义(如扩大匹配范围/绕过条件)
建议修复
- 使用
ldap_escape($value, '', LDAP_ESCAPE_FILTER)(或等价函数)对 filter 用户输入做严格转义 - 对可控字段做 allowlist(仅允许合法字符集、固定属性名、限制长度)
- 禁止直接字符串拼接 filter/DN;改用参数化/模板化安全拼装(即使 PHP 无原生 LDAP 参数化,也要在代码层严格拼装)
- 给出代码搜索语句(
rg)用于定位所有 filter/DN 拼接点
## tracer 证据缺失处理(强制)
- 若 trace 契约的 LDAP 行中任一关键证据点(`EVID_LDAP_EXEC_POINT / EVID_LDAP_FILTER_STRING_CONSTRUCTION / EVID_LDAP_USER_PARAM_TO_FILTER_FRAGMENT`)缺失或无法对应到本条漏洞:状态只能标记为 `⚠️待验证`,不得直接给出 `✅已确认可利用`。
More from 0xshe/php-code-audit-skill
php-codeigniter-audit
CodeIgniter 框架特效安全审计工具。针对 CodeIgniter 的 CSRF、XSS 输出过滤、数据库查询构造、路由与验证器配置、会话 Cookie 安全等机制进行白盒静态审计,并映射到通用漏洞类型体系(CSRF/AUTH/XSS/SQL/CFG/SESS 等)。
35php-thinkphp-audit
ThinkPHP 框架特效安全审计工具。针对 ThinkPHP 常见的鉴权/CSRF/模板转义/ORM 写入(Mass Assignment)/调试与配置暴露等机制进行白盒静态审计,并映射到通用漏洞类型体系(AUTH/CSRF/TPL/XSS/LOGIC/CFG/SESS/SQL 等)。
25php-wordpress-audit
WordPress 框架特效安全审计工具。针对 WordPress 常见 nonce/capability/check_admin_referer、AJAX action、escape/sanitize、重定向、安全上传与远程请求等机制进行白盒静态审计,并映射到通用漏洞类型体系(AUTH/CSRF/XSS/SQL/CFG/SSRF 等)。
22php-symfony-audit
Symfony 框架特效安全审计工具。针对 Symfony 常见 security.yaml、CSRF、Twig/Twig raw、表达式与访问控制等框架机制做白盒静态审计,并将风险映射到通用漏洞类型体系(AUTH/CSRF/CFG/XSS/TPL/LOGIC 等)。
21php-xxe-audit
PHP Web 源码 XXE 审计工具。识别 XML 解析点与实体处理配置,追踪 XML 输入来源与回显,输出可利用性分级、PoC 与修复建议(禁止省略)。
20php-archive-extract-audit
PHP Web 归档解压(Zip Slip/路径穿越)审计工具。识别解压条目名如何与目标目录拼接、是否存在 base dir 约束缺失,输出可利用性分级、可观测 PoC 与修复建议(禁止省略)。
20