Git泄露和hg泄露原理理解和题目实操

server/2024/11/15 8:31:20/

一.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


http://www.ppmy.cn/server/25522.html

相关文章

H3C无线AP管理命令

先上链接 01-AP管理命令-新华三集团-H3C display wlan ap all

SpringCloud Hystrix 实战

一、配置 1.引入jar包 单独使用hystrix &#xff0c;不配合openFegin使用的话&#xff0c;单独使用hystrix,需要引入spring-cloud-starter-netflix-hystrix包。要使用的hystrix-dashboard 界面的话需要引入spring-boot-starter-actuator 包和spring-cloud-starter-netflix-hy…

[电脑软件] 实时打字翻译工具【跨境电商必备软件】

简介 可以边打字边翻译&#xff0c;支持翻译结果直接输出到文本&#xff0c;使用英文输出的朋友会有很大帮助。 目前支持搜狗翻译、百度翻译和有道翻译&#xff0c;支持Windows平台。感兴趣的朋友安装使用~ 目前有2个版本&#xff0c;网页调用版本【推荐】和API版本&#xf…

一篇文章教你使用Docker本地化部署Chatgpt(非api,速度非常快!!!)及裸连GPT的方式(告别镜像GPT)

本地搭建ChatGPT&#xff08;非api调用&#xff09; 第一种方法&#xff1a;使用Docker本地化部署第一步&#xff0c;下载安装Docker登录GPT 第二种方法&#xff1a;不部署项目&#xff0c;直接连接 第一种方法&#xff1a;使用Docker本地化部署 这种方法的好处就是没有登录限…

【blender几何节点】制作几何节点生成树

实际上&#xff0c;用pcg功能的工具去搭单个可控制性较强的pcg案例&#xff08;如单个生成树&#xff09;而言&#xff0c;确实难度不大。但是要实现诸如speedtree这样通用性比较强的应用or插件&#xff08;精心设计的诸多可调节参数多带来的强通用性&#xff0c;使其能够适应不…

【skynet】 网络编程之回显服务器

写在前面 skynet 提供了一套 tcp 的 API &#xff0c;本文将给出简单的回显服务器实现&#xff0c;以及讲解。 文章目录 写在前面编译 skynet服务框架agent_mgragent 注意事项源代码agent_mgr 服务agent 服务配置文件 编译 skynet 拉取 skynet 工程 git clone https://githu…

ElasticSearch笔记一

随着这个业务的发展&#xff0c;我们的数据量越来越庞大。那么传统的这种mysql的数据库就渐渐的难以满足我们复杂的业务需求了。 所以在微服务架构下一般都会用到一种分布式搜索的技术。那么今天呢我们就会带着大家去学习分布搜索当中最流行的一种ElasticSearch&#xff0c;Ela…

【Vue】如何使用Webpack实现打包操作

一、Webpack介绍 Webpack最主要的作用就是打包操作&#xff0c;由两个核心部分构成分别是“出口”与“入口”。wbepack是现在比较热门的打包工具了&#xff0c;它可以将许多松散耦合的模块按照依赖和规则打包成符合生产环境部署的前端资源。说的直白一点&#xff0c;通过webpac…