2019护网杯baby_forensic
题目名称: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:"", 0x1F:"", 0x20:"", 0x21:"", 0x22:"", 0x23:"", 0x24:"", 0x25:"", 0x26:"", 0x27:"", 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]!='' or line[1]!='' or line[3]!='' or line[4]!='' or line[9]!='' or line[10]!='' or line[12]!='' or line[13]!='' or line[15]!='' or line[16]!='' or line[18]!='' or line[19]!='' or line[21]!='' or line[22]!='':
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}
最新文章
- webservice理解
- 分享一个快速设置背景的js 自动获取背景图的长宽
- 限制波尔兹曼机(Restricted Boltzmann Machines)
- oracle trunc 函数处理日期格式
- mysql 之权限介绍
- Android学习之路——Android四大组件之activity(二)数据的传递
- Windows Cygwin Redis 安装(转)
- React Native 系列(九) -- Tab标签组件
- Swing-JTable用法-入门
- windowsServer部署站点
- springboot整合JPA(简单整理,待续---)
- tcp和udp协议的聊天 和udp协议的时间同步机制-----编码
- JS的document.all函数使用示例
- linux下rsync和tar增量备份梳理
- 在linux系统中安装redis
- ado.net常用操作
- unordered_map/unordered_set &; unordered_multimap/unordered_multiset非关联容器
- Swagger2的使用及注意事项
- SHELL异常处理
- C#基础第一天-作业