CPPUISA 电子数据取证 秋季复健训练赛 做题情况
签到
拿到一个压缩镜像 image_forensic.e01 ,用 X-ways 打开没有发现文件系统,但是原始镜像数据首部有 bcache24.bmp 字符串
查了一下这是什么文件,得知是 Windows 远程桌面协议的位图缓存(RDP Bitmap Chache)
了解原理后首先下载工具 bmc-tools.py
将原始镜像数据 0x512 开始到连续 0x00 的数据 dump 出来,命名为 bcache24.bmp
使用命令 python bmc-tools.py -s "C:\Users\harve\Desktop\bcache24" -d "C:\Users\harve\Desktop\Cache"
解析
在一张位图中找到 flag
flag{RdP_I3av3s_Trac3s}
超级简单内存取证
volatility2.6: 尝试查找 png 图片,发现 I'm here.png,并导出
D:\镜像\CPPUIA 秋季训练赛\超级简单内存取证>vola -f memory.raw --profile=Win7SP1x64 filescan | findstr png
Volatility Foundation Volatility Framework 2.6
0x000000007d550ae0 16 0 R--rw- \Device\HarddiskVolume1\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\WebResources\Resource0\static\images\core_icons.png
0x000000007d553dd0 16 0 R--rw- \Device\HarddiskVolume1\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\WebResources\Resource0\static\js\plugins\aicuc\images\rhp_world_icon.png
0x000000007d71b1d0 2 0 R--r-d \Device\HarddiskVolume1\Users\I'm hidden.WIN-VJ4BGD4ID7K\Downloads\I'm here.png
D:\镜像\CPPUIA 秋季训练赛\超级简单内存取证>vola -f memory.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000007d71b1d0 -D . -u
Volatility Foundation Volatility Framework 2.6
DataSectionObject 0x7d71b1d0 None \Device\HarddiskVolume1\Users\I'm hidden.WIN-VJ4BGD4ID7K\Downloads\I'm here.png
修改文件后缀查看图片文件,是一个二维码,扫码后获得 flag 的后半部分 OD_iN_ch3mI$7ry}
查看剪贴板数据
D:\镜像\CPPUIA 秋季训练赛\超级简单内存取证>vola -f memory.raw --profile=Win7SP1x64 clipboard
Volatility Foundation Volatility Framework 2.6
Session WindowStation Format Handle Object Data
---------- ------------- ------------------ ------------------ ------------------ --------------------------------------------------
1 WinSta0 0xc009L 0x702c3 0xfffff900c1e88260
1 WinSta0 CF_TEXT 0x7400000001 ------------------
1 WinSta0 CF_UNICODETEXT 0xb0203 0xfffff900c2b03b70 C:\Progrom Files\Comonn ...\en-US\You found me.pdf
1 WinSta0 CF_TEXT 0x0 ------------------
1 WinSta0 0xc013L 0x40155 0xfffff900c2b47660
1 WinSta0 CF_TEXT 0x1 ------------------
1 ------------- ------------------ 0x802bb 0xfffff900c1e05410
发现一个 You found me.pdf 然而 filescan 里面找不到这个文件,考虑文件名被修改
vola -f memory.raw --profile=Win7SP1x64 filescan | findstr en-US
找到一行
0x000000007d681aa0 16 0 R--r-- \Device\HarddiskVolume1\Program Files\Comonn Files\Systam\en-US\log5413741
导出这个 log5413741 ,查看文件头确认是 pdf 文件,修改扩展名后打开
内容略,在参考文献处找到一个短网址链接,打开后下载一个 zip 文件并解压
一张 png 图片,第一个字节由 0x89 被修改成了 0x25,修正后成功打开,获得 flag 的前半部分 TMUCTF{M@y8e_1_@M_6o
TMUCTF{M@y8e_1_@M_6oOD_iN_ch3mI$7ry}
my new keyboard
题目描述
我买了新键盘,快递到达之后,快递单上面写着的发货地居然是法国?
flag位于/tmp/flag,祝你好运 😄
hint:/dev/input/event0
以上内容比较重要!
/dev/input 是一个 Linux 目录,包含鼠标、键盘、手柄等各种输入设备的事件文件,
以当前键盘对应的 event1 为例,终端下 cat /dev/input/event1
可以查看输入事件
起始是空白的,在案件后会输出一行行包含不可见字符的字节流,考虑是附件文本 base64 解码的结果
于是需要查找每个字节流串与对应键位的对应表,由于我的 Bash 在 setxkbmap fr 后无法正常使用命令,略了
就是学习到了 /dev/input/event 文件的相关性质
Easy MacOS
在 Mac 文件系统中找到自动登录密码设置文件 /etc/kcpassword 导出后使用脚本 decode-kcpassword.py 还原出系统登录密码 f0r3ns1ccl4v13
chainbreaker 是一个能通过开机密码获取 Mac 密钥串中各软件密码的工具
下载后使用 python2 ./chainbreaker.py --password=f0r3ns1ccl4v13 -a login.keychain-db
2021-09-13 19:42:26,533 - INFO - [+] Generic Password Record
2021-09-13 19:42:26,535 - INFO - [-] Create DateTime: 2019-04-15 12:07:15
2021-09-13 19:42:26,535 - INFO - [-] Last Modified DateTime: 2019-04-15 12:07:15
2021-09-13 19:42:26,535 - INFO - [-] Description:
2021-09-13 19:42:26,535 - INFO - [-] Creator:
2021-09-13 19:42:26,535 - INFO - [-] Type:
2021-09-13 19:42:26,535 - INFO - [-] Print Name: gmail
2021-09-13 19:42:26,535 - INFO - [-] Alias:
2021-09-13 19:42:26,536 - INFO - [-] Account: chrmforensic@gmail.com
2021-09-13 19:42:26,536 - INFO - [-] Service: gmail
2021-09-13 19:42:26,536 - INFO - [-] Password: ihateapple89
获得 Gmail 的密码 ihateapple89
flag{9e17dcbb0c89f9d2602f447dd08a175de68cb737a46a4c77dd8387c4c47787ac}
日志分析
日志文件包含被 base64 编码的 SQL 语句,有用到以下函数:
首先将 GET 请求的 order 字段 base64 解码,出来是一段挺长的 SQl 语句,以第一条为例,大意是:
取 password 首位字符的 ASCALL 码转换成二进制后的第一位 与 首位字符的 ASCALL 码转换成二进制后的第二位拼接
与 '00', '01', '10', '11' 下标对应,若为 '00',field 值为 1,不延时,若为 '01',field 值为 2,延时 2s,其余类推
由于延时情况在日志中可见,每一条这样的语句我们都可以确定 password 中某字符的两个 bit
每四条语句(2+2+2+1,对于可见 ASCALL 字符首 bit 为 0,只需要 7 位)可以还原出一个字符的原貌
手写脚本解密,使用到了 re 和 time 模块匹配时间,详见代码注释
import re
import time
pre = -1; now = ''
diff = []; passwd = []
table = ['00','','01','','10','','11'] # table 对应对应的延迟
f = open('ch13.txt', 'r')
for line in f.readlines():
#print (line, end='')
sft = re.search('\[.+\]', line)[0]
stamp = time.mktime(time.strptime(sft,'[%d/%b/%Y:%H:%M:%S +0200]'))
if (pre != -1):
diff.append(int(stamp - pre)) # 计算延时并保存到 diff
pre = stamp
for idx in diff:
if (len(now) == 6): # 特殊处理第 7 位
now += '0' if idx == 2 else '1'
passwd.append(chr(int(now, 2))) # 先将 Bin 串转换成整型后后转换成字符
print (now)
now = ''
else:
now += table[idx] # 其他情况直接连接上就好
print ('flag{' + ''.join(passwd) + '}')
flag{gsUWDqEZgBhBpcinTSAS}
简简单单内存取证
学习 Volatility 的 Linux 内存介质取证
https://github.com/volatilityfoundation/volatility/wiki/Linux
very easy Bitlocker
在 Linux 下使用 ewf-tools 挂载 e01 镜像
ewfmount forensic.ewf ./ewf
提取出 image.dd(磁盘镜像文件)和 memory.dmp (内存镜像文件)
考虑 Bitlocker 密钥位于内存中,使用 volatility 分析
C:\Users\harve\Desktop>vola -f memory.dmp 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 (C:\Users\harve\Desktop\memory.dmp)
PAE type : No PAE
DTB : 0x187000L
KDBG : 0xf800028520a0L
Number of Processors : 1
Image Type (Service Pack) : 1
KPCR for CPU 0 : 0xfffff80002853d00L
KUSER_SHARED_DATA : 0xfffff78000000000L
Image date and time : 2016-07-02 20:09:29 UTC+0000
Image local date and time : 2016-07-02 22:09:29 +0200
strings + grep 没有找到 Bitlocker 长得像密钥的东西,感觉会写在图片文件里,filescan 一下
C:\Users\harve\Desktop>vola -f memory.dmp --profile=Win7SP1x64 filescan | grep jpg
Volatility Foundation Volatility Framework 2.6
0x000000001db67f20 16 0 RW---- \Device\HarddiskVolume3\flag.jpg
导出 flag.jpg
C:\Users\harve\Desktop>vola -f memory.dmp --profile=Win7SP1x64 dumpfiles -Q 0x000000001db67f20 -D . -u
在不关心 Bitlocker 加密磁盘的情况下找到了 flag ......
flag{B1tL0ck3R_1ts_n0t_sUr3}