p3g4-su5/Sleuth-kit-intro-Forensics-Git-Disko4-Pico-CTF
GitHub: p3g4-su5/Sleuth-kit-intro-Forensics-Git-Disko4-Pico-CTF
通过逐步解决 Pico CTF 取证挑战,系统介绍 Sleuth Kit 数字取证工具集在磁盘镜像分析、文件恢复和已删除文件提取方面的实际操作方法。
Stars: 1 | Forks: 0
# Sleuth-kit-Intro (Forensics-Git, Disko4-Pico-CTF)
通过 Pico CTF 中的 Forensics Git 0-2 和 Disko4 挑战赛,介绍 Sleuth Kit 的使用。
Sleuth Kit (TSK) 是一个开源的命令行数字取证工具集,专为调查磁盘镜像和文件系统而设计。
我将通过解决一系列 Pico CTF 挑战赛来使用并理解 Sleuth Kit。
**首先,我将从 Forensics Git 系列开始:**
## Forensics Git 0
描述:
你能在这个磁盘镜像中找到 flag 吗?
(记住下载镜像文件)
提示:
如何从磁盘镜像中提取目录?
从对磁盘镜像进行侦察开始
**img_stat - 显示镜像文件的详细信息**
```
img_stat disk1.img
```
**mmls - 显示卷系统的分区布局(分区表)**
```
mmls disk1.img
```
所以我有两个 Linux 文件系统需要调查:
* 分区 1 → 可能是主系统 (002)
* 分区 3 → 可能是隐藏 flag 的地方 (004)
需要记住的一点是,这是一个**物理磁盘镜像**
物理磁盘镜像是对物理存储设备(HDD、SSD、USB、CD/DVD)的逐字节、扇区级别的完整拷贝,包含所有数据、文件系统、分区以及未使用或已删除的空间。
如果所讨论的磁盘镜像是一个磁盘镜像,**mmls** 命令将输出显著的结果。
如果该磁盘镜像是一个逻辑磁盘镜像,_mmls_ 命令将输出错误。
逻辑磁盘镜像是对特定分区或文件系统内活动文件、文件夹和数据的基于文件的拷贝,不包含未分配的空间。
与物理镜像不同,它专注于可见数据,因此速度更快、体积更小,非常适合用于针对性的取证调查或备份特定用户数据,同时忽略系统开销。
从分区布局中我们了解到以下几点:
* DOS 分区表
* 偏移扇区:0
* 单位为 512 字节的扇区(在计算偏移量时非常重要)
* 每个分区的起始和结束扇区位置
接下来是列出分区的内容,为此我将使用 _fls_ 命令。
fls - 列出磁盘镜像中的文件和目录名称。
目标是第 3 个分区 (004),该分区起始于扇区 0001140736
```
fls -o 1140736 disk1.img
```
我想提取 home 目录,或者更确切地说是其中的内容。
tsk_recover - 将镜像中的文件导出到本地目录
```
tsk_recover -o 1140736 -d 64770 -e disk1.img ./
```
_-d 64770_ 要恢复的目录 inode 编号,64770 是 home 目录。
-e 恢复所有文件(已分配和未分配的)
现在是时候使用基本的导航命令从 _ctf-player_ 目录中找到 flag 了。
## Forensics Git 1
这个挑战考察了 git 的概念。
```
man git
```
提示:
如何检出(checkout)先前提交(commit)的文件?
命令将与第一个挑战类似。
你可以提取目标目录,或者挂载磁盘并在上面进行操作。
挂载时,我们需要使用通过扇区大小计算得出的镜像偏移量。
根据你的 mmls 输出:
```
mmls disk2.img
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors
```
* 磁盘被划分为多个扇区
* 每个扇区 = 512 字节
* 分区起始位置(例如 2048)是以扇区为单位的,而不是字节
mount 命令需要的是偏移量,且偏移量必须以字节为单位,而不是扇区。
转换公式为:
偏移量(字节) = 起始扇区 × 扇区大小
1140736*512= 584056832
```
sudo mount -o loop,offset=584056832 disk2.img /mnt/disk2
```
我已经在我的机器上的 _/mnt/_ 目录中准备好了一个用于挂载的文件夹。
另一种方法是使用 _tsk_recover_ 命令提取目标目录,即 home 目录。
```
tsk_recover -o 1140736 -d 64770 -e disk2.img ./
```
在执行了一些命令之后,我找到了 git 仓库目录,并获取了 commit 的哈希值。
```
git show 5fb8194539c770a830b8ba089a50778c07072b03
```
git show - 一个 Git 命令,用于显示有关 Git 对象(commit、tag、blob、tree)的信息。
5fb8194539c770a830b8ba089a50778c07072b03 - 一个 Git commit 哈希值(SHA-1 标识符) - 这是一个 40 个字符的十六进制字符串,用于唯一标识仓库中的特定 commit。
## Forensics Git 2
**描述**
特工们打断了肇事者删除磁盘的例行操作。你能恢复这个 git 仓库吗?
提示:
我们认为删除操作在被触及任何 git 对象之前就被打断了。
* 遵循我们在之前的挑战中采取的步骤
* 决定是挂载还是提取
## Disko-4
**描述**
你能在这个磁盘镜像中找到 flag 吗?这一次我删除了文件!让我看看你现在怎么获取它!
提示
你会如何查找已删除的文件?
* 这个挑战中的镜像是一个逻辑磁盘镜像。_mmls_ 命令没有返回任何输出。
* 我们如何查找已删除的文件?
记住我们使用 _fls_ 来列出磁盘镜像中的文件和目录。
让我们查阅它的手册,看看是否能找到有用的帮助。
```
man fls
```
-r 递归显示目录。这不会跟踪已删除的目录,因为它无法做到。
-d 仅显示已删除的条目
-p 显示每个条目的完整路径。默认情况下,在递归运行时,它使用“+”号表示目录深度。
* 这些是我决定使用的参数。
* 请记住 disko-4.dd 是一个逻辑镜像,这意味着它没有扇区,甚至没有起始和结束位置。
* 命令将会非常简单
```
fls -r -d -p disko-4.dd
```
接下来是使用 _icat_ 提取输出。
icat - 根据文件的 inode 编号输出其内容。
```
icat disko-4.dd 532021 > dont-delete.gz
```
**我想这就算大功告成了 :)**
**mmls - 显示卷系统的分区布局(分区表)**
```
mmls disk1.img
```
所以我有两个 Linux 文件系统需要调查:
* 分区 1 → 可能是主系统 (002)
* 分区 3 → 可能是隐藏 flag 的地方 (004)
需要记住的一点是,这是一个**物理磁盘镜像**
物理磁盘镜像是对物理存储设备(HDD、SSD、USB、CD/DVD)的逐字节、扇区级别的完整拷贝,包含所有数据、文件系统、分区以及未使用或已删除的空间。
如果所讨论的磁盘镜像是一个磁盘镜像,**mmls** 命令将输出显著的结果。
如果该磁盘镜像是一个逻辑磁盘镜像,_mmls_ 命令将输出错误。
逻辑磁盘镜像是对特定分区或文件系统内活动文件、文件夹和数据的基于文件的拷贝,不包含未分配的空间。
与物理镜像不同,它专注于可见数据,因此速度更快、体积更小,非常适合用于针对性的取证调查或备份特定用户数据,同时忽略系统开销。
从分区布局中我们了解到以下几点:
* DOS 分区表
* 偏移扇区:0
* 单位为 512 字节的扇区(在计算偏移量时非常重要)
* 每个分区的起始和结束扇区位置
接下来是列出分区的内容,为此我将使用 _fls_ 命令。
fls - 列出磁盘镜像中的文件和目录名称。
目标是第 3 个分区 (004),该分区起始于扇区 0001140736
```
fls -o 1140736 disk1.img
```
我想提取 home 目录,或者更确切地说是其中的内容。
tsk_recover - 将镜像中的文件导出到本地目录
```
tsk_recover -o 1140736 -d 64770 -e disk1.img ./
```
_-d 64770_ 要恢复的目录 inode 编号,64770 是 home 目录。
-e 恢复所有文件(已分配和未分配的)
现在是时候使用基本的导航命令从 _ctf-player_ 目录中找到 flag 了。
## Forensics Git 1
这个挑战考察了 git 的概念。
```
man git
```
提示:
如何检出(checkout)先前提交(commit)的文件?
命令将与第一个挑战类似。
你可以提取目标目录,或者挂载磁盘并在上面进行操作。
挂载时,我们需要使用通过扇区大小计算得出的镜像偏移量。
根据你的 mmls 输出:
```
mmls disk2.img
DOS Partition Table
Offset Sector: 0
Units are in 512-byte sectors
```
* 磁盘被划分为多个扇区
* 每个扇区 = 512 字节
* 分区起始位置(例如 2048)是以扇区为单位的,而不是字节
mount 命令需要的是偏移量,且偏移量必须以字节为单位,而不是扇区。
转换公式为:
偏移量(字节) = 起始扇区 × 扇区大小
1140736*512= 584056832
```
sudo mount -o loop,offset=584056832 disk2.img /mnt/disk2
```
我已经在我的机器上的 _/mnt/_ 目录中准备好了一个用于挂载的文件夹。
另一种方法是使用 _tsk_recover_ 命令提取目标目录,即 home 目录。
```
tsk_recover -o 1140736 -d 64770 -e disk2.img ./
```
在执行了一些命令之后,我找到了 git 仓库目录,并获取了 commit 的哈希值。
```
git show 5fb8194539c770a830b8ba089a50778c07072b03
```
git show - 一个 Git 命令,用于显示有关 Git 对象(commit、tag、blob、tree)的信息。
5fb8194539c770a830b8ba089a50778c07072b03 - 一个 Git commit 哈希值(SHA-1 标识符) - 这是一个 40 个字符的十六进制字符串,用于唯一标识仓库中的特定 commit。
## Forensics Git 2
**描述**
特工们打断了肇事者删除磁盘的例行操作。你能恢复这个 git 仓库吗?
提示:
我们认为删除操作在被触及任何 git 对象之前就被打断了。
* 遵循我们在之前的挑战中采取的步骤
* 决定是挂载还是提取
## Disko-4
**描述**
你能在这个磁盘镜像中找到 flag 吗?这一次我删除了文件!让我看看你现在怎么获取它!
提示
你会如何查找已删除的文件?
* 这个挑战中的镜像是一个逻辑磁盘镜像。_mmls_ 命令没有返回任何输出。
* 我们如何查找已删除的文件?
记住我们使用 _fls_ 来列出磁盘镜像中的文件和目录。
让我们查阅它的手册,看看是否能找到有用的帮助。
```
man fls
```
-r 递归显示目录。这不会跟踪已删除的目录,因为它无法做到。
-d 仅显示已删除的条目
-p 显示每个条目的完整路径。默认情况下,在递归运行时,它使用“+”号表示目录深度。
* 这些是我决定使用的参数。
* 请记住 disko-4.dd 是一个逻辑镜像,这意味着它没有扇区,甚至没有起始和结束位置。
* 命令将会非常简单
```
fls -r -d -p disko-4.dd
```
接下来是使用 _icat_ 提取输出。
icat - 根据文件的 inode 编号输出其内容。
```
icat disko-4.dd 532021 > dont-delete.gz
```
**我想这就算大功告成了 :)**标签:CTF Writeup, img_stat, meg, mmls, PicoCTF, Sleuth Kit, TSK, 二进制发布, 信息安全, 分区表分析, 域渗透, 安全竞赛, 开源工具, 数字取证, 数据恢复, 文件系统调查, 物理镜像, 电子数据取证, 磁盘取证, 磁盘镜像分析, 网络安全, 网络安全研究, 自动化脚本, 逻辑镜像, 隐私保护