
前言:在一道ctf題的驅動下,我進行了對git和.git文件致源文件泄露的學習。
一、任務

一道ctf題目。
二、確定題目考的點
谷歌關鍵詞:版本管理工具 github ctf
由得到的結果猜測,可能考的點是.git文件導致源文件泄露。
三、對git的粗略學習
其實經常會用到git,例如在用hexo+github pages搭建博客的時候就用到了git,又如在linux下載一些工具的時候,用到的git clone。
git:分布式版本控制系統。
首先,何為版本控制系統?以git的誕生故事來解釋,linus在開發linux的時候,有世界廣大熱心的志願者的幫助,最開始都是志願者把源碼down下來改了后在發給linus,linus再手工合成。當然linux源碼大了后自然很不方便,又由於CVS、SVN(集中式版本控制系統)慢且需聯網,又經歷了一些事件后,linus用C語言開發了git,此后,源碼的每次改動都會有記錄,即每個版本都有記錄。其實可以類比gitbub的功能。
何為分布式?分布式即與集中式對立,集中式是有一個中央服務器來存儲源碼,用戶每次修改源碼都需要從中央服務器把源碼down下來,修改后再提交到中央服務器。而分布式則是每個人電腦里都有完整的版本庫。
對理解git工作原理的重要知識點:工作區和暫存區
工作區就是電腦里看到的目錄。

暫存區在版本庫里,版本庫就是隱藏目錄.git。一張圖明了。stage是暫存區,master是分支,我覺得就是所有文件存儲的地方。

我們把文件往git版本庫添加的時候,分兩步:
1、git add :文件添加到暫存區
2、git commit :暫存區的所有文件添加到master
關於git的學習推薦廖雪峰老師的教程:https://www.liaoxuefeng.com/wiki/896043488029600 我的上面的內容基本都是從他的教程里提煉出來的。
四、學習.git 文件導致源碼泄露
開發人員在開發時,常常會先把源碼提交到遠程托管網站(如github),最后再從遠程托管網站把源碼pull到服務器的web目錄下,如果忘記把.git文件刪除,就造成此漏洞。利用.git文件恢復處網站的源碼,而源碼里可能會有數據庫的信息。
利用工具有挺多的:githack githacker git_extract
想了想,其實自己的博客就有.git文件。

本來想用githacker 掃一下,沒東西出來,嗯。。哦,上傳到github的時候.git文件沒有上傳上去,我的github博客項目里確實沒有.git。自然也就不會掃到.git。想想也是,哪這么容易呢。
關於.git文件導致源碼泄露更多:https://www.jianshu.com/p/edae09535ea3
五、CTF題解法
在用了網上的解法,恢復了網站的源文件,發現flag文件不在。
沒想到flag文件其實是在github倉庫的歷史commits中。

