CPPUISA 电子数据取证 秋季复健训练赛 做题情况

签到

拿到一个压缩镜像 image_forensic.e01 ,用 X-ways 打开没有发现文件系统,但是原始镜像数据首部有 bcache24.bmp 字符串

查了一下这是什么文件,得知是 Windows 远程桌面协议的位图缓存(RDP Bitmap Chache)

合天智汇:Windows 取证之BMChache

了解原理后首先下载工具 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 语句,有用到以下函数:

sql函数 的 SQL FIELD()函数

sql函数 的 SQL BIN(N)函数

sql函数 的 SQL ASCII(str)函数

sql函数 的 SQL SUBSTRING()函数

首先将 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}

posted @ 2021-09-15 20:30  暖暖草果  阅读(680)  评论(0编辑  收藏  举报