1. 程式人生 > >CTF中檔案包含的一些技巧

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

image.png

圖片中並沒有需要的內容,

因為文字提示是在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')

image.png

識別結果:Here is the vigenere key: aeolus, but i deleted the encrypted message。

根據提示說用了vigenere並且key為aeolus,但是他刪除了資訊...

那麼接下來就要用到testdisk /dev/loop0來進行檔案恢復。

image.png

將此檔案複製到桌面提取其中資訊

[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”格式。

image.pngimage.png

利用kali分析

image.png

大家有任何問題可以提問,更多文章可到i春秋論壇閱讀喲~