這是一道取證分析題目,主要考察取證分析能力,包括磁盤文件恢復、圖片文件修復、數據分析、圖片隱寫信息提取等。
本次實驗題目地址:
實驗:DEFCON_20_CTF_Quals_Forensic_200(合天網安實驗室)
題目提供了一個disk.img文件,我們首先可以嘗試使用DiskGenius來查看其中的文件。打開DiskGenius_4.3.exe,依次選擇“硬盤”、“打開虛擬硬盤文件”菜單項,如下圖所示:

使用DiskGenius打開C:\CTF\DiskForensics\4\disk.img文件之后,可以看到在磁盤的根目錄下存在有三個1.6MB的文件,文件名分別為21638、53564、70597,如下圖所示:

我們選中這三個1.6MB的文件后單擊右鍵菜單,在彈出的菜單中選擇“復制到(S)...”,將其復制到C:\CTF\DiskForensics\4\Files目錄下,如下圖所示:

既然是取證那我們來看一下從磁盤鏡像中是否可以恢復出已刪除的文件。在DiskGenius主界面左側的樹形控件中選中VD0:disk.img(15MB)之后,點擊工具欄上的“恢復文件”按鈕,如下圖所示:

等待操作完成之后,我們可以看到一共恢復出了5個新文件,其中有4個1.6MB的文件以及1個1.7MB的文件,如下圖所示:

同樣選中這5個文件之后單擊鼠標右鍵,在彈出的右鍵菜單中選擇“復制到(S)...”,將這5個文件恢復到C:\CTF\DiskForensics\4\Files目錄下。
現在我們已經從disk.img文件中提取出了八個文件,但是這八個文件都沒有擴展名,所以我們可以考慮使用TrID工具來識別一下。打開CMD命令提示符,切換到C:\CTF\DiskForensics\4\Files目錄,輸入trid *即可掃描該目錄下的所有文件,但是很遺憾的是TrID並沒有識別出任何一個文件的類型,如下圖所示:

識別不出呢,咋辦呢。
別慌我們還有linux的file命令,我們已經把提取出來的八個文件放到Linux實驗機器的/home/forensics/defcon目錄下了。現在切換到Linux實驗主機,使用cd命令切換到/home/forensics/defcon目錄之后,執行file *來對文件進行掃描,跟TrID一樣,file命令也識別不出任何結果,如下圖所示:

莫慌,這肯定是數據被破壞了,我們還可以手動識別 打開十六進制編輯器C32Asm(位於C:\Tools\c32asm\C32Asm.exe),使用C32Asm打開!2467文件,可以看到文件的前面兩個字節為00 00,顯然文件頭部字節被抹掉了,而如果來到文件末尾,可以看到最后的兩個字節是FF D9,如下圖所示:

\3. 因為最后面兩個字節是FF D9,所以有可能是一個JPG文件,因為JPG文件的頭部兩個字節是FF D8,而末尾兩個字節是FF D9,所以我們可以把最前面的兩個字節填充為FF D8,然后按下Ctrl+S保存對文件的修改;
\4. 給文件!2467添加.jpg擴展名,打開發現可以正常顯示,說明這就是一個JPG文件;
\5. 經過同樣的操作,我們可以發現!8808、!8938、21638、53564、70597這五個文件也是JPG文件,而!1728、!8149則無法直接看出是什么文件;
這里我們發揮一下想象,這六個圖片文件中有兩個文件顯示的圖像是一樣的,經過對比發現兩個文件的大小不一樣,其中前者為1.63 MB (1,714,910 字節),后者為1.59 MB (1,670,111 字節)。
此事必有蹊蹺,對比一下兩個文件看下
\1. 打開UltraCompare(位於C:\Tools\UltraCompare\uc.exe);
\2. 依次點擊“模式”、“二進制(快速)模式”菜單項;
\3. 單擊文件夾圖標選中兩個要比較的文件,單擊綠色箭頭圖標開始比較,如下圖所示;

\4. 比較之后可以發現,兩個文件的二進制數據存在大量差異之處,如下圖所示;

經過上面的分析,發現兩個圖片文件大部分的二進制內容是不一樣的,可以知道這里不是簡單的在圖片末尾附加數據。
別慌我可以使用stegdetect工具來檢查一下。現在切換到Linux實驗機器來進行操作,具體的實驗步驟如下:
\1. 通過cd命令切換到/home/forensics/defcon2目錄,我們已經把上面的兩個JPG文件復制到該目錄下了;
\2. 使用stegdetect檢測兩個圖片文件,發現都提示negative,即並沒有檢測出隱寫信息,如下圖所示;

\3. 調整stegdetect的敏感度(通過-s參數指定),設定敏感度為2.0,再次檢測兩個文件,發現文件!2467.jpg存在outguess隱寫信息,如下圖所示;

到現在為止,我們基本推測出了文件!2467使用了outguess來隱藏了隱寫信息,現在我們可以使用outguess來提取其中的隱寫信息,在Linux中執行outguess -r !2467.jpg data.txt即可,如下圖所示:

看來是的很有可能是outguess提取隱寫信息的時候需要指定一個密碼,這時候可以編寫一個腳本來破解這個密碼,由於不知道密碼的構詞規則,所以可以使用暴力破解或者是字典破解的方法(可以暴力破解5個字母的密碼,或者使用字典進行破解)。
最終破解出的密碼是ddtek(曾經組織過DEFCON CTF的一個隊伍名稱),同時在使用outguess提取隱寫信息的時候還要指定-e參數,表示需要使用錯誤糾正編碼,完整的命令為outguess -r !2467.jpg -k "ddtek" data.txt -e。待提取完畢后,執行file data.txt可以知道這是一個ZIP文件,如下圖所示:

這個在linux服務器上面呢,服務器的IP地址為10.1.1.47,我們在這里執行nohup python -m SimpleHTTPServer 8888 &即可在服務器上監聽8888端口,在XP下的Firefox瀏覽器中下載http://10.1.1.47:8888/data.txt即可,下載之后將其重命名為data.zip並解壓出其中的文件,打開解壓出來的PDF文件即可看到Flag。