文章目錄
- 前言
- 一、常見的源碼泄露漏洞
- git源碼泄露
- SVN源碼泄露
- DS_Store文件泄漏
- 網站備份壓縮文件泄露
- WEB-INF/web.xml泄露
- CVS泄露
- .hg源碼泄露
- Bazaar/bzr泄露
- .swp文件泄露
前言
在Web應用方面對于安全來說,可能大家對SQL注入、XSS跨站腳本攻擊、文件上傳等一些漏洞已經耳熟于心了,這些漏洞可以對系統造成嚴重的安全風險,今天的所講述的漏洞不亞于我們所提及到的 Owasp top 10,那就是系統源碼泄露,而且Web源碼泄露在實際項目中并不少見,一些大的廠商有可能也存在這類安全問題。
一、常見的源碼泄露漏洞
下圖中把常見的源碼泄露問題進行列舉整理
git源碼泄露
漏洞成因
Git是一個開源的分布式版本控制系統,在執行git init初始化目錄的時候,會在當前目錄下自動創建一個 .git
目錄,用來記錄代碼的變更記錄等。發布代碼的時候,如果沒有把 .git
這個目錄刪除,就直接發布到了服務器上,攻擊者就可以通過它來恢復源代碼。
- HEAD 這個git項目當前處在哪個分支里
- config 文件包含項目特有的配置選項,git config 命令會改動它
- description 項目的描述信息
- hooks/ 系統默認鉤子腳本目錄
- info/ 目錄包含一個全局性排除(global exclude)文件,用以放置不希望被記錄在
.gitignore
文件中的忽略模式(ignored patterns) - objects/ 目錄存儲所有數據內容(commits,trees,blobs,tags)
- refs/ 標識你項目里的每個分支指向了哪個提交(commit)
- index 文件保存暫存區信息
漏洞利用
利用工具 Githack
下載地址:https://github.com/lijiejie/GitHack
使用方式 python GitHack.py http://www.example.com/.git/
修復建議
刪除 .git
目錄或者修改中間件配置進行對 .git
隱藏文件夾的訪問。
SVN源碼泄露
漏洞成因
SVN是源代碼本地管理軟件。使用SVN管理本地代碼過程中,會生成一個名為 .svn
的隱藏文件夾,其中包含重要的源碼信息,而造成 .svn
文件泄露的主要原因還是網站管理員在發布代碼時,沒有使用導出功能,而直接進行復制粘貼。這就使 .svn
隱藏文件夾被暴露于外網環境,可以利用 .svn/entries
文件,獲取到服務器源碼。
漏洞利用
利用工具 svnExploit
下載地址:https://github.com/admintony/svnExploit
使用方式
安裝依賴庫
sudo pip install -r requirements.txt
查看幫助
python SvnExploit.py -h
檢測SVN源代碼泄露
python SvnExploit.py -u http://192.168.27.128/.svn
下載源代碼
python SvnExploit.py -u http://192.168.27.128/.svn --dump
修復建議
1、不要使用 svn checkout
和 svn up
更新服務器上的代碼,使用svn export
(導出)功能代替。
2、服務器軟件(Nginx
、Apache
、Tomcat
、IIS
等)設置目錄權限,禁止訪問 .svn
、.git
目錄
DS_Store文件泄漏
漏洞成因
.DS_Store
是Mac OS保存文件夾的自定義屬性的隱藏文件,如文件的圖標位置或背景色,相當于Windows 的 desktop.ini
。由于開發人員發布代碼時未刪除文件夾中隱藏的 .DS_Store,可能造成文件目錄結構泄漏,源代碼文件等敏感信息的泄露。
漏洞利用
利用工具:ds_store_exp
下載地址:https://github.com/lijiejie/ds_store_exp
使用方式
python3 ds_store_exp.py http://27.0.0.1/.DS_Store
修復建議
不影響應用運行的情況下刪除 .DS_Store
文件
網站備份壓縮文件泄露
漏洞成因
在網站正常使用中,往往需要經過修改和升級,這時就需要對網站或對某處數據進行備份。而備份文件會因為各種原因保存在網站Web目錄下,而當對此目錄沒有訪問權限限制時,就很可能會導致備份或緩存文件被下載下來。
該漏洞往往會導致服務器整站源代碼或者部分頁面的源代碼被下載,利用。源代碼中所包含的各類敏感信息,如服務器數據庫連接信息,服務器配置信息等會因此而泄露,造成巨大損失。
常見備份文件后綴名
- .rar
- .zip
- .7z
- .tar
- .gz
- .bak
- .swp
- .txt
- .html
常見的網站源碼備份文件名
- web
- website
- backup
- back
- www
- wwwroot
- temp
漏洞利用
像備份壓縮文件泄露,可以直接用專門的目錄掃描工具進行敏感文件掃描
利用工具:御劍、dirseach.py、gobuster 等
修復建議
1、做好目錄訪問限制
2、在不影響運行的情況下,及時刪除備份文件
WEB-INF/web.xml泄露
漏洞成因
WEB-INF是Java的WEB應用的安全目錄,該目錄原則上來說是客戶端無法訪問,只有服務端才可以訪問。如果想在頁面中直接訪問其中的文件,必須通過 web.xml
文件對要訪問的文件進行相應映射才能訪問。
WEB-INF主要包含以下文件或目錄:
? /WEB-INF/web.xml
:Web應用程序配置文件,描述了 servlet 和其他的應用組件配置及命名規則
? /WEB-INF/classes/
:含了站點所有用的 class 文件,包括 servlet class 和非servlet class,他們不能包含在 .jar文件中
? /WEB-INF/lib/
:存放web應用需要的各種JAR文件,放置僅在這個應用中要求使用的jar文件,如數據庫驅動jar文件
? /WEB-INF/src/
:源碼目錄,按照包名結構放置各個java文件。
? /WEB-INF/database.properties
:數據庫配置文件
WEB-INF/web.xml泄露的起因就是我們在使用網絡架構的時候,對靜態資源的目錄或文件的映射配置不當,可能會引發一些的安全問題,導致web.xml等文件能夠被讀取。
漏洞利用
掃描后臺有沒有WEB-INF/web.xml,然后直接訪問 通過找到web.xml文件,分析可用敏感信息,推斷class文件的路徑,直接class文件,最后再通過反編譯class文件,得到網站源碼。
修復建議
合理配置,控制目錄訪問權限
CVS泄露
漏洞成因
cvs項目在初始化(cvs checkout project)的時候,會在project目錄下創建一個名為CVS的目錄,其中保存了各個文件的修改和commit記錄,通過此目錄可以獲取代碼的歷史版本,其中兩個關鍵文件為:CVS/Root和CVS/Entries,分別記錄了項目的根信息和所有文件的結構
漏洞利用
主要是針對CVS/Root以及CVS/Entries目錄,直接就可以看到泄露的信息。
利用工具:dvcs-ripper
下載地址:https://github.com/kost/dvcs-ripper
使用方式
rip-cvs.pl -v -u http://www.example.com/CVS/
修復方式
刪除CVS的CVS目錄
.hg源碼泄露
漏洞成因
Mercurial是一種輕量級分布式版本控制系統,使用 hg init 新建倉庫的時候,會生成一個備份文件 .hg
利用方式
利用工具:dvcs-rippergithub
下載地址:https://github.com/kost/dvcs-ripper
Example run (for hg):
rip-hg.pl -v -u http://www.example.com/.hg/
It will automatically do hg revert
or if you would like to ignore SSL certification verification (with -s):
rip-hg.pl -s -v -u http://www.example.com/.hg/
修復建議
刪除Web目錄中所有 .hg
隱藏文件夾
Bazaar/bzr泄露
漏洞成因
bzr也是個版本控制工具, 雖然不是很熱門, 但它也是多平臺支持, 并且有不錯的圖形界面。
利用方式
利用工具:dvcs-rippergithub
下載地址:https://github.com/kost/dvcs-ripper
Example run (for bzr):
rip-bzr.pl -v -u http://www.example.com/.bzr/
It will automatically do bzr revertor if you would like to ignore SSL certification verification (with -s):
rip-bzr.pl -s -v -u http://www.example.com/.bzr/
修復建議
刪除web目錄中所有.bzr
隱藏文件夾
.swp文件泄露
漏洞成因
swp即swap文件,在編輯文件時產生的臨時文件,它是隱藏文件,如果程序正常退出,臨時文件自動刪除,如果意外退出就會保留,文件名為 .filename.swp
漏洞利用
可通過直接訪問.swp
文件,下載回來后刪掉末尾的.swp
,獲得源碼文件。
修復建議
刪除web目錄中所有.swp
隱藏文件夾
防范措施
源碼泄露的危害是巨大的,因此在企業內要根據實際情況選擇恰當的方式去發現以及杜絕此類風險。
1) nginx上配置拒絕對對相應目錄的訪問
2)上線時檢測是否存在相應的目錄,防止帶有.git的目錄上線
3)線上定期巡檢web目錄,檢查是否有相關的目錄