CTF 内存取证 USB流量分析
護網杯2019預選賽第二題
內存取證弟弟題?
題目名叫:
Baby_forensic
題目附件地址
目錄
Baby_forensic
知識點:
內存取證工具volatility 的使用:
取證方法建議
Keyboard scan code:
解題過程:
1. Kali中解壓文件
2. pslist查看進程
3. 通過cmdscan[孫2]?提取命令歷史記錄,結果如下
4. 通過filescan查看文件目錄,檢查disk.zip:
5. 使用binwalk -e命令提取文件
6. 分析usb.pcapng文件
知識點:
內存取證工具volatility 的使用:
volatility -f <文件名> --profile=<配置文件> <插件> [插件參數]
使用imageinfo插件來猜測dump文件的profile值:WinXPSP2x86
root@kali:~/quzhen# volatility -f mem.vmem imageinfo
grep是用來搜索特定的字符串,bgrep是用來搜索非文本數據模式和hexdump
volatility –info??? 用于查看volatility已經添加的profile和插件信息
Volatility -f file.raw imageinfo???? 判斷當前鏡像信息,或kdbgscan,僅適合windows內存鏡像
常見插件:
Volatility -f file.raw –profile=WinXPSP2x86 notepad????? 查看當前展示的notepad文本
Volatility -f file.raw –profile=WinXPSP2x86 pslist ?? 列出運行的進程,如果Exit所在的一列顯示了日期時間,則表明該進程已經結束了
Hivelist?? 列出緩存在內存中的注冊表
Filescan? 掃描內存中的文件
Dumpfiles????? 將內存中的緩存文件導出
Volatility -f file.raw –profile=WinXPSP2x86 Memdump -p 進程號 -D ./(導出目錄)?????? 將某個進程信息導出/根據pid dump出指定進程
Foremost 2888.dmp??? 分析dump出的內存文件
Svcscan? 掃描windows的服務
Connscan 查看網絡連接
Cmdscan 查看命令行上的操作
?
取證方法建議
RFC 3227提供了獲取數字證據的許多做法,比如,收集數據的順序可以決定調查的成敗。
這個順序稱為波動順序(Volatility Order),顧名思義,調查人員必須首先收集易消失的數據。易失性數據是系統關閉時可能丟失的任何數據,例如連接到仍然在RAM中注冊的網站。調查人員必須將先從最不穩定的證據中開始收集數據:
(1)緩存
(2)路由表,進程表,內存
(3)臨時系統文件
(4)硬盤
(5)遠程日志,監控數據
(6)物理網絡配置,網絡拓撲
(7)媒體文件(CD,DVD)
Keyboard scan code:
USB_Interrupt in 表示該USB設備為鍵盤[孫1]?,捕捉到的鍵盤數據位于Leftover Capture Data域;
鍵盤數據由8個字節組成:
?????? Byte 0???? ?????? 鍵盤修飾符位,SHIFT, ALT, CTRL等
?????? Byte 1???? ?????? 保留位
?????? Byte 2-7 ?????? 當前按下的鍵,最多6個,順序不重要(一個鍵只有兩種狀態:pressed or not pressed)
?
解題過程:
1. Kali中解壓文件
由題目可知是內存取證,利用volatility工具分析解壓的vmem文件
?
判斷當前鏡像信息,分析操作系統
?
2. pslist查看進程
?
進程分析:
wscntfy.exe,Windows系統關鍵進程,負責檢查計算機的安全狀態,包括防火墻、病毒防護軟件、自動更新三個安全要素,如果這些服務狀態不正常,系統就會在狀態欄進行告警提示。這個進程也可能會被病毒軟件和黑客程序偽裝
ctfmon.exe,Microsoft Office產品套裝的一部分,是有關輸入法的一個可執行程序。它可以選擇用戶文字輸入程序,和微軟Office XP語言條。這不是純粹的系統程序,但是如果終止它,可能會導致不可知的問題。另外,ctfmon.exe可能被感染上木馬而成為病毒程序
wordpad.exe,是微軟Microsoft Windows自帶的免費字處理工具。
Conime.exe,輸入法編輯器
Cmd.exe,windows系統的命令行程序
?
根據進程列表可以推斷出當前用戶可能正在使用寫字板和命令行程序,可以從這兩個方面入手
?
查看進程wordpad,保存為dmp文件
?
用hexeditor查看導出的dmp文件,檢索flag,這幾個進程文件里都有提示:
invalid flags (%08x) specified to RtlCreateHeap,
無其他發現
?
3. 通過cmdscan[孫2]?提取命令歷史記錄,結果如下
有用的信息:hill_matrix,應該是用到了hill cipher
通過cmdline查看命令行用到的參數:
發現可能通過寫字板程序產生了一個文件:disk.zip
?
4. 通過filescan查看文件目錄,檢查disk.zip:
Filescan沒有發現直接的flag文件,媒體文件氣球.wav也沒有什么有用的信息
最后在disk.zip中尋找
Dump出媒體文件氣球.wav和之前發現的disk.zip
將dump出的文件重命名為氣球.wav 和disk.zip
經查看,wav文件中沒有有用的信息
disk.zip解壓后得到一個鏡像文件disk.img,查看它的imageinfo,無果
File命令發現是linux下的ext2文件系統:
?
5. 使用binwalk -e命令提取文件
經過兩次binwalk 提取到以上文件,發現一個usb.pcapng文件(usb流量分析)
?
6. 分析usb.pcapng文件
(雖然有現成的腳本跑USB流量的pacp文件,但是不看怎么知道是鍵盤流量呢?(命名里寫了usb),所以還是要一步一步來呀)
Tshark -r 查看,信息量有點大:
?
USB_Interrupt in 表示該USB設備為鍵盤[孫3]?,捕捉到的鍵盤數據位于Leftover Capture Data域,用tshark -T fields -e usb.capdata 查看鍵盤數據
linux命令后加 ” > file.path.name” 可以輸出存為文件
?
根據keyboard scan code表(參考
https://www.shsu.edu/csc_tjm/fall2000/cs272/scan_codes.html)寫腳本提取之。
?
''' 2019/9/9 @author:sunmx USB流量分析keyboard scan code轉為鍵盤字符 參數:導出的usb流量信息 ''' import sys import osusb_codes = {0x04:"aA", 0x05:"bB", 0x06:"cC", 0x07:"dD", 0x08:"eE", 0x09:"fF",0x0A:"gG", 0x0B:"hH", 0x0C:"iI", 0x0D:"jJ", 0x0E:"kK", 0x0F:"lL",0x10:"mM", 0x11:"nN", 0x12:"oO", 0x13:"pP", 0x14:"qQ", 0x15:"rR",0x16:"sS", 0x17:"tT", 0x18:"uU", 0x19:"vV", 0x1A:"wW", 0x1B:"xX",0x1C:"yY", 0x1D:"zZ", 0x1E:"1!", 0x1F:"2@", 0x20:"3#", 0x21:"4$",0x22:"5%", 0x23:"6^", 0x24:"7&", 0x25:"8*", 0x26:"9(", 0x27:"0)",0x2C:" ", 0x2D:"-_", 0x2E:"=+", 0x2F:"[{", 0x30:"]}", 0x32:"#~",0x33:";:", 0x34:"'\"", 0x36:",<", 0x37:".>", 0x4f:">", 0x50:"<"}def code2chr(filepath):lines = []pos = 0for x in open(filepath,"r").readlines():code = int(x[6:8],16) # 即第三個字節if code == 0:continue# newline or down arrow - move downif code == 0x51 or code == 0x28:pos += 1continue# up arrow - move upif code == 0x52:pos -= 1continue# select the character based on the Shift keywhile len(lines) <= pos:lines.append("")if code in range(4,81):if int(x[0:2],16) == 2:lines[pos] += usb_codes[code][1]else:lines[pos] += usb_codes[code][0]for x in lines:print(x)if __name__ == "__main__":# check argvif len(sys.argv) != 2:print("Usage:\n\tpython keyboardScanCode.py datafile.txt\nhow to get datafile:\t tshark -r file.usb.pcapng -T fields -e usb.capdata > datafile.txt")exit(1)else:filepath = sys.argv[1]code2chr(filepath)運行結果:
?
在線解密:
?
得到LHBDSLUDRIDT
轉為小寫 即為flag
別問我為什么轉小寫,我也不知道
提交大寫的不對,小寫顯示正確
?[孫1]https://bitvijays.github.io/LFC-Forensics.html#usb-keyboard
?[孫2]The cmdscan plugin searches the memory of csrss.exe on XP/2003/Vista/2008 and conhost.exe on Windows 7 for commands that attackers entered through a console shell (cmd.exe). ?This is one of the most powerful commands you can use to gain visibility into an attackers actions on a victim system, whether they opened cmd.exe through an RDP session or proxied input/output to a command shell from a networked backdoor.
?
?[孫3]https://bitvijays.github.io/LFC-Forensics.html#usb-keyboard
總結
以上是生活随笔為你收集整理的CTF 内存取证 USB流量分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux的gawk命令
- 下一篇: 【深度学习基础知识 - 25】提升模型泛