题目附件和其他wp请参看文章
gyctf-misc-wp(day2)
昨天刚说不走心,今天就被暴打。题还是比较难,虽然是套娃。但是值得一做。强度有点大,相当于做了十七道题。
从昨晚写到今下午三点,对我非常非常难的一道题,主要在于工具的考察上面,国内关于CTF类的磁盘取证内容较少,而且工具也是残次不齐,有的工具破解不完整导致各种各样的bug,比如winhex无法修改和保存,无法读取磁盘,无法调取第三方软件保存文件等等,我踩了不少坑。在编写这个本文的时候,软件和驱动的冲突还让电脑数次绿屏,导致损失了不少内容,虽然又重写了,但是可能没第一版完整,各位师傅复现有遇到什么问题欢迎交流。
附上本题使用工具链接:https://pan.baidu.com/s/1HNFry8qRCMaLbu99n-wiaQ提取码:u5pc

解压题目可以发现是一个vhd文件,这是常见的虚拟磁盘格式,诸如此类的还有vmdk等等。

可以使用winhex对该磁盘进行分析,这个软件支持很多格式的磁盘分析,是非常常用的磁盘取证工具。

打开后可以发现磁盘格式是NTFS,

24

查看分区内容,可以看到一个名为dekart_priviate_disk的被删除的加密文件夹,还有一个名叫easy_disk的文件。导出磁盘文件easy_disk,并尝试搜索使用软件priviate disk进行加载和解密。

25

注意:如果打开报错可能是因为你把软件放在了中文目录下,切换到英文即可解决。

发现打开需要密码,接下来的思路应该是寻找密码

26

在对文件系统进行痕迹分析时,文件系统的元数据文件是关键

NTFS中有一个特殊的文件——名为$UsnJrnl的更新序列号(USN)日志文件,该文件中也包含有关发生在NTFS卷上的操作的大量历史信息。
虽然磁盘上会发生不同的文件操作,但在NTFS卷中,更改日志会记录文件创建、删除、加密、目录创建、删除等操作背后的原因。每个卷有一个USN更改日志——自Windows Vista起默认为启用状态,并被索引服务、文件复制服务(FRS)、远程安装服务(RIS)及远程存储等应用程序使用。不过,应用程序和管理员可以创建、删除及重新创建更改日志。更改日志文件存储在隐藏的系统文件$Extend/$UsnJrnl中。$UsnJrnl文件包含两个备用数据流(ADS),$Max和the $J。$Max数据流包含有关更改日志的信息,如最大大小。$J数据流包含更改日志的内容,包含更改日期和时间、更改原因、MFT条目、MFT父条目等信息。该信息对于调查是有用的,比如,攻击者在组织内活动时为隐藏其踪迹而删除文件和目录的情形下。要获取更改日志文件,你需要对文件系统进行原始访问。

经过对元数据分析发现该文件系统存在**$UsnJrnl的记录,$J文件记录了文件系统的操作记录,导出$J文件进行痕迹分析。在取证分析的实战中,通过$J**文件还原行为人的操作行为记录是非常关键,即使文件系统的文件记录项被删除依然可以证明文件的曾经存在,此题中的MFT表项中已经彻底擦除了密码文件。

$ UsnJrnl:$ J的布局

偏移量 字段长度 描述
0x00 4 日志项长度
0x04 2 主要版本号
0x06 2 次要版本号
0x08 8 MFT参考号
0x10 8 父目录MFT参考
0x18 8 $ J中该条目的偏移量(日志项更新序列号USN)
0x20 8 时间戳
0x28 4 变更类型标识符(更新原因标志)
0x2B 4 源信息
0x30 4 安全描述符标识符 包含安全ID索引中的条目号($ Secure:$ SII)
0x34 4 文件属性
0x38 2 文件名大小(以字节为单位)
0x3A 2 名称偏移量
0x3C V 文件名
V + 0x3C P 填充(对齐8个字节)

本表与官方wp提供的有一定出入,每个系统版本不同导致存在一定差异。我英语水平有限,请自行根据题目辨别,具体版本文档参考如下

https://github.com/libyal/libfsntfs/blob/master/documentation/New Technologies File System (NTFS).asciidoc

已知Windows XP SP3之后,除Windows 10(1809)对64k群集块大小使用NTFS版本1.2以外,均使用version 3.1

英文原版version 3.1文档

Offset Size Value Description
0 4 Entry (or record) size
4 2 0x0003 Major version
6 2 0x0000 Minor version
8 16 File reference
24 16 Parent file reference
40 8 Update sequence number (USN) Contains the file offset of the USN change journal entry which is used as a unique identifier
48 8 Update date and time Contains a FILETIME
56 4 Update reason flags
60 4 Update source flags
64 4 Security descriptor identifier Contains the entry number in the security ID index ($Secure:$SII)
68 4 File attribute flags
72 2 Name size Contains the byte size of the name
74 2 Name offset The offset is relative from the start of the USN change journal entry
Common
78 (name size) Name
0x00 Padding

接下来需要读取$J数据,我们可以使用UsnJrnl2Csv工具。该工具支持USN_RECORD_V2、USN_RECORD_V3和USN_RECORD_V4(win8.1下),可以非常容易地从更改日志中解析和提取信息。可以输出CSV、sql等格式的文件。

但是我们首先需要提取出$J,方法与提取easy_disk文件相同,

进入路径

$Extend/$UsnJrnl/$J

鼠标右键,默认使用ie打开,即可下载保存文件。(如果无法调起第三方程序请更换winhex版本)

28

保存后打开UsnJrnl2Csv,进行格式转换

27

得到的csv文件如下

29

可以发现,在日志中,除了以上提到过的文件外,还有对新建文本文档.txt9o7@Xs78I0.txt的操作,猜测是修改了文件名

30

使用

9o7@Xs78I0

进行加密容器的解密,成功

但是打开后提示磁盘格式错误,需要格式化。(格式化之后数据就消失了,需要重新提取,所以此时点击取消)

31

在winhex使用快捷键F9打开磁盘Z,

32

根据DBR可以发现扇区偏移16进制数的00-10被擦写为0,残余DBR可以看出文件系统是FAT16

33

依据FAT分区的磁盘结构,手动恢复被擦除的DBR引导记录的字节,FAT分区的00-0A偏移位置是跳转指令和固定的厂商标志和os版本EB 58 90 4D 53 44 4F 53 35 2E 30为MSDOS5.0的ASCII代码,FAT分区通常存放两个FAT表,FAT2备份FAT1表示簇占用情况,winhex中可以使用数据查看器辅助填写恢复数据。(原出题人wp此处十六进制数据有误,下方已进行更正)

34

接下来可以根据该文章的MDR模板进行手工恢复

https://blog.csdn.net/Ang_ie/article/details/54209481

也可使用软件PrvDisk重新新建一个30M的加密磁盘进行扇区分析

我使用默认设置新建了一个磁盘Y,读取引导分区

35

经过对比,只用修改标记的这一部分。修改时一定要确认winhex处于替换模式下

36

不在的话,可以点击选项→编辑模式进行修改。

如果编辑时你的winhex报错或者无法修改成功,甚至无法修改,请更换版本。

修改成功后关闭winhex,断开磁盘重新连接,即可发现不再提示格式化,正常读取状态如下

37

打开flag.txt得到flag

flag{5f1f5f73-1740-405a-a914-375a37199c79}

参考文章:

【技术分享】数字取证技术——NTFS更改日志 - 安全客,安全资讯平台
本文介绍了关于NTFS更改日志的一些介绍性概念、如何获取和解析该日志、如何创建事件的时间表。

http://ftp.kolibrios.org/users/Asper/docs/NTFS/ntfsdoc.html#id4757298

jschicht/UsnJrnl2Csv
Parser for $UsnJrnl on NTFS. Contribute to jschicht/UsnJrnl2Csv development by creating an account on GitHub.
FAT16文件系统结构简述_运维_分享空间-CSDN博客
近一个礼拜为解决项目中的一个BUG而学习了一点新知识。大致总结出来和有兴趣的朋友分享学习一波。这个 运维
libyal/libfsntfs
Library and tools to access the Windows New Technology File System (NTFS) - libyal/libfsntfs
【i春秋杯网络安全联赛WriteUp】为逆行者加油
我们是Venom战队,转发这篇wp,为逆行者加油!

鸣谢:MISC欢乐签到群的师傅们