misc-取证分析

ZJ Lv100

通过分析计算机系统运行产生的记录内容,对其进行复现从而实现取证

前言

这里会提供一些来自buuctf的案例

这章的WP之后再写,先偷个懒(๑•́ ₃•̀๑)

工具介绍

提供的工具若未破解或链接已挂,请自行搜索破解版使用

TrIDNet 文件识别工具

DiskGenius 磁盘管理与数据恢复工具(windows)

ext3grep 恢复工具(kali-ext3)– apt install ext3grep

extundelete 恢复工具(kali-ext4)– apt install extundelete

volatility 基于python的内存取证工具

VeraCrypt 开放源代码磁盘加密软件

NtfsStreamsEditor 2 NTFS隐写工具

磁盘取证

文件系统

磁盘分区

windows主流为FAT和NEFS(FAT12 -> FAT16 -> FAT32 -> NTFS),linux常见文件系统为Ext2、Ext3、Ext4(EXT2 -> EXT3 -> EXT4)

FAT:文件分配表,记录文件所在位置的表格。FAT文件系统用“簇”作为数据单元,用户文件和目录都存储在簇中。

NTFS:新技术文件系统,是WindowsNT环境的文件系统,一个日志文件系统,保存磁盘写入信息外还会对所有改变保留一份日志。

比较:NTFS能够很快恢复正常,且不易丢失数据,替代了老式的FAT文件系统。

Ext:Linux扩展文件系统。Ext2被称作索引是文件系统,Ext3/Ext4被称作日志文件系统

取证方法

CTF中往往会拿到一个无扩展名或者是和文件系统相关扩展名的文件,可以先通过Linux的file命令或者windows的TrIDNet工具识别文件类型,若是磁盘镜像,基本就是磁盘取证了

使用TrIDNet 工具识别文件类型

image-20240925230411889

file命令

image-20240925235447304

windows下使用DiskGenius 恢复数据(需要恢复的数据是windows环境的)

image-20240926002430189

image-20240926002449430

image-20240926002512057

可以保存下来查找,也可以直接点击查找(挂载)

linux下使用ext3grep(ext3)、extundelete(ext4)恢复工具(需要恢复的数据是linux环境的)

Ext3文件系统删除文件其实只是删除了inode节点中的指针,数据仍在block中,重新恢复inode指向即可恢复文件

linux的挂载

mount挂载镜像
1
2
mount 文件名 自定义目录		#挂载镜像
umount -a 文件名 #取消挂载

以下是部分演示

ext3grep

image-20240925235150517

1
ext3grep 文件名 --inode 2 -ls	#从系统根目录开始查找文件,并列出所有课恢复的数据

image-20240926000132282

image-20240926000944874

带有d标志的是已经删除的文件

1
ext3grep 文件名 --dump-names |grep "flag"	#查找被删除文件中过滤的flag文件名

image-20240926000641177

1
ext3grep 文件名 --restore-file 目录/文件名	#恢复删除的文件,并再当前目录下生成一个文件夹存放

image-20240926001322737

image-20240926001919046

extundelete
1
extundelete 文件名 --restore-all	#恢复所有被删除的文件

image-20240926004020818

image-20240926004120111

内存取证

内存取证通常是指对计算机等智能设备运行时内存中存储的临时数据进行获取与分析,提取有价值的数据

在CTF比赛中,内存取证往往是提供一个完整的内存镜像,所以说看到提供的附件很大,就可以直接判断是内存取证了

volatility 工具,当遇到扩展名为raw、img、dmp、vmem等时,就可以直接开始使用进行内存取证了

volatility

image-20240926012821528

volatility常见参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Options:
-h, --help 列出所有可用选项及其默认值
默认值可以在配置文件中设置
(/etc/volatilityrc)
--conf-file=/home/kali/.volatilityrc
基于用户的配置文件
-d, --debug 调试Volatility
--plugins=PLUGINS 要使用的其他插件目录(冒号分隔)
--info 打印所有注册对象的信息
--cache-directory=/home/kali/.cache/volatility
存放缓存文件的目录
--cache 使用缓存
--tz=TZ 设置 (Olson) 时区以使用 pytz(如果已安装)或 tzset 显示时间戳
-f FILENAME, --filename=FILENAME
打开图像时使用的文件名
--profile=WinXPSP2x86
要加载的配置文件的名称(使用 --info 查看支持的配置文件列表)
-l LOCATION, --location=LOCATION
从中加载地址空间的 URN 位置
-w, --write 启用写支持
--dtb=DTB DTB 地址
--shift=SHIFT Mac KASLR 移位地址
--output=text 以这种格式输出(支持特定于模块,请参阅下面的模块输出选项)
--output-file=OUTPUT_FILE
在此文件中写入输出
-v, --verbose 详细信息
-g KDBG, --kdbg=KDBG 指定一个 KDBG 虚拟地址(注意:对于 64 位 Windows 8 及更高版本,这是 KdCopyDataBlock 的地址)
--force 强制使用可疑配置文件
-k KPCR, --kpcr=KPCR 指定特定的 KPCR 地址
--cookie=COOKIE 指定 nt!ObHeaderCookie 的地址(仅适用于 Windows 10)

常见插件命令

插件命令 说明
clipboard 提取Windows剪贴板中的内容
cmdscan 提取执行的命令行历史记录(扫描_COMMAND_HISTORY信息)
dumpfiles 查看指定文件内容(导出缓存文件)
envars 显示进程的环境变量
filescan 提取文件对象(file objects)池信息(扫描文件)
hashdump 转储内存中的Windows帐户密码哈希(LM/NTLM)
imageinfo 查看/识别镜像信息
mimikatz 提取明文密码
netscan 查看网络连接状态
notepad 查看展示的记事本内容
editbox 查看编辑内容
pstree 将进程显示为树状列表
screenshot 获取系统在此刻的截图

命令实例

参考题目–[10.2.1 volatility介绍]内存取证

查看/识别镜像信息
1
2
3
vol.py -f 文件名 imageinfo
vol.py -f Keyboard.raw imageinfo
#查看/识别镜像信息

kali

image-20240926013207143

windows

image-20240926013234434

指定镜像版本并filescan扫描文件再过滤输出
1
2
3
vol.py -f 文件名 --profile=镜像版本 filescan | grep "文件名"	
vol.py -f Keyboard.raw --profile=Win7SP1x64 filescan | grep "keyboard"
#指定镜像版本并filescan扫描文件再过滤输出

image-20240926013752848

指定镜像版本并dumpfiles指定文件,指定内存中的偏移量并导出到当前文件夹下面的test目录
1
2
3
vol.py -f 文件名 --profile=镜像版本 dumpfiles -Q 偏移量 -D 保存路径
vol.py -f Keyboard.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000003d700880 -D ./test
#指定镜像版本并dumpfiles指定文件,指定内存中的偏移量并导出到当前文件夹下面的test目录

image-20240926014722168

image-20240926014933567

  • Title: misc-取证分析
  • Author: ZJ
  • Created at : 2024-09-25 00:00:00
  • Updated at : 2025-01-17 01:46:47
  • Link: https://blog.overlordzj.cn/2024/09/25/ctf/data/misc/取证分析/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments