乐于分享
好东西不私藏

实战中web源码泄露的总结与利用

实战中web源码泄露的总结与利用

 Web 源代码泄露通常源于服务器配置不当或开发人员安全意识不足,导致包含源代码或敏感信息的隐藏文件或目录被外部访问。攻击者常通过自动化工具或其他方式对网站进行敏感路径扫描,一旦发现可公开访问的版本控制目录或系统元数据文件,便可能直接下载整个项目源码,进而挖掘硬编码的密钥、数据库凭证、内部接口等敏感信息。

典型场景包括:

  • .git 目录泄露
  • .DS_Store 文件泄露
  • .svn 目录泄露

1. Git 源码泄露

1.1. 什么是 Git?

Git 是一个分布式版本控制系统,用来管理代码的修改历史。开发人员用 Git 来:跟踪代码变更、多人协作开发、回滚代码、创建分支等。

当你运行 git init 时,Git 会在项目目录下创建一个隐藏文件夹:.git。

这个 .git 目录包含了所有与版本控制有关的数据

文件 / 目录

说明

.git/config

Git 配置信息

.git/HEAD

当前所在分支指针

.git/objects/

存储代码的所有历史版本

.git/logs/

Git 提交历史记录

.git/index

暂存区索引信息

1.2. 什么是 Git 源码泄露?

简单说:服务器部署时把 .git 目录也上传上去了,然后被攻击者访问到了。

攻击者一旦发现 .git泄露,可能会做:

  1. 使用 Git 工具还原完整源码
    (比如 git-dumper 工具);
  2. 找到硬编码的密码、密钥、Token、数据库信息等;
  3. 阅读源代码逻辑,寻找漏洞(如 SQL 注入、命令注入等);
  4. 利用 Git 历史记录还原被删除的信息;
  5. 找到内部接口、调试页面、测试逻辑等隐藏攻击面。

1.3. git 命令

1.3.1. git log

git log 是 Git 中用于查看代码历史提交记录(commit 历史)。Git 不是每次保存完整代码副本,而是仅记录变更部分。所以 git show ID 显示的也是变更部分的代码内容.

比如当我们下载了.git 目录后,进入该目录执行 git log。如下内容是该 Git 仓库的提交历史记录,包括了每次提交的:提交哈希(commit ID)、提交作者、提交时间、提交说明

git show 用于查看某个提交的详细信息,即这次提交改动了什么东西。

git show <commitID>

其中有一条提交的变更记录的说明是“Inlcuded custom environmental variables”。我们重点看一下这条记录。发现这条记录新增了一个 .env 文件,其中包含了 AWS 密钥和靶场 flag。

1.3.2. git stash

git stash 是 Git 用于临时保存未提交更改(工作区和暂存区)的功能,方便你切换分支或执行其他操作时不丢失当前进度。它不会出现在 git log 中,但可通过 git stash list 和 git stash show -p 查看。

假设你在开发一个 Python 项目 app.py,你临时测试时写入了敏感信息:

# app.pyAPI_KEY = "CTF{super-secret-flag}"

你还没打算提交这段代码,于是你运行:

git stash

这会将未提交的修改(带有敏感信息)存入 stash,代码恢复成之前版本。

某天,这个项目被上传到 Web 服务器(包括 .git 目录),你用 git-dumper 下载 .git 内容并还原代码库,结果你发现 git log 没看到任何包含 flag 的提交。但你灵机一动,试试:

git stash list# stash@{0}: WIP on master: 临时调试APIgit stash show -p stash@{0}# diff --git a/app.py b/app.py# + API_KEY = "CTF{super-secret-flag}"

找到了隐藏的 flag,而开发者本以为自己“没提交”就很安全,其实 stash 也被泄露了!

git stash 暂存了未提交的敏感修改,即使开发者没提交,但如果 .git 目录泄露,stash 里的内容依然可以被恢复并查看。

1.4. git-dumper 工具

工具地址:https://github.com/arthaud/git-dumper

如何利用 Git 泄露还原源码?并通过 git log 寻找敏感信息?如下发现 git 源码泄露

还原完整源码

git_dumper.py http://192.168.67.165:1230/.git 保存的目录名git_dumper.py http://192.168.67.165:1230/.git k8s

然后可以分析源码,由于还原了.git 目录,还可以通过 git log 和 git show 查看历史提交记录和提交的内容。

1.5. GitHack 工具-推荐

工具:https://github.com/lijiejie/GitHack

GitHack.py http://www.xx.com/.git/

1.6. CTFHub git 泄露

  1. Log 关

git-dumper 还原源码,git log 和 git show 查看 flag

  1. Stash

git log 和 git show 未找到 flag。通过使用 git stash list

stash@{0}: xx 表示当前有一个 stash 暂存了尚未提交的改动,基于 07fa828 这个提交。然后通过git stash show -p stash@{0} 查看 stash 中的具体改动。这表示你 stash 之前,该文件的内容是:where is flag。而你 stash 的修改内容把它改成了:ctfhubxx

  1. Index

flag 就在还原的源码里

2. SVN 源码泄露

SVN(Subversion) 是一种集中式版本控制系统,广泛用于源代码管理,主要由 .svn/ 目录维护版本信息。开发者本地每个被版本控制的目录下都会存在一个 .svn 文件夹,它包含了:

  • 当前文件的版本信息
  • 文件历史版本(可能包含敏感内容)
  • 元数据和目录结构

当网站部署时,开发者忘记删除 .svn 目录,攻击者可通过访问该目录下的某些文件来恢复源码或敏感信息。早期版本可通过 .svn/entries 恢复路径,.svn/text-base/ 下载源码,新版本则利用 .svn/wc.db 恢复内容

2.1. svnExploit

以为 ctfhub svn 泄露为例,扫描到了 svn 源码泄露

漏洞利用工具:https://github.com/admintony/svnExploit

SvnExploit.py -u https://xx.com/.svn --dump

只获取了两个文件,svnexploit这个工具只能获取当前版本的源代码,而题目提示说 Flag 在服务端旧版本的源代码中。所有我们要得到旧版本的源码。所以使用 dvcs-ripper 工具中的 rip-svn.pl 脚本进行下载。

2.2. dvcs-ripper

地址:https://github.com/kost/dvcs-ripper

apt-get updateapt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl./rip-svn.pl -v -u http://xx/.svn

还原的源码如下

flag 存在于

3. HG 泄露

HG 泄露指的是 Mercurial(简写为 hg)版本控制系统的源码泄露问题,类似于 Git、SVN 泄露,是 Web 安全中的一种常见信息泄露漏洞。

Mercurial 是一个 分布式版本控制系统,命令行工具名是 hg。类似 Git,但在一些早期项目(如 Mozilla)中被广泛使用。项目源代码、提交记录、历史版本都保存在 .hg 目录中。

如果开发者将网站源码上传到服务器时 连同 .hg 目录一并上传,但又没有限制 Web 访问权限。攻击者可以通过特定路径访问并恢复项目源码。

以 ctfhub HG 泄露为例:

然后使用 dvcs-ripper 工具中的 rip-svn.pl 脚本进行下载

./rip-hg.pl -v -u http://xx/.hg

flag

4. .DS_Store 文件泄露

.DS_Store 全称 Desktop Services Store,是 macOS 系统生成的隐藏文件。它主要记录当前目录的元数据,例如:

  • 文件和子目录的名字
  • 文件图标的位置
  • Finder 视图设置(排序方式、显示样式等)

注意:.DS_Store 文件并不包含文件的实际内容(比如源码、图片、文本数据),它只保存目录结构和文件排列等信息。

泄露风险

一旦 .DS_Store  文件被下载并解析: 攻击者可以看到目录下有哪些文件、子目录的名字 可以结合路径爆破或直接访问暴露出的文件 如果暴露的文件可被下载,可能进一步导致敏感数据或源码泄露

工具:ds_store_exp

地址:https://github.com/lijiejie/ds_store_exp

以 ctfhub .DS_Store 泄露为例,使用工具解析远程 .DS_Store 文件,列出目录结构,发现目录中存在一个名为 e2f6xx.txt 的文件

ds_store_exp.py http://xx/.DS_Store

通过 url 去访问这个文件得到了 flag

对比项

.DS_Store泄露

SVN 泄露

文件来源

macOS 系统生成的目录元数据文件

SVN 版本控制系统生成的元数据文件和目录(如 .svn/wc.db

记录内容

目录中文件、子目录的名字、显示布局、图标位置等

项目代码版本记录、文件名、文件历史、完整文件数据索引等

泄露风险

泄露文件和目录结构(路径信息),可帮助枚举敏感文件路径

泄露完整源码

可能拿到什么

文件路径、目录结构,间接访问文件获取 flag 或敏感信息

完整源码、配置文件、敏感信息(账号、密码、API 密钥等)

文件是否含文件内容

 不含文件实际内容,只是目录元数据

 可能含文件实际内容(从 SVN 元数据还原出来)

.DS_Store 泄露本质是:通过泄露目录结构 + 文件路径,间接访问敏感文件。

遇到 .DS_Store 泄露时,应结合目录扫描和文件下载一起验证风险。  

5. bak 文件

.bak 是 backup(备份) 的缩写,通常表示某个文件的备份版本,用于防止修改、升级或删除操作造成数据丢失。.bak 文件既可能是人工习惯性的命名,也可能是编辑器、工具、脚本的自动行为 —— 都有可能因疏忽泄露敏感信息。

6. vim 缓存

https://www.ctfhub.com/#/skilltree

7. 网站备份压缩文件泄漏

一般网站管理员在日常维护中,总会把网站源码给备份一下,防止网站出现问题时,能马上的恢复使用,不过一般的管理员安全意识不高,在备份的时候,会使用一些常见的压缩备份名,而且不光使用常见的备份名字,大部分的管理还会把备份好的源码直接放在网站根目录里,这样给一些不法之徒,提供了一个很方便的渗透思路,或者有些直接不需要渗透了,因为备份中的数据,就已经满足那些不法之徒的需求了。

常见的备份文件后缀:

  • .rar
  • .zip
  • .7z
  • .tar.gz
  • .bak
  • .txt
  • .old
  • .temp

一般使用web目录扫描工具如dirsearcy、御剑就能扫描出来

8. SWP 文件泄露

swp即swap文件,在编辑文件时产生的临时文件,它是隐藏文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,文件名为 .filename.swp。

漏洞利用

直接访问.swp文件,下载回来后删掉末尾的.swp,获得源码文件。

9. WEB-INF/web.xml 泄露

WEB-INF是Java的WEB应用的安全目录,如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。

WEB-INF 主要包含以下文件或目录:

WEB-INF/web.xml : Web应用程序配置文件, 描述了servlet和其他的应用组件配置及命名规则.WEB-INF/database.properties : 数据库配置文件WEB-INF/classes/ : 一般用来存放Java类文件(.class)WEB-INF/lib/ : 用来存放打包好的库(.jar)WEB-INF/src/ : 用来放源代码(.asp和.php等)

漏洞利用

通过找到 web.xml 文件,推断 class 文件的路径,最后下载 class 文件,再通过反编译 class 文件,得到网站源码。

10. GitHub源码泄漏

GitHub是一个面向开源及私有软件项目的托管平台,数以百计的大侠,高手,圣手,教主,小白,宗主,等等级别人物的汇集之地,而平台的服务设施,很人性化,而且用户体验度高,所以用的人很多,而且很人也都喜欢把自己的代码上传到平台,反正是很方便。

有些安全意识不高的程序员大意的把自己的项目源码上传到 GitHub ,一些不法分子在收集信息中,通过关键词进行搜索,可以找到关于目标站点的信息,有些信息直接泄露了网站源码,管理员账号密码,数据库信息等。

11. 源码泄露综合利用工具

https://github.com/0xHJK/dumpall

# 下载文件(源代码)dumpall -u <url> [-o <outdir>]# 示例dumpall -u http://example.com/.git/dumpall -u http://example.com/.svn/dumpall -u http://example.com/.DS_Storedumpall -u http://example.com/
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 实战中web源码泄露的总结与利用

评论 抢沙发

7 + 7 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮