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