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

2024-04-27 13:52

本文主要是介绍Git泄露和hg泄露原理理解和题目实操,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这篇关于Git泄露和hg泄露原理理解和题目实操的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940682

相关文章

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意