【THM】CyberChef:The Basics(CyberChef:基础知识)-学习
本文相关的TryHackMe实验房间链接:https://tryhackme.com/r/room/cyberchefbasics
本文相关内容:本文简单介绍了CyberChef工具,它是网络安全专业人士的瑞士军刀。
CyberChef介绍
CyberChef 是一款简单、直观的基于 Web 的应用程序,旨在帮助你在 Web 浏览器中完成各种“网络”操作任务。你可以将其视为处理数据的瑞士军刀- 就像拥有一个包含不同工具的工具箱,旨在完成特定任务。这些任务的范围从简单的编码(如XOR或Base64)到复杂的操作(如AES加密或RSA解密) 。
CyberChef通常对recipes(配方)进行操作,配方是指-按顺序执行的一系列操作。
学习目标
- 了解CyberChef是什么
- 了解如何对CyberChef界面进行导航
- 了解CyberChef的常用操作
- 了解在CyberChef中如何创建配方和处理数据
前置学习基础
建议你熟悉以下TryHackMe实验房间,但这并不是强制性的。
访问CyberChef工具
我们有多种方法可以访问和运行 CyberChef,我们来看看其中两种最方便的方法吧!
在线访问
你所需要的只是一个web浏览器以及通畅的互联网连接,然后,你就可以单击此链接直接在网络浏览器中打开CyberChef。
tips:https://gchq.github.io/CyberChef/
通过离线或本地副本访问
你可以通过此链接下载最新版本的CyberChef程序文件到你的计算机上,然后再离线或本地运行CyberChef程序,这适用于 Windows 和Linux平台。作为最佳实践,你应该下载最稳定的CyberChef工具版本。
tips:https://github.com/gchq/CyberChef/releases
CyberChef界面导航
CyberChef的界面由四个区域组成,每个区域都由不同的组件或功能组成。
主要有以下区域:
- Operations 操作
- Recipe 配方
- Input 输入
- Output 输出
下面让我们逐一讨论上面的这些区域。
操作区域
此区域是一个实用且全面的存储库,它包含了CyberChef能够执行的所有不同操作,这些操作经过精心分类,方便用户轻松访问各种功能。用户可以利用搜索功能快速定位特定操作,从而提高工作效率和生产力。
以下是你在整个网络安全之旅中可能会使用到的一些CyberChef操作。
Operations | Description | Examples |
---|---|---|
From Morse Code(摩斯密码) | 将摩斯密码翻译成(大写)字母字符 | - .... .-. . .- - ... 变成 THREATS 当使用默认参数时 |
URL Encode | 将特殊字符编码为百分比编码,这是URIs/URLs支持的一种格式 | https://tryhackme.com/r/room/cyberchefbasics 变成 https%3A%2F%2Ftryhackme%2Ecom%2Fr%2Froom%2Fcyberchefbasics 当使用“Encode all special chars”参数时 |
To Base64 | 该操作可将原始数据编码为ASCII Base64字符串 | This is fun! 变成 VGhpcyBpcyBmdW4h |
To Hex | 将输入字符串转换为由指定分隔符分隔的十六进制字节 | This Hex conversion is awesome! 变成 54 68 69 73 20 48 65 78 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20 61 77 65 73 6f 6d 65 21 |
To Decimal(十进制) | 将输入数据转换为有序整数数组 | This Decimal conversion is awesome! 变成 84 104 105 115 32 68 101 99 105 109 97 108 32 99 111 110 118 101 114 115 105 111 110 32 105 115 32 97 119 101 115 111 109 101 33 |
ROT13 | 一个简单的凯撒替换密码,按指定的数(默认为13)转换字母字符 | Digital Forensics and Incident Response 变成 Qvtvgny Sberafvpf naq Vapvqrag Erfcbafr |
或者,你可以通过将鼠标悬停在特定操作上来直接检查操作的工作情况。这应该会为你提供相关示例或描述以及相关维基百科的链接。
Recipe(配方)区域
此区域被认为是CyberChef工具的核心。在此区域中,你可以无缝地选择、安排和微调操作以满足你的需求。这是你能够完全控制的地方,你可以精确且有目的地定义每一个操作的参数和选项。配方区域是一个指定的空间,用于选择和安排特定操作,然后定义它们各自的参数和选项以进一步自定义它们的行为。在配方区域中,你可以拖动要使用的操作并指定参数和选项。
Recipe区域的功能包括以下内容:
Save recipe
: 保存配方,此功能允许用户保存已经选定的操作。Load recipe
: 加载配方,此功能允许用户加载以前保存过的配方。Clear Recipe
: 清除配方,此功能将使用户能够在使用过程中清除已经选择的配方。
这些功能可以在下面突出显示的图标中找到:
上图的底部有一个BAKE!
按钮,这个按钮表示会使用给定的配方处理数据,即基于已选择的配方进行操作执行。
此外,你也可以勾选上图中的Auto Bake
复选框,这个功能点允许用户使用已经选定的配方来进行自动烹饪(Bake,引申含义是"处理数据"),而无需每次都手动单击BAKE!
按钮来进行操作执行。
输入区域
输入区域提供了一个用户友好的空间,你可以在此通过粘贴、键入或拖动来轻松地输入文本或文件以方便执行操作。
此外,它还具有以下功能点:
-
Add a new input tab
: 这是为用户创建附加选项卡以使用与前一个选项卡不同的值的位置。 -
Open folder as input
: 此功能允许用户上传整个文件夹作为输入值。 -
Open file as input
: 此功能允许用户上传文件作为其输入值。 -
Clear input and output
: 此功能允许用户清除插入的任何输入值和相应的输出值。 -
Reset pane layout
: 此功能可使工具的界面恢复为其默认窗口大小。
输出区域
输出区域是展示数据处理结果的视觉空间,它将整齐地呈现你对输入数据所应用的任何操作或转换的结果,从而可以清晰直观地显示处理后的信息。
此区域的功能点包括以下内容:
Save output to file
: 此功能允许用户将结果保存到 .dat 文件中。Copy raw output to the clipboard
: T此功能允许用户将原始输出直接复制到剪贴板,从而使他们能够快速复制结果以便在其他应用程序或文档中使用。Replace input with output
: 此功能允许用户根据运算结果快速覆盖输入数据。Maximise output pane
: 此功能可使工具的界面达到默认窗口大小。
答题
在哪个区域可以找到“From Base64”?
operations
哪个区域被认为是CyberChef工具的核心?
Recipe
使用CyberChef工具前的准备
别着急,在开始实际操作之前,让我们快速概述一下使用 CyberChef 时的思维过程!该过程可由以下四个不同的步骤组成:
tips:设定明确的目标→将你的数据放入CyberChef的输入区域→选择你想要使用的操作→检查输出,看看它是否是预期的结果(否则重复前三个步骤)。
让我们进一步讨论上图中的每一步。
首先,设定明确的目标至关重要,此步骤涉及定义具体且可实现的目标。它有助于回答“我想要完成什么? ”这个问题,明确的目标对于为你的目标提供方向、目的和重点至关重要。一个例子是,“在安全调查期间,我发现了一串乱码字符串;我想知道它包含什么隐藏消息,如果它有的话。”
接下来,让我们将数据放入输入区域。在此步骤中,我们将使用我们的数据。你可以在此处粘贴或上传我们找到的乱码字符串。
第三步是选择我们要使用的操作(Operations)。如果你还不熟悉正在处理的内容,这可能会很棘手。按照我们的示例,我们仍在确定使用什么来理解这个乱码字符串。在我们的研究过程中,我们发现了相关信息,表明这个乱码字符串可能使用了与加密相关的任何内容。因此,我们决定使用加密/编码(Encryption/Encoding)类别下的任何操作,包括但不限于ROT13
、 Base64
、 Base85
或ROT47
。请注意,我们可以在该类别下使用很多操作。
最后,检查输出,看看是否是我们所预期的结果。这就引出了一个问题:“我们实现了目标吗? ”。在我们的例子中,这意味着我们能够解码我们所发现的乱码字符串吗?如果是,那就可以了!如果没有,那么我们可能就需要再次重复我们先前已采取的那些步骤(步骤1,2,3)。
为了使我们的示例更加清晰可见,请参见下图:
tips:在一次安全调查中,我们发现了一串乱码;我想知道它包含什么隐藏信息,如果它有的话→粘贴或上传找到的乱码字符串到CyberChef的输入区域→通过研究,我们发现乱码字符串可能使用了与加密相关的内容;因此,我们决定使用CyberChef中的加密/编码类别下的操作选项,包括但不限于ROT13
、 Base64
、 Base85
或ROT47
等→检查输出,看看能否解码我们所发现的乱码字符串,否则就需要重复前面已采取过的步骤。
答题
在哪一步你会决定“我想要完成什么?”
1
练习示例
在本小节中,我们将探讨一些最常用的操作类别,认识到要使用哪个操作类别可以增强我们更高效地使用该工具的能力。
提取器
下表中提到的具体操作属于提取器(Extractors)类别。
Specific 具体操作 | Description 描述 |
---|---|
Extract IP addresses 提取IP地址 | 提取所有 IPv4 和 IPv6 地址。 |
Extract URLs 提取网址 | 从输入中提取统一资源定位符 (URLs),同时,协议(HTTP、 FTP等)信息也是必需的,否则会出现太多误报。 |
Extract email addresses 提取电子邮件地址 | 从输入中提取所有电子邮件地址。 |
Extract IP addresses
将从任何给定输入中提取任何有效的 IPv4/6 地址。
Extract email addresses
会提取具有此格式的任何字符串和字符,即anything@domain[.]com
,这里的域的示例包括hotmail.com 、google.com 、 tryhackme.com和yahoo.com等。
Extract URLs
表示提取统一资源定位符,俗称URL(Uniform Resource Locator),URL是用于访问Internet上的资源的地址。
日期和时间
下表中的具体操作属于日期/时间(Date / Time)类别。
Specific 具体操作 | Description 描述 |
---|---|
From UNIX Timestamp(UNIX 时间戳) | 将 UNIX 时间戳转换为日期时间字符串。 |
To UNIX Timestamp(UNIX 时间戳) | 解析UTC 格式的日期时间字符串并返回相应的 UNIX 时间戳。 |
UNIX 时间戳是一个 32 位值,表示自 1970 年 1 月 1 日 UTC(UNIX 纪元)以来的所有秒数。要将“ Fri Sep 6 20:30:22 +04 2024 ”转换为 UNIX 时间戳,请使用操作To UNIX Timestamp
,结果为1725654622
。如果你希望将其转换回更易读的格式,可以使用From UNIX Timestamp
。
数据格式
下表中的具体操作属于数据格式(Data format)类别。
Operations | Description | Examples |
---|---|---|
From Base64 | 此操作可将数据从ASCII Base64字符串解码回其原始格式 | V2VsY29tZSB0byB0cnloYWNrbWUh 变为Welcome to tryhackme! |
URL Decode | 将URI /URL百分比编码字符转换回其原始值 | https%3A%2F%2Fgchq%2Egithub%2Eio%2FCyberChef%2F 变为https://gchq.github.io/CyberChef/ |
From Base85 | Base85是用于编码任意字节数据的表示法,它通常比 Base64 更高效,此操作表示从 ASCII Base85字符串(使用你选择的字母表,包括预设)解码数据 | BOu!rD]j7BEbo7 变为hello world |
From Base58 | Base58是用于编码任意字节数据的表示法,它与 Base64 的不同之处在于--它有效地删除了容易误读的字符(即 l、I、0 和 O)以提高人类可读性,此操作表示从 ASCII Base58字符串解码数据 | AXLU7qR 变为Thm58 |
To Base62 | Base62是使用一种人类可以方便地使用并可被计算机处理的一组有限符号集对任意字节数据进行编码的表示法,在这种编码方式中,高基数会产生比十进制或十六进制系统更短的字符串 | Thm62 变为6NiRkOY |
诸如Base(64, 85, 58, 62)
之类的操作被称为Base编码(base encodings)。Base编码采用二进制数据(0 和 1 的字符串),并使用一组特定的 ASCII(美国信息交换标准代码-American Standard Code for Information Interchange)字符将其转换为基于文本(text-based)的表示形式。
在此,我们可以快速地概述并讨论最常用的一种编码操作,即Base64
。
我们的示例是对字母“ THM ”进行Base64编码处理,如下所示,我们有一个简短的 ASCII 表可供参考。如果你想查看完整的 ASCII 表,请参阅此处页面。
Decimal十进制 | Binary二进制 | Symbol字符 | - | Decimal十进制 | Binary二进制 | Symbol字符 |
---|---|---|---|---|---|---|
65 | 01000001 | A | 78 | 01001110 | N | |
66 | 01000010 | B | 79 | 01001111 | O | |
67 | 01000011 | C | 80 | 01010000 | P | |
68 | 01000100 | D | 81 | 01010001 | Q | |
69 | 01000101 | E | 82 | 01010010 | R | |
70 | 01000110 | F | 83 | 01010011 | S | |
71 | 01000111 | G | 84 | 01010100 | T | |
72 | 01001000 | H | 85 | 01010101 | U | |
73 | 01001001 | I | 86 | 01010110 | V | |
74 | 01001010 | J | 87 | 01010111 | W | |
75 | 01001011 | K | 88 | 01011000 | X | |
76 | 01001100 | L | 89 | 01011001 | Y | |
77 | 01001101 | M | 90 | 01011010 | Z |
第 1 步:转换为二进制并合并(手动)
根据上表, T = 01010100 , H=01001000 , M = 01001101 。接下来,连接这些二进制内容并确保它们有24个字符,即010101000100100001001101
。
第 2 步:分隔并转换为十进制(手动)
将010101000100100001001101
分隔成6个字符每部分,即010101
000100
100001
001101
,这些是6位字符,我们现在应该有四个这样的实例。现在我们需要将每个实例转换为十进制。那我们就来转换一下吧!
Binary 二进制 | Decimal (Base10) 十进制 |
---|---|
010101 | 21 |
000100 | 4 |
100001 | 33 |
001101 | 13 |
第 3 步:转换为 Base64(手动)
现在我们已经有了上一步中所得到的数字,即21
、 4
、 33
和13
,让我们从下表中查找等效字符,下表代表的是一个base64索引表。
Index | Character | - | Index | Character | - | Index | Character |
---|---|---|---|---|---|---|---|
0 | A | 26 | a | 52 | 0 | ||
1 | B | 27 | b | 53 | 1 | ||
2 | C | 28 | c | 54 | 2 | ||
3 | D | 29 | d | 55 | 3 | ||
4 | E | 30 | e | 56 | 4 | ||
5 | F | 31 | f | 57 | 5 | ||
6 | G | 32 | g | 58 | 6 | ||
7 | H | 33 | h | 59 | 7 | ||
8 | I | 34 | i | 60 | 8 | ||
9 | J | 35 | j | 61 | 9 | ||
10 | K | 36 | k | 62 | + | ||
11 | L | 37 | l | 63 | / | ||
12 | M | 38 | m | ||||
13 | N | 39 | n | ||||
14 | O | 40 | o | ||||
15 | P | 41 | p | ||||
16 | Q | 42 | q | ||||
17 | R | 43 | r | ||||
18 | S | 44 | s | ||||
19 | T | 45 | t | ||||
20 | U | 46 | u | ||||
21 | V | 47 | v | ||||
22 | W | 48 | w | ||||
23 | X | 49 | x | ||||
24 | Y | 50 | y | ||||
25 | Z | 51 | z |
从上表中查找一下,我们现在应该能够找到了对应的字符了。
Index | Characters |
---|---|
21 | V |
4 | E |
33 | h |
13 | N |
组合上述这些字符,你应该能得到“THM”的Base64 格式,答案是VEhN
。
哇哦!这不是很神奇吗?你刚刚手动将一组字符转换为 Base64。
现在,让我们来讨论URL Decode
,即URL解码,这是通过将百分比编码的字符转换回其原始值来实现的。有关这些值的参考,你可以查看此处的页面。请注意,HTML5中的默认字符集是UTF-8 。通过查看下表,我们可以快速地了解通常可以在 URL 中看到的内容。
Characters | From UTF-8 |
---|---|
: | %3A |
/ | %2F |
. | %2E |
= | %3D |
# | %23 |
练习
在与本文相关的TryHackMe实验房间中单击本小节顶部的“下载任务文件”按钮,即可下载我们将要用来回答以下问题的任务文件。
下载完成后,你可以打开任务文件,将内容复制并粘贴到CyberChef的输入字段中,或者使用Open file as input
功能直接上传文件也可以。
注意:对于下面答题任务中的前几个问题,请在CyberChef中使用提取器(Extractors)类别下的特定操作。
答题
任务文件的内容:
tips:你可以打开任务文件,将内容复制并粘贴到CyberChef的输入字段中,或者使用Open file as input
功能直接上传文件也可以。
在线访问CyberChef:https://gchq.github.io/CyberChef/
隐藏的电子邮件地址是什么?(Use the operation "Extract email addresses".)
hidden@hotmail.com
以.232结尾的隐藏IP地址是什么?(Use the operation "Extract IP addresses".)
102.20.11.232
哪个域名地址以字母“T”开头?(Use the operation "Extract domains".)
TryHackMe.com
十进制数 78 的二进制值是多少?(Combine the operations "From Decimal" and "To Binary".)
01001110
https://tryhackme.com/r/careers
的URL编码值是多少 ?(Use the "URL Encode" operation with the "Encode all special chars" checkbox enabled.)
https%3A%2F%2Ftryhackme%2Ecom%2Fr%2Fcareers
继续实践
本小节能让我们更好地应用从之前的几个小节中所学到的CyberChef相关知识,我们将利用 CyberChef 的不同区域及其功能来回答一些问题。
现在,这是你真正闪耀的时刻!你将迎来人生中的第一次烹饪!
准备好?那么,让我们动手吧!
注意:最好不要使用提示,先尽量尝试回答问题。
答题
在线访问CyberChef:https://gchq.github.io/CyberChef/
继续分析你在上一小节中所下载的文件内容,哪个 IP 以“10”开头和结尾?(Use the operation "Extract IP addresses" and check the "IPv4" checkbox.)
10.10.2.10
字符串“Nice Room!”的base64编码值是多少?(Use the operation "To Base64".)
TmljZSBSb29tIQ==
以下字符串在URL解码后得到的值是多少 https%3A%2F%2Ftryhackme%2Ecom%2Fr%2Froom%2Fcyberchefbasics
?(Use the operation "URL Decode".)
Unix 时间戳1725151258
的日期时间字符串是什么?(Use the operation "From UNIX Timestamp" with default parameters.)
Sun 1 September 2024 00:40:58 UTC
对<+oue+DGm>Ap%u7
进行Base85解码,得到的字符串是什么?(Use the operation "From Base85" with default parameters.)
This is fun!
本文小结
在本文中,我们讨论了CyberChef如何成为处理各种数据转换和解码任务的强大工具。无论你是需要使用Base64、二进制还是URL,CyberChef 这个数字向导的厨房都提供了一个可视化界面,使数据操作更加直观、简单。借助多样化的配方库,你可以使用CyberChef自信地处理 提取电子邮件地址、IP 地址和域等任务。我们能够浏览CyberChef的工具界面并对不同区域、功能和参数进行讨论,但请注意,对于特别大规模的数据处理,尝试从其他工具的支持中受益也至关重要。