CTF-web 第九部分 爬蟲協議與原始碼洩露
這裡需要首先說一下,很多CTF題目的初步提示就是在爬蟲協議和原始碼洩露中,雖然這倆都是很小的一部分,但是不容忽視。在題目毫無思路的時候看看,萬一有新發現呢
(1)Robots.txt 爬蟲協議
robots.txt是一個純文字檔案,是爬蟲抓取網站的時候要檢視的第一個檔案,一般位於網站的根目錄下。robots.txt檔案定義了爬蟲在爬取該網站時存在的限制,哪些部分爬蟲可以爬取,哪些不可以爬取(防君子不防小人)
百度robots.txt協議的一部分:https://www.baidu.com/robots.txt 在該檔案中定義了一系列的User-agent 表示針對的爬蟲 Disallow 不如尋爬取的目錄
Allow:/home/news,代表禁止訪問/home/後的一切路徑,但可以訪問/home/news路徑
Disallow則是規定了不可以訪問的目錄,當然我們可以從這裡獲取少量的資訊,有的時候說不定非常有用哦,比如說第二小節要說的git洩露。
除了爬蟲協議,我們還可以訪問網站的日誌目錄,也是一個方法 www.a.com/log/
一大堆的日誌,審計起來多半得丟了半條命,那麼如何關鍵快速的找到我們想要的結果呢?我們可以“Ctrl+f”快速查詢關於200的狀態程式碼
找到我們想要利用的資訊,然後進行一次同樣的請求
2018.7.20 補充
robots.txt是個很簡單的文字檔案,您只要標明“誰不能訪問哪些連結”即可。
在檔案的第一行寫:
User-Agent: Baiduspider
這就告訴了爬蟲下面的描述是針對名叫Baiduspider的爬蟲。您還可以寫:
User-Agent: *
這就意味著向所有的爬蟲開放。需要注意的是一個robots.txt檔案裡只能有一個"User-Agent: *"。
接下來是不希望被訪問的連結字首。例如:
Disallow: /private
這就告訴爬蟲不要抓取以"/private"開頭的所有連結。包括/private.html,/private/some.html,/private/some/haha.html。如果您寫成:
Disallow: /
則表明整個站點都不希望被訪問。您也可以分多行來指定不希望被抓取的連結字首,例如:
Disallow: /tmp
Disallow: /disallow
那麼所有以"/tmp"和"/disallow"開頭的連結都不會被訪問了。
最後形成的robots.txt檔案如下:
User-Agent: Baiduspider
Disallow: /tmp
Disallow: /private
請注意,如果您的robots.txt檔案裡有中文等非英語字元,請確定該檔案是由UTF-8編碼編寫。
(2)原始碼洩露
A . git洩露
當前大量開發人員使用git進行版本控制,對站點自動部署。如果配置不當,可能會將.git資料夾直接部署到線上環境。這就引起了git洩露漏洞。危險的是我們可以通過這些找到以下關鍵的原始碼檔案等,甚至是下載到本地。
GitHack是一個.git洩露利用測試指令碼,通過洩露的檔案,還原重建工程原始碼。
Git資訊洩露的危害很大,滲透測試人員、攻擊者,可直接從原始碼獲取敏感配置資訊(如:郵箱,資料庫),也可以進一步審計程式碼,挖掘檔案上傳、SQL注射等安全漏洞。
工作原理:
1、解析.git/index檔案,找到工程中所有的: ( 檔名,檔案sha1 )
2、去.git/objects/ 資料夾下下載對應的檔案
3、zlib解壓檔案,按原始的目錄結構寫入原始碼
優點:
速度快,預設20個工作執行緒
儘量還原所有的原始碼,缺失的檔案不影響指令碼工作
指令碼不需要執行額外的git命令,all you need is python
指令碼無需瀏覽目錄
可以直接在github上下載到,進入目錄按住shift,右鍵開啟命令列,軟體是一個命令列工具:
使用的方法是:
python .\GitHack.py -u http://www.openssl.org/.git/
# 當電腦裡同時安裝兩個版本的py時,我們需要這樣 記住後面要加上.git
py -2 .\GitHack.py -u http://www.openssl.org/.git/
用的時候大概就是這個效果,會把檔案下載到程式的一個目錄中。
GIT 原始碼洩露 案例
2015 年 5 月,烏雲白帽子 “lijiejie” 提交漏洞 “大眾點評某站點 git 洩漏原始碼”,缺陷編號:wooyun-2015-0117332
在此次案例當中,白帽子發現 URL(http://qq.m.dianping.com/.git/ )可以訪問,於是通過工具 githack 下載裡面的檔案,下面為 githack.py 執行中的截圖:
原始碼被下載下來之後,白帽子開啟其中的一個程式碼檔案可以看到裡面的原始碼:
2018.7.20 補充
B . svn洩露
SVN 是 Subversion 的簡稱,是一個開放原始碼的版本控制系統,相較於 RCS、CVS,它採用了分支管理系統,它的設計目標就是取代 CVS。網際網路上很多版本控制服務已從 CVS 遷移到 Subversion。
在使用SVN管理原生代碼過程中,會自動生成一個名為.svn的隱藏資料夾,其中包含重要的原始碼資訊。但一些網站管理員在釋出程式碼時,不願意使用‘匯出’功能,而是直接複製程式碼資料夾到WEB伺服器上,這就使.svn隱藏資料夾被暴露於外網環境,黑客可以藉助其中包含的用於版本資訊追蹤的‘entries’檔案,逐步摸清站點結構。
攻擊者可以使用工具 dvcs-ripper 下載網站原始碼,
此工具的 Github 地址:https://github.com/kost/dvcs-ripper。
利用命令如下:
rip-svn.pl -v -u http://www.localhost.test/.svn/
SVN 原始碼洩露案例 案例
2015 年 10 月,烏雲白帽子提交漏洞 “我愛我家某處原始碼洩露”。缺陷編號:wooyun-2015-0149331
在我愛我家有一處域名為 data.5i5j.com , 白帽子發現下面的地址可以訪問到:
http://data.5i5j.com/sitemetrics/.svn/entries
白帽子知道使用 svn 版本控制器會在目錄中生成 .svn 資料夾,於是猜測該處存在原始碼洩露問題,於是使用工具 dvcs-ripper 對其進行了一番驗證,驗證證實了最初的猜測,並得出了下面的目錄以及程式碼檔案。
在檔案目錄中,發現一個檔名比較敏感,對其開啟檢視發現裡面包含了資料庫地址,使用者名稱,密碼等資訊。
C . DS_Store 檔案洩漏
.DS_Store 檔案 MAC 系統是用來儲存這個資料夾的顯示屬性的:比如檔案圖示的擺放位置。如果使用者刪除以後的副作用就是這些資訊的失去。
這些檔案本來是給 Finder 使用的,但它們被設想作為一種更通用的有關顯示設定的元資料儲存,諸如圖示位置和檢視設定。 當你需要把程式碼上傳的時候,安全正確的操作應該把 .DS_Store
檔案刪除才正確。
因為裡面包含了一些目錄資訊,如果沒有刪除,攻擊者通過 .DS_Store
可以知道這個目錄裡面所有檔名稱,從而讓攻擊者掌握了更多的資訊。
在釋出程式碼時未刪除資料夾中隱藏的 .DS_store,被發現後,獲取了敏感的檔名等資訊。攻擊者可以利用訪問 URL(http://www.localhost.test/.ds_store )的方式來判斷,是否存在DS_store
洩露,如果存在洩漏,使用工具:dsstoreexp,就可以輕鬆的下載出原始碼。
如下面的命令:
ds_store_exp.py http://www.localhost.test/.DS_Store
DS_Store 洩露 案例
2015 年 9 月,烏雲白帽子 “深度安全實驗室” 提交漏洞 “TCL 某網站 DS_Store 檔案洩露敏感資訊(謹慎使用 Mac 系統)”,缺陷編號:wooyun-2015-091869
在 TCL 視覺化系統事業部網站中,把蘋果的隱藏檔案 DS_Store 也給搬到生產壞境中 , 導致洩露了目錄結構,從而獲取到後臺管理頁面以及資料庫檔案。開啟檔案 http://www.tcl-cctv.com/.DS_Store 可以看到下面的內容。
通過圖中的內容可以看到兩處比較敏感的檔案,tel_manage.php 以及 tcl_cctv.sql。於是白帽子通過此處洩露的資訊,猜測到網站後臺地址為:
http://www.tcl-cctv.com/tcl_manage.php
以及資料庫檔案 URL:
http://www.tcl-cctv.com/tcl_cctv.sql
開啟資料庫檔案對應的 URL,在其中可以找到後臺管理員賬戶和密碼:
使用者名稱:admin 密碼:c5b5ae8bdfccc8beefec ,通過 cmd5.com 解密後,可以得到真實的密碼。
在後臺 URL 中,輸入賬號密碼,可以看見下圖已經登入成功。
D . 網站原始碼壓縮備份洩露
一般網站管理員在日常維護中,總會把網站原始碼給備份一下,防止網站出現問題時,能馬上的恢復使用,不過一般的管理員安全意識不高,在備份的時候,會使用一些常見的壓縮備份名,而且不光使用常見的備份名字,大部分的管理還會把備份好的原始碼直接放在網站根目錄裡,這樣給一些不法之徒,提供了一個很方便的滲透思路,或者有些直接不需要滲透了,因為備份中的資料,就已經滿足那些不法之徒的需求了。
網站原始碼壓縮備份示例:
部分常見的網站原始碼壓縮備份名:
0.rar
web.rar www.rar wwwroot.rar back.rar root.rar
temp.rar
backup.rar bbs.zip website.rar 也可能是別的zip等
常用探測原始碼備份工具:
這個其實不是靠工具的,是靠字典的,工具的話,網上任何能掃目錄的工具,都可以用來探測原始碼備份的,不過常見的還是用的 御劍1.5 ,或者自己寫的一些掃目錄的小指令碼工具。
備份檔案洩露副檔名獲取
備份檔案洩露又分為兩種情況, 一種是運維人員偷懶地直接在網站根目錄用類似tar -czvf bakup.tgz *
的命令將網站進行備份,
這樣整站的原始碼都能直接被使用者打包下載了; 另一種是開發或者運維人員使用的編輯器修改檔案時自動備份了所編輯的網頁內容,
如vim的.swp
, 從而洩露了該網頁的原始碼.
利用方法
對於打包檔案而言, 滲透測試人員可以用{常用檔名}+{常用壓縮包字尾}的方式掃描網站, 說不定會有意外驚喜。對於網頁的臨時備份檔案, 可以掃描對應頁面的.swp或者.bak .swo等字尾, 說不定也能找到有用的資訊.
.index.php.swp | bak| swo .index.php~ 有點沒點都需要試
對於剩下的還有一些其他的洩露方式,也不是很重要的,就將其列在附錄裡,詳見附錄一。
(3)開發者控制檯
在我們瀏覽網頁時,我們可以使用開發者控制檯觀察網頁的原始碼,觀察我們此時所有的請求和響應。
在具體的實驗中,在前端無法發現任何有用的資訊時,我們就可以觀察網頁的原始碼和請求響應等,來發現一些有用的資訊
如果是請求和響應的話 最好還是使用berp suite 因為我們可以編輯和重放
一般可以遇到以下情況
(1)網頁中特殊的隱藏的輸入框 將type="hidden" 變為 type="text"
(2)網頁元素的屬性 要求輸入很大的數 但是輸入框被限制在三個輸入 更改maxlength=9
(3)js程式碼等的限制等 觀察程式碼對輸入等的要求 構造輸入
一般的情況下用的不多了,大多數都是使用的Bp,但是確實有一些部分需要我們使用開發者控制檯
(4)302跳轉
在web基礎中我們已經提及過,302的作用我們也就大概過一下,302重定向又稱之為302代表暫時性轉移(Temporarily Moved ),英文名稱:302 redirect。 也被認為是暫時重定向(temporary redirect),一條對網站瀏覽器的指令來顯示瀏覽器被要求顯示的不同的URL,當一個網頁經歷過短期的URL的變化時使用。一個暫時重定向是一種伺服器端的重定向,能夠被搜尋引擎蜘蛛正確地處理。
我們常見的套路包括第一個例題,跳轉頁面包含資訊,這就需要我們使用Bp抓包等,這是最常見的,我們的要訪問的網址被重定向到別的地方。
附錄1 其他原始碼洩露利用
E. hg/Mercurial
Mercurial的意思是水銀, 所以縮寫成hg(汞), 也是一個版本管理軟體. 用法和git有點類似, 但也保留了svn命令簡明的特點,而且原生地支援Windows/MacOS/Linux三大平臺, 不像git需要MinGW才得以執行, 所以當今也有不少人偏向於用hg做版本控制.
關鍵檔案
與git類似, hg在初始化專案時, 會在專案的根目錄下建立一個名為.hg
的隱藏資料夾,裡面包含了程式碼和分支的修改記錄和開發人員的相關資訊.
洩露內容
- 專案原始碼
- 專案倉庫地址
- (可能)倉庫的使用者名稱
- 其他
利用方法
手動利用, 下載+回滾:
wget -r --no-parent --mirror http://www.example.com/.hg
cd www.example.com && hg revert
也可以用上面提到的dvcs-ripper工具來利用
F. bzr/Bazaar
bzr也是個版本控制工具, 雖然不是很熱門, 但它也是多平臺支援, 並且有不錯的圖形介面,所以也有一些人認為bzr比git要好用,只是對於滲透測試人員來說, 其實都無所謂就是了.
關鍵檔案
bzr在初始化專案時(bzr init/init-repo), 會在專案根目錄產生名為.bzr
的隱藏目錄, 同樣暴露了原始碼和使用者資訊.
洩露內容
- 原始碼
- 倉庫地址
- 開發者的資訊
- ...
利用方法
沒用過bzr工具, 不過查詢文件得知可用bzr revert
命令來進行回滾:
wget -r --no-parent --mirror http://www.example.com/.bzr
cd www.example.com && bzr revert
當然dvcs-ripper工具也是可以的.
G cvs
CVS是一個年代比較久遠的版本控制系統, 通過它可以追蹤原始碼的歷史變化記錄.但是因為功能比較簡單, 而且不支援分支, 所以很早前就被上面提到的svn替代了.
關鍵檔案
cvs專案在初始化(cvs checkout project
)的時候, 會在project
目錄下建立一個名為CVS
的目錄,其中儲存了各個檔案的修改和commit記錄. 通過此目錄可以獲取程式碼的歷史版本. 其中兩個關鍵檔案為:CVS/Root
和CVS/Entries
, 分別記錄了專案的根資訊和所有檔案的結構
洩露內容
因為是純客戶端的工具, 所以只會洩露原始碼
利用方法
下載CVS資料夾然後通過cvs命令獲取原始碼資訊, 不過似乎沒有直接的回滾操作, 需要做點額外的處理.
wget -r --no-parent --mirror http://www.example.com/CVS
cd www.example.com && cvs diff *