CyberChef URL 解码

分类:Web Operation:URL Decode
URL Decode Percent Encoding URI Web HTTP

什么是 URL 编码?

URL 编码(亦称 percent-encoding,百分号编码)是在统一资源标识符(URI)中表示信息的一种方式:把某些字符替换为「% + 两个十六进制数字」的三元组。之所以需要编码,是因为 URL 中只能安全使用 ASCII 的一个子集。

在网页提交表单或通过 URL 传参时,空格、符号或非 ASCII 字符等必须先编码才能可靠传输。例如空格常写作 %20,与符号 & 写作 %26

为何要有 URL 编码:早期 URL 只打算使用部分 ASCII 字符。许多字符在 URL 中有语法含义(如 ?&=/),有些则根本不应直接出现(如空格与非 ASCII)。编码让这些字符能以不破坏 URL 结构的方式出现。

理解百分号编码

百分号编码用十六进制字节值表示字符,步骤大致为:

  1. 确定要编码的字符
  2. 在选定字符编码(通常为 UTF-8)下取其字节值
  3. 将每个字节写成十六进制
  4. 在每个十六进制字节对前加百分号 %
常见 URL 编码示例
字符 说明 编码形式 Hex
(space) 空格 %20 或 + 0x20
! 叹号 %21 0x21
" 双引号 %22 0x22
# 井号 %23 0x23
$ 美元符号 %24 0x24
% 百分号 %25 0x25
& 与号 %26 0x26
+ 加号 %2B 0x2B
= 等号 %3D 0x3D
? 问号 %3F 0x3F
@ at 符号 %40 0x40

URL Decode Operation

CyberChef 的 URL Decode 会逆转百分号编码,把编码字符还原。阅读查询串、分析 Web 流量、调试应用或理解经 URL 传输的数据时都很有用。

适合使用 URL 解码的情况:

URL 解码示例
示例 1:简单查询串
编码:search?q=hello+world&lang=en
解码:search?q=hello world&lang=en

加号 + 在查询串中常解码为空格。

示例 2:特殊字符
编码:name=John%20Doe&email=john%40example.com
解码:name=John Doe&email=john@example.com

%20 为空格,%40@

示例 3:多参数复杂 URL
编码:https://example.com/search?q=cyber%20security%20%26%20hacking&page=1&sort=relevance
解码:https://example.com/search?q=cyber security & hacking&page=1&sort=relevance

%26 解码为 &,从而在参数值内部使用与号。

示例 4:Unicode 字符
编码:message=Hello%2C%20%E4%B8%96%E7%95%8C
解码:message=Hello, 世界

多字节 UTF-8 序列可解码为各类文字。

保留字与非保留字

URL 区分保留字符(有语法含义)与非保留字符(一般可直接出现)。

保留字符(多数上下文中应编码)

: / ? # [ ] @ ! $ & ' ( ) * + , ; =

这些字符参与 URL 结构。例如 ? 开始查询串,& 分隔参数,= 连接键值。

非保留字符(通常无需编码)

A-Z a-z 0-9 - _ . ~

这些字符可直接出现在 URL 中,按字面意义解释。

视位置而定:是否需要编码取决于字符在 URL 中的位置。例如路径里的 / 通常合法;若出现在查询参数内部且需表示字面斜杠,则常编码为 %2F

常见解码场景

场景 1:分析搜索引擎查询

Google 搜索 URL 分析
编码后的 URL: https://www.google.com/search?q=how+to+use+cyberchef&hl=en&source=hp 解码得到的参数: q = how to use cyberchef hl = en source = hp

解码 q 参数可看出用户实际搜索内容。

场景 2:调试 API 调用

API 请求解码
编码: POST /api/user?name=Jane%20Doe&role=admin%2Fdeveloper&access=%7B%22read%22%3Atrue%7D 解码: POST /api/user?name=Jane Doe&role=admin/developer&access={"read":true}

可看出 access 参数内是 JSON。

场景 3:可疑链接安全分析

钓鱼 URL 分析
可疑的编码 URL: https://bit.ly/abc123?redirect=https%3A%2F%2Fevil.com%2Fphish%3Ftarget%3Dbank 解码: https://bit.ly/abc123?redirect=https://evil.com/phish?target=bank

解码后可见重定向真实目标,暴露钓鱼站点。

特殊情况与边界情况

空格:+%20

空格有两种常见写法:

二者在查询串中都可能表示空格;但在路径等其他部分,字面的 + 一般表示加号而非空格。

双重编码

数据有时会被多次 URL 编码(无意或故意):

原文:Hello World 单次编码:Hello%20World 双重编码:Hello%2520World (%25 是百分号的编码,故 %2520 表示 %20)

完全还原可能需要多次应用 URL Decode。

不完整或非法序列

%2(缺一位十六进制)或 %GG(非十六进制)等无效序列,应被稳妥处理。CyberChef 通常会原样保留无法识别的片段。

URL 结构拆解

理解结构有助于判断哪些部分需要解码:

https://user:pass@example.com:8080/path/to/page?key1=value1&key2=value2#section 协议(Scheme): https 用户(User): user(现代浏览器中已很少使用) 口令(Password): pass(现代浏览器中已很少使用) 主机(Host): example.com 端口(Port): 8080 路径(Path): /path/to/page 查询(Query): key1=value1&key2=value2 片段(Fragment): section

最常需要编码/解码的位置包括:

在 CyberChef 中使用 URL Decode

使用方式很直接:

  1. 将 URL 编码数据粘贴到 Input
  2. 搜索并添加 URL Decode Operation
  3. 在 Output 查看解码结果
  4. 若仍像编码过的,可再执行一次 URL Decode(应对双重编码)
分步示例

输入:

user=John%20Doe&message=Hello%2C%20how%20are%20you%3F&time=2024-01-01T12%3A30%3A00

经 URL Decode 后:

user=John Doe&message=Hello, how are you?&time=2024-01-01T12:30:00

后续处理(可选):

可再使用 URL Parameter Parser 或正则提取字段:

user → John Doe message → Hello, how are you? time → 2024-01-01T12:30:00

CyberChef Recipe 思路

URL Decode 相关的组合示例:

安全注意

攻击中的 URL 编码

攻击者常用编码混淆载荷:

安全提示:解码后的参数仍须校验与消毒后再用于业务逻辑。解码可能暴露为绕过过滤器而混淆的攻击载荷。不要轻信用户输入,即便已解码。

双重编码攻击

攻击者可能用双重编码绕过只解码一次的防护,需意识到可能存在多层编码。

实用建议

提示:做流量安全分析时,应解码 URL 以查看实际传输内容;编码可能隐藏恶意载荷、外传数据或仅在解码后才明显的攻击模式。
← 返回操作指南