用途
ctf-source-audit 是一套用于 CTF 挑战的源码审计方法论。它适用于在 CTF 场景中发现源码泄露时进行审计,例如发现 .git 目录、.bak/.zip 备份文件、/proc/self/environ 泄露源码等情况。
该技能明确指出:CTF 源码审计 ≠ 真实代码审计。真实审计面对几万行代码,漏洞可能在任何地方;而 CTF 审计面对的是几十到几百行代码,漏洞是故意设置的,通常很明显。核心策略是:先找危险函数(sink),然后追溯输入(source)到危险函数的路径。
主要能力
快速识别语言和框架
根据特征判断语言与框架:.php 文件、<?php 对应 PHP;app.py、from flask、import django 对应 Python(Flask/Django);package.json、require()、app.js 对应 Node.js(Express);pom.xml、.java、@Controller 对应 Java(Spring);go.mod、func main() 对应 Go。
审计流程
- 快速定位危险函数:按语言列出命令执行、反序列化、模板注入、文件操作等类别的危险函数。例如 PHP 的 system()、eval()、exec()、passthru()、unserialize()、include()、file_get_contents();Python 的 os.system()、eval()、exec()、subprocess、pickle.loads()、yaml.load()、render_template_string()、open();Node.js 的 child_process.exec()、eval()、EJS/Pug inject、fs.readFile();Java 的 Runtime.exec()、ProcessBuilder、ObjectInputStream、SpEL/FreeMarker、FileInputStream。
- 追踪数据流(sink → source):确认参数来源($_GET、request.args、req.body、@RequestParam);检查是否存在过滤(filter、sanitize、escape、replace、blacklist);判断过滤能否绕过(黑名单遗漏、双重编码、大小写、数组绕过)。
- 审计产出:漏洞类型和位置(文件名+行号)、利用方法(构造什么请求触发)、Flag 获取路径。
各语言常见漏洞模式
PHP:弱比较(== vs ===,0e 开头字符串、md5 碰撞值如 240610708、QNKCDZO、s878926199a;数组绕过 md5)、变量覆盖(extract、parse_str、可变变量)、类型戏法(intval 截断、is_numeric 绕过、in_array 松散比较)、preg_replace /e(PHP < 7.0)、反序列化 POP 链(__wakeup、__destruct、__toString,__wakeup 绕过适用于 PHP 5.x - 7.0.10)。
Python:Flask Session 伪造(flask-unsign 工具,SECRET_KEY 泄露路径包括源码硬编码、/proc/self/environ、config.py/.env)、Werkzeug Debug PIN 计算(涉及 username、modname、appname、modpath、MAC 地址、machine-id 等因素)、SSTI(Jinja2,检测 {{7*7}},RCE 利用 lipsum.globals)、Pickle 反序列化 RCE(reduce)、PyYAML 不安全加载(yaml.load 需改为 yaml.safe_load)。
Node.js:原型链污染(Object.assign、.merge、.set、递归合并,payload 如 {"proto":{"isAdmin":true}})、require() 路径穿越、eval()/vm 逃逸(vm2 沙箱逃逸)。
Java:SpEL 注入(检测 ${77} 或 #{77})、XXE(Java XML 解析器默认不禁用外部实体)、反序列化(ObjectInputStream.readObject() 配合 ysoserial)。
使用方式
该技能以方法论和参考文档形式提供,深入参考(必读)指向 references/dangerous-functions.md,其中包含 PHP/Python/Node.js/Java 完整危险函数清单与漏洞模式。Werkzeug Debug PIN 计算脚本见 ctf-web-methodology 的 server-side-advanced.md。
适用场景
适用于 CTF 挑战中遇到源码泄露(.git 目录、.bak/.zip 备份、/proc/self/environ)时的源码审计与漏洞定位。
限制与注意事项
CTF 源码通常很短(<200 行),不要用复杂工具,手动审计即可;优先搜索 flag、secret、admin 关键字;注意注释中的提示(CTF 出题者有时会留线索);多文件项目先看路由(app.py / index.php / app.js),再看控制器逻辑。
关于该技能的收费、价格、平台支持范围等信息,资料中暂未提供。