编码格式大全解释以及相关编码特性
目录
说明:
1. Base64
Base64编码的字符集通常包括:
Base64的工作原理:
Base64编码在安全渗透中的应用场景
常见的Base64编码绕过场景
如何防范Base64绕过攻击
2. URL编码(Percent Encoding)
URL编码与安全渗透的关系
示例:
Python实现URL编码
输出结果:
如何防范URL编码绕过攻击
3. HTML实体编码
核心目标:
示例:基本字符转义
示例:用户输入转义
何时使用HTML实体编码?
工具与函数
绕过编码的渗透技巧(及防御)
通过未过滤的上下文绕过
4. Hex编码(十六进制编码)
Python实现Hex编码
Hex编码与数学运算
数字转字符串
自定义数字转字符串函数
5. UTF-8/Unicode编码
UTF-8/Unicode实体编码与安全渗透的关系
实际案例
6. JSON编码
JSON编码与安全渗透的关系
以下是几个与JSON编码相关的安全渗透场景:
JSON注入攻击的案例
7. 二进制编码
二进制编码的案例
二进制编码与安全渗透的关系
二进制编码在安全领域中的案例
二进制编码、ASCII、Unicode、Hex、UTF-8、JSON、HTML实体编码和Base64编码 的详细比较表格
编码特点总结:
总结:
说明:
- 编码(encode)的目的不是为了让别人看到后解不出来,而是代表信息的另外一种表达方式。
- 将原始信息转化为编码信息进行传输,可以解决一些特殊字符、不可见字符的传输问题。接收者将编码信息再转化成原始信息,转化的过程称之为解码(decode)。
- 在CTF中,编码的用处不仅仅是单独出题,很多情况下其也会作为题目的一部分,掌握各类编码的转化技巧是学习密码学的基础。
1. Base64
- Base64编码是一种用于将二进制数据转换为文本数据的编码方式。
- 它是将每三个字节的二进制数据(即24位)分成四组,每组6位(即每个字符)。
- 然后,这些6位的数值会映射到64个字符集(包括字母、数字和一些特殊字符)。
- 最终,Base64编码生成的是由可打印字符组成的字符串,常用于在需要将二进制数据(如图像、文件、密钥等)传输时,避免使用不兼容的字符集。
- 特性:将二进制数据转换为可打印ASCII字符(A-Z, a-z, 0-9, +, /),填充字符为
=
。编码后数据膨胀约33%。- 应用场景:
- 电子邮件附件传输。
- 隐藏敏感数据(如凭证、密钥)。
- 在HTTP协议中嵌入二进制数据(如图片)。
- 安全领域:
- 数据隐蔽(非加密,需配合加密使用)。
- 防止传输过程中的数据损坏。
Base64编码的字符集通常包括:
- 大写字母(A-Z)
- 小写字母(a-z)
- 数字(0-9)
- 加号(+)和斜杠(/)
- 等号(=)用于填充,使编码后的字符数量为4的倍数。
Base64的工作原理:
- 将输入的字节数据分成3字节一组,若不足3字节,则用0补齐。
- 每3字节(24位)数据被分成4个6位的组(即6位的二进制数值)。
- 每个6位数值映射到Base64字符集中的一个字符。
- 如果输入数据不足3字节,使用
=
填充,使得编码结果的字符长度为4的倍数。
例如,字符串 "Man" 的Base64编码过程:
- ASCII码:M (77), a (97), n (110)
- 二进制表示:
01001101 01100001 01101110
- 分成4个6位组:
010011 010110 000101 101110
- 对应Base64字符:
TWFu
所以 "Man" 的Base64编码是 TWFu。
Base64编码在安全渗透中的应用场景
Base64编码常用于在网络上传输非文本数据(如图像、文件等)。它也被用于绕过某些安全控制措施,尤其是在Web应用的输入验证和过滤中。由于Base64编码后的数据仅包含ASCII字符,这使得它能够绕过一些只对特定字符(如<
、>
、&
等)进行过滤的机制。
常见的Base64编码绕过场景
-
跨站脚本攻击(XSS)绕过:
- 背景:许多Web应用会对用户输入进行HTML字符过滤,以防止跨站脚本(XSS)攻击。
- 然而,某些应用可能仅对常见的HTML标签字符进行过滤,而忽视了Base64编码后的数据。
- 攻击方式:攻击者可以将恶意JavaScript脚本通过Base64编码的方式绕过过滤。例如,攻击者将一个XSS脚本
alert('XSS')
转换为Base64编码,得到:
YWxlcnQoJ1hTUyc1Jyk=
然后将其嵌入到网页或请求参数中。某些应用解码后会执行该JavaScript代码,导致XSS攻击。
-
SQL注入(SQL Injection)绕过:
- 背景:SQL注入攻击通常依赖于插入恶意SQL命令,通常包括特殊字符(如
'
、--
等),这些字符可能会被Web应用过滤掉。 - 攻击者可以通过Base64编码来绕过过滤。
- 攻击方式:攻击者将SQL注入语句(如
' OR 1=1 --
)进行Base64编码,得到:
- 背景:SQL注入攻击通常依赖于插入恶意SQL命令,通常包括特殊字符(如
J29yIDE9MSAtLQ==
然后将编码后的数据传递给应用程序。如果应用没有对Base64编码进行解码和检查,攻击者可以成功执行SQL注入攻击。
-
命令注入(Command Injection)绕过:
- 背景:命令注入攻击旨在通过输入恶意命令控制系统。许多应用会过滤掉特殊字符,如分号
;
或管道符|
。 - 攻击者可以通过Base64编码将这些字符传递给系统。
- 攻击方式:攻击者通过将命令注入payload(例如
; ls -la
)编码为Base64格式:
- 背景:命令注入攻击旨在通过输入恶意命令控制系统。许多应用会过滤掉特殊字符,如分号
OiBscyAtbGE=
然后将其传递给Web应用,若应用没有对Base64解码后的内容进行适当过滤或验证,攻击者能够执行命令。
-
路径穿越(Directory Traversal)攻击绕过:
- 背景:路径穿越攻击尝试通过操控文件路径,访问系统的敏感文件。
- 攻击者可以使用Base64编码绕过路径过滤限制。
- 攻击方式:攻击者可以将路径穿越字符(如
../
)进行Base64编码,得到:
Li4v
然后将编码后的路径传递给Web应用,如果应用未能对解码后的路径进行适当检查,攻击者能够访问系统敏感文件。
如何防范Base64绕过攻击
-
严格输入验证:对所有用户输入进行严格的过滤和验证。不要仅依赖于对字符的过滤,而是应当使用安全框架进行输入验证和清理。
-
适当的输出编码:对于输入的内容,在输出到Web页面时使用HTML实体编码,避免直接将用户输入作为HTML内容渲染。
-
Base64解码和检查:在接收任何编码数据时(如URL参数、HTTP请求体等),应该先解码Base64数据,然后检查是否存在潜在的恶意内容。解码后仍然需要对内容进行适当的过滤和转义。
-
Web应用防火墙(WAF):使用Web应用防火墙可以帮助识别并防止Base64编码的绕过攻击,特别是针对SQL注入和XSS攻击。
-
最小权限原则:确保Web应用和系统中只有最小必要的权限,限制攻击者通过命令注入或路径穿越等攻击行为访问敏感资源。
通过理解和防范Base64编码绕过攻击,可以增强Web应用和系统的安全性,防止安全渗透攻击。
2. URL编码(Percent Encoding)
- URL编码用于浏览器和网站之间的数据交换,主要解决特殊字符在传输过程中可能引发的问题。
- 其规则是将特殊字符转换为
%
后跟两位十六进制值。
- 特性:用
%
后跟两位十六进制值替换特殊字符(如空格转为%20
)。- 应用场景:
- URL参数传递。
- 表单数据提交(
application/x-www-form-urlencoded
)。- 安全领域:
- 防止URL注入攻击(如路径遍历、SQL注入)。
- 避免解析歧义。
URL编码与安全渗透的关系
URL编码简介:URL编码(又叫百分号编码)是一种将非ASCII字符或特殊字符(如空格、斜杠等)转换为可在URL中安全传输的格式的机制。
例如,空格字符会被编码为
%20
,斜杠/
会被编码为%2F
,等号=
会被编码为%3D
。URL编码的作用:URL编码的主要目的是确保URL中包含的字符在网络传输过程中不会导致歧义或错误,因为URL中某些字符(如
?
,&
,=
,#
等)有特殊意义,可能会影响URL的解析。
URL编码能够确保这些字符作为数据传输而不是控制字符。
URL编码与安全渗透的关系:在安全渗透测试中,攻击者常常利用URL编码来绕过Web应用的输入过滤和验证。
URL编码常常用于尝试避开特定字符的过滤机制,比如通过编码“危险字符”来绕过跨站脚本(XSS)或SQL注入的过滤规则。
由于Web应用在解析URL时通常会自动解码这些编码字符串,攻击者能够利用这一特性传递恶意payload,进行各种攻击。
示例:
- flag{url_encode_1234_!@#$}
- flag%7Burl_encode_1234_%21%40%23%24%7D
- 在url编码和解码的时候,只需要关注“%”的内容,每当遇到“%”的时候,连带“%”的三个字符对应着明文的一个字符。
- Python中可以使用urllib中的两个函数来进行urlencode:import urllib
Python实现URL编码
import urllib
print(urllib.quote("flag{url_encode_1234_!@#$}"))
d = {'name': 'bibi@flappypig.club', 'flag': 'flag{url_encode_1234_!@#$}'}
print(urllib.urlencode(d))
输出结果:
flag%7Burl_encode_1234_%21%40%23%24%7D
flag=flag%7Burl_encode_1234_%21%40%23%24%7D&name=bibi%40flappypig.club
- 第一个quote函数可以直接对字符串进行url编码,可以使用unquote函数进行解码;
- urlencode 函数能对字典模式的键值对进行url编码。
如何防范URL编码绕过攻击
-
严格输入验证:无论是否进行URL编码,所有用户输入都应进行严格的输入验证。避免接受未经处理的HTML、JavaScript代码、SQL命令等,并且对于特殊字符进行适当的过滤和转义。
-
输出编码:确保输出到浏览器或服务器的内容经过适当的编码。比如HTML输出时,应对特殊字符进行HTML实体编码,防止恶意脚本执行。
-
使用安全框架和库:现代的Web框架(如Django、ASP.NET等)通常具有内建的安全机制,能有效防止SQL注入、XSS等攻击。使用这些框架可以大大减少手动处理编码问题的风险。
-
URL解码控制:服务器应确保对URL中的编码部分进行解码时使用正确的解码机制,避免错误地处理恶意编码内容。
通过了解URL编码与安全渗透的关系,可以识别潜在的漏洞并采取措施防范各种攻击,保障Web应用的安全性。
3. HTML实体编码
- HTML实体编码(HTML Entity Encoding)是一种将特殊字符转换为预定义实体(Entity)的机制,以确保这些字符在HTML文档中被正确显示,而非被解析为代码。
- 例如,字符
<
会被编码为<
,字符>
会被编码为>
。
- 例如,字符
- 特性:将危险字符替换为实体形式(如
<
→<
,>
→>
)。- 应用场景:
- 网页渲染用户输入内容。
- 防御跨站脚本(XSS)攻击。
- 安全领域:
- Web安全(XSS防护)。
核心目标:
-
防止解析歧义:避免浏览器将用户输入的内容误认为HTML标签或脚本。
-
防御注入攻击:阻止恶意用户通过输入特殊字符注入代码(如XSS攻击)。
示例:基本字符转义
原始字符 | 实体编码 | 用途 |
---|---|---|
< | < | 避免被解析为HTML标签起始符 |
> | > | 避免被解析为HTML标签结束符 |
& | & | 避免被解析为实体编码起始符 |
" | " | 避免破坏HTML属性值的引号 |
' | ' 或 ' | 避免破坏单引号包裹的属性值 |
示例:用户输入转义
未编码的输入
用户评论:<script>alert('XSS攻击!')</script>
编码后的输出:
用户评论:<script>alert('XSS攻击!')</script>
此时,浏览器会直接显示文本内容,而不会执行脚本。
何时使用HTML实体编码?
-
输出到HTML内容时:在将用户输入、数据库数据或第三方内容插入HTML正文或属性时。
-
避免在存储时编码:保留原始数据,仅在展示时动态编码,以适应不同场景(如导出为文本、JSON等)。
工具与函数
语言/框架 | 编码函数 | 示例 | |
---|---|---|---|
PHP | htmlspecialchars() | htmlspecialchars($input, ENT_QUOTES, 'UTF-8') | |
Python (Django) | 模板自动转义或 escape 过滤器 | `{{ user_input | escape }}` |
JavaScript | 手动替换或库(如he ) | he.encode(userInput, { useNamedReferences: true }) | |
Java (Spring) | Thymeleaf模板引擎自动转义 | <div th:text="${userInput}"></div> |
绕过编码的渗透技巧(及防御)
通过未过滤的上下文绕过
-
场景:
即使对HTML内容编码,若将用户输入插入到<script>
标签或事件处理程序中,仍需额外处理。 -
攻击载荷:
<a href="#" onclick="用户输入">点击</a>
-
若用户输入为
alert(1)
,会导致代码执行。 -
防御:
根据上下文选择编码方式:-
JavaScript上下文:使用
\uXXXX
Unicode转义。 -
HTML属性:同时编码空格和括号,如
 
替代空格。
-
4. Hex编码(十六进制编码)
在信息传输过程中,有些字符可见,有些不可见。为了使传输过程更加规范,可以将信息编码为十六进制(hex),传输完成后再解码为原始信息。Hex编码是最常用的编码方式之一,它将信息转换为十六进制形式,适用于计算机存储和数据处理。
- 特性:将每个字节转换为两个十六进制字符(如
0x41
→41
)。- 应用场景:
- 调试二进制数据(如内存转储)。
- 二进制协议数据传输(如MAC地址)。
- 安全领域:
- 数据完整性校验(如哈希值表示)。
Python实现Hex编码
s = "flag"
print(s.encode("hex"))
结果: 666c6167
每个字符的ASCII码被转换为对应的十六进制值。
Hex编码与数学运算
密码学中的大部分操作都是基于数学计算的,因此需要将字符串转换为数字。
Hex编码可以作为字符串到十进制数字的中转工具。
s = "flag"
t = s.encode("hex")
print(int(t, 16))
输出结果: 1718378855
对于单字符,可以使用ord
函数直接获取ASCII值
print(int("a".encode("hex"), 16))
print(ord("a"))
数字转字符串
解密运算结束后,需要将数字转换回字符串:
num = 584734024210391580014049650557280915516226103165
print(hex(num))
print(hex(num)[2:-1])
print(hex(num)[2:-1].decode("hex"))
输出结果:
输出结果:
0x666c61677b746869735f69735f615f666c61677d1
666c61677b746869735f69735f615f666c61677d
flag{this_is_a_flag}
自定义数字转字符串函数
def num2str(num):tmp = hex(num)[2:].replace("L", "")if len(tmp) % 2 == 0:return tmp.decode("hex")else:return ("0" + tmp).decode("hex")print(num2str(584734024210391580014049650557280915516226103165))
输出结果:
flag{this_is_a_flag}
5. UTF-8/Unicode编码
-
Unicode 是一种字符编码标准,旨在为世界上几乎所有语言的字符提供一个唯一的编码。它包括多种不同的字符集,涵盖了从常见的拉丁字母到各种符号、汉字、甚至表情符号等。
-
Unicode的目标是解决传统字符编码标准无法支持多语言问题,实现跨平台、跨语言的文本交换。
-
-
UTF-8 是Unicode的一种编码方式,它可以用变长字节(1到4个字节)来表示Unicode字符。
-
UTF-8与ASCII兼容,因此,它可以无缝地与现有的系统和协议兼容,同时又支持几乎所有语言字符的表示。它的优点是灵活性和兼容性。
-
- 特性:可变长编码,支持多语言字符,兼容ASCII。
- 应用场景:
- 多语言文本处理。
- 国际化应用程序。
- 安全领域:
- 防御Unicode注入攻击(如目录遍历
%C0%AF
)。- 同形字攻击(如
а
(西里尔) vsa
(拉丁))。
UTF-8/Unicode实体编码与安全渗透的关系
-
UTF-8编码漏洞:在安全渗透测试中,UTF-8编码有时会被用作绕过传统输入过滤或字符编码解析机制的手段。一些Web应用没有正确处理UTF-8编码输入,可能导致跨站脚本(XSS)、SQL注入或命令注入等安全漏洞。攻击者可以通过插入特定的字符、实体编码、Unicode编码等方式来绕过过滤。
-
Unicode绕过过滤:攻击者通过将恶意脚本或SQL命令以Unicode编码进行传输(如
<script>alert(1)</script>
),可以绕过防护系统的输入验证或输出编码,从而实施跨站脚本攻击(XSS)。 -
Web应用中的Unicode编码注入:Unicode编码注入攻击涉及将特定字符(如斜杠或引号)用Unicode表示(例如,
\u002F
表示斜杠/
),使得应用无法正确解析并过滤这些字符,进而导致攻击成功。
实际案例
XSS(跨站脚本攻击):假设某个网站没有正确处理用户输入,允许用户在输入框中插入脚本。如果输入框没有做充分的字符过滤,攻击者可以提交如下的Unicode编码字符:
<script>alert('XSS')</script>
SQL注入(SQL Injection):攻击者可能利用UTF-8编码注入SQL命令,通过使用Unicode字符编码来绕过SQL查询语句中的过滤机制。例如,攻击者可能通过输入:
' OR 1=1; --
\u0027 OR 1=1; --
文件路径穿越:攻击者可能通过输入Unicode编码的路径穿越字符(如 ..
),绕过文件路径的限制,从而访问敏感文件。例如,攻击者将 ..
用 Unicode 编码 \u002E\u002E\u002F
来绕过目录结构限制。
6. JSON编码
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,同时也便于机器解析和生成。JSON使用一种简单的文本格式来表示结构化的数据,通常用于客户端与服务器之间的数据交换。
JSON格式的数据通常由以下几部分组成:
- 对象:一组键值对(类似字典或哈希表)。
- 数组:有序的值集合(类似于列表或数组)。
- 值:可以是字符串、数字、布尔值、数组、对象或
null
。
JSON的基本语法:
- 数据在键值对之间通过冒号分隔。
- 键与值之间用逗号分隔。
- 键必须是字符串。
- JSON的基本数据类型有字符串、数字、布尔值、数组、对象和
null
{"name": "Alice","age": 30,"is_student": false,"courses": ["Math", "Science"],"address": {"street": "123 Main St","city": "Anytown"}
}
- 特性:转义特殊字符(如
"
→\"
,换行符→\n
)。- 应用场景:
- API数据传输(如
Content-Type: application/json
)。- 安全领域:
- 防止JSON注入(如恶意脚本插入)。
JSON编码与安全渗透的关系
- JSON编码本身并不是一种攻击方式,而是作为一种数据交换格式被广泛使用。
- 但在安全渗透过程中,攻击者可能会利用JSON编码相关的漏洞发起攻击,尤其是在Web应用程序中。
- JSON编码和Web安全有一些潜在的联系,特别是在输入验证和数据解析环节。
以下是几个与JSON编码相关的安全渗透场景:
-
JSON注入攻击 JSON注入攻击是指攻击者将恶意的数据嵌入JSON格式的请求或响应中,以达到修改应用行为或绕过应用逻辑的目的。攻击者通常试图通过操控JSON数据,破坏系统的正常行为,或者通过操控数据内容来窃取信息。
-
不安全的JSON解析 一些应用程序会直接解析用户提交的JSON数据,如果没有足够的输入验证或反序列化保护,攻击者可能通过构造恶意的JSON数据来控制程序的执行。例如,攻击者可能通过在JSON中嵌入恶意的脚本,尝试引发跨站脚本(XSS)攻击。
-
跨站请求伪造(CSRF)和JSON 在某些情况下,攻击者可以通过伪造JSON请求,诱使受害者执行未授权的操作。例如,攻击者可能构造一个伪造的JSON数据包,冒充合法请求,触发不必要的状态更改或信息泄露。
JSON注入攻击的案例
XSS(跨站脚本攻击)通过JSON注入
假设一个Web应用程序使用JSON来传输用户输入数据,但没有对数据进行适当的转义和验证。攻击者可以提交包含JavaScript代码的JSON数据,例如:
{ "username": "<script>alert('XSS')</script>" }
命令注入
如果一个应用程序将JSON数据中的字段直接传递给系统命令或数据库查询,攻击者可能通过注入恶意的命令执行数据,例如:
{ "username": "admin; rm -rf /" }
7. 二进制编码
- 二进制编码是一种将信息表示为二进制数(0和1)的方式。
- 在计算机中,所有的数据和指令都可以通过二进制来表示,因为计算机的基本工作原理依赖于数字电路的开关状态,而开关状态可以用两种状态表示,通常是“开”与“关”,或“1”和“0”。
- 因此,二进制成为计算机处理和存储数据的基础。
- 特性:直接处理原始字节流(无字符转换)。
- 应用场景:
- 网络协议(如TCP/UDP数据包)。
- 文件存储(如可执行文件)。
- 安全领域:
- 缓冲区溢出攻击。
- 反序列化漏洞。
二进制编码的案例
ASCII编码
ASCII编码是将字符映射为二进制数的一种方法。例如,字母"A"的ASCII码是65,表示为二进制数:01000001
。
IP地址的二进制表示
一个IPv4地址由4个字节组成,每个字节是8位二进制。例如,IP地址192.168.1.1
的二进制表示是:
11000000.10101000.00000001.00000001
图像文件
图像文件(如JPEG、PNG等)也使用二进制编码来表示图像数据,实际上,图像中的每个像素的颜色通常通过RGB(红、绿、蓝)模式转换为二进制数来存储。
二进制编码与安全渗透的关系
在安全渗透中,二进制编码扮演着重要角色,尤其在攻击时,攻击者需要操控二进制数据以绕过安全防护。以下是几个与安全渗透相关的二进制编码应用场景:
-
缓冲区溢出攻击
缓冲区溢出攻击常常涉及恶意代码注入,其中攻击者通过输入精心构造的二进制数据,使得程序的控制流被修改,从而执行攻击者指定的恶意操作。例如,攻击者可以通过特定的二进制数据覆盖程序的返回地址,进而实现远程代码执行。 -
编码绕过防火墙和检测系统
安全防火墙或入侵检测系统(IDS)通常会检查传入的请求,以识别恶意活动。在某些情况下,攻击者通过二进制编码或其他编码方式(如Base64编码)对数据进行编码,以绕过这些安全系统,隐藏恶意代码。例如,攻击者可能会将恶意负载(如JavaScript代码)通过Base64编码并传递,以避免被检测到。 -
命令注入
在命令注入攻击中,攻击者可以将恶意命令嵌入到用户输入的字段中。如果目标系统未正确验证输入,攻击者可能会通过精心构造的二进制命令执行任意命令,通常以绕过安全过滤器为目标。
二进制编码在安全领域中的案例
-
恶意软件加密和编码
恶意软件经常利用二进制编码将其代码加密或混淆,以便逃避病毒扫描软件的检测。例如,一些勒索软件会将其负载编码成Base64格式,甚至使用自定义二进制加密算法,以确保病毒不会被反病毒软件及时发现。 -
Web应用程序攻击:XSS(跨站脚本攻击)
在某些情况下,攻击者可能会通过二进制编码绕过输入验证,将恶意脚本隐藏在表单输入中。例如,攻击者可以通过将JavaScript代码进行二进制编码,然后在Web页面中插入该二进制编码,从而在用户的浏览器中执行恶意脚本。 -
二进制协议漏洞利用
某些通信协议(例如SMB、FTP等)使用二进制协议传输数据。攻击者通过分析和构造恶意的二进制数据包,可能利用协议中的漏洞发起攻击,如信息泄露、远程执行代码等。
二进制编码、ASCII、Unicode、Hex、UTF-8、JSON、HTML实体编码和Base64编码 的详细比较表格
编码类型 | 编码表示方式 | 特点与用途 | 如何一眼识别 | 在安全领域的应用场景 | 安全特性 |
---|---|---|---|---|---|
二进制编码 | 仅由 0 和 1 组成 | 表示计算机内部数据,基础编码方式,适用于低级别硬件操作 | 只包含 0 和 1 ,如:10101101 或 110101 | 缓冲区溢出攻击,利用二进制数据操控内存或程序流 | 容易直接操作计算机底层数据,常用于攻击载体注入。 |
ASCII | 7 位(或扩展为 8 位)字符 | 标准字符编码,表示英文字母、数字和符号。每个字符对应一个数字值 | 由字符组成的字符串,且字符都是基本的英文字符。例如:A , 123 , ! | XSS(跨站脚本),通过在用户输入中注入ASCII字符进行恶意代码执行 | 仅适用于英文字符,容易被传统过滤器检测。 |
Unicode | 多种编码方式(UTF-8, UTF-16等) | 支持全球所有语言的字符,包含更广泛的字符集 | 以 \u 后跟 4 位十六进制数表示,例如:\u0041 (代表字母"A") | 编码绕过,通过Unicode字符绕过过滤器进行攻击 | 支持多种语言和特殊符号,有时会被用来绕过输入验证。 |
Hex(十六进制) | 使用0-9, A-F表示数字 | 将二进制数据转换为易读的格式,每两个字符表示一个字节 | 由 0-9 和 A-F 组成,通常以 0x 前缀,例如:0x41 表示 A | 命令注入,通过操控十六进制数据进行注入攻击 | 可以将二进制数据表示为易读的格式,常用于绕过过滤。 |
UTF-8 | 多字节编码(1到4字节) | 变长字符编码,用于表示Unicode字符,兼容ASCII | ASCII字符部分与ASCII相同,非ASCII字符以 0x 开头的字节表示,如 0xE4 | XSS和HTML注入,通过UTF-8编码绕过过滤和输入验证 | 兼容ASCII,广泛使用,容易被攻击者用来绕过安全措施。 |
JSON | 使用 {} 和 [] 结构 | 用于数据交换,采用键值对格式,支持多种数据类型(字符串、数字、数组等) | 数据以 {} 包裹表示对象,[] 表示数组,键值对形式:"key": "value" | JSON注入,攻击者修改JSON数据,绕过身份验证或输入过滤 | 易受恶意数据操控,可能用于伪造响应、绕过验证。 |
HTML实体编码 | 使用 & 和 ; 包裹字符 | 将特殊字符(如 < , > , & 等)转为HTML实体,防止浏览器解析为标签 | 以 & 开始,以 ; 结束,例如:< , & , © | XSS攻击,利用HTML实体编码绕过输入过滤和执行恶意脚本 | 防止HTML标签被解析,但有时能被用作绕过XSS防护。 |
Base64编码 | 使用 A-Z, a-z, 0-9, + , / | 将二进制数据转换为可打印字符的编码,常用于URL、电子邮件等 | 由 A-Z, a-z, 0-9 和 + , / 组成,通常以 = 填充,长度是4的倍数,例如:U29mdXQgRGV2 | 编码绕过和数据泄露,通过Base64编码绕过传输层的安全检测 | 可用于数据隐匿或绕过安全检测,特别在传输敏感数据时。 |
编码特点总结:
- 二进制编码:用于计算机内部的基本表示,适用于低级别硬件或内存操作。在攻击中常用于缓冲区溢出等攻击手段。
- ASCII:适用于英文字符集,易于在传统过滤器中检测和防范。常见于老旧系统,注入攻击如XSS可能使用ASCII字符。
- Unicode:支持全球所有字符的编码,字符集更广。攻击者通过Unicode字符可以绕过一些过滤器,尤其是在Web应用中。
- Hex(十六进制):用于将二进制数据转换为可读格式,广泛应用于调试和反向工程。在渗透测试中,常用于绕过输入过滤和注入攻击。
- UTF-8:支持全球字符的编码方式,且兼容ASCII。在Web应用中常用于处理多语言数据,XSS和HTML注入常涉及UTF-8字符编码。
- JSON:用于数据交换,易于被人类读取。在安全领域常见于注入攻击,攻击者通过操控JSON数据绕过安全控制。
- HTML实体编码:将特殊字符转为实体编码,防止它们被浏览器误解析为HTML标签。常用于防止XSS攻击,但也可能被攻击者利用绕过防护。
- Base64编码:将二进制数据转换为ASCII字符,常用于电子邮件或URL传输。在渗透测试中,常用来绕过安全过滤或进行数据隐匿。
总结:
在安全领域中,这些编码类型通常被攻击者用来绕过输入过滤、防火墙或入侵检测系统(IDS)。例如,XSS攻击常涉及HTML实体编码、UTF-8编码或Base64编码来避免被检测到,而JSON注入则是攻击者通过操控JSON格式的数据进行攻击。通过理解这些编码及其特点,可以帮助开发者和安全专家更好地防范编码相关的攻击。
喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。
相关文章:
编码格式大全解释以及相关编码特性
目录 说明: 1. Base64 Base64编码的字符集通常包括: Base64的工作原理: Base64编码在安全渗透中的应用场景 常见的Base64编码绕过场景 如何防范Base64绕过攻击 2. URL编码(Percent Encoding) URL编码与安全渗透的关系 示…...
正则表达式(Regular expresssion)
正则表达式 匹配单次 . :匹配任意一个字符 [ ] :匹配[ ]里举例的任意一个字符 /d :匹配数字0-9 /D :匹配非数字 /s :匹配空白或tab建 /S :匹配非空白 /w :…...
JavaScript 发起网络请求 axios、fetch、async / await
目录 fetch 发送 GET 请求(fetch) 发送 POST 请求(fetch) 处理后台异常响应 async / await async await 发送 GET 请求(async / await fetch) 发送 POST 请求(async / await fetch&…...
安装OpenJDK21(linux、macos)
文章目录 安装OpenJDK21java21linux下安装配置mac下安装 安装OpenJDK21 java21 封神!Java 21正式发布了,迎来了史诗级新特性,堪称版本最强!!! 视频链接:https://www.bilibili.com/video/BV1E8…...
Java面试宝典:说下Spring Bean的生命周期?
Java面试宝典专栏范围:JAVA基础,面向对象编程(OOP),异常处理,集合框架,Java I/O,多线程编程,设计模式,网络编程,框架和工具等全方位面试题详解 每…...
k8s向容器内传文件与下载文件
1、下载: kubectl cp <namespace>/<pod-name>:<container-path> <local-path>示例: kubectl cp mynamespace/mypod:/tmp/testfile.txt ./testfile.txt如果 Pod 中有多个容器,可以通过 -c 标志指定容器: kubectl c…...
A4988一款带转换器和过流保护的 DMOS 微步驱动器的使用方式
A4988是一款带转换器和过流保护的 DMOS 微步驱动器,用于驱动双极步进电动机。它支持全、半、1/4、1/8 及 1/16 步进模式,输出驱动性能可达 35 V 及 2 A。其特点包括简单的步进和方向控制接口、可调电位器调节最大电流输出、自动电流衰减模式检测/选择以及…...
Elasticsearch+Logstash+Kibana可视化集群部署
文章目录 1.组件介绍简述2.集群规划3.Es组件部署4.Logstash组件部署5.Kibana组件部署6.Kibana的基础使用 1.组件介绍简述 Elasticsearch:开源实时分布式搜索和分析引擎,支持大规模数据存储和高吞吐量,提供丰富的搜索功能和可扩展性。 Logsta…...
数据结构之二叉树
数据结构之二叉树 数据结构之二叉树1. 什么是二叉树?2. 基本概念3. 二叉树的基本形态4. 二叉树的性质5. 特殊二叉树6. 二叉树的存储7. 二叉树的遍历7.1 前序遍历7.2 中序遍历7.3 后序遍历7.4 层次遍历 8. 应用场景9. 实例代码9.1 示例树结构9.2 输出结果 数据结构之…...
华为云+硅基流动使用Chatbox接入DeepSeek-R1满血版671B
华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 硅基流动 1.1 注册登录 1.2 实名认证 1.3 创建API密钥 1.4 客户端工具 OllamaChatboxCherry StudioAnythingLLM 资源包下载: AI聊天本地客户端 接入Chatbox客户端 点击设置 选择SiliconFloW API 粘贴1.3创…...
《图解设计模式》笔记(十)用类来表现
二十二、Command模式:命令也是类 一个类调用某方法,虽然调用结果会反映在对象的状态中,但不会留下工作的历史记录。 若有一个类表示“请进行这项工作”的“命令”,每一项想做的工作就不再是“方法的调用”这种动态处理了,而是一个表示命令的类的实例,即可以用“物”来表…...
Scrapy:任务队列底层设计详解
Scrapy 中队列设计详解 1. 概述 Scrapy 的队列系统是其调度器(Scheduler)的核心组件之一,负责存储和管理待抓取的请求。Scrapy 实现了两种类型的队列: 内存队列:请求存储在内存中,重启后数据丢失磁盘队列…...
zola + github page,用 workflows 部署
之前的Zola都是本地build之后,再push到github上,这种方式很明显的弊端就是只能在本地编辑,而不能通过github编辑,再pull到本地,缺乏了灵活性。因此将zola用workflows来部署。 repo地址:https://github.com/…...
pytest测试专题 - 1.2 如何获得美观的测试报告
<< 返回目录 1 pytest测试专题 - 1.2 如何获得美观的测试报告 1.1 背景 虽然pytest命令的报文很详细,用例在执行调试时还算比较方便阅读和提取失败信息, 但对于大量测试用例运行时,可能会存在以下不足 报文被冲掉测试日志没法归档 …...
关闭浏览器安全dns解决访问速度慢的问题
谷歌浏览器加载速度突然变慢了?检查安全DNS功能(DoH)是否被默认开启。 谷歌浏览器在去年已经推出安全DNS功能(即DoH) , 启用此功能后可以通过加密的DNS增强网络连接安全性。例如查询请求被加密后网络运营商将无法嗅探用户访问的地址,因此对于增强用户的…...
今日AI和商界事件(2025-02-14)
今日AI大事件主要包括以下几个方面: 一、苹果新品预告 事件概述:苹果CEO蒂姆库克在社交媒体发布7秒视频,配文“准备好迎接家庭的新成员”,并宣布2月19日将有新品发布。知名科技记者马克古尔曼称,新款低端iPhone SE将…...
【黑马点评优化】1-使用JWT登录认证+redis实现自动续期
1-使用JWT登录认证redis实现自动续期 0 前言1 原先的redis实现登录鉴权2 JWT登录认证Redis自动续期2.1 认证(identification)授权 (authorization)和鉴权(Authorization)2.1.1 认证(identificat…...
一个让Stable Diffusion更稳定、更易用的Github开源项目
2023除了ChatGPT大火,Stable Diffusion同样也是非常火热,Stable Diffusion是一个Github开源项目,很多爱好者都会本地安装,但面对一些初学者来说,在安装、配置和使用过程中还是会经常出现很多问题,特别不了解…...
Mac之JDK安装
Mac之JDK安装 一.安装 jdk 打开终端输入命令:java -version 查看是否已安装 JDK Oracle 官方下载地址 根据自己Mac 系统安装 查看 Mac 系统,打开中断命令,输入: uname -a Compressed Archive 是压缩文档,下载的是一个 .tar.gz 压缩包 D…...
深入Flask:如何优雅地处理HTTP请求与响应
哈喽,大家好,我是木头左! 本文将带你深入了解如何在Flask中优雅地处理HTTP请求和响应,让你的应用更加高效、安全和用户友好。 创建一个简单的Flask应用 让从创建一个最简单的Flask应用开始: from flask import Flaskapp = Flask(__name__)@app.route(/) def...
kron积计算mask类别矩阵
文章目录 1. 生成类别矩阵如下2. pytorch 代码3. 循环移动矩阵 1. 生成类别矩阵如下 2. pytorch 代码 import torch import torch.nn as nn import torch.nn.functional as Ftorch.set_printoptions(precision3, sci_modeFalse)if __name__ "__main__":run_code 0…...
Redis实现消息队列
什么是消息列队。 消息队列是一种应用间的异步协作机制,同时消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削峰等问题。实现高性能,高可用,可伸缩和最终一致性架构。市面上的 M…...
vue+springboot+webtrc+websocket实现双人音视频通话会议
前言 最近一些时间我有研究,如何实现一个视频会议功能,但是找了好多资料都不太理想,最终参考了一个文章 WebRTC实现双端音视频聊天(Vue3 SpringBoot) 只不过,它的实现效果里面只会播放本地的mp4视频文件&…...
【免费送书活动】《MySQL 9从入门到性能优化(视频教学版)》
本博主免费赠送读者3本书,书名为《MySQL 9从入门到性能优化(视频教学版)》。 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 这本书已经公开…...
【设计模式】【行为型模式】命令模式(Command)
👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…...
1.14学习总结
日常刷题单 刷了题目后,对于排序方法更加熟练,手搓代码的速度也得到了提高。 感觉字符串还不熟练,高精度更是云里雾里,上升空间极大。 同时看见今晚有个入门难度的测试,去练了练手,想看看自己是什么成分&…...
QxOrm生成json
下载Qxorm-1.5版本 使用vs打开项目,直接生成即可: lib目录中会生成dll和lib文件 新建Qt项目使用Qxorm: 将QxOrm中上面三个目录拷贝到新建的Qt项目中 pro文件添加使用QxOrm第三方库 INCLUDEPATH $$PWD/include/ LIBS -L"$$PWD/lib" LIBS…...
伯克利 CS61A 课堂笔记 09 —— Data Abstraction
本系列为加州伯克利大学著名 Python 基础课程 CS61A 的课堂笔记整理,全英文内容,文末附词汇解释。 目录 01 Data Abstraction 数据抽象 Ⅰ Rational Numbers Ⅱ Rational Number Arithmetic 02 Pairs 对 Ⅰ Representing Pairs Using Lists Ⅱ Re…...
高频 SQL 50 题(基础版)
高频 SQL 50 题(基础版) 查询连接聚合函数排序和分组高级查询和连接子查询高级字符串函数 / 正则表达式 / 子句 查询 链接: link 链接: link 链接: link 链接: link 链接: link 连接 链接: 高频 SQL 50 题基础版_1378. 使用唯一标识码替换员工ID 链接…...
HtmlRAG:RAG系统中,HTML比纯文本效果更好
HtmlRAG 方法通过使用 HTML 而不是纯文本来增强 RAG 系统中的知识表示能力。通过 HTML 清洗和两步块树修剪方法,在保持关键信息的同时缩短了 HTML 文档的长度。这种方法优于现有基于纯文本的RAG的性能。 方法 其实主要看下围绕html提纯思路,将提纯后的…...
python学opencv|读取图像(六十二)使用cv2.morphologyEx()形态学函数实现图像梯度处理
【1】引言 前序已经学习了腐蚀和膨胀的单独作用函数,还研究了按照不同顺序调用腐蚀和膨胀函数调整图像效果,相关文章包括且不限于: python学opencv|读取图像(六十一)先后使用cv2.dilate()函数和cv2.erode()函数实现图…...
10G EPON光模块
一、10G EPON对称光模块 工作模式:上行突发接收、下行连续发射。 工作原理:当需要发送信号时,系统信号通过光模块的电接口把信号传送到驱动芯片,芯片处理后,驱动激光器发出调制光信号,经光纤发到远端&…...
RocketMQ与kafka如何解决消息丢失问题?
0 前言 消息丢失基本是分布式MQ中需要解决问题,消息丢失时保证数据可靠性的范畴。如何保证消息不丢失程序员面试中几乎不可避免的问题。本文主要说明RocketMQ和Kafka在解决消息丢失问题时,在生产者、Broker和消费者之间如何解决消息丢失问题。 1.Rocket…...
每日Attention学习23——KAN-Block
模块出处 [SPL 25] [link] [code] KAN See In the Dark 模块名称 Kolmogorov-Arnold Network Block (KAN-Block) 模块作用 用于vision的KAN结构 模块结构 模块代码 import torch import torch.nn as nn import torch.nn.functional as F import mathclass Swish(nn.Module)…...
【前端】ES6新特性汇总
本文作者: slience_me ES6新特性汇总 1. let声明变量 1)let作用域 // var 声明的变量往往会越域 // let 声明的变量有严格的局部作用域 {var a 1;let b 2; } console.log(a); // 1 console.log(b); // 报错 b is not defined2)声明次数 …...
2024 CyberHost 语音+图像-视频
项目:CyberHost: Taming Audio-driven Avatar Diffusion Model with Region Codebook Attention 音频驱动的身体动画面临两个主要挑战:(1)关键人体部位,如面部和手部,在视频帧中所占比例较小&#x…...
Git命令摘录
使用 Git 升级软件通常是指通过 Git 仓库获取软件的最新版本或更新代码。以下是详细的步骤和方法: 1. 克隆软件仓库 如果这是你第一次获取软件代码,可以使用 git clone 命令将远程仓库克隆到本地。 git clone <仓库地址> 例如: git cl…...
DeepSeek24小时写作机器人,持续创作高质量文案
内容创作已成为企业、自媒体和创作者的核心竞争力。面对海量的内容需求,人工创作效率低、成本高、质量参差不齐等问题日益凸显。如何在有限时间内产出高质量内容?DeepSeek写作机器人,一款24小时持续创作的智能工具,为企业和个人提…...
Python 面向对象的三大特征
前言:本篇讲解面向对象的三大特征(封装,继承,多态),还有比较细致的(类属性类方法,静态方法),分步骤讲解,比较适合理清楚三大特征的思路 面向对象的…...
在mac中安装Colima使用docker(替代Docker Desktop)
目录 推荐方案:Colima Docker CLI(原生 ARM 支持) 步骤 1: 安装必需工具 步骤 2: 启动 Colima (优化 ARM 虚拟机) 步骤 3: 绑定 Docker CLI 到 Colima 步骤 4: 验证 Docker 运行 方案对比与注意事项 常见陷阱 卸载残留配置ÿ…...
YOLO11网络结构以及改进1
YOLO11 1.YOLO11网络结构图在哪里?2.对应的网络结构图3.每一个模块详解3.1 Conv模块3.2关于卷积模块3.3 关于给各个模块指定参数的细节 4.加入CBAM 1.YOLO11网络结构图在哪里? 2.对应的网络结构图 3.每一个模块详解 3.1 Conv模块 位置:ultr…...
EtherNetIP转ModbusTCP网关,给风电注入“超级赛亚人”能量
EtherNetIP转ModbusTCP网关,给风电注入“超级赛亚人”能量 在工业通信领域,常常需要将不同网络协议的设备和系统连接起来,以实现更高效的数据交互和系统集成。比如,把EtherNet/IP设备及其网络连接到ModbusTCP网络系统,…...
30天开发操作系统 第 20 天 -- API
前言 大家早上好,今天我们继续努力哦。 昨天我们已经实现了应用程序的运行, 今天我们来实现由应用程序对操作系统功能的调用(即API, 也叫系统调用)。 为什么这样的功能称为“系统调用”(system call)呢?因为它是由应用程序来调用(操作)系统中的功能来完…...
DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件
1 DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件 1.1 背景 AI能力再强,如果不能在企业的自有业务上产生助益,那基本也是一无是处。将企业的自有业务上传到线上训练,那是脑子进水的做法ÿ…...
在香橙派5 NPU上使用Yolov5
【香橙派】使用NPU部署Yolov5的完整解决方案 香橙派使用NPU部署Yolov5的完整解决方案 Orangepi 5 Pro(香橙派5pro)部署yolov5 RK3588实战:调用npu加速,yolov5识别图像、ffmpeg发送到rtmp服务器 香橙派5 RK3588 yolov5模型转换rknn及部署踩坑全记录 orang…...
常用排序算法
1. 基础排序算法 1.1 冒泡排序(Bubble Sort) 原理: 依次比较相邻元素,将较大的元素逐步"冒泡"到右侧。 def bubble_sort(arr):n len(arr)for i in range(n):swapped Falsefor j in range(0, n-i-1):if arr[j] >…...
MySQL判空函数--IFNULL函数的使用
文章目录 IFNULL函数介绍IFNULL函数的语法举例相关扩展 IFNULL函数介绍 在MySQL中,IFNULL函数用于判断给定的表达式是否为NULL。如果表达式为NULL,则IFNULL函数返回指定的替代值;如果表达式不为NULL,则返回表达式本身的值。 IFN…...
Git 设置代理
设置 HTTP 和 HTTPS 代理 运行以下命令来配置 Git 的 HTTP 和 HTTPS 代理: git config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy https://127.0.0.1:7890 验证代理设置 你可以通过以下命令检查代理是否设置成功: g…...
nsc account 及user管理
从安全角度,推荐使用sign 模式进行nats account及用户管理 把权限放到account level 用户密码泄露可以通过快速更换用户可以设置过期日期,进行安全轮换 此外通过nsc 管理用户和权限,可以统一实现全局管控,包括subject管控&#…...
llama.cpp部署 DeepSeek-R1 模型
一、llama.cpp 介绍 使用纯 C/C推理 Meta 的LLaMA模型(及其他模型)。主要目标llama.cpp是在各种硬件(本地和云端)上以最少的设置和最先进的性能实现 LLM 推理。纯 C/C 实现,无任何依赖项Apple 芯片是一流的——通过 A…...