日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git信息泄露漏洞

發(fā)布時間:2023/12/2 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git信息泄露漏洞 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

git信息泄露漏洞

當(dāng)前大量開發(fā)人員使用git進(jìn)行版本控制,對站點(diǎn)自動部署。如果配置不當(dāng),可能會將.git文件夾直接部署到線上環(huán)境。這就引起了git泄露漏洞。

危害

攻擊者可以利用該漏洞下載git文件夾里的所有內(nèi)容。如果文件夾內(nèi)有敏感信息比如站點(diǎn)源碼、數(shù)據(jù)庫賬戶密碼等,攻擊者可能直接控制服務(wù)器。

Git介紹

Git作為大家熟悉的,深受歡迎的版本控制工具,和其他同類工具有很多不同之處:

  • Git始終保存快照而不是文件差異。
  • 任何數(shù)據(jù)存儲前始終使用SHA-1計算校驗和,保證內(nèi)容完整性。
  • 使用分布式倉庫設(shè)計,讓大多數(shù)操作都在本地進(jìn)行,保證了使用效率。幾乎所有操作都是向數(shù)據(jù)庫增加數(shù)據(jù),提交之后就很難丟失數(shù)據(jù)。它的本質(zhì)更像一個內(nèi)容尋址(content-addressable)文件系統(tǒng),并在此之上提供了一個版本控制系統(tǒng)的用戶界面。

Git 有三種狀態(tài),你的文件可能處于其中之一:已修改(modified)、已暫存(staged)、已提交(committed)。由此引出三個邏輯區(qū)域,他們和文件狀態(tài)以及部分對應(yīng)操作的關(guān)系如下圖。

Git對象
在Git系統(tǒng)中有四中類型的對象,所有的Git操作都是基于這四種類型的對象。

  • “blob”,這種對象用來保存文件的內(nèi)容。
  • “tree”,可以理解成一個對象關(guān)系樹,它管理一些"tree"和“blob”對象。
  • “commit”,指向一個"tree",它用來標(biāo)記項目某一個特定時間點(diǎn)的狀態(tài)。它包括以下關(guān)于時間點(diǎn)的元數(shù)據(jù),如時間戳、最近一次提交的作者、指向上次提交、
  • “tag”,給某個提交增添一個標(biāo)記。
    git對象之間的個關(guān)系如下圖

SHA1哈希值
在Git系統(tǒng)中,每個Git對象都通過哈希值來代表這個對象。哈希值是通過SHA1算法計算出來的,長度為40個字符(40-digit)。

.git目錄

  • config - 包含一些配置選項
  • description - 倉庫的描述信息,主要給gitweb等git托管系統(tǒng)使用
  • HEAD - 指定當(dāng)前分支,映射到ref引用,能夠找到下一次commit的前一次哈希值
  • hooks - 存放可在某些指令前后觸發(fā)運(yùn)行的鉤子腳本(hook scripts),默認(rèn)包含一些腳本樣例
  • index - 這個文件就是我們前面提到的暫存區(qū)(stage),是一個二進(jìn)制文件
  • info - 存放倉庫的信息
  • objects - 存儲所有Git的數(shù)據(jù)對象,對象的SHA1哈希值的前兩位是文件夾名稱,后38位作為對象文件名
  • refs - 存儲各個分支指向的目標(biāo)提交
  • branches - 還沒發(fā)現(xiàn)有什么用處

Git基本操作

對照這張圖來理解兩段提交,工作區(qū)(working tree),暫存區(qū)(stage/index)和 branch之間的關(guān)系

常用命令:

git ls-files -u顯示沖突的文件,-s是顯示標(biāo)記為沖突已解決的文件
git diff 對比工作區(qū)和stage文件的差異
git diff --cached 對比stage和branch之間的差異
git ls-files --stage 檢查保存在stage的文件
git log 顯示到HEAD所指向的commit為止的所有commit記錄 。
git reset HEAD <file>
git reset --hard HEAD放棄工作區(qū)和index的改動,HEAD指針仍然指向當(dāng)前的commit.

實(shí)際操作流程

git init
此命令初始化一個新本地倉庫,它在工作目錄下數(shù)據(jù)目錄生成一個名為.git的隱藏文件夾。git會將所有的文件,目錄,提交等轉(zhuǎn)化為git對象,壓縮存儲在這個文件夾當(dāng)中。
git init 命令后面不加參數(shù)表示把當(dāng)前目錄變?yōu)閭}庫,如下表示在當(dāng)前目錄下創(chuàng)建test倉庫

git add
創(chuàng)建一個test1.txt文件,git status查看當(dāng)前狀態(tài),此時test.txt文件位于工作目錄

通過
git add
跟蹤這個文件,把test.txt文件放到暫存區(qū).(可以使用git rm --cached命令來取消暫存)

git commit
在暫存區(qū)的文件使用git commit提交到版本庫(數(shù)據(jù)目錄)中
-m參數(shù)表示提交的注釋,如果不使用-m參數(shù)那么會跳出頁面提示主動輸入注釋

修改test.txt文件

修改后,通過查看git status可以看到文件狀態(tài)被改變了。根據(jù)提示知道文件已被修改,但是未提交修改到版本庫中。

git diff,對比工作區(qū)和暫存區(qū)文件的差異,查看文件被修改的地方

確認(rèn)修改無誤后提交到版本庫的方法和提交初始文件一樣,需要先提交到暫存區(qū),然后提交到版本庫.

再修改一次文件

提交

git log 查看下歷史記錄,HEAD我的理解就是指針,指到最后提交的版本

git reset --hard,回退版本
回退到上一個版本,gei reset --hard HEAD^

厲害了,可以看到HEAD指針也指到了第一次修改的版本,第二次修改的版本看不到了
但是我要是因為操作失誤怎么追回地二次修改的版本呢,可以使用git reset --hard 版本號追回
git reflog獲取版本號,得到第二次修改版本號為5edcc89

get reset --hard 5edcc89恢復(fù)

我后面測試使用comit后面一串很長的字符,這里理解為對象sha1字符串吧.也可以回退到那個版本

可以把工作區(qū)修改的文件git add提交到暫存區(qū),也可以使用git checkout — test1.txt 把工作區(qū)的修改撤銷,這樣,文件就會回退到上一次提交時的狀態(tài)。

Git信息泄露原理

  • 通過泄露的.git文件夾下的文件,還原重建工程源代碼
  • 解析.git/index文件,找到工程中所有的(文件名,文件sha1)
  • 去.git/objects文件夾下下載對應(yīng)的文件
  • zlib解壓文件,按原始的目錄結(jié)構(gòu)寫入源代碼
    (危害:滲透測試人員、攻擊者,可以進(jìn)一步代碼審計,挖掘:文件上傳,sql注入等安全漏洞)

GitHack工具使用

GitHack會按照上面的原理自動恢復(fù)

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

總結(jié)

以上是生活随笔為你收集整理的git信息泄露漏洞的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。