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 ``` image **mmls - 显示卷系统的分区布局(分区表)** ``` mmls disk1.img ``` image 所以我有两个 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 ``` image 我想提取 home 目录,或者更确切地说是其中的内容。 tsk_recover - 将镜像中的文件导出到本地目录 ``` tsk_recover -o 1140736 -d 64770 -e disk1.img ./ ``` _-d 64770_ 要恢复的目录 inode 编号,64770 是 home 目录。 -e 恢复所有文件(已分配和未分配的) image 现在是时候使用基本的导航命令从 _ctf-player_ 目录中找到 flag 了。 image ## Forensics Git 1 这个挑战考察了 git 的概念。 ``` man git ``` 提示: 如何检出(checkout)先前提交(commit)的文件? 命令将与第一个挑战类似。 image 你可以提取目标目录,或者挂载磁盘并在上面进行操作。 挂载时,我们需要使用通过扇区大小计算得出的镜像偏移量。 根据你的 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 的哈希值。 image ``` git show 5fb8194539c770a830b8ba089a50778c07072b03 ``` git show - 一个 Git 命令,用于显示有关 Git 对象(commit、tag、blob、tree)的信息。 5fb8194539c770a830b8ba089a50778c07072b03 - 一个 Git commit 哈希值(SHA-1 标识符) - 这是一个 40 个字符的十六进制字符串,用于唯一标识仓库中的特定 commit。 image ## Forensics Git 2 **描述** 特工们打断了肇事者删除磁盘的例行操作。你能恢复这个 git 仓库吗? 提示: 我们认为删除操作在被触及任何 git 对象之前就被打断了。 * 遵循我们在之前的挑战中采取的步骤 * 决定是挂载还是提取 image ## Disko-4 **描述** 你能在这个磁盘镜像中找到 flag 吗?这一次我删除了文件!让我看看你现在怎么获取它! 提示 你会如何查找已删除的文件? * 这个挑战中的镜像是一个逻辑磁盘镜像。_mmls_ 命令没有返回任何输出。 image * 我们如何查找已删除的文件? 记住我们使用 _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 ``` image **我想这就算大功告成了 :)**
标签:CTF Writeup, img_stat, meg, mmls, PicoCTF, Sleuth Kit, TSK, 二进制发布, 信息安全, 分区表分析, 域渗透, 安全竞赛, 开源工具, 数字取证, 数据恢复, 文件系统调查, 物理镜像, 电子数据取证, 磁盘取证, 磁盘镜像分析, 网络安全, 网络安全研究, 自动化脚本, 逻辑镜像, 隐私保护