CTFHUB--信息泄露(下)

本文详细解析了Git和SVN版本控制系统中的泄露问题,探讨了泄露原因、检测方法和利用漏洞的实例,强调了配置安全的重要性,并推荐了相关工具如GitHack和dvcs-ripper用于漏洞检测和修复。
摘要由CSDN通过智能技术生成

关于Git这一篇就够了_linux git-CSDN博客

Git信息泄露原理解析及利用总结_git泄露-CSDN博客https://blog.csdn.net/m0_73353130/article/details/130685164

https://www.cnblogs.com/batsing/p/svn-bug.html

Git泄露

关于GIT:

Git最初是由Linux开发者Linus用了仅仅两周时间纯C语言编写而成,在编写完成之后就立马上手接管Linux源代码,不过在此之前Linux是由BitMover公司开发的BitKeeper分布式版本控制系统所管理源代码,它是商业收费的分布式版本控制器,但BitMover公司看中Linux开源精神,免费授权给Linux社区使用,在2002年时,Linux开始使用BitKeeper分布式版本控制系统管理源代码,但好景不长,有一天Linux社区成员Andrew(samba(局域网共享文件c/s程序)的作者)试图破解BitKeeper共享给所有人使用,被BitMover公司发现并收回了免费使用的版权,随后Linus就用了两周时间开发出了git(两周时间包括测试),也就是目前为止最好用的分布式版本控制系统。

大名鼎鼎的github用的就是git系统来管理它们的网站,这里需要区分一下,github和git是两个东西,github是一个社区,git是一个服务系统,github只支持git分布式系统,所以故名成为github。

Git 的核心部分是键值对数据库。 当我们向 Git 仓库中插入任意类型的内容(开发者们在其中做的版本信息修改之类的操作),它会返回一个唯一的键,通过该键可以在任意时刻再次取回该内容。

 如果想要详细的学习GIT相关知识的,可以去看:

关于Git这一篇就够了_linux git-CSDN博客

GIT泄露

我们知道,Git是一个可以实现有效控制应用版本的系统,但是一旦在代码发布的时候,存在不规范的操作及配置,就很可能将源代码泄露出去。那么,一旦攻击者或者黑客发现这个问题之后,就可能利用其获取网站的源码、数据库等重要资源信息,进而造成严重的危害。例如:攻击者利用该漏洞下载.git文件夹中的所有内容。如果文件夹中存在敏感信息(数据库账号密码、源码等),通过白盒的审计等方式就可能直接获得控制服务器的权限和机会!

造成GIT泄露的原因:

1、.gitignore文件不完整                                  2、敏感信息提交到公开仓库

3、Git历史中的敏感信息                                   4、Git配置不当

5、内部API令牌泄露                                         6、使用.gitkeep占位

7、权限设置不当

判断GIT泄露漏洞:

1、查看环境或者站点是否提示了GIT,如果提示了,那么很可能存在着GIT泄露

2、使用dirsearch等这类扫描工具扫描,如果扫到了.git文件,那么很可能存在git泄露

3、我们可以直接访问网页/.git目录,如果成功访问,那就说明存在着GIT泄露

GITHACK下载:

git clone https://github.com/BugScanTeam/GitHack

然后,cd GitHack    就可以使用了

在使用扫描时,扫描的网址后面要加上.git/

GIT常用命令

git init 在当前目录中创建一个新的 Git 仓库。

git clone 将远程仓库的副本下载到本地。

git add 将文件添加到暂存区,准备提交。

git commit 提交暂存区的更改到本地仓库。

git status 显示当前工作目录和暂存区的状态。

git diff 查看文件的改动内容,包括与上一次提交的差异。

git log 查看提交历史。

git reset 重置当前分支的 HEAD,取消已缓存的内容。

git branch 查看、创建、删除分支。

git checkout 切换分支,创建分支并切换到它。

git merge合并分支。

git pull。从远程仓库获取最新版本并合并到本地。

git push 将本地分支的更改推送到远程仓库。

git rm 从本地仓库中删除文件。

CTFHUB--GIT泄露

Log

当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。请尝试使用BugScanTeam的GitHack完成本题。

我们先打开环境,使用dirsearch扫描一下

我们发现了git泄露

使用githack扫描网址

python2 GitHack.py http://challenge-3954bf5b6143dc00.sandbox.ctfhub.com:10800/.git/

 

可以看见,他在GitHack/dist这个目录下生成了一个文件,然后我们在这个目录下打开终端

然后输入 git log 来获取文件的日志信息

 我们可以发现,他在第二次修改时,add flag,说明,他在第二次操作时添加了我们所需要的flag

接下来我们有两种方法可以做

第一种方法:git reset 回退文件版本

格式:

git reset --hard 对应版本信息的commit

这儿我们输入

git reset --hard 383f92b66d4169b0782ac310a122232ff4ada34c

然后我们再去查看原来的目录 ,发现多了一个txt文件,打开得到我们需要的flag

第二种方法:git diff 文件对比

格式:

git diff 第一个对应版本的commit 第二个对用版本的commit

我们发现,他在第二步里添加了flag信息,我们就用第一步和第二步对比

git diff f502bff9ae6ba1e3e63b62aafb58dc16ed845094 383f92b66d4169b0782ac310a122232ff4ada34c

 得到flag

Stash

当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。请尝试使用BugScanTeam的GitHack完成本题

关于git stash:

.git stash用于想要保存当前的修改,但是想回到之前最后一次提交的干净的工作仓库时进行的操作。.git stash将本地的修改保存起来,并且将当前代码切换到HEAD提交上。

https://www.jianshu.com/p/14afc9916dcb

git stash详解-CSDN博客

解题:

还是和之前一样打开环境,使用dirsearch扫描发现git泄露,再使用githack扫描它,得到一个文件,在文件目录下打开终端

然后输入 git stash list (列出Git栈内的所有备份),我们可以利用这个列表来决定从那个地方恢复。

 然后我们输入 git stash pop (将当前stash中的内容弹出,并应用到当前分支对应的工作目录上,可以理解为恢复内容。)来恢复他的相关内容,然后在读取恢复的txt文件得到flag

Index

当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。请尝试使用BugScanTeam的GitHack完成本题。

题目中的index并不是我们理解的web网页,而是一个暂存区,默认存储在.git/index。

还是和之前一样,使用dirsearch扫描发现git泄露,然后使用githack扫描它,扫描之后,在GitHack/dist这个目录下得到一个文件,在文件里面的一个txt文件里得到flag

SVN泄露

关于SVN

关于SVN,其实和GIT一样,SVN也是版本控制系统,它用于追踪代码的历史修改记录,只不过GIT是分布式版本控制系统,而SVN和CSV这种是集中式版本控制系统。同时,SVN(subversion)是程序员常用的源代码版本管理软件。在使用 SVN 管理本地代码过程中,使用 svn checkout 功能来更新代码时,项目目录下会自动生成隐藏的.svn文件夹(Linux上用 ls 命令看不到,要用 ls -al 命令),其中包含重要的源代码信息。

关于分布式和集中式的区别:

他们的区别在于集中式的版本控制系统每次在写代码时都需要从服务器中拉取一份下来,并且如果服务器丢失了,那么所有的就都丢失了,你本机客户端仅保存当前的版本信息,换句话说,集中式就是把代码放在一个服务器上集中管理,你的所有回滚等操作都需要服务器的支持。

而分布式的版本控制系统,每个人的电脑都是服务器,当你从主仓库拉取一份代码下来后,你的电脑就是服务器,无需担心主仓库被删或者找不到的情况,你可以自由在本地回滚,提交,当你想把自己的代码提交到主仓库时,只需要合并推送到主仓库就可以了,同时你可以把自己的代码新建一份仓库分享给其它人。

像集中式它们都有一个主版本号,所有的版本迭代都以这个版本号为主,而分布式因为每个客户端都是服务器,git没有固定的版本号,但是有一个由哈希算法算出的id,用来回滚用的,同时也有一个master仓库,这个仓库是一切分支仓库的主仓库,我们可以推送提交到master并合并到主仓库上,主仓库的版本号会迭代一次,我们客户端上的git版本号无论迭代多少次,都跟master无关,只有合并时,master才会迭代一次。

SVN泄露

造成SVN泄露的原因:

造成SVN源代码漏洞的主要原因是管理员操作不规范,一些网站管理员在发布代码时,不愿意使用“导出”功能,而是直接复制代码文件夹到WEB服务器上,这就使得.svn隐藏文件夹被暴露于外网环境,黑客对此可进一步利用:

例如:

1、可以利用其中包含的用于版本信息追踪的 entries 文件(.svn/entries 文件),获取到服务器源  码、svn服务器账号密码等信息;
2、可以利用 wc.db 数据库文件(.svn/wc.db 文件),获取到一些数据库信息;
3、更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),如果服务器没有对此类后缀做解析,则可以直接获得文件源代码。

判断SVN泄露:

通常判断SVN是否泄露,就是检查SVN仓库的URL是否被公开或者是否有未授权的访问。

这是检查SVN仓库是否可以公开访问的python脚本:

# 导入 requests 库
import requests

# 定义检查 SVN 泄露的函数
def check_svn_leak(svn_url):
    """
    检查给定的 SVN 存储库是否可访问。

    参数:
        svn_url: SVN 存储库的 URL

    返回:
        如果存储库可访问,则返回 True,否则返回 False。
    """

    try:
        # 向 SVN URL 发送 HTTP GET 请求,超时时间为 5 秒
        response = requests.get(svn_url, timeout=5)

        # 如果响应状态代码为 200,则存储库可访问
        if response.status_code == 200:
            print(f"SVN 存储库位于 {svn_url} 可访问。")
            return True
        # 否则,存储库不可访问
        else:
            print(f"SVN 存储库位于 {svn_url} 不可访问。状态代码:{response.status_code}")
            return False

    # 如果请求期间发生错误,则打印错误消息并返回 False
    except requests.exceptions.RequestException as e:
        print(f"检查 SVN 存储库时发生错误:{e}")
        return False

# 示例用法
svn_url = "http://your-svn-repository-url"
check_svn_leak(svn_url)

dvcs-ripper下载:

dvcs-ripper是一款perl的版本控制软件信息泄露利用工具,支持SVN, GIT, Mercurial/hg, bzr…

当然GIT最好用的还是githack

在kali 里输入:

git clone https://github.com/kost/dvcs-ripper

然后更新配置需要用到的一些库:

sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl

 然后 cd dvcs-ripper  就可以开始使用了

工具使用指令

./rip-svn.pl -u +http://xxxxx/.svn/

 CTFHUB--SVN泄露

当开发人员使用 SVN 进行版本控制,对站点自动部署。如果配置不当,可能会将.svn文件夹直接部署到线上环境。这就引起了 SVN 泄露漏洞。

先打开环境,看到了提示:Flag 在服务端旧版本的源代码中

 使用dirsearch扫描一下,发现了SVN泄露(虽然这一题提示了我们是SVN泄露,但如果他没有给你提示,不管做什么题,都要用dirsearch扫一下)

使用工具dvcs-ripper

./rip-svn.pl -u http://challenge-cc27531d7eaad8f3.sandbox.ctfhub.com:10800/.svn/

 然后我们ls 查看文件,没有看到什么有用的文件

继续ls -al (查看隐藏文件)

发现了.svn隐藏文件然后cd .svn访问它,继续查看.svn下的文件

 我们看到了pristime文件(一般是存放旧服务器源代码的文件),继续访问并查看他的文件,然后看到了5f和bf两个文件,分别访问一下,最后在5f里得到了我们的flag

因为对命令的不熟悉以及对SVN泄露的不熟悉,输错了好多命令,哈哈哈

完整命令如下:

./rip-svn.pl -u http://challenge-cc27531d7eaad8f3.sandbox.ctfhub.com:10800/.svn/
ls
ls -al
cd .svn
ls
cd pristime
ls
cd 5f
cat xxxx-base

HG泄露

Mercurial(hg)是一种分布式版本控制系统,它与Git类似也可以用于管理代码的版本控制,如果Mercurial服务器的安全措施不当或用户不小心,可能会导致Mercurial源码的信息泄露的问题,而Mercurial源码信息泄露的原理是因为Mercurial服务器上的源代码未被正确保护,导致未经授权的用户可以轻易地访问和下载代码,这可能会导致以下问题:

    1、暴露源代码:未经授权的用户可以轻易地访问和下载源代码,包括敏感信息,例如密码、API密钥和凭据等

    2、增加恶意攻击的风险:未经授权的用户可以轻易地访问和下载源代码,黑客可以使用这些代码来发起攻击,例如通过发现代码漏洞来入侵服务器或者应用程序

解题:

当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞。

打开环境,提示Flag 在服务端旧版本的源代码中, 不太好使的情况下, 试着手工解决。

还是使用dirsearch扫描一下

发现了HG泄露,这一题还是使用dvcs-ripper解题

./rip-hg.pl -u http://challenge-60e941ff641779e3.sandbox.ctfhub.com:10800/.hg

可能是在下载使用工具的过程中出现了一些错误,导致文件源代码并没有下载完整

 环境里也提示了:不太好使的情况下, 试着手工解决。告诉我们不要太过于依赖对工具的使用

将下载下来的文件查看

ls -al

 发现.hg可以文件,继续访问,看到了一个txt文件,读取看一看,看到了add flag,再访问一下dirstate文件,看到了一堆乱码结合的东西,但是看着大概意思应该就是在网页里访问这个txt文件吧(猜的),那就在网页里访问一下

 得到flag

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值