CTF中檔案包含的一些技巧
i春秋作家:lem0n
原文來自:淺談記憶體取證
0x00 前言
網路攻擊記憶體化和網路犯罪隱遁化,使部分關鍵數字證據只存在於實體記憶體或暫存於頁面交換檔案中,這使得傳統的基於檔案系統的計算機取證不能有效應對.記憶體取證作為傳統檔案系統取證的重要補充,是計算機取證科學的重要組成部分,通過全面獲取記憶體資料、詳盡分析記憶體資料,並在此基礎上提取與網路攻擊或網路犯罪相關的數字證據,近年來,記憶體取證已贏得安全社群的持續關注,獲得了長足的發展與廣泛應用,在網路應急響應和網路犯罪調查中發揮著不可替代的作用.首先回顧了記憶體取證研究的起源和發展演化過程;其次介紹了作業系統記憶體管理關鍵機制;然後探討了記憶體取證的資料獲取和分析方法,歸納總結目前記憶體取證研究的最新技術;最後討論了記憶體取證存在的問題、發展趨勢和進一步的研究方向.
——《記憶體取證研究與進展[J].軟體學報,2015, 26(5): 1151-1172》
0x01 實驗材料
kali 滲透測試系統
easy_dump.img 記憶體映象
Volatility Framework 記憶體取證工具
TestDisk 檔案恢復工具
0x02 Volatility Framework
volatility 框架是一款用於易失性記憶體取證的重量級框架。在該框架下我們可以完成許多取證的操作,獲取我們想取得的資訊。其支援的作業系統也非常廣泛,同時支援 windows , linux, Mac OSX,甚至也支援 Android 手機使用ARM處理器的取證。因此,它也是所有網路取證愛好者的必學框架。
volatility 使用: volatility -f <檔名> -–profile=<配置檔案> <外掛> [外掛引數] 通過volatility --info獲取工具所支援的profile,Address Spaces,Scanner Checks,Plugins 常用外掛: imageinfo:顯示目標映象的摘要資訊,知道映象的作業系統後,就可以在 –profile 中帶上對應的作業系統 pslist:該外掛列舉出系統程序,但它不能檢測到隱藏或者解鏈的程序,psscan可以 psscan:可以找到先前已終止(不活動)的程序以及被rootkit隱藏或解鏈的程序 pstree:以樹的形式檢視程序列表,和pslist一樣,也無法檢測隱藏或解鏈的程序 mendump:提取出指定程序,常用foremost 來分離裡面的檔案 filescan:掃描所有的檔案列表 hashdump:檢視當前作業系統中的 password hash,例如 Windows 的 SAM 檔案內容 svcscan:掃描 Windows 的服務 connscan:檢視網路連線
0x03 實驗過程
利用 volatility -f easy_dump.img imageinfo
檢視映象資訊
[email protected]:~/Desktop# volatility -f easy_dump.img imageinfo Volatility Foundation Volatility Framework 2.6 INFO : volatility.debug : Determining profile based on KDBG search... Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_23418 AS Layer1 : WindowsAMD64PagedMemory (Kernel AS) AS Layer2 : FileAddressSpace (/root/Desktop/easy_dump.img) PAE type : No PAE DTB : 0x187000L KDBG : 0xf8000403f070L Number of Processors : 1 Image Type (Service Pack) : 0 KPCR for CPU 0 : 0xfffff80004040d00L KUSER_SHARED_DATA : 0xfffff78000000000L Image date and time : 2018-09-28 09:02:19 UTC+0000 Image local date and time : 2018-09-28 17:02:19 +0800
根據Suggested Profile(s)
值猜測他是Win7SP1x64,所以利用--profile=Win7SP1x64
利用volatility -f easy_dump.img --profile=Win7SP1x64 hashdump
檢視當前作業系統中的 password hash
[email protected]:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 hashdump Volatility Foundation Volatility Framework 2.6 Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0::: n3k0:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
將hash複製到文件中,用john FileName --format=nt
進行密碼破解(本次破解為空密碼)
注:john破解的密碼會儲存在本地目錄.john
中的john.pot
檔案,如需再次破解相同密碼需要使用--show或者將john.pot
檔案刪除。
[email protected]:~/Desktop# john hashdump.txt --format=NT Using default input encoding: UTF-8 Rules/masks using ISO-8859-1 Loaded 3 password hashes with no different salts (NT [MD4 128/128 AVX 4x3]) Press 'q' or Ctrl-C to abort, almost any other key for status (Administrator) (Guest) (n3k0) 3g 0:00:00:00 DONE 2/3 (2018-10-15 00:17) 150.0g/s 130550p/s 130550c/s 391650C/s money..hello Use the "--show" option to display all of the cracked passwords reliably Session completed
利用volatility -f easy_dump.img --profile=Win7SP1x64 psscan
檢視所有程序,通過所有程序來檢視是否有可疑程序出現,進行進一步取證。
[email protected]:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 psscan Volatility Foundation Volatility Framework 2.6 Offset(P) Name PID PPID PDB Time created Time exited ------ 0x000000001a453a70 WmiApSrv.exe 2760 492 0x000000001a9ab000 2018-09-28 09:01:58 UTC+0000 0x0000000022e4e060 VSSVC.exe 2168 492 0x0000000002a44000 2018-09-28 09:01:39 UTC+0000 ··· 0x0000000022fd1b30 notepad.exe 2616 1312 0x000000000221c000 2018-09-28 09:01:51 UTC+0000 ··· 0x0000000023963b30 DumpIt.exe 2500 1312 0x000000000788b000 2018-09-28 09:02:18 UTC+0000 0x00000000239712a0 svchost.exe 716 492 0x000000000b836000 2018-09-28 09:01:34 UTC+0000 ··· 0x00000000250a3b30 dllhost.exe 2900 600 0x00000000226ab000 2018-09-28 09:02:14 UTC+0000 0x0000000025101930 dllhost.exe 2932 600 0x000000000d0c2000 2018-09-28 09:02:15 UTC+0000 0x0000000025131b30 smss.exe 248 4 0x000000001a0a6000 2018-09-28 09:01:33 UTC+0000 0x0000000025749b30 System 4 0 0x0000000000187000 2018-09-28 09:01:33 UTC+0000
通過觀察程序可以看到 DumpIt.exe
此項程序,這個便是dump記憶體時的程序。
程序中有notepad.exe程序PID為2616我們提取一下,看看有無線索.
利用volatility -f easy_dump.img --profile=Win7SP1x64 memdump -p 2616 -D ./
檔案將以程序號命名
[email protected]:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 memdump -p 2616 -D ./ Volatility Foundation Volatility Framework 2.6 ************************************************************************ Writing notepad.exe [ 2616] to 2616.dmp
通過strings命令檢視程序中有無關於flag的文字提示
[email protected]:~/Desktop# strings -e l 2616.dmp | grep flag flag{flag is not here,but I put an strange jpg for you,hope you like it :)} flag{flag is not here,but I put an strange jpg for you,hope you like it :)} flag{flag is not here,but I put an strange jpg for you,hope you like it :)} ··· flag{flag is not here,but I put an strange jpg for you,hope you like it :)} ··· usbflags\0E0F00020100 usbflags\0E0F00030102 usbflags\0E0F00080100
根據他的提示可以瞭解到flag並不在其中,應該在一個奇怪的圖片裡。
利用volatility -f easy_dump.img --profile=Win7SP1x64 filescan | grep -E 'jpg|png|jpeg|bmp|gif'
檢視記憶體映象中的檔案,觀察有無提示中所說的圖片。
[email protected]:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 filescan | grep -E 'jpg|png|jpeg|bmp|gif' Volatility Foundation Volatility Framework 2.6 0x000000002408c460 32 0 RW---- \Device\HarddiskVolume1\phos.jpg
記憶體映象中只有phos.jpg這一張圖片,下面嘗試提取出來
利用volatility -f easy_dump.img --profile=Win7SP1x64 dumpfiles -Q 0x000000002408c460 -n --dump-dir=./
外掛進行檔案提取
-Q引數使用物理偏移量進行轉儲
-n以檔名儲存
--dump-dir=目標儲存位置
[email protected]:~/Desktop# volatility -f easy_dump.img --profile=Win7SP1x64 dumpfiles -Q 0x000000002408c460 -n --dump-dir=./ Volatility Foundation Volatility Framework 2.6 DataSectionObject 0x2408c460 None \Device\HarddiskVolume1\phos.jpg SharedCacheMap 0x2408c460 None \Device\HarddiskVolume1\phos.jpg
圖片中並沒有需要的內容,
因為文字提示是在2616.bmp中給出的,因此將之前提取出來的2616.dmp進行檔案提取看看會不會有線索。
利用foremost 2616.dmp
提取檔案
[email protected]:~/Desktop# foremost 2616.dmp Processing: 2616.dmp |***| [email protected]:~/Desktop# cat output/audit.txt Foremost version 1.5.7 by Jesse Kornblum, Kris Kendall, and Nick Mikus Audit File Foremost started at Mon Oct 15 04:14:57 2018 Invocation: foremost 2616.dmp Output directory: /root/Desktop/output Configuration file: /etc/foremost.conf ------------------------------------------------------------------ File: 2616.dmp Start: Mon Oct 15 04:14:57 2018 Length: 298 MB (312721408 bytes) Num Name (bs=512) Size File Offset Comment 0: 00097439.htm 257 B 49889147 ··· 27: 00097458.htm 163 B 49898571 28: 00001838.dll 8 KB 941352 07/14/2009 00:07:09 29: 00500704.jpg 1 MB 256360448 30: 00491298.htm 231 B 251544976 31: 00491300.htm 231 B 251546000 32: 00490508.zip 48 KB 251140554 Finish: Mon Oct 15 04:15:11 2018 33 FILES EXTRACTED jpg:= 1 htm:= 30 zip:= 1 exe:= 1 ------------------------------------------------------------------ Foremost finished at Mon Oct 15 04:15:11 2018
對提取的檔案進行分析,發現其中zip檔案中包含一個img映象利用binwalk message.img
分析其包含的資料。
[email protected]:~/Desktop/output/zip# binwalk message.img DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 Linux EXT filesystem, rev 1.0, ext2 filesystem data, UUID=c12b8ec9-5ef5-4b91-8b4d-f827e81fe81f 67697 0x10871 Unix path: /work/HuWangBei/1/message
裡面包含一個ext2的檔案系統用binwalk -e message.img
分離出來
[email protected]:~/Desktop# binwalk -e message.img DECIMAL HEXADECIMAL DESCRIPTION -------------------------------------------------------------------------------- 0 0x0 Linux EXT filesystem, rev 1.0, ext2 filesystem data, UUID=c12b8ec9-5ef5-4b91-8b4d-f827e81fe81f 67697 0x10871 Unix path: /work/HuWangBei/1/message
掛載檔案系統
[email protected]:~/Desktop# cd _message.img.extracted/ [email protected]:~/Desktop/_message.img.extracted# ls 0.ext ext-root [email protected]:~/Desktop/_message.img.extracted# mount 0.ext /mnt/ [email protected]:~/Desktop/_message.img.extracted# cd /mnt/ [email protected]:/mnt# ls hint.txt lost+found
裡面只有一個txt檔案開啟後發現裡面是類似座標的數字,由之前的提示說一張奇怪的圖片聯想這可能是圖片的座標點,所以編寫python指令碼嘗試將圖片提取出來。
[email protected]:/mnt# cat hint.txt 10 10 10 11 10 12 10 13 ··· 269 265 269 266 269 267 269 268 269 269
python指令碼:
import Image flag_image = Image.new('RGB',(300,300),(0,0,0)) f = open('hint.txt') for line in f.readlines(): point = line.split() flag_image.putpixel([int(point[0]),int(point[1])],(255,255,255)) f.close() flag_image.save('flag_image.jpg')
識別結果:Here is the vigenere key: aeolus, but i deleted the encrypted message。
根據提示說用了vigenere並且key為aeolus,但是他刪除了資訊...
那麼接下來就要用到testdisk /dev/loop0
來進行檔案恢復。
將此檔案複製到桌面提取其中資訊
[email protected]:~/Desktop/_message.img.extracted/.Trash-0/files# strings .message.swp b0VIM 8.0 n3k0 shiki.lan ~n3k0/work/HuWangBei/1/message U3210 #"! yise!dmsx_tthv_arr_didvi
最下面的字串應該就是flag了,根據之前提示的vigenere加密並且key為aeolus進行解密
結果:yeetjustfindandsolve
———————————————自此護網杯easy_dump的取證工作完畢——————————————
0x04 知識延伸
本文未用到dll,登錄檔等取證使用方法,其他取證方法我附上網址供大家學習
https://digital-forensics.sans.org/media/volatility-memory-forensics-cheat-sheet.pdf
0x05 製作記憶體映象
DumpIt 是一款綠色免安裝的 windows 記憶體映象取證工具。利用它我們可以輕鬆地將一個系統的完整記憶體映象下來。
只要雙擊開啟DumpIt.exe輸入y等待一會出現Success就是dump成功。
預設情況下,檔名是主機名(主機名),其後是執行映像過程的日期。該檔案預設儲存為“raw”格式。
利用kali分析
大家有任何問題可以提問,更多文章可到i春秋論壇閱讀喲~