題目名稱:baby_forensic
題目描述:can you catch the flag?
附件:“data.7z”
2019護網杯初賽的一道取證題,比賽時沒做出來,賽后又研究了一下。
獲取profile的類型,因為不同的系統數據結構不一樣,所以需要用--profile=來指定。
這里自動猜解可能的系統類型,一般情況下第一個是正確的,如果不對每個都試一下。
volatility -f /root/data.vmem imageinfo
列出所有的進程
volatility -f /root/data.vmem --profile=WinXPSP2x86 pslist
psxview可以查看隱藏進程
將內存中的某個進程數據以dmp的格式保存出來
volatility -f mem.vmem --profile=WinXPSP2x86 -p [PID] -D [dump 出的文件保存的目錄]
可以用strings工具打印字符串或者用編輯器打開
列舉緩存在內存的注冊表
volatility -f /root/data.vmem --profile=WinXPSP2x86 hivelist
hivedump 打印出注冊表中的數據
volatility -f mem.vmem --profile=WinXPSP2x86 hivedump -o 注冊表的virtual地址
獲取SAM表中的用戶
volatility -f /root/data.vmem --profile=WinXPSP2x86 printkey -K "SAM\Domains\Account\Users\Names"
提取內存中保留的cmd命令使用情況
volatility -f /root/data.vmem --profile=WinXPSP2x86 cmdscan
提示hill_matrix 3,2,2,9,7,7,6,4,9
filescan查看文件,grep搜索關鍵詞
volatility -f /root/data.vmem --profile=WinXPSP2x86 filescan | grep 桌面
利用dumpfiles提取filescan的文件
volatility -f /root/data.vmem --profile=WinXPSP2x86 dumpfiles -Q 0x0000000001873e40 --dump-dir=/root
重命名為disk.zip,解壓后是一個img鏡像
進行binwalk分析
binwalk disk.img
只是一個鏡像文件,使用mount命令掛載一下,新建一個命名為1的文件夾(umount /root/disk.img命令卸載)
mount disk.img ./1
打開文件發現是usb流量包
wireshark打開后看到Protocol為USB協議,搜索關於usb流量分析的文章
USB協議的數據部分在Leftover Capture Data域之中,在Mac和Linux下可以用tshark命令可以將 leftover capture data單獨提取出來
tshark -r /root/1/usb.pcapng -T fields -e usb.capdata > usbdata.txt
第一次運行報錯
解決方法:
1.cd /usr/share/wireshark
2.init.lua用文本編輯器打開。
3.更改disable_lua = false到disable_lua = true。
運行成功,主目錄生成usbdata.txt文件
查看usbdata.txt 發現數據包長度為八個字節
查資料知道USB流量分為鍵盤流量和鼠標流量。
鍵盤數據包的數據長度為8個字節,擊鍵信息集中在第3個字節,每次key stroke都會產生一個keyboard event usb packet。
鼠標數據包的數據長度為4個字節,第一個字節代表按鍵,當取0x00時,代表沒有按鍵、為0x01時,代表按左鍵,為0x02時,代表當前按鍵為右鍵。第二個字節可以看成是一個signed byte類型,其最高位為符號位,當這個值為正時,代表鼠標水平右移多少像素,為負時,代表水平左移多少像素。第三個字節與第二字節類似,代表垂直上下移動的偏移。
這里數據包長度是八個字節顯然為鍵盤數據包。
網上查找USB協議的文檔,可以找到這個值與具體鍵位的對應關系,根據這個映射表有腳本能解碼得出數據包。
腳本如下:
mappings = { 0x04:"A", 0x05:"B", 0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G", 0x0B:"H", 0x0C:"I", 0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O", 0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5", 0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"n", 0x2a:"[DEL]", 0X2B:" ", 0x2C:" ", 0x2D:"-", 0x2E:"=", 0x2F:"[", 0x30:"]", 0x31:"\\", 0x32:"~", 0x33:";", 0x34:"'", 0x36:",", 0x37:"." } nums = [] keys = open('usbdata.txt') for line in keys: if line[0]!='0' or line[1]!='0' or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0': continue nums.append(int(line[6:8],16)) # 00:00:xx:.... keys.close() output = "" for n in nums: if n == 0 : continue if n in mappings: output += mappings[n] else: output += '[unknown]' print('output :n' + output)
因為不是正常字符會輸出[unknown],影響找字符串,看情況修改為空格。
提示為:'WYTXRXORCQDH'.HILLDECODE
顯然3,2,2,9,7,7,6,4,9是希爾密碼加密矩陣,WYTXRXORCQDH是密文
希爾密碼解密即可。
https://www.dcode.fr/hill-cipher
flag{SPVZPLEBASMV}