整理自《优雅地寻找网站源码(一)》(作者 xq17,奇安信攻防社区) + 源码杀手(作者 问号sec)实操 用途:授权渗透测试 / SRC 众测 / CNVD 提交 / 企业自查 ⚠️ 全文技术仅限授权范围内使用,详见文末合规红线
目录
整体思路
直接搜源码
曲线思路:同款站扫备份
nuclei 插件实操(含踩坑)
备份文件名不一样怎么办
FOFA 精确定位系统
favicon hash 计算
针对 CNVD 的实战策略
合规红线
一、整体思路
为什么找源码:拿到源码 = 从黑盒变白盒 = "上帝视角"。能直接读代码找漏洞、看硬编码密钥/密码、定位隐藏接口。
一句话总结整套方法论:
给系统提指纹 → 找出所有同款站 → 批量猜备份文件名 → 精确核验是不是真源码包 → 拿源码转白盒挖洞。
两条主线:
- 0x1 直接搜源码可能已经泄露在网上(GitHub / 搜索引擎 / 网盘)
- 0x2 曲线救国
二、0x1 直接搜源码
0x1.1 代码托管平台(GitHub / Gitee)
泄露多半是员工个人行为:把公司项目传到个人仓库忘设私有,配置文件带着密码/密钥一起传了。
GitHub 搜索维度:
| |
|---|
| |
filename: | |
path: | |
extension:/ ext: | |
org: | |
user: | |
repo: | |
核心思路:公司标识 × 敏感特征 相交
针对某公司(以 example.com 为例):
"example.com" filename:config.php"example.com" filename:.env DB_PASSWORD"example.com" "AWS_ACCESS_KEY_ID""@example.com" passwordorg:ExampleCorp filename:config
高频出货 dork:
filename:config.php dbpasswd # PHP 数据库密码filename:.env DB_PASSWORD # Laravel 等框架filename:.bashrc password # 环境变量密码filename:.npmrc _auth # npm tokenextension:pem private # 私钥extension:sql mysql dump # 数据库导出shodan_api_key language:python # Shodan 密钥filename:wp-config.php # WordPress 配置filename:.git-credentials # git 明文账密
技巧:
- 搜到一个泄露账号,点进主页看他其他仓库(
user:xxx) - 国内公司泄露更多在 Gitee,不是 GitHub
0x1.2 搜索引擎(Google)
XX源码 / XX备份 / XX完整包xx ext:rar | ext:tar.gz | ext:zip
0x1.3 网盘搜索
飞飞盘 / 大力盘 / chaonengsou —— 找实施工程师传的部署包、文档。
三、0x2 曲线思路:同款站扫备份
场景:小众/商业系统,网上搜不到。 核心:运维常把整站打包成 www.zip 放根目录忘删 → 不光扫目标,还扫所有用同款系统的站,任何一家泄露就等于拿到整套源码。
五个步骤:
0x2.1 提取特征(给系统取指纹)
- favicon.ico 的 hash(最精准 —— 改标题改域名都躲不掉,没人换系统自带图标)
- title / 版权信息 / 特有 JS / HTML 结构 / HTTP 头
- 重点收集主页特征(最容易被爬虫和 FOFA 索引)
0x2.2 资产收集(拿指纹找同款站)
- 平台:FOFA / Shodan / ZoomEye / Hunter / Quake
- 语法:
icon_hash="xxx"、body="特有串"、title="xxx"
0x2.3 简单 fuzz(粗筛减负)
cat targets.txt | httpx -path'/wwwroot.zip'-path'/bin.zip'-path'/bin.rar' -status-code
先用轻量工具挑出可能有备份的,减轻 nuclei 压力。
0x2.4 编写 nuclei 插件(核心,见下一章)
流程图:
提指纹 → FOFA搜同款 → httpx粗筛 → nuclei精扫 → 命中下载 → 拿源码审计
四、nuclei 插件实操(含踩坑)
nuclei 是什么
- 你写的 .yaml = 任务说明书("插件"/"模板")
- "写插件" = 用记事本写个 YAML 文本文件,不是编程,是填格式
基础插件
新建 back-up-files.yaml:
id: back-up-filesinfo:name: Find Backup Filesauthor: xq17severity: mediumtags: exposure,backuphttp:-method: GETpath:-"{{BaseURL}}/wwwroot.zip"-"{{BaseURL}}/www.zip"-"{{BaseURL}}/backup.zip"matchers-condition: andmatchers:-type: binarybinary:-"504B0304"# zip 文件头part: body-type: dsldsl:-"len(body)>0"-type: statusstatus:-200
核验逻辑三条 and 同时成立:
- 内容开头是
504B0304(zip 文件头 magic bytes,对应 PK)—— 确认真是压缩包,不是伪装 200 的错误页
运行命令
# 单个目标nuclei.exe -u http://xxx -t back-up-files.yaml# 批量nuclei.exe -l targets.txt -t back-up-files.yaml -o result.txt# 校验语法nuclei.exe -t back-up-files.yaml -validate
⚠️ 踩过的坑(重要)
Windows PowerShell 管道 BOM 问题echo "网址" | nuclei 会给网址加隐藏的 BOM 字符,报 invalid scheme。 解决:别用管道喂网址,用 -u(单个)或 -l(列表)。 Linux 没这个坑,所以照抄文章会翻车。
文章代码两处过时/转码错误
{{b aseURL}} → 应是 {{BaseURL}}(论坛转码 bug)requests:
各类压缩包文件头对照
| |
|---|
| 504B0304 |
| 526172211A07 |
| 1F8B08 |
| 377ABCAF271C |
五、备份文件名不一样怎么办
这是整个方法的命门。靠字典 + 规则,不靠猜固定几个名。
① 扩充字典
文件名维度:
www wwwroot web website backup bak data db sqlsite html code source src release dist admin网站 备份 beifen bf 1 2 test temp old new upload
后缀维度:
.zip .rar .tar.gz .tgz .tar .7z .gz .sql .bak
文件名 × 后缀 全排列。
② 用域名/主机名动态生成(命中率最高)
运维爱用站点自己的名字命名备份:
xxyy.com → 试 xxyy.zip、xxyy.com.zip- nuclei 变量:
{{Hostname}}.zip、{{FQDN}}.zip
③ 时间/年份规律
2023.zip 2024.zip 2025.zip 202401.zip 网站2024.zip
④ 换维度(不死磕整站备份)
比整站 zip 更常见的信息泄露:
/.git/config # git 泄露,可还原整个源码仓库/.svn/entries # svn 泄露/.DS_Store # 泄露目录结构,反推文件名/WEB-INF/web.xml # Java 站类路径index.php.swp # 编辑器临时文件/.idea/ /.vscode/ # IDE 配置
六、FOFA 精确定位系统
"精确" = 多个指纹用 && 叠加,把范围夹死。
场景 A:找某一家单位的这个系统
(cert="target.com" || domain="target.com" || icp="京ICP备xxxxx号") && title="XX登录系统"
场景 B:找全网所有同款系统(favicon 最准)
icon_hash="-1234567890" && country="CN"
或用正文特征:
body="Powered by 某某统一认证" && title="登录"
场景 C:知道产品/厂商名
body="某某OA" && body="login"app="某某-OA系统"
写精确语法技巧
- body 挑独一无二的串(别用 login 这种烂大街的)
- title + body + icon_hash 三个凑齐,基本零误报
七、favicon hash 计算
FOFA 用 mmh3 哈希:
import mmh3, requests, codecsurl ="https://目标登录页/favicon.ico"r = requests.get(url, verify=False)h = mmh3.hash(codecs.encode(r.content,"base64"))print(f'icon_hash="{h}"')# 直接复制到 FOFA
拿到后 icon_hash="xxx" 搜全网同款图标站 —— 改标题改域名都躲不掉。 偷懒法:FOFA 网页版打开目标站,点图标旁"搜同图标"自动生成。
八、针对 CNVD 的实战策略
痛点:公开 dork + 大公司域名早被挖烂,CNVD 可能判"已公开披露/非原创"。
增量在三个维度:
- 换平台:Gitee(不用登录)、自建 GitLab、CSDN/博客
- 换目标:别搜公司搜"系统/产品"(医院HIS、学校教务、政务OA),一套源码全国几百家在用
- 换时间
CNVD 收不收对照:
结论:找源码是手段,提交 CNVD 的产物应该是源码帮你挖出来的洞。
自建 GitLab 未授权(高性价比)
- 发现:FOFA
app="GitLab" && cert="target.com" - 验证:
/explore/users/sign_up- 注册后能看 Internal 仓库 → 完整未授权链
- 验证到"能看到仓库列表+目录结构截图"立即停手
- 类似的还有:Jenkins、Nacos、Apollo、SVN、Swagger 未授权(套路一样:FOFA找 → 点一下验证)
九、合规红线(必读)
这套技术技术中立,用在哪决定性质:
✅ 能做
❌ 不能做
- 对没授权的网站批量扫描(违反《网络安全法》第27条)
- 用泄露的密钥/账号登录目标系统拿数据(《刑法》非法获取计算机信息系统数据)
医院等关键信息基础设施
- 属于关键信息基础设施 + 患者数据(敏感个人信息),处罚更重
- 绝对不碰患者数据:一旦 dump 病历/身份证 → 从"报漏洞"变"侵犯公民个人信息",是刑事问题
- 走官方通道(CNVD)提交,别自己联系、别公开、别留后门
验证漏洞的原则
证明"我能进",不做"进去拿东西"。 截图 URL + 状态码即可,不下载内容。
附:整套方法一图流
┌─────────────────────────────────────────────┐│ 1. 提指纹(favicon hash / title / body) ││ ↓ ││ 2. FOFA 搜同款站 → targets.txt ││ ↓ ││ 3. httpx 粗筛 ││ ↓ ││ 4. nuclei 增强插件精扫 ││ (几十种备份名 + 体积过滤 + 文件头 + 去重) ││ ↓ ││ 5. 命中 → 下载源码包 ││ ↓ ││ 6. 白盒审计 → 挖出真漏洞 ││ ↓ ││ 7. 写报告提交(通用型,影响一批同款站) │└─────────────────────────────────────────────┘ 全程 · 授权范围内 · 点到为止
技术用于学习与授权测试,请守住合规红线。