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

相关文章

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、