git信息泄露漏洞

git信息泄露漏洞

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

危害

攻击者可以利用该漏洞下载git文件夹里的所有内容。如果文件夹内有敏感信息比如站点源码、数据库账户密码等,攻击者可能直接控制服务器。

Git介绍

Git作为大家熟悉的,深受欢迎的版本控制工具,和其他同类工具有很多不同之处:

  • Git始终保存快照而不是文件差异。
  • 任何数据存储前始终使用SHA-1计算校验和,保证内容完整性。
  • 使用分布式仓库设计,让大多数操作都在本地进行,保证了使用效率。几乎所有操作都是向数据库增加数据,提交之后就很难丢失数据。它的本质更像一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。

Git 有三种状态,你的文件可能处于其中之一:已修改(modified)、已暂存(staged)、已提交(committed)。由此引出三个逻辑区域,他们和文件状态以及部分对应操作的关系如下图。
在这里插入图片描述

Git对象
在Git系统中有四中类型的对象,所有的Git操作都是基于这四种类型的对象。

  • “blob”,这种对象用来保存文件的内容。
  • “tree”,可以理解成一个对象关系树,它管理一些"tree"和“blob”对象。
  • “commit”,指向一个"tree",它用来标记项目某一个特定时间点的状态。它包括以下关于时间点的元数据,如时间戳、最近一次提交的作者、指向上次提交、
  • “tag”,给某个提交增添一个标记。
    git对象之间的个关系如下图

SHA1哈希值
在Git系统中,每个Git对象都通过哈希值来代表这个对象。哈希值是通过SHA1算法计算出来的,长度为40个字符(40-digit)。

.git目录

  • config - 包含一些配置选项
  • description - 仓库的描述信息,主要给gitweb等git托管系统使用
  • HEAD - 指定当前分支,映射到ref引用,能够找到下一次commit的前一次哈希值
  • hooks - 存放可在某些指令前后触发运行的钩子脚本(hook scripts),默认包含一些脚本样例
  • index - 这个文件就是我们前面提到的暂存区(stage),是一个二进制文件
  • info - 存放仓库的信息
  • objects - 存储所有Git的数据对象,对象的SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名
  • refs - 存储各个分支指向的目标提交
  • branches - 还没发现有什么用处

Git基本操作

对照这张图来理解两段提交,工作区(working tree),暂存区(stage/index)和 branch之间的关系
在这里插入图片描述

常用命令:

git ls-files -u显示冲突的文件,-s是显示标记为冲突已解决的文件
git diff 对比工作区和stage文件的差异
git diff --cached 对比stage和branch之间的差异
git ls-files --stage 检查保存在stage的文件
git log 显示到HEAD所指向的commit为止的所有commit记录 。
git reset HEAD <file>
git reset --hard HEAD放弃工作区和index的改动,HEAD指针仍然指向当前的commit.

实际操作流程

git init
此命令初始化一个新本地仓库,它在工作目录下数据目录生成一个名为.git的隐藏文件夹。git会将所有的文件,目录,提交等转化为git对象,压缩存储在这个文件夹当中。
git init 命令后面不加参数表示把当前目录变为仓库,如下表示在当前目录下创建test仓库
在这里插入图片描述
git add
创建一个test1.txt文件,git status查看当前状态,此时test.txt文件位于工作目录
在这里插入图片描述
通过
git add
跟踪这个文件,把test.txt文件放到暂存区.(可以使用git rm --cached命令来取消暂存)
在这里插入图片描述
git commit
在暂存区的文件使用git commit提交到版本库(数据目录)中
-m参数表示提交的注释,如果不使用-m参数那么会跳出页面提示主动输入注释
在这里插入图片描述
修改test.txt文件
在这里插入图片描述

修改后,通过查看git status可以看到文件状态被改变了。根据提示知道文件已被修改,但是未提交修改到版本库中。
在这里插入图片描述

git diff,对比工作区和暂存区文件的差异,查看文件被修改的地方
在这里插入图片描述

确认修改无误后提交到版本库的方法和提交初始文件一样,需要先提交到暂存区,然后提交到版本库.
在这里插入图片描述
再修改一次文件
在这里插入图片描述

提交
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0MtGIDS6-1595853273844)(_v_images/20200727191944395_1255481628.png)]
git log 查看下历史记录,HEAD我的理解就是指针,指到最后提交的版本
在这里插入图片描述
git reset --hard,回退版本
回退到上一个版本,gei reset --hard HEAD^
在这里插入图片描述

厉害了,可以看到HEAD指针也指到了第一次修改的版本,第二次修改的版本看不到了
但是我要是因为操作失误怎么追回地二次修改的版本呢,可以使用git reset --hard 版本号追回
git reflog获取版本号,得到第二次修改版本号为5edcc89
在这里插入图片描述

get reset --hard 5edcc89恢复
在这里插入图片描述

我后面测试使用comit后面一串很长的字符,这里理解为对象sha1字符串吧.也可以回退到那个版本
在这里插入图片描述

可以把工作区修改的文件git add提交到暂存区,也可以使用git checkout — test1.txt 把工作区的修改撤销,这样,文件就会回退到上一次提交时的状态。
在这里插入图片描述

Git信息泄露原理

  • 通过泄露的.git文件夹下的文件,还原重建工程源代码
  • 解析.git/index文件,找到工程中所有的(文件名,文件sha1)
  • .git/objects文件夹下下载对应的文件
  • zlib解压文件,按原始的目录结构写入源代码
    (危害:渗透测试人员、攻击者,可以进一步代码审计,挖掘:文件上传,sql注入等安全漏洞)

GitHack工具使用

GitHack会按照上面的原理自动恢复
在这里插入图片描述

参考:https://www.zhihu.com/tardis/sogou/art/30044692

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358754.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

功能项目拼图将Java 9引入

因此&#xff0c;拼图项目...我们已经对此颇为了解&#xff0c;但尚未看到计划如何兑现其承诺的细节。 这篇文章将精确地做到这一点&#xff0c;并介绍项目的核心概念和功能。 系列 这篇文章是正在进行的有关拼图项目系列的一部分。 按照推荐的顺序&#xff08;不同于发布顺序…

2021Kali -- 木马免杀制作

​知道为什么梦里的人都看不清脸么&#xff1f;因为怕你当真。。。 ---- 网易云热评 一、通过MSF生成shellcode 1、启动MSF&#xff0c;演示版本是6.0.36 2、通过msfvenom生成相关代码 msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 12 -b \x00 l…

OpenCV与YOLO学习与研究指南

引言 OpenCV是一个开源的计算机视觉和机器学习软件库&#xff0c;而YOLO&#xff08;You Only Look Once&#xff09;是一个流行的实时对象检测系统。对于大学生和初学者而言&#xff0c;掌握这两项技术将大大提升他们在图像处理和机器视觉领域的能力。 基础知识储备 在深入…

目录爆破工具 -- dirsearch

我记得&#xff0c;以前总会和你聊的很晚很晚&#xff0c;现在我们不再说话了&#xff0c;我还是会熬夜&#xff0c;但我想&#xff0c;不如从今天开始早点睡吧。。。 一、环境&#xff1a;Kali2020.01、Python3.0 二、安装过程&#xff1a; 1、复制dirsearch到本地安装包 gi…

java coin介绍_代码示例中的Java 7:Project Coin

java coin介绍该博客通过代码示例介绍了一些新的Java 7功能&#xff0c;这些项目在Project Coin一词下进行了概述。 Project Coin的目标是向JDK 7添加一组小的语言更改。这些更改确实简化了Java语言语法。 更少的打字&#xff0c;更简洁的代码&#xff0c;愉悦的开发人员&#…

在Java中实现过滤器和面包店锁

为了了解锁的工作方式&#xff0c;实现自定义锁是一个好方法。 这篇文章将展示如何在Java上实现Filter和Bakery锁&#xff08;自旋锁&#xff09;&#xff0c;并将它们的性能与Java的ReentrantLock进行比较。 过滤器锁和面包房锁满足互斥并且也是无饥饿算法&#xff0c;面包房锁…

Burpsuite工具的证书安装

Burpsuite工具的证书安装 Bursuite作为一款可以用来挖掘各种各样的WEB安全漏洞工具&#xff0c;在web安全渗透方面经常会使用到&#xff0c;可以用Bursuite进行对数据的抓包&#xff0c;其不安装证书时只能抓取http的包&#xff0c;安装证书就可以抓取https包&#xff0c;并分析…

物资申请php,php学生捐赠物品管理系统

捐赠物品管理系统采用php编程语言开发,mysql作为后台数据库支持,运行在wamp,appserv等集成环境上.为了方便学生捐赠物品&#xff0c;让更多的贫困人民得到更多的帮助&#xff0c;开发一套校园物品捐赠系统是十分必要的。而且可以培养学生的社会责任感&#xff0c;让他们更加富有…

哥斯拉Webshell

一&#xff0e;启动 命令&#xff1a;java -jar Godzilla-V2.96.jar 启动时同目录会生成data.db数据库存放数据 启动成功界面如下 二&#xff0e;使用&#xff08;在本机实测&#xff09; 这里演示jsp文件进行连接&#xff08;需要提前配置好jsp环境&#xff09; 1.点击管…

一次线上ctf的网络协议分析

拿到的是两个东西 我们先看secret.log 很多乱码但是有一串16进制数 把这段复制下来&#xff0c;我们放到HxD看 点击新建&#xff0c;直接粘贴 发现不对&#xff0c;观察头部&#xff0c;发现少了一个数&#xff08;5&#xff09; 因为加上5就是一个rar头部 即 导出来&…

Hibernate Collection Cache如何工作

介绍 之前&#xff0c;我描述了Hibernate用于存储实体的二级缓存条目结构。 除了实体&#xff0c;Hibernate还可以存储实体关联&#xff0c;本文将阐明集合缓存的内部工作原理。 领域模型 对于即将进行的测试&#xff0c;我们将使用以下实体模型&#xff1a; 存储库具有一组C…

模拟服务器和客户端交互的python脚本

脚本&#xff1a; 模拟服务器和客户端交互&#xff1a; import argparse, socket from datetime import datetimeIP "127.0.0.1" CODING "utf8" MAX_BYTES 65535 # UDP最大长度def server(port): # port&#xff1a;端口号sock socket.socket(socke…

动态规划 dynamic programming

动态规划dynamic programming June,7, 2015 作者&#xff1a;swanGooseMan 出处&#xff1a;http://www.cnblogs.com/swanGooseMan/p/4556588.html 声明&#xff1a;本文采用以下协议进行授权&#xff1a; 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 &…

利用Vulnhub复现漏洞 - JBoss JMXInvokerServlet 反序列化漏洞

JBoss JMXInvokerServlet 反序列化漏洞 Vulnhub官方复现教程漏洞原理 复现过程启动环境端口设置浏览器设置BurpSuit设置 复现漏洞序列化数据生成发送POCEXP Vulnhub官方复现教程 https://vulhub.org/#/environments/jboss/JMXInvokerServlet-deserialization/ 漏洞原理 这…

linux mysql 安装启动失败,Linux服务器一键安装包的mysql启动失败

Linux服务器上用一键安装包配置的环境&#xff0c;启动mysql失败&#xff0c;提示如下错误信息&#xff1a;排查方法&#xff1a;1、查看服务器的磁盘空间是否正常&#xff0c;登录服务器执行命令df -h查看磁盘空间&#xff0c;如果服务器的系统盘或者数据盘空间满了&#xff0…

Ubuntu 安装mysql和简单操作

ubuntu上安装mysql非常简单只需要几条命令就可以完成。 1. sudo apt-get install mysql-server2. apt-get isntall mysql-client3. sudo apt-get install libmysqlclient-dev安装过程中会提示设置密码什么的&#xff0c;注意设置了不要忘了&#xff0c;安装完成之后可以使用如…

在BurpSuite中安装Jython环境

在BurpSuite中安装Jython环境 下载模块 下载地址 https://www.jython.org/download.html 下载 Jython Standalone版本的 打开burp 第一个框子是刚刚下载jar包 第二个时候python的模块文件地址 要到 lib\site-packages里面 成功 转载于&#xff1a;https://blog.csdn.net/w…

matlab dtft的函数,DTFT的Matlab矩阵计算的理解

其实是早应该想到的&#xff0c;今天写程序的时候想到了。然后&#xff0c;跟同学说起来&#xff0c;说&#xff0c;原来国外的教材很多都是矩阵的形式来表示离散傅里叶变换的。但是国内的教材没有这么表达。一个是&#xff0c;自己看的东西还是少了&#xff0c;一个是&#xf…

xss测试工具(xsstrike基于python)

xsstrike很强 项目地址&#xff1a; https://github.com/s0md3v/XSStrike安装&#xff1a; git clone https://github.com/s0md3v/XSStrike.git使用文档&#xff1a; https://github.com/s0md3v/XSStrike/wiki/Usageusage: xsstrike.py [-h] [-u TARGET] [--data DATA] [-t …

变量和字符串

变量名就像我们现实社会的名字&#xff0c;把一个值赋值给一个名字时&#xff0c;Ta会存储在内存中&#xff0c;称之为变量&#xff08;variable)&#xff0c;在大多数语言中&#xff0c;都把这种动作称为&#xff08;给变量赋值&#xff09;或&#xff08;把值存储在变量中&am…