分类
内存取证
经常利用volatility分析
- 取证文件后缀 .raw、.vmem、.img
- 常用命令(imageinfo,pslist,dumpfiles,memdump)
- 可疑的进程(notepad,cmd)
- 和磁盘取证结合起来考察
- 了解部分操作系统原理
- 常见文件后缀dmg,img
命令
python3 vol.py -f [取证文件] 插件
可以使用 -h 参数获取使用方法和插件介绍,列举几个常用到的命令
-
imageinfo:显示目标镜像的摘要信息,这常常是第一步,获取内存的操作系统类型及版本,之后可以在 –profile 中带上对应的操作系统,后续操作都要带上这一参数
-
pslist:该插件列举出系统进程,但它不能检测到隐藏或者解链的进程,psscan可以
-
pstree:以树的形式查看进程列表,和pslist一样,也无法检测隐藏或解链的进程
-
psscan:可以找到先前已终止(不活动)的进程以及被rootkit隐藏或解链的进程
-
cmdscan:可用于查看终端记录
-
notepad:查看当前展示的 notepad 文本(–profile=winxp啥的低版本可以,win7的不行,可以尝试使用editbox)
-
filescan:扫描所有的文件列表
linux配合 grep 命令进行相关字符定向扫描,如:grep flag、grep -E ‘png|jpg|gif|zip|rar|7z|pdf|txt|doc’
-
dumpfiles:导出某一文件(指定虚拟地址)
需要指定偏移量 -Q 和输出目录 -D
-
mendump:提取出指定进程,常用foremost 来分离里面的文件
需要指定进程-p [pid] 和输出目录 -D
-
editbox:显示有关编辑控件(曾经编辑过的内容)的信息
-
screenshot:保存基于GDI窗口的伪截屏
-
clipboard:查看剪贴板信息
-
iehistory:检索IE浏览器历史记录
-
systeminfo:显示关于计算机及其操作系统的详细配置信息(插件)
-
hashdump:查看当前操作系统中的 password hash,例如 Windows 的 SAM 文件内容(mimikatz插件可以获取系统明文密码)
-
mftparser:恢复被删除的文件
-
svcscan:扫描 Windows 的服务
-
connscan:查看网络连接
-
envars:查看环境变量
-
dlllist: 列出某一进程加载的所有dll文件
-
hivelist: 列出所有的注册表项及其虚拟地址和物理地址
-
timeliner: 将所有操作系统事件以时间线的方式展开
磁盘取证
常用工具
-
磁盘取证软件
十六进制编辑软件,常用的十六进制编辑软件有winhex,010editor,x-way
-
7z
硬盘结构
主引导扇区由主引导程序(Master Boot Record,MBR)、硬盘分区表(Disk Partition Table,DPT)和结束标志三部分组成
磁盘格式
常见的磁盘分区格式有以下几种
-
Windows: FAT12 -> FAT16 -> FAT32 -> NTFS
-
Linux: EXT2 -> EXT3 -> EXT4
-
FAT 主磁盘结构
forensic-filesys
- 删除文件:目录表中文件名第一字节
e5
。
VMDK
VMDK:(VMWare Virtual Machine Disk Format)是虚拟机VMware创建的虚拟硬盘格式,文件存在于VMware文件系统中,被称为VMFS(虚拟机文件系统),可以用7z打开
VMDK不能用volitility打开
VMDK 文件本质上是物理硬盘的虚拟版,也会存在跟物理硬盘的分区和扇区中类似的填充区域,我们可以利用这些填充区域来把我们需要隐藏的数据隐藏到里面去,这样可以避免隐藏的文件增加了 VMDK 文件的大小(如直接附加到文件后端),也可以避免由于 VMDK 文件大小的改变所带来的可能导致的虚拟机错误。而且 VMDK 文件一般比较大,适合用于隐藏大文件。
内存
- 解析 Windows / Linux / Mac OS X 内存结构
- 分析进程,内存数据
- 根据题目提示寻找线索和思路,提取分析指定进程的特定内存数据
磁盘镜像
自己电脑留足镜像文件的存储空间
利用kali工具(AutoPsy)或者其他磁盘镜像分析工具veracryto挂载磁盘文件
找到密钥挂在,查看文件(包括隐藏文件)
数据恢复
工具
volitility3
strings-初步分析
从二进制文件(如磁盘镜像、可执行文件等)中提取可打印字符串,快速筛选出可能包含 flag、配置信息、关键文本的内容,是初步分析的常用工具。
mount-磁盘挂载
mount用于挂载文件系统(比如将磁盘镜像、分区等虚拟为一个 “可访问的磁盘”)。当拿到一个磁盘镜像(如 .img 文件)时,通过 mount 可以把镜像里的分区挂载到系统中,方便后续查看、分析其中的文件内容。
extundelete-恢复文件
针对 ext 系列文件系统(如 ext3、ext4),恢复被删除的文件。如果磁盘分区是 ext 格式,且文件被误删或需要从取证角度恢复已删除数据,可使用该工具尝试找回文件。
veracrypt-解密加密卷
一款开源的磁盘加密/解密工具,支持对整个磁盘分区或容器进行加密,也能解密由它或类似工具(如 TrueCrypt)加密的磁盘。在 CTF 中,若遇到加密的磁盘镜像或分区,可通过 veracrypt 尝试解密,获取其中的隐藏数据或 flag。
TSK命令
TSK 工具按图层组织,此页面基于这些图层进行组织。通常,以下工具将磁盘或文件系统映像作为输入。
原网页链接:TSK 工具概述 - SleuthKitWiki
以下是几个示例:
mmls
mmls
是 mmls
(Multipart Multisector Listing,多分区多扇区列表)工具的命令,它是 autopsy
取证套件中 tsk
工具集的一部分,主要用于查看磁盘镜像或存储设备的分区表信息。
fls
fls
是 file list
的缩写,同样是 tsk
工具集中的一个命令,用于列出磁盘镜像或分区中的文件和目录信息。
参数:
-o 2048
:-o
选项用于指定偏移量(offset),这里表示从磁盘镜像的第 2048 个扇区开始分析,这是因为前面通过mmls
得知第 2048 个扇区之后才是实际的文件系统开始位置。-r
:表示递归列出目录下的所有文件和子目录,即不仅列出当前目录下的文件,还会深入到子目录中列出其中的文件和目录。
执行结果:列出了磁盘镜像中指定偏移量之后的文件和目录信息,如 d/d 26417: home
表示发现了一个名为 home
的目录 ,d/r 11: lost+found
表示发现了一个名为 lost+found
的目录 。 这里的 d
表示目录(directory),d/d
和 d/r
中的第二个字符表示目录的权限等属性相关的信息。
icat
icat
是数字取证工具集 The Sleuth Kit
(TSK)中的一个命令,用于从磁盘镜像或文件系统中提取指定的文件内容。
在命令 icat -o 2048 dds2-alpine.flag.img 18291
中:
-o 2048
:指定偏移量(offset)为 2048 个扇区(通常每个扇区 512 字节,这里用于定位文件系统或特定数据在磁盘镜像中的起始位置,因为前面通过mmls
等命令分析出有效数据从 2048 扇区开始)。dds2-alpine.flag.img
:要分析的磁盘镜像文件名称。18291
:是文件的 inode 编号(inode 是文件系统中存储文件元信息的数据结构,每个文件对应唯一的 inode 编号),通过这个编号可以定位到具体的文件,进而提取其内容。
执行该命令后,会从指定的磁盘镜像中,根据偏移量和 inode 编号,提取出对应文件的内容,图中显示的就是提取出的字符
srch_strings
srch_strings
:是数字取证工具集 The Sleuth Kit
(TSK)中的字符串提取工具,作用是从二进制文件(如磁盘镜像)中提取可打印的 ASCII 或 Unicode 字符串(忽略不可见的二进制数据),类似 strings
命令,但更适用于取证场景。
还有很多命令目前还没有用到,命令连接集放这儿了TSK 工具概述 - SleuthKitWiki
Autopsy(Windows版)
介绍
Autopsy是数字取证工具The Sleuth Kit(TSK)的图形界面,可以用来分析磁盘镜像和恢复删除的文件,提供在磁盘镜像中进行字符串提取,包括关键字搜索,哈希匹配,注册表分析,Web分析,恢复文件,时间轴分析,chrome,firefox 等浏览器历史分析,关键字搜索和邮件分析等功能.支持的镜像格式有DD、E01,用户也可以添加本地驱动器进或本地文件/文件夹进行分析。Autopsy 支持的文件系统有NTFS、FAT12、FAT16、FAT32、 HFS+、ISO9660、Ext2、 Ext3 以及UFS等。另外, Autopsy 还可以很方便地导出报告。
eg:
挑战描述:
标签: 取证, 磁盘
作者:LT 'SYREAL' JONES
描述
下载此磁盘映像并找到标志。
用Autopsy打开disk.flag.img,
发现三个卷和一个未分配卷,Vol2 是引导卷,vol3 是交换分区,vol4 是主分区.交换分区是空的,引导卷没有任何异常,所以接下来将注意力放到vol4.
来回翻找,在home/yone/gallery下面发现了几张图片,在对home/yone下的文件夹仔细查看,大致定位这就是我们即将翻动的天地
yone
├── .ash_history
├── gallery
│ ├── 1.bmp
│ ├── 2.bmp
│ ├── 3.bmp
│ └── 7.bmp
├── irclogs
│ ├── 01
│ │ └── 04
│ │ └── #avidreader13.log
│ ├── 02
│ │ ├── 04
│ │ │ └── #leagueoflegends.log
│ │ ├── 07
│ │ │ └── #leagueoflegends.log
│ │ ├── 09
│ │ │ └── #leagueoflegends.log
│ │ ├── 17
│ │ │ └── #leagueoflegends.log
│ │ └── 25
│ │ └── #leagueoflegends.log
│ └── 07
│ └── 17
│ └── #common.log
├── .lynx
│ └── browsing-history.log
├── Maildir
│ ├── cur
│ │ ├── 1673722143.M758346P394112Q1.haynekhtnamet:2,S
│ │ ├── 1673722272.M345699P394146Q1.haynekhtnamet:2,S
│ │ ├── 1673722272.M354727P394146Q3.haynekhtnamet:2,S
│ │ ├── 1673722272.M362142P394146Q4.haynekhtnamet:2,S
│ │ ├── 1673722272.M370158P394146Q5.haynekhtnamet:2,S
│ │ ├── 1673722272.M382945P394146Q7.haynekhtnamet:2,S
│ │ ├── 1673722272.M388674P394146Q8.haynekhtnamet:2,S
│ │ ├── 1673722272.M394284P394146Q9.haynekhtnamet:2,S
│ │ ├── 1673722272.M406783P394146Q11.haynekhtnamet:2,S
│ │ ├── 1673722272.M413082P394146Q12.haynekhtnamet:2,S
│ │ └── 1673722272.M418711P394146Q13.haynekhtnamet:2,S
│ ├── new
│ │ └── 1673722272.M424681P394146Q14.haynekhtnamet
│ └── tmp
└── notes├── 1.txt├── 2.txt└── 3.txt
并没看出什么,只觉得都很吓人,继续检查下一个子目录 irclogs。
IRC 代表 Internet Relay Chat,因此我们可以推测 irclogs 中的文件是聊天记录。让我们先看看 avidreader13.log
[08:12] <yone786> Ok, let me give you the keys for the light.
[08:12] <avidreader13> I’m ready.
[08:15] <yone786> First it’s steghide.
[08:15] <yone786> Use password: akalibardzyratrundle
[08:16] <avidreader13> Huh, is that a different language?
[08:18] <yone786> Not really, don’t worry about it.
[08:18] <yone786> The next is the encryption. Use openssl, AES, cbc.
[08:19] <yone786> salt=0f3fa17eeacd53a9 key=58593a7522257f2a95cce9a68886ff78546784ad7db4473dbd91aecd9eefd508 iv=7a12fd4dc1898efcd997a1b9496e7591
[08:19] <avidreader13> Damn! Ever heard of passphrases?
[08:19] <yone786> Don’t trust em. I seed my crypto keys with uuids.
[08:20] <avidreader13> Ok, I get it, you’re paranoid.
[08:20] <avidreader13> But I have no idea if that would work.
[08:21] <yone786> Haha, I’m not paranoid. I know you’re not a good hacker dude.
[08:21] <avidreader13> Is there a better way?
[08:22] * yone786 yawns.
[08:24] <yone786> You’re ok at hacking. I’m good at writing code and using it
[08:24] <avidreader13> What language are you writing in?
[08:26] <yone786> C
[08:26] <avidreader13> Oh, I see.
[08:26] <yone786> I’m glad you like it. I’m sure you wouldn’t understand half of what I was doing.
[08:28] <avidreader13> I understand enough, but I do wish you wouldn’t take so much time with it.
[08:28] <yone786> Sorry. Well, I wish you could learn some things.
[08:29] <avidreader13> But it’s an incredible amount of time you spend on it.
[08:29] <yone786> Haha, don’t take it like that.
仔细阅读会发现在这个聊天记录提到了steghide的使用,这是一种用于隐藏图像中数据的程序.或许与之前的那四个bmp有关.尝试使用 steghide 提取嵌入的消息。使用聊天日志中提供的密码“akalibardzyratrundle”:
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ steghide extract -sf 1.bmp -p akalibardzyratrundle
wrote extracted data to "les-mis.txt.enc".
得到了 les-mis.txt.enc,我们可以猜测它是加密的。聊天日志提到了 openssl 并提供了 salt、key 和 iv 值:
salt=0f3fa17eeacd53a9 key=58593a7522257f2a95cce9a68886ff78546784ad7db4473dbd91aecd9eefd508
iv=7a12fd4dc1898efcd997a1b9496e7591
尝试解密,搜索了一番用openssl
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ openssl enc -d -aes256 -in les-mis.txt.enc -out les-mis.txt \
-S 0f3fa17eeacd53a9 \
-K 58593a7522257f2a95cce9a68886ff78546784ad7db4473dbd91aecd9eefd508 \
-iv 7a12fd4dc1898efcd997a1b9496e7591 \
| head -5 les-mis.txtThe Project Gutenberg eBook of Les Misérables, by Victor HugoThis eBook is for the use of anyone anywhere in the United States and
most other parts of the world at no cost and with almost no restrictions
whatsoever. You may copy it, give it away or re-use it under the terms
没发现flag,尝试过滤搜索
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ if [ $(cat les-mis.txt | grep -c "picoCTF") != 1 ]; \
then printf "\nFlag not found!"; fiFlag not found!
没找到,尝试别的图片
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ steghide extract -sf 2.bmp -p akalibardzyratrundle
wrote extracted data to "dracula.txt.enc".┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ openssl enc -d -aes256 -in dracula.txt.enc -out dracula.txt \
-S 0f3fa17eeacd53a9 \
-K 58593a7522257f2a95cce9a68886ff78546784ad7db4473dbd91aecd9eefd508 \
-iv 7a12fd4dc1898efcd997a1b9496e7591 \
| if [ $(cat dracula.txt | grep -c "picoCTF") != 1 ]; \
then printf "\nFlag not found!"; fiFlag not found!
尝试3.bmp:
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ steghide extract -sf 3.bmp -p akalibardzyratrundle
wrote extracted data to "frankenstein.txt.enc".┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ openssl enc -d -aes256 -in frankenstein.txt.enc -out frankenstein.txt \
-S 0f3fa17eeacd53a9 \
-K 58593a7522257f2a95cce9a68886ff78546784ad7db4473dbd91aecd9eefd508 \
-iv 7a12fd4dc1898efcd997a1b9496e7591 \
| if [ $(cat frankenstein.txt | grep -c "picoCTF") != 1 ]; \
then printf "\nFlag not found!"; fiFlag not found!
尝试7.bmp:
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ steghide extract -sf 7.bmp -p akalibardzyratrundle
steghide: could not extract any data with that passphrase!
7.bmp啥也没有哦,图象费了半天劲,啥也没发现,接着看别的聊天记录吧.
下一个子目录 Maildir 包含电子邮件,并有其他 3 个子目录 cur、new 和 temp。先打开cur...
此文件夹中的电子邮件似乎是营销垃圾邮件。然而,一个有趣的是三封已删除的电子邮件。这些是标有红色“X”的文件。其中两个文件无法立即恢复,另一个已删除文件的 inode 已被.ash_history重复使用,结果也无法恢复。
现在看看新文件夹Maildir,这里只有一封电子邮件
查看另一个文件夹.lynx。我们可以看到.lynx 中有一个名为“browsing-history.log”的文件,这是有道理的,因为 Lynx 是一个网络浏览器。
查看browsing-history.log,发现
www.google.com
https://www.google.com/search?q=number+encodings&source=hp&ei=WeC9Y77KJ_iwqtsP0sGu6A0&iflsig=AK50M_UAAAAAY73uaRxDkbHRUH8jn4OVhOgM8riUqvVI&ved=0ahUKEwj-2r_EgL78AhV4mGoFHdKgC90Q4dUDCAk&uact=5&oq=number+encodings&gs_lcp=Cgdnd3Mtd2l6EAMyBggAEBYQHjIFCAAQhgMyBQgAEIYDMgUIABCGAzIFCAAQhgM6DgguEIAEELEDEIMBENQCOgsIABCABBCxAxCDAToRCC4QgAQQsQMQgwEQxwEQ0QM6CAgAELEDEIMBOgsILhCABBCxAxCDAToFCAAQgAQ6CAgAEIAEELEDOggILhCABBDUAjoHCAAQgAQQCjoHCC4QgAQQClAAWI0VYPAXaABwAHgDgAHDA4gB-iKSAQkwLjMuNS40LjOYAQCgAQE&sclient=gws-wiz
https://en.wikipedia.org/wiki/Church_encoding
https://cs.lmu.edu/~ray/notes/numenc/
https://www.wikiwand.com/en/Golden_ratio_base
似乎是某人的浏览历史记录。“yone”尝试查看不同的编码.似乎在找到有关黄金比例基础的信息后停止搜索。
综上,我们浏览了整个主文件夹的“yone”,发现了四张图像,其中三张包含我们解密的隐藏消息,另一张图像可能有也可能没有隐藏的秘密。我们看到“yone”删除了“阿泽里特大师”的三封电子邮件,我们看到这三封已删除的电子邮件无法立即恢复。
接下来,开始寻找那些已删除的电子邮件.也就是"尸检"!我们知道已删除的电子邮件是从“azerite17@gmail.com”发送的或发送到“”的,因此我们对该电子邮件执行简单的关键字搜索.
找到了什么?
找到了,在未分配的空间中有多个命中。看到了被删除的三封电子邮件。我把它们按顺序排列在下面
subject: Enlightened passwords
to: Sten Walker <yone786@gmail.com>
from: Bob Bobberson <azerite17@gmail.com>
Yone,
You asked me about good passwords. I have some advice on this topic as it relates greatly to our shared endeavor of spreading light.
I cannot recommend this philosophy of passwords highly enough: https://xkcd.com/936/ My only adaptation is that I use unique words from my favorite game, World of Warcraft.
Please delete this email as soon as you have taken whatever notes you need and censored any damning details.
To the Light and All it reveals,
- The Azerite Mastersubject: Re: Enlightened passwords
to: Bob Bobberson <azerite17@gmail.com>
from: Sten Walker <yone786@gmail.com>
I've adopted this for my passwords, Azerite. For my most important password, I use it both for my ledger and for my user account on my machine, just so I remember it better without writing it down.subject: Re: Enlightened passwords
to: Sten Walker <yone786@gmail.com>
from: Bob Bobberson <azerite17@gmail.com>
Very good.
- The Azerite Master
从这些电子邮件中我们看到,“azerite”推荐“yone”遵循 https://xkcd.com/936/ 的密码理念:
Press enter or click to view image in full size
“Yone”遵循此建议并将其作为密码。
也许这是找到7.bmp密码的线索?不过,你看过 xkcd 漫画,暴力破解用四个随机单词制作的密码需要数年时间。
irclogs
├── 01
│ └── 04
│ └── #avidreader13.log
├── 02
│ ├── 04
│ │ └── #leagueoflegends.log
│ ├── 07
│ │ └── #leagueoflegends.log
│ ├── 09
│ │ └── #leagueoflegends.log
│ ├── 17
│ │ └── #leagueoflegends.log
│ └── 25
│ └── #leagueoflegends.log
└── 07└── 17└── #common.log
用户“yone”似乎是英雄联盟的狂热玩家。这有多重要?如果你回顾一下我们用在 steghide 上使用的密码“akalibardzyratrundle”,它实际上是英雄联盟中四个英雄的名字串联起来的。四位冠军是阿卡丽、巴德、婕拉和特伦德尔,如这里所确认的。用户“yone”也以英雄联盟冠军 The Unforgotten Yone 的名字命名!
因此,可以合理地假设从7.bmp中提取隐藏数据的密码遵循相同的模式。
然而,存在一个问题。英雄联盟中有 162 个独特的冠军名称,因此可能的排列(换句话说,密码)的数量是:
基本上,我们对7.bmp的字典攻击的单词列表会663526080不同的密码。虽然这是可能实现的,但我们希望现在而不是以后破解它!对我们来说幸运的是,我们可以走捷径。还记得3.txt吗?
I keep forgetting this, but it starts like: yasuoaatrox...
7.bmp的密码是否以“yasuoaatrox”开头?亚索和亚托克斯都是英雄联盟冠军,所以它确实符合模式。如果我们知道前2个单词,会有多少个排列?
只有 26082。这更容易管理。
从制作单词列表开始。我们需要将每个英雄联盟冠军的名字放入文本文件中。我们可以从这里复制列表并将其粘贴到名为 lol_champs.txt 的新文件中。
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ head lol_champs.txt
AatroxAhriAkaliAkshanAlistar
使用sed命令:
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ sed -i '/^$/d' lol_champs.txt ; head lol_champs.txt
Aatrox
Ahri
Akali
Akshan
Alistar
Amumu
Anivia
Annie
Aphelios
Ashe
制作一个 python 脚本来创建我们的单词列表:
#make_lol_wordlist.py#load champion names into lines
with open('lol_champs.txt') as f:lines = f.read().splitlines()with open("lol_wordlist.txt", "a") as g:for x in lines:for y in lines:pw = ("yasuoaatrox"+x+y+"\n").lower()g.write(pw)
运行make_lol_wordlist.py:
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ python3 make_lol_wordlist.py ; head lol_wordlist.txt
yasuoaatroxaatroxaatrox
yasuoaatroxaatroxahri
yasuoaatroxaatroxakali
yasuoaatroxaatroxakshan
yasuoaatroxaatroxalistar
yasuoaatroxaatroxamumu
yasuoaatroxaatroxanivia
yasuoaatroxaatroxannie
yasuoaatroxaatroxaphelios
yasuoaatroxaatroxashe
现在我们有了单词列表,让我们创建另一个脚本来对7.bmp进行字典攻击。
#attack.pyimport subprocessdef dict_attack(wordlist):for x in wordlist:try:subprocess.check_output(["steghide", "extract", "-sf", "7.bmp", "-p", x], stderr=subprocess.DEVNULL)return xexcept subprocess.CalledProcessError:passreturn 0if __name__ == "__main__":with open('lol_wordlist.txt') as f:lines = f.read().splitlines()passphrase = dict_attack(lines)if passphrase:print("Success! Passphrase is " + passphrase)else:print("Sorry, no cigar.")
运行attack.py:
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ python3 cracker.py
Success! Passphrase is yasuoaatroxashecassiopeia
啊哈!密码是“yasuoaatroxashecassiopeia”,steghide 确实成功地提取了隐藏的数据。隐藏数据已提取到名为 ledger.1.txt.enc 的文件中.
查看,
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ head ledger.1.txt.enc
��#ԇ�.O�G<���A ��md��٣�\��Kس�B��9�ޗa�$O�y��oP�Jb�����<�@��܉a|+�(9�/ӈpth�U˨�LK/܀M
�-&m�@��Y�q�l$��Ȃ{���b{&��S��c���?�Y���1�֯������,�A�c��o��8q��~�ʌC��/I��~h
���lA����\��=ц�|��J,��،H�'�GX�e�VA�$\n��:?�����9�ve��&pƶ%�������5 'J����989|/�k��v|p��/Z�DH��|>I*l����3C
5d�
��_����.D3��Mz8�0k]�6�̤�٣�_�%��
�+"K��Eh|w�m���K8Ҡ0��2X��W��!@��1��F��n���J2���gVh���)��6-8R�8�ҟ1
�yd�^)W��T�#tI^�5T�F� ��rG�t����7��#lp�(>%:�R�-��O�������j�w�[�'S���\P���`[��)�����!�~h��F�8\,�仇c?����
似乎是加密的。但它的加密方式是否与其他三张图像相同?
└─$ openssl enc -d -aes256 -in ledger.1.txt.enc -out ledger.1.txt \
-S 0f3fa17eeacd53a9 \
-K 58593a7522257f2a95cce9a68886ff78546784ad7db4473dbd91aecd9eefd508 \
-iv 7a12fd4dc1898efcd997a1b9496e7591
bad decrypt
不可以,因此必须使用其他值来加密 ledger.1.txt.enc。我们将不得不在驱动器上的其他地方找到这些值,暴力破解 aes-256-cbc 不是好的选择。
在我看来,下一部分是挑战中最困难的部分。
因为我到现在反复看了三遍仍然没有看明白.
使用 Autopsy,您可以查看磁盘上未分配的数据以及使用文件雕刻。
但是在搜索了 3-4 个小时的雕刻文件和未分配的空间后,我没有发现任何有用的东西。我还搜索了“key”、“salt”和“iv”,但没有成功。我无可救药地被困住了,直到我发现了松弛的空间。使用 NIST 的定义,松弛空间为:
文件分配块或内存页中可能保存剩余数据的未使用空间。
我们可以使用 Autopsy 搜索闲置空间,只需在“slack”上进行关键字搜索:
搜索结果是磁盘中每个文件的空闲空间:
不幸的是,由于我们不知道我们在寻找什么,因此我们将不得不一一查看每个文件。
然而,在我们搜索的早期,我们发现了......
那到底是什么?二元的?让我们更好地了解一下:phi_enc.txt,如上图
奇怪,但我想我以前见过这种情况。还记得之前browsing-history.log的文件吗?这是该日志中的最后一个条目......
黄金比例底座 — Wikiwand
现在从链接中查看黄金比例基础的示例:
Taken from: Golden ratio base — Wikiwand
这看起来很像从松弛空间中获取的数据!它可以用黄金比例碱基编码吗?让我们制作一个脚本来解码它。
#phi_decoder.py
from math import ceil
from scipy.constants import goldendef phinary_to_decimal(phigit):integer, fraction = phigit.split(".")integer = integer[::-1] #reverse integer stringnumber = 0for i, x in enumerate(integer):if x == "1":number = number + golden ** (i)for i, x in enumerate(fraction):if x == "1":number = number + golden ** -(i+1)return numberif __name__ == "__main__":with open("phi_enc.txt") as f:string = f.read()string = string.rstrip("\n")#Split string every 15th characterphigits = [string[i: i + 15] for i in range(0, len(string), 15)]decoded_phi = []for phigit in phigits:decoded_phi.append(ceil(phinary_to_decimal(phigit)))print(''.join(map(chr,decoded_phi)))
在上面的脚本中,我每 15 个字符拆分一次phi_enc.txt,因为在字符串的开头,第一个“.”之前有 11 个字符,在末尾的“.”之后有 3 个字符。
执行脚本时我们得到了什么有用的东西吗?
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ python3 phi_decoder.py
salt=2350e88cbeaf16c9
key=a9f86b874bd927057a05408d274ee3a88a83ad972217b81fdc2bb8e8ca8736da
iv=908458e48fc8db1c5a46f18f0feb119f
好!我们可以使用这些值解密 ledger.1.txt.enc 吗?
┌──(user㉿kali)-[~/picoctf/UnforgettenBits]
└─$ openssl enc -d -aes256 -in ledger.1.txt.enc -out ledger.1.txt \
-S 2350e88cbeaf16c9 \
-K a9f86b874bd927057a05408d274ee3a88a83ad972217b81fdc2bb8e8ca8736da \
-iv 908458e48fc8db1c5a46f18f0feb119f \
| cat ledger.1.txt
avidreader13 PAIDLes Mis, Dracula, Frankenstein, Swiss FamilyRobinson, Don Quixote, A Tale of Two Cities513u7h PAIDDon QuixotemasterOfSp1n PAIDSwiss Family Robinson, A Tale of Two CitiesAwolCoyote PAIDLes Mis, DraculapicoCTF UNPAIDpicoCTF{f473_53413d_de7d35ee}
震惊,终于做出来了!(容我再看看)