Skip to content
Kurisu
Go back

从指纹到 0day:反搜泄露源码的白盒审计工作流

黑盒测试打到某个阶段会遇到一堵墙:认证前的攻击面全摸完了,能试的都试了,剩下的全要登录态。这时候答案往往在源码里——而国产二开系统的源码,经常就躺在 GitHub 上。

我最近靠这套流程挖到一个通用型 0day 并提交了漏洞平台,把完整工作流沉淀一下。目标信息脱敏,只讲方法。

什么时候该转白盒

我的判断信号:

三条都中,就别在黑盒上继续磨了。

Phase 0:指纹提取

转白盒的第一步不是搜,是先从本地证据里提取”独特串”。标准:这个串扔到 GitHub 搜,结果约等于零,才算独特。

按价值排序,我用这五级:

级别类型举例(脱敏)
1自研 API 路径/api/folder/fwh/ 这种拼音缩写路径,别家不会有
2中英报错整句框架的中文报错原句,注意弯引号原样保留
3厂商/产品标识厂商名、SaaS 域名、客户子域模式
4技术栈组合框架+存储+服务器+响应封装格式
5chunk/组件命名webpack chunk hash、Vue 组件路径

从哪提:前端 bundle 正则全量抠 /api/... 路径、报错堆栈里的包名、页面里的厂商标识。webpack bundle 一条正则就能把 API 路由全抠出来。

普通词(login、list、index)不要单独搜——只作为”星座组合”的成员,多条 AND 一起用。

Phase A:反搜与落地

反搜没什么好说的,把独特串扔进 GitHub code search(带 text_matches 上下文)、Gitee、Sourcegraph,三个平台交叉。命中后用”同源判定清单”核对:至少 3 条指纹命中(单串 + 自定义响应封装 + 模型字段),才算同源,避免抓到长得像的别家代码。

批量落地有个大坑要说:代理网络下 git clone 大仓库必断(fetch-pack early EOF),codeload 下 zip 也断。正解是走 API:

  1. GET /repos/{owner}/{repo}/git/trees/{sha}?recursive=1 列出全文件清单
  2. raw.githubusercontent.com/{owner}/{repo}/{sha}/{path} 逐文件拉取

小文件走代理很稳,我实测 127/127 全部成功。ref 用 commit SHA 最稳,别用分支名。

版本锁定看部署配置:docker-compose 里的 jar 文件名直接告诉你基座版本(比如 xxx-module-system-2.4.5.jar)。再拿接口行为 diff 验证——仓库是 POST 而部署只认 GET,说明部署版比仓库新,审计以仓库为参考、判定以线上为准。

Phase B:五路并行审计

源码到手后,我把审计面拆成五路并行做(每路一份独立报告):

  1. 鉴权矩阵:全 Controller 端点 × 鉴权注解 × anon 白名单对照——未授权攻击面全图
  2. SQLi 污点追踪:全部 Mapper XML 的 ${} 逐枚,Source→Sink 画链
  3. 文件链:上传白名单→落盘路径→webroot 可达→解析执行,逐环判成立条件
  4. 业务逻辑:每个状态转移查三样东西(操作者身份/数据归属/状态前置)
  5. 基座与依赖:过滤链逐行读、pom 版本比对已知 CVE

拆路的意义不是快,是每路有明确的 checklist 和产出契约(证据必须 文件:行号、置信度分四级),防止审计发散。上一轮我就靠路 2 挖到了框架自带接口的 SQLi(见上一篇)。

Phase C:实例判定

白盒结论必须回线上实例做黑盒判定——低频、只读、单发。JeecgBoot/Shiro 系我沉淀了一张响应矩阵,判定 anon 边界不用猜:

响应含义
参数校验错误 JSON(Required String parameter...穿过过滤器到 Controller = anon 放行
500 + AuthenticationException: token为空被过滤器拦 = 不在 anon 清单
405 不支持GET请求方法到 handler = anon 放行(GET 打 POST 端点,零副作用判定法)
Tomcat 404无 handler,模块不存在
超时别急着判 WAF,拉长超时拿真实异常(可能是后端基建故障)

红线

小结

这套流程的核心就一句话:黑盒榨干之后,源码就是答案,而源码经常就在 GitHub 上。指纹提取得够独特,狩猎就是体力活;审计拆得够细,0day 就是概率事件。


Share this post:

Previous Post
安全知识工程:38 个仓库全量学习与个人笔记体系构建
Next Post
SRC 漏洞提交实战笔记:EDUSRC、CNVD 的规则差与坑