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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git信息泄露漏洞

發布時間:2023/12/2 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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,對比工作區和暫存區文件的差異,查看文件被修改的地方

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

再修改一次文件

提交

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。