没有合适的资源?快使用搜索试试~ 我知道了~
首页CTF取证类题目指南1.pdf
CTF取证类题目指南1.pdf
需积分: 48 1.7k 浏览量
更新于2023-05-22
评论 3
收藏 314KB PDF 举报
取证类题目 在 CTF 中,取证赛题包括了文件分析、隐写、内存镜像分析和流量抓包分析。 任何要求检查一个静态数据文件(与可执行程序和远程服务器不同)从而获取 隐藏信息的都可以被认为是取证题(除非它包含了密码学知识而被认为是密码 类赛题)。
资源详情
资源评论
资源推荐

CTF 取证类题目指南
取证类题目
在 CTF 中,取证赛题包括了文件分析、隐写、内存镜像分析和流量抓包分析。
任何要求检查一个静态数据文件(与可执行程序和远程服务器不同)从而获取
隐藏信息的都可以被认为是取证题(除非它包含了密码学知识而被认为是密码
类赛题)。
取证作为 CTF 中的一大类题目,不完全包括安全产业中的实际工作,常见的与
之相关的工作是事故相应。但即使在事故响应工作中,计算机取证也经常是执
法部门获取证据数据和证物的工作,而非对防御攻击者或恢复系统感兴趣的商
业事故相应企业。
与大多数 CTF 取证题目不同,现实生活中的计算机取证任务很少会涉及巧妙的
编码、隐藏数据、层层嵌套的文件中的文件,或是其他脑洞类的谜题。很多时
候刑事案件需要的是精心恢复一个被破坏的 PNG 文件,根据一张照片或 QR 码来
解码获取包含 NES 只读内存镜像来输出证据的压缩包密码。也就是说,现实的
取证需要从业者能够找出间接的恶意行为证据:攻击者攻击系统的痕迹,或是
内部威胁行为的痕迹。实际工作中计算机取证大部分是从日志、内存、文件系
统中找出犯罪线索,并找出与文件或文件系统中数据的关系。而网络(流量抓
包)取证比起内容数据的分析,更注重元数据的分析,也就是当前不同端点间
常用 TLS 加密的网络会话。
CTF 竞赛中的取证类谜题和实际生活中的工作关联较少的原因可能在于这类题
目并不像漏洞利用一类的题目受到人们的注意。也有可能是它很少吸引黑客们
来参与解答此类题目。不管怎么样,许多参赛者都喜欢解答 CTF 中各种简单多
样化的取证题目,考虑到大多数参赛者没有能够在可执行文件分析大赛中带来
巨大优势的售价 5000 美元的带有 Hex-Rays 反编译器的 IDA Pro 专业版,这类
题目还是相对适合入门新手来做的。
需要的技术
下列三种能力是解答取证类 CTF 题目中最常用到的:
• 掌握一门脚本语言(例如 python)
• 掌握如何使用该语言来操作二进制数据(涉及到字节的操作)
• 认识各类文件格式、协议、结构和编码
前两类技术你可以在 CTF 外自行学习,而第三种则只能在实战中不断熟练。好
在通过本文档,你可以有个大致的了解。

当然了,在大部分 CTF 比赛中最常用的环境是 Linux 系统,有时候也会用到 VM
虚拟机中的 Windows。MacOS 也可以拿来代替 Linux,前提是你得忍受部分开源
工具无法正确编译运行。
通过 python 操作二进制数据
假设你已经初步掌握了一些 Python 编程技巧,你也可能不太清楚如何有效地操
作二进制数据。类似 C 的低级语言可能更适合这一工作,但 Python 开源社区中
的各种包比起学习 C 语言的难度,可以帮助你更快速的上手操作二进制数据。
下面是常用的 python 操作二进制数据的例子
在二进制模式中读取和写入文件:
f = open('Reverseit', "rb")
s = f.read()
f.close()
f = open('ItsReversed', "wb")
f.write(s[::-1])
f.close()
字节数组是一种数组的可变序列,在 Python2 和 3 都可以使用。
>>> s = bytearray(b"Hello World")
>>> for c in s: print(c)
...
72
101
108
108
111
32
87
111
114
108
100
你也可以通过 16 进制的字节数组来表示 Unicode 字符串:
>>> example2 = bytearray.fromhex(u'00 ff')
>>> example2
bytearray(b'\x00\xff')
>>> example2[1]

255
字节数组的格式包括了大多数 python 中常用的字符串和列表函数,例如:
split(), insert(), reverse(), extend(), pop(), remove().
将文件以二进制数组形式读取的例子:
data = bytearray(open('challenge.png', 'rb').read())
常见的取证概念和工具
接下来会讲述常见的 CTF 取证题目概念和一些帮助初步解题的推荐工具。
文件格式的判断(以及’魔法字节’)
几乎所有的取证题目都会涉及到一个有时候连告诉你是什么文件类型的提示都
没有的文件。文件类型对于用户来说长期是和文件扩展名相关联的(例如
MarkDown 的 readme.md 文件)MIME 类型(互联网上指定应用程序打开对应扩展
名的协议)或是存储在文件系统上的元数据(泪如 Mac OS 上的 mdls 命令)。
在 CTF 中,有时候是用各种方法来尝试判断文件的类型。
在 UNIX 系统中,传统的识别文件类型方法是 libmagic,也就是识别被称作
‘魔法数字’或者‘魔法字节’——文件头中特定字节的库。libmagic 库是文
件操作中最基础的命令:
$ file screenshot.png
screenshot.png: PNG image data, 1920 x 1080, 8-bit/color RGBA, non-
interlaced
考虑到这是 CTF 竞赛,因此竞赛时命题人会故意设计一些针对常用工具和方
法,故意误导人的文件。同时如果一个文件内部包含了其他文件的信息,那么
文件命令只能够识别其中包含的文件类型。此时你需要进一步深入地分析文件
内容。
TrID 是一个专业的文件分析工具,尽管它没有开源,但它在多个平台上都是免
费使用的。它还允许一定程度上的自主分析功能。它的优势在于内部包含有世
上大多数文件类型的属性和混淆格式。
文件雕复
文件中的文件,或是加载在固件和文件系统中的文件是 CTF 中常见的一类取证
题目。针对识别文件系统中附加的其他文件并进行提取的技术称作‘文件雕
复’。最常用于这一工作的固件分析工具是 binwalk。
剩余13页未读,继续阅读















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0