一.Git泄露
1.简介
Git是一个开源的分布式版本控制系统,它可以实现有效控制应用版本,但是在一旦在代码发布的时候,存在不规范的操作及配置,就很可能将源代码泄露出去。那么,一旦攻击者发现这个问题之后,就可能利用其获取网站的源码、数据库等重要资源信息,进而造成严重的危害。
2.危害
在配置不当的情况下,可能会将“.git”文件直接部署到线上环境,这就造成了git泄露问题。攻击者利用该漏洞下载.git文件夹中的所有内容。如果文件夹中存在敏感信息(数据库账号密码、源码等),通过白盒的审计等方式就可能直接获得控制服务器的权限和机会!
3.原理以及它的造成原因
Git泄露的原理主要有以下几个方面:
配置错误:在使用Git时,如果配置不当,比如将敏感信息直接写入配置文件或者未正确设置访问权限,就会导致这些敏感信息被提交到代码仓库中。
操作失误:在进行Git操作时,比如误将敏感文件添加到暂存区或者提交到代码仓库中,或者误将敏感信息包含在提交的日志中,都可能导致敏感信息泄露。
公开仓库:如果将代码仓库设置为公开可访问的状态,任何人都可以查看和下载其中的内容,包括敏感信息。
其他公开可访问的地方:除了代码仓库,还有一些其他公开可访问的地方,比如代码托管平台的问题追踪系统、Wiki页面、邮件列表等,如果在这些地方发布了敏感信息,也可能导致泄露。
4.git库的结构图
git中文件的状态
git仓库中的文件存在三种状态:①Untracked files:文件未被跟踪 ②Changes to be commited:文件已暂存,指向下一次提交的内容 ③Changes not staged for commit:已跟踪文件的内容发生了变化,但是还没有放到暂存区
Git的四种对象
commit:指向一个tree,它用来标记项目某个特定时间点的状态
一般包含以下信息:①代表commit的哈希值 ②指向tree对象的哈希值 ③作者 ④提交者 ⑤注释
tree:可以简单的理解成这是一个对象关系树,用来管理一些tree和blob
一般包含以下信息:
①代表blob的哈希值 ②指向tree对象的哈希值
blob:这种对象用来保存文件内容 tag:给某个提交增添的标记
(画一个比较简陋的对应图,稍微形象一点,哈哈哈,虽然很丑,但自我感觉这个图还是挺直观的)
5.git常用命令
6.例题实操
这里我以ctfhub上的git泄露为例
1.log(1)进入环境,看了看页面以及源码,啥有用的信息也没有
(2)这里一来我是先用dirsearch扫描之后发现扫出几个git后缀的文件,所以这里还是直接用GitHack扫扫看
注:GitHack是一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,还原重建工程源代码
(3)使用git log查看历史记录
(4)可以看见文件有过三次操作,flag处于add flag版本中
查阅其他博主wp得知在这里flag有两种解法:
1.文件比对
2.退回版本
这里我直接用git diff对比文件
注:①:git diff:当工作区有改动,临时区为空,diff的对比是“工作区与最后一次commit提交的仓库的共同文件”;当工作区有改动,临时区不为空,diff对比的是“工作区与暂存区的共同文件”。
②:git diff <分支名1> <分支名2> :比较两个分支上最后 commit 的内容的差别
即可得到flag
2.Stash
注:
stash是git的一个操作命令
git stash list 查看隐藏的记录
git stash pop 恢复隐藏的内容,同时删除隐藏记录
git stash apply 恢复隐藏的内容,但不会删除隐藏记录
使用stash pop/apply可以选择恢复哪条记录,如恢复stash@{1}记录,则使用git stash pop stash@{1}或者git stash apply stash@{1}
(1)打开环境后还是跟前面一样,啥也没有
(2)这里跟前面一样,还是用GitHack扫描网页
扫描到文件后,直接进入
(3)然后使用stash命令寻找stash:git stash list
(4)发现有stash,再使用命令:git stash pop
(5)发现该文件夹多了一个txt文件,flag应该就在这里了,直接cat一下,果然
3.index
- Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区
(1)进入环境
(2)这题,和上面一题常规流程,打开GitHack,扫描该网址,就出现一个txt文件
(3)打开后flag就在里面
二.hg泄露
1.简介
Mercurial(hg)是一种分布式版本控制系统,它与Git类似也可以用于管理代码的版本控制,如果Mercurial服务器的安全措施不当或用户不小心,可能会导致Mercurial源码的信息泄露的问题,而Mercurial源码信息泄露的原理是因为Mercurial服务器上的源代码未被正确保护,导致未经授权的用户可以轻易地访问和下载代码,
这可能会导致以下问题
(1)暴露源代码:未经授权的用户可以轻易地访问和下载源代码,包括敏感信息,例如密码、API密钥和凭据等
(2)增加恶意攻击的风险:未经授权的用户可以轻易地访问和下载源代码,黑客可以使用这些代码来发起攻击,例如通过发现代码漏洞来入侵服务器或者应用程序
2.Mercurial通过hg命令加上关键字来进行操作,可以远程同步、上传代码。
拷贝(同步)源码并提交修改:
$ hg clone repository (这里repository是源码的地址)
$ cd hello
$ (edit files)
$ hg add (new files)
$ hg commit -m 'My changes'
$ hg push
创建新的hg项目,并提交:
$ hg init (project-directory)
$ cd (project-directory)
$ (add some files)
$ hg add
$ hg commit -m 'Initial commit'
3.题目实操
ctfhub hg泄露
(1)打开环境后如下(2)这里需要运用到dvcs-ripper这个工具,这里我是在kali系统里安装这个工具然后进行题解
(3)然后输入命令扫描该网页
(4)使用tree命令列出刚刚下载的.hg网站目录,发现可疑的文本文件
(5)查看可疑的文本文件是否存在此题flag,发现历史版本add flag
(6)发现历史版本可以使用正则表达式进行关键字查找,即可找到flag