源码泄露
源码泄漏原因:
- 源码本身的特性
- 管理员不好的习惯
- 管理员习惯的开发
- 管理员不好的配置
- 管理员不好的意识
- 管理员资源信息搜集
源码泄漏种类:
Webpack打包泄漏
composer.json
GitHub源码泄漏
git源码泄露
svn源码泄露
网站备份压缩文件
DS_Store文件泄露
hg源码泄漏
SWP 文件泄露
CVS泄露
Bzr泄露
WEB-INF/web.xml 泄露
核心思路概览
获取目标源码的核心逻辑分为“已知指纹”、“未知指纹”以及“开源情报搜索”三大方向。
已知指纹识别获取源码
- 思路:使用指纹识别平台、插件(如Wappalyzer、云悉等)获取目标CMS/程序名称。
- 途径:拿到名称后,直接通过搜索引擎(Google、Baidu等)搜索该程序的源码进行下载分析。
未知指纹识别获取源码
当指纹识别无法获取有效信息时,可从后端配置、前端打包及备份文件三个维度入手。
后端配置与版本控制泄露
- GIT泄露:利用
.git目录泄露,使用工具还原源码。- 工具:GitHack
- SVN泄露:利用
.svn目录泄露,使用工具还原源码。- 工具:SvnHack
- DS_Store泄露:
.DS_Store文件泄露。- :只包含当前目录下部分文件的元数据(文件名、图标位置等),且通常不包含子目录内容。其真实风险在于暴露文件名清单和部分目录结构信息。
- 利用方式:解析该文件,推测可能存在的敏感文件或子目录路径,然后逐层访问并下载,从而获取更多信息。
- 工具:ds_store_exp
- Composer.json泄露:PHP项目依赖文件泄露,可能暴露项目结构、依赖版本或敏感信息。
- 通用工具:dumpall —— 支持多种泄露类型的综合利用工具。
前端打包泄露
- WebPack打包泄露:通过分析前端打包后的
.js文件或map文件,还原前端源码。 - 浏览器插件:利用谷歌浏览器插件(如SourceDetector)自动嗅探并下载前端源码。
源码文件备份泄漏
- 方法:使用目录扫描工具(如Dirsearch、御剑)扫描常见的备份后缀(如
.zip,.rar,.tar.gz,.bak,.txt等)。 - 利用:若扫描到备份文件,直接访问下载即可获取源码。
借助资源平台搜索(开源情报)
当目标源码为开源项目或开发人员将代码托管至公开平台时,可通过资源平台进行搜索。
- 常用平台:GitHub、Gitee、Oschina 等。
- 搜索技巧:
- 特征文件名:从前端 JS、URL 路径中提取的特定文件名(如
z_blog.php、chunk-vendors.js等) - 特征联系方式:通过目标的邮箱、域名、版权信息等特征搜索关联代码库。
- 特征文件名:从前端 JS、URL 路径中提取的特定文件名(如
- 拓展监控:配合GitHub监控,保证第一时间获取源码泄露、漏洞更新、工具更新等通知。
注:判断开源/闭源:分析目标使用的源码是开源项目还是闭源商业软件,是否公开。
演示案例与工具
| 案例类型 | 获取途径 | 对应工具 / 方法 |
|---|---|---|
| 已知指纹 | 指纹识别 -> 搜索引擎 | 指纹平台 + Google/Baidu |
| GIT泄露 | 未知指纹 -> 版本控制 | GitHack |
| SVN泄露 | 未知指纹 -> 版本控制 | SvnHack |
| DS_Store泄露 | 未知指纹 -> 系统文件 | ds_store_exp |
| 通用泄露 | 未知指纹 -> 综合探测 | dumpall |
| WebPack打包 | 未知指纹 -> 前端分析 | SourceDetector-dist / 谷歌插件 |
| Composer.json | 未知指纹 -> 配置文件 | 直接访问 / 目录扫描 |
| 源码备份 | 未知指纹 -> 备份文件 | 目录扫描工具(Dirsearch等) |
| 资源搜索 | 未知指纹 -> 开源平台 | GitHub / Gitee / Oschina / 监控 |
Github搜索语法
按搜索范围(in:)
| 语法格式 | 含义说明 |
|---|---|
in:name test | 仓库标题(名称)中包含关键字 test |
in:description test | 仓库描述中包含关键字 test |
in:readme test | 仓库的 README 文件中包含关键字 test |
按仓库指标(Stars、Forks、Size)
| 语法格式 | 含义说明 |
|---|---|
stars:>3000 test | stars 数量大于 3000 且包含关键字 test 的仓库 |
stars:1000..3000 test | stars 数量在 1000 到 3000 之间且包含关键字 test |
forks:>1000 test | forks 数量大于 1000 且包含关键字 test |
forks:1000..3000 test | forks 数量在 1000 到 3000 之间且包含关键字 test |
size:>=5000 test | 仓库体积大于等于 5000KB (即 5MB) 且包含关键字 test |
按时间维度
| 语法格式 | 含义说明 |
|---|---|
pushed:>2019-02-12 test | 最后推送(更新)时间大于 2019-02-12 且包含关键字 test |
created:>2019-02-12 test | 仓库创建时间大于 2019-02-12 且包含关键字 test |
按归属与属性
| 语法格式 | 含义说明 |
|---|---|
user:test | 搜索用户名为 test 的用户下的所有仓库 |
license:apache-2.0 test | 明确限定开源协议为 apache-2.0 且包含关键字 test |
language:java test | 在 Java 语言编写的代码中搜索关键字 test |
组合搜索(进阶)
| 语法格式 | 含义说明 |
|---|---|
user:test in:name test | 组合搜索:搜索用户名 test 的、且标题含有 test 的仓库 |
配合 Google 搜索引擎语法(site:)
利用 Google 结合 site: 语法精准定位 GitHub 上的敏感信息泄露(如配置信息、账号密码等)。
基础敏感信息搜索
| 搜索语法 | 含义说明 |
|---|---|
site:Github.com smtp | 搜索 GitHub 上所有涉及 SMTP 服务的页面 |
site:Github.com smtp password | 搜索 GitHub 上包含 SMTP 且包含 password 的页面 |
site:Github.com String password smtp | 搜索 GitHub 上包含 SMTP、password 及 String 的页面 |
针对特定邮箱服务商的精准搜索(常用于寻找泄露的邮箱账号及密码)
| 搜索语法 | 含义说明 |
|---|---|
site:Github.com smtp @qq.com | 搜索泄露的 QQ 邮箱 SMTP 配置 |
site:Github.com smtp @126.com | 搜索泄露的 126 邮箱 SMTP 配置 |
site:Github.com smtp @163.com | 搜索泄露的 163 邮箱 SMTP 配置 |
site:Github.com smtp @sina.com.cn | 搜索泄露的新浪邮箱 SMTP 配置 |
另类目标源码获取
小型站点外包个人开发
从目标转到寻找源码系统上,从源码系统上找应用目标
源码泄漏参考&实战文章
参考:
https://www.secpulse.com/archives/124398.html
https://mp.weixin.qq.com/s/zhjxW2mUEgq6dFAp3kBcgQ
渗透测试实战—某资金盘信息收集(.idea目录泄露)
https://mp.weixin.qq.com/s/7cSrDZci_drE6wTGvQOOHw
SRC挖掘-js.map泄露到接管云上域控
https://mp.weixin.qq.com/s/QZsNjbTiaqC1qwzARVAiGQ
本节知识点&思维导图
信息收集-Web应用-源码获取-已知指纹&未知指纹
信息收集-Web应用-源码获取-泄漏问题&发现指纹

