从业者-信息泄露-版本控制历史
# 实验室:版本控制历史中的信息泄露
# 题目
此实验室存在版本控制历史记录,记录中泄露了敏感信息。要解决实验室问题,请获取administrator
用户的密码,然后登录并删除carlos
用户。
- name: 实验室-从业者
desc: 版本控制历史中的信息泄露 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/information-disclosure/exploiting/lab-infoleak-in-version-control-history
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6
# 实操
根据题意,可得实验目标:
- 网站存在版本控制历史记录,找到该记录,从记录中获取 administrator 用户的密码,然后在管理面板中删除 carlos 用户。
点击 “ACCESS THE LAB” 进入实验室。

经过一番测试,发现路径/.git
存在源代码泄露。

但是,源代码以二进制形式保存,无法直接以文本格式查看。
所以,需要通过一些工具来恢复源代码。

# 一些不太好用的工具(效果不理想)
我在网上找到了很多关于 “.git泄露” 的利用工具,这些工具用起来是挺好的,但是效果不太理想......(个人感觉)
# 其中三个比较流行的(效果基本上一样)
https:/BugScanTeam/GitHack
https:/WangYihang/GitHacker
https:/0xHJK/dumpall
2
3
4
以 dumpall 工具为例。
使用 dumpall 对路径https://xxx/.git
进行源代码恢复的操作。

成功复原两个文件admin.conf
和admin_panel.php
。

这是 admin_panel.php 文件的内容,输出了一条提示信息,并没有什么作用。

重点是admin.conf
文件的内容,该文件记录了管理员用户的密码。
但是,该文件中的密码部分已经被混淆。
# 原
ADMIN_PASSWORD=明文密码
# 混淆之后
ADMIN_PASSWORD=env('ADMIN_PASSWORD')
2
3
4
5

一番研究,发现这些工具一般都会访问/.git/refs/heads/master
文件,以获取历史版本的哈希值。
这些工具获取历史版本号的哈希值之后,会还原该版本下的所有源代码(一般为最新版本)。
除了这个版本之外的,例如旧版本的代码,它们不管......
在该实验室中,最新的版本号为ea2f4d...eb88
。

查看源代码历史记录,发现两个版本号。
- 初始化时,生成初始版本
ba2cc1...64ee
,此时管理员密码还在。 - 然后进行了一次更改,管理员密码被删除,版本更新为
ea2f4d...eb88
。
而以上的这些工具(例如 dumpall 和 GitHack),它们只会还原最新版本ea2f4d...eb88
,也就是密码被删除之后的源代码。

(那咋办?我想要旧版本的源代码,但是工具只给我还原新版本......)
有以下几种方法:
- 微调以上工具,使其可以还原旧版本。
- 下载整个
.git
目录,然后手动还原旧版本。 - 找别的工具。
# 实用的工具
幸运的是,找到一篇大佬的文章 (opens new window),发现一个新工具Git_Extract (opens new window)。
# 该工具需要python2
https:/gakki429/Git_Extract
2
这个工具可以循环 还原所有版本下的源代码。

该工具还原了两个相似的文件,admin.conf
和admin.conf.21d23f
。
通过查看文件内容,admin.conf.21d23f
为最新版本的源代码文件,其中的密码已经被删除。
而admin.conf
为初始版本的源代码文件,其中包含管理员用户的密码3udpn3n0tuh6usngmm18
。

来到登录界面,输入用户名 administrator ,以及刚刚获得的密码3udpn3n0tuh6usngmm18
。

登录成功,点击 “Admin panel” 进入管理面板。

点击 “Delete” 删除 carlos 用户。

删除成功,实验完成。
