官术网_书友最值得收藏!

1.1 舉足輕重的信息搜集

1.1.1 信息搜集的重要性

古人云“知己知彼,百戰不殆”,在現實世界和比賽中,信息搜集是前期的必備工作,也是重中之重。在CTF線上比賽的Web類題目中,信息搜集涵蓋的面非常廣,有備份文件、目錄信息、Banner信息等,這就需要參賽者有豐富的經驗,或者利用一些腳本來幫助自己發現題目信息、挖掘題目漏洞。本節會盡可能敘述在CTF線上比賽中Web類題目包含的信息搜集,也會推薦一些作者測試無誤的開源工具軟件。

因為信息搜集大部分是工具的使用(git泄露可能涉及git命令的應用),所以本章可能不會有太多的技術細節。同時,因為信息搜集的種類比較多,本章會盡可能地涵蓋,如有不足之處還望理解;最后會通過比賽的實際例子來體現信息搜集的重要性。

1.1.2 信息搜集的分類

前期的題目信息搜集可能對于解決CTF線上比賽的題目有著非常重要的作用,下面將從敏感目錄、敏感備份文件、Banner識別三方面來講述基礎的信息搜集,以及如何在CTF線上比賽中發現解題方向。

1.1.2.1 敏感目錄泄露

通過敏感目錄泄露,我們往往能獲取網站的源代碼和敏感的URL地址,如網站的后臺地址等。

1.git泄露

【漏洞簡介】git是一個主流的分布式版本控制系統,開發人員在開發過程中經常會遺忘.git文件夾,導致攻擊者可以通過.git文件夾中的信息獲取開發人員提交過的所有源碼,進而可能導致服務器被攻擊而淪陷。

(1)常規git泄露

常規git泄露:即沒有任何其他操作,參賽者通過運用現成的工具或自己編寫的腳本即可獲取網站源碼或者flag。這里推薦一個工具:https://github.com/denny0223/scrabble,使用方法也很簡單:

本地自行搭建Web環境,見圖1-1-1。

圖1-1-1

運行該工具,即可獲取源代碼,拿到flag,見圖1-1-2。

圖1-1-2

(2)git回滾

git作為一個版本控制工具,會記錄每次提交(commit)的修改,所以當題目存在git泄露時,flag(敏感)文件可能在修改中被刪除或被覆蓋了,這時我們可以利用git的“git reset”命令來恢復到以前的版本。本地自行搭建Web環境,見圖1-1-3。

圖1-1-3

我們先利用scrabble工具獲取源碼,再通過“git reset--hard HEAD^”命令跳到上一版本(在git中,用HEAD表示當前版本,上一個版本是HEAD^),即可獲取到源碼,見圖1-1-4。

圖1-1-4

除了使用“git reset”,更簡單的方式是通過“git log-stat”命令查看每個commit修改了哪些文件,再用“git diff HEAD commit-id”比較在當前版本與想查看的commit之間的變化。

(3)git分支

在每次提交時,git都會自動把它們串成一條時間線,這條時間線就是一個分支。而git允許使用多個分支,從而讓用戶可以把工作從開發主線上分離出來,以免影響開發主線。如果沒有新建分支,那么只有一條時間線,即只有一個分支,git中默認為master分支。因此,我們要找的flag或敏感文件可能不會藏在當前分支中,這時使用“git log”命令只能找到在當前分支上的修改,并不能看到我們想要的信息,因此需要切換分支來找到想要的文件。

現在大多數現成的git泄露工具都不支持分支,如果需要還原其他分支的代碼,往往需要手工進行文件的提取,這里以功能較強的GitHacker(https://github.com/WangYihang/GitHacker)工具為例。GitHacker的使用十分簡單,只需執行命令“python GitHacker.py http://127.0.0.1:8000/.git/”。運行后,我們會在本地看到生成的文件夾,進入后執行“git log--all”或“git branch-v”命令,只能看到master分支的信息。如果執行“git reflog”命令,就可以看到一些checkout的記錄,見圖1-1-5。

圖1-1-5

可以看到,除了master還有一個secret分支,但自動化工具只還原了master分支的信息,因此需要手動下載secret分支的head信息,保存到.git/refs/heads/secret中(執行命令“wget http://127.0.0.1:8000/.git/refs/heads/secret”)。恢復head信息后,我們可以復用GitHacker的部分代碼,以實現自動恢復分支的效果。在GitHacker的代碼中可以看到,他是先下載object文件,再使用git fsck檢測,并繼續下載缺失的文件。此處可以直接復用檢測缺失文件并恢復的fixmissing函數。我們注釋掉程序最后調用main的部分,修改為如下代碼:

修改后重新執行“python GitHacker.py”命令,運行該腳本,再次進入生成的文件夾,執行“git log--all”或“git branch-v”命令,則secret分支的信息就可以恢復了,從git log中找到對應提交的hash,執行“git diff HEAD b94c”(b94c為hash的前4位)命令,即可得到flag,見圖1-1-6。

圖1-1-6

(4)git泄露的其他利用

除了查看源碼的常見利用方式,泄露的git中也可能有其他有用的信息,如.git/config文件夾中可能含有access_token信息,從而可以訪問這個用戶的其他倉庫。

2.SVN泄露

SVN(subversion)是源代碼版本管理軟件,造成SVN源代碼漏洞的主要原因是管理員操作不規范將SVN隱藏文件夾暴露于外網環境,可以利用.svn/entries或wc.db文件獲取服務器源碼等信息。這里推薦兩個工具:https://github.com/kost/dvcs-ripperSeay-svn(Windows下的源代碼備份漏洞利用工具)。

3.HG泄露

在初始化項目時,HG會在當前文件夾下創建一個.hg隱藏文件夾,其中包含代碼和分支修改記錄等信息。這里推薦工具:https://github.com/kost/dvcs-ripper

4.總結經驗

不論是.git這些隱藏文件,還是實戰中的admin之類的敏感后臺文件夾,其關鍵在于字典的強大,讀者可以在某些工具的基礎上進行二次開發,以滿足自己需要。這里推薦一個開源的目錄掃描工具:https://github.com/maurosoria/dirsearch

CTF線上比賽往往會有重定向一類問題。例如,只要訪問.git,便會返回403,此時試探著訪問.git/config,如果有文件內容返回,就說明存在git泄露,反之,一般不存在。而在SVN泄露中,一般是在entries中爬取源代碼,但有時會出現entries為空的情況,這時注意wc.db文件存在與否,便可通過其中的checksum在pristine文件夾中獲取源代碼。

1.1.2.2 敏感備份文件

通過一些敏感的備份文件,我們往往能獲得某一文件的源碼,亦或網站的整體目錄等。

1.gedit備份文件

在Linux下,用gedit編輯器保存后,當前目錄下會生成一個后綴為“~”的文件,其文件內容就是剛編輯的內容。假設剛才保存的文件名為flag,則該文件名為flag~,見圖1-1-7。通過瀏覽器訪問這個帶有“~”的文件,便可以得到源代碼。

圖1-1-7

2.vim備份文件

vim是目前運用得最多的Linux編輯器,當用戶在編輯文件但意外退出時(如通過SSH連接到服務器時,在用vim編輯文件的過程中可能遇到因為網速不夠導致的命令行卡死而意外退出的情況),會在當前目錄下生成一個備份文件,文件名格式為:

該文件用來備份緩沖區中的內容即退出時的文件內容,見圖1-1-8。

圖1-1-8

針對SWP備份文件,我們可以用“vim-r”命令恢復文件的內容。這里先模擬執行“vim flag”命令,隨后直接關閉客戶端,當前目錄下會生成一個.flag.swp文件。恢復SWP備份文件的辦法是,先在當前目錄下創建一個flag文件,再使用“vim-r flag”命令,即可得到意外退出時編輯的內容,見圖1-1-9。

圖1-1-9

3.常規文件

常規文件所依靠的無非就是字典的飽和性,不論是CTF比賽中還是現實世界中,我們都會碰到一些經典的有辨識的文件,從而讓我們更好地了解網站。這里只是簡單舉一些例子,具體還需要讀者用心搜集記錄。

? robots.txt:記錄一些目錄和CMS版本信息。

? readme.md:記錄CMS版本信息,有的甚至有Github地址。

? www.zip/rar/tar.gz:往往是網站的源碼備份。

4.總結經驗

在CTF線上比賽的過程中,出題人往往會在線運維題目,有時會因為各種情況導致SWP備份文件的生成,所以讀者在比賽過程中可以編寫實時監控腳本,對題目服務進行監控。

vim在第一次意外退出時生成的備份文件為*.swp,第二次意外退出時的為*.swo,第三次退出時的為*.swn,以此類推。vim的官方手冊中還有*.un.文件名.swp類型的備份文件。

另外,在實際環境中,網站的備份往往可能是網站域名的壓縮包。

1.1.2.3 Banner識別

在CTF線上比賽中,一個網站的Banner信息(服務器對外顯示的一些基礎信息)對解題有著十分重要的作用,選手往往可以通過Banner信息來獲得解題思路,如得知網站是用ThinkPHP的Web框架編寫時,我們可以嘗試ThinkPHP框架的相關歷史漏洞。或者得知這個網站是Windows服務器,那么我們在測試上傳漏洞時可以根據Windows的特性進行嘗試。這里介紹最常用的兩種Banner識別方式。

1.自行搜集指紋庫

Github上有大量成型且公開的CMS指紋庫,讀者可以自行查找,同時可以借鑒一些成型掃描器對網站進行識別。

2.使用已有工具

我們可以利用Wappalyzer工具(見圖1-1-10),同時提供了成型的Python庫,用法如下:

圖1-1-10

在data目錄下,apps.json文件是其規則庫,讀者可以根據自己需求自由添加。

3.總結經驗

在進行服務器的Banner信息探測時,除了通過上述兩種常見的識別方式,我們還可以嘗試隨意輸入一些URL,有時可以通過404頁面和302跳轉頁面發現一些信息。例如,開啟了debug選項的ThinkPHP網站會在一些錯誤頁面顯示ThinkPHP的版本。

1.1.3 從信息搜集到題目解決

下面通過一個CTF靶場賽場景的復盤,來展示如何從信息搜集到獲得flag的過程。

1.環境信息

? Windows 7.

? PHPstudy 2018(開啟目錄遍歷)。

? DedeCMS(織夢CMS,未開啟會員注冊)。

2.解題步驟

通過訪問網站,根據觀察和Wappalyzer的提示(見圖1-1-11和圖1-1-12),我們可以發現這是搭建在Windows上的DedeCMS,訪問默認后臺目錄發現是404,見圖1-1-13。

圖1-1-11

圖1-1-12

圖1-1-13

這時我們可以聯想到DedeCMS在Windows服務器上存在后臺目錄爆破漏洞(漏洞成因在這里不過多敘述,讀者可以自行查閱),我們在本地運行爆破腳本,得到目錄為zggga111,見圖1-1-14。

但是經過測試,我們發現其關閉了會員注冊功能,也就意味著我們不能利用會員密碼重置漏洞來重置管理員密碼。我們應該怎么辦?其實,在DedeCMS中,只要管理員登錄過后臺,就會在data目錄下有一個相應的session文件,而這個題目恰好沒有關閉目錄遍歷,見圖1-1-15。所以我們可以獲得管理員的session值,通過editcookie修改Cookie,從而成功進入后臺,見圖1-1-16。

然后在模板的標簽源碼碎片管理中插入一段惡意代碼,即可執行任意命令,見圖1-1-17和圖1-1-18。

圖1-1-14

圖1-1-15

圖1-1-16

圖1-1-17

圖1-1-18

3.總結

這個例子可以反映信息搜集的重要性,體現在如下兩方面。

? 一是服務器的信息,針對Windows服務器,大概率意味著我們去尋找CMS在其上的一些漏洞。

? 二是在不知道密碼和無法重置的情況下,通過CMS網站本身的特性,結合目錄遍歷來實現最后的RCE(Remote Command/Code Execute,遠程命令/代碼執行)。

主站蜘蛛池模板: 溧阳市| 无极县| 南昌县| 游戏| 福建省| 饶河县| 西丰县| 彭阳县| 灵武市| 黄陵县| 攀枝花市| 峨眉山市| 肇州县| 射洪县| 兴国县| 定州市| 莲花县| 洛扎县| 博兴县| 玛多县| 宁津县| 陕西省| 英山县| 洛南县| 中超| 桑植县| 泽库县| 玉屏| 宣城市| 赤壁市| 康定县| 油尖旺区| 黄山市| 宜黄县| 博湖县| 安康市| 安徽省| 修文县| 德钦县| 申扎县| 武隆县|