Git信息泄露及其漏洞利用
原創(chuàng)Git是由林納斯·托瓦茲(Linus Torvalds)命名的,它來自英國俚語,意思是“混賬”,Git是一個分布式版本控制軟件,最初由林納斯·托瓦茲(Linus Torvalds)創(chuàng)作,于2005年以GPL發(fā)布。最初目的是為更好地管理Linux內核開發(fā)而設計。Git最初只是作為一個可以被其他前端(比如CoGito或StGit)包裝的后端而開發(fā)的,但后來Git內核已經成熟到可以獨立地用作版本控制。很多著名的軟件都使用Git進行版本控制,其中包括Linux內核、X.Org服務器和OLPC內核等項目的開發(fā)流程。Git與常用的版本控制工具CVS, Subversion 等不同,它采用了分布式版本庫的方式,不需要服務器端軟件支持。
Git的官方網站:https://Git-scm.com/,Git代碼托管倉庫Github.com(https://Github.com) 是世界上最大的Git源代碼管理網站。GIT不僅僅是個版本控制系統(tǒng),它也是個內容管理系統(tǒng),工作管理系統(tǒng)等。GIT把內容按元數(shù)據(jù)方式存儲, GIT沒有一個全局的版本號, GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。
在web網站滲透測試評估過程中,發(fā)現(xiàn)越來越多的網站都是用github等來進行托管,由于開發(fā)管理不當,可以通過手工在其url地址加.git/(例如http://antian365.com/.git/)進行測試,一旦可以瀏覽目錄,則可以直接或者通過一些開源工具獲取其代碼等信息。在獲取的代碼中可能包含敏感信息,比如云服務器的key,數(shù)據(jù)庫連接用戶及密碼,郵箱配置等信息,一旦獲取這些信息,將有助于成功滲透目標系統(tǒng)。由于獲取了源代碼,還可以進行源代碼審計,挖掘其代碼中的漏洞。
1.1Git常見命令
git提供了windows和linux版本,其下載地址為:https://git-scm.com/downloads,其最新版本為2.13。 1.git安裝 在當前l(fā)inux系統(tǒng)直接輸入git命令,如果系統(tǒng)無該命令則需要手動安裝: (1)Debian或Ubuntu Linux 安裝sudo apt-get install git /apt-get install git (2)centos系列安裝:yum install git (3)windows安裝直接根據(jù)提示進行即可,git還提供了基于gui
界面的管理工具,感興趣的朋友可以自行去下載(https://git-scm.com/download/gui/windows)
2.git版本
(1)獲取當前git的版本:git –version
kali linux默認的git版本為git version 2.9.3。
3.常用命令
(1)初始化Git倉庫
git init//使用當前目錄
git init newrepo // 使用newrepo作為倉庫的根目錄
(2)添加任務文件
git add filename
(3)提交版本
git commit -m "Adding files"
git commit -a -m "Changed some files"
git commit 命令的-a選項可將所有被修改或者已刪除的且已經被git管理的文檔提交到倉庫中,千萬注意,-a不會造成新文件被提交,只能修改。
(4)發(fā)布版本
我們先從服務器克隆一個庫并上傳。
git clone ssh://www.antian365.com/~/www/project.git
現(xiàn)在我們修改之后可以進行推送到服務器。
git push ssh://www.antian365.com/~/www/project.git
(5)取回更新
git pull //取回默認的更新
git pull http://git.example.com/project.git //取回某個站點的更新
(6)刪除:git rm file
git rm --cached antian365.com.txt 只從stage中刪除,保留物理文件
git rm antian365.com.txt 不但從stage中刪除,同時刪除物理文件
git mv a.txt b.txt 把a.txt改名為b.txt 1.2Git信息泄露
Git泄露漏洞是指開發(fā)人員使用Git進行版本控制,對站點自動部署,由于配置不當,將.Git文件夾直接部署到線上環(huán)境,導致其源代碼等敏感信息泄露。
Git信息泄露的危害很大,滲透測試人員、攻擊者,可直接從源碼獲取敏感配置信息(如:郵箱,數(shù)據(jù)庫連接文件),也可以進一步審計代碼,挖掘文件上傳、SQL注射等安全漏洞。
1.搜索引擎在線搜索git信息泄露漏洞
利用百度等搜索引擎對“index of /.git/”進行搜索,可以獲取存在git信息泄露的站點,例如:
http://jenicarvalho.com.br/.git/
https://new.hotel-portomare.com/.git/
http://www.bearcereju.com.hk/.git/
2.手工測試
在url后輸入“/.git/config”,如果存在且能被訪問,有些config文件會包含git配置信息,使用這些信息可以直接訪問github代碼托管倉庫,可以直接下載源代碼。
1.3Git漏洞利用工具
1、GitHack
下載地址:https://github.com/BugScanTeam/GitHack
(1)安裝githack
下載源代碼包:https://github.com/BugScanTeam/GitHack/archive/master.zip
下載git windows安裝程序:
https://github.com/git-for-windows/git/releases/download/v2.13.0.windows.1/Git-2.13.0-32-bit.exe
設置系統(tǒng)環(huán)境變量:右鍵單擊“我的電腦或者計算機”-“屬性”-“高級系統(tǒng)設置”-“高級”-“系統(tǒng)環(huán)境變量”,在系統(tǒng)變量中找到Path,然后雙擊打開,如圖1所示,增加變量值“C:\Program Files (x86)\Git\bin”,記得在添加前增加“;”符號,設置完成后,打開cmd命令,輸入git,顯示git的命令,則說明git環(huán)境變量設置成功。
圖1 設置git環(huán)境變量
解壓縮GitHack-master.zip到相應的文件夾下,執(zhí)行命令:
githack.py http://global.*******.com/.git/
程序會自動掃描和獲取git泄露文件,如圖2所示。
圖2獲取git泄露文件及其信息
githack默認會在當前文件夾下生成dist目錄,獲取的結果將以網站名字進行命令,該文件夾下會包含所有的git泄露的信息和文件。
2.其它工具
(1)GitMiner
https://Github.com/UnkL4b/GitMiner
https://Github.com/UnkL4b/GitMiner.Git
(2)GitPrey
https://Github.com/repoog/GitPrey
https://Github.com/repoog/GitPrey.Git
(3)weakfilescan
https://Github.com/ring04h/weakfilescan
GitHub敏感信息掃描工具
(4)Gitrob
https://Github.com/michenriksen/Gitrob
(5)GitHack
https://Github.com/lijiejie/GitHack,GitHack可以快速獲取源代碼,但git相關信息不能獲取到本地。
(6)GitHarvester
https://github.com/metac0rtex/GitHarvester
對網上推薦的以上6款軟件進行測試效果都不如GitHack(https://github.com/BugScanTeam/GitHack),BugScanTeam寫的GitHack獲取代碼速度較慢,有時候會報錯,lijiejie的GitHack獲取代碼速度較快。 1.4一個利用實例
1.掃描并獲取git信息泄露漏洞
通過wvs對某目標網站進行漏洞掃描,如圖3所示,wvs顯示Git repository found高危信息。
圖3Git repository found信息泄露漏洞
2.使用githack工具直接利用該漏洞
在kali下執(zhí)行./GitHack.py http://www.*****.cn/.git/,如圖4所示,如果漏洞存在將獲取相關信息。
圖4進行漏洞利用
3.在本地生成源代碼
GitHack.py工具將會在當前目錄下的dist目錄中生成目標網站命名的文件夾,將其復制到Windows下,如圖5所示,可以看到目標網站的相關源代碼。
圖5獲取網站源代碼 1.5安全防范
使用nginx 來讓外網具備訪問文件目錄的能力,所以此權限就在 nginx 層做配置,只需要將不需要被外界訪問的目錄進行排除設置即可。例如,不允許外部訪問 .git 目錄:
server {
location ~ /\.git {
deny all;
}
}
1.6參考文章
https://snyk.io/blog/leaked-credentials-in-packages/
http://www.freebuf.com/sectool/66096.html, GitHack:一個Git泄露利用腳本
https://zh.wikipedia.org/wiki/Git,Git百科
http://www.runoob.com/manual/git-guide/,git -簡明指南