编码格式大全解释以及相关编码特性

目录

说明:

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的工作原理

  1. 将输入的字节数据分成3字节一组,若不足3字节,则用0补齐。
  2. 每3字节(24位)数据被分成4个6位的组(即6位的二进制数值)。
  3. 每个6位数值映射到Base64字符集中的一个字符。
  4. 如果输入数据不足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编码绕过场景

  1. 跨站脚本攻击(XSS)绕过

    • 背景:许多Web应用会对用户输入进行HTML字符过滤,以防止跨站脚本(XSS)攻击。
    • 然而,某些应用可能仅对常见的HTML标签字符进行过滤,而忽视了Base64编码后的数据。
    • 攻击方式:攻击者可以将恶意JavaScript脚本通过Base64编码的方式绕过过滤。例如,攻击者将一个XSS脚本 alert('XSS') 转换为Base64编码,得到:

YWxlcnQoJ1hTUyc1Jyk=

然后将其嵌入到网页或请求参数中。某些应用解码后会执行该JavaScript代码,导致XSS攻击。

  1. SQL注入(SQL Injection)绕过

    • 背景:SQL注入攻击通常依赖于插入恶意SQL命令,通常包括特殊字符(如 '-- 等),这些字符可能会被Web应用过滤掉。
    • 攻击者可以通过Base64编码来绕过过滤。
    • 攻击方式:攻击者将SQL注入语句(如' OR 1=1 --)进行Base64编码,得到:

J29yIDE9MSAtLQ==

然后将编码后的数据传递给应用程序。如果应用没有对Base64编码进行解码和检查,攻击者可以成功执行SQL注入攻击。

  1. 命令注入(Command Injection)绕过

    • 背景:命令注入攻击旨在通过输入恶意命令控制系统。许多应用会过滤掉特殊字符,如分号 ; 或管道符 |
    • 攻击者可以通过Base64编码将这些字符传递给系统。
    • 攻击方式:攻击者通过将命令注入payload(例如 ; ls -la)编码为Base64格式:

OiBscyAtbGE=

然后将其传递给Web应用,若应用没有对Base64解码后的内容进行适当过滤或验证,攻击者能够执行命令。

  1. 路径穿越(Directory Traversal)攻击绕过

    • 背景:路径穿越攻击尝试通过操控文件路径,访问系统的敏感文件。
    • 攻击者可以使用Base64编码绕过路径过滤限制。
    • 攻击方式:攻击者可以将路径穿越字符(如 ../)进行Base64编码,得到:

Li4v

然后将编码后的路径传递给Web应用,如果应用未能对解码后的路径进行适当检查,攻击者能够访问系统敏感文件。

如何防范Base64绕过攻击

  1. 严格输入验证:对所有用户输入进行严格的过滤和验证。不要仅依赖于对字符的过滤,而是应当使用安全框架进行输入验证和清理。

  2. 适当的输出编码:对于输入的内容,在输出到Web页面时使用HTML实体编码,避免直接将用户输入作为HTML内容渲染。

  3. Base64解码和检查:在接收任何编码数据时(如URL参数、HTTP请求体等),应该先解码Base64数据,然后检查是否存在潜在的恶意内容。解码后仍然需要对内容进行适当的过滤和转义。

  4. Web应用防火墙(WAF):使用Web应用防火墙可以帮助识别并防止Base64编码的绕过攻击,特别是针对SQL注入和XSS攻击。

  5. 最小权限原则:确保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编码绕过攻击

  1. 严格输入验证:无论是否进行URL编码,所有用户输入都应进行严格的输入验证。避免接受未经处理的HTML、JavaScript代码、SQL命令等,并且对于特殊字符进行适当的过滤和转义。

  2. 输出编码:确保输出到浏览器或服务器的内容经过适当的编码。比如HTML输出时,应对特殊字符进行HTML实体编码,防止恶意脚本执行。

  3. 使用安全框架和库:现代的Web框架(如Django、ASP.NET等)通常具有内建的安全机制,能有效防止SQL注入、XSS等攻击。使用这些框架可以大大减少手动处理编码问题的风险。

  4. URL解码控制:服务器应确保对URL中的编码部分进行解码时使用正确的解码机制,避免错误地处理恶意编码内容。

通过了解URL编码与安全渗透的关系,可以识别潜在的漏洞并采取措施防范各种攻击,保障Web应用的安全性。


3. HTML实体编码

  • HTML实体编码(HTML Entity Encoding)是一种将特殊字符转换为预定义实体(Entity)的机制,以确保这些字符在HTML文档中被正确显示,而非被解析为代码。
    • 例如,字符 < 会被编码为 &lt;,字符 > 会被编码为 &gt;
  • 特性:将危险字符替换为实体形式(如<&lt;>&gt;)。
  • 应用场景
    • 网页渲染用户输入内容。
    • 防御跨站脚本(XSS)攻击。
  • 安全领域
    • Web安全(XSS防护)。

核心目标

  • 防止解析歧义:避免浏览器将用户输入的内容误认为HTML标签或脚本。

  • 防御注入攻击:阻止恶意用户通过输入特殊字符注入代码(如XSS攻击)。


示例:基本字符转义

原始字符实体编码用途
<&lt;避免被解析为HTML标签起始符
>&gt;避免被解析为HTML标签结束符
&&amp;避免被解析为实体编码起始符
"&quot;避免破坏HTML属性值的引号
'&#39; 或 &apos;避免破坏单引号包裹的属性值

示例:用户输入转义

未编码的输入

用户评论:<script>alert('XSS攻击!')</script>

编码后的输出

用户评论:&lt;script&gt;alert(&#39;XSS攻击!&#39;)&lt;/script&gt;

此时,浏览器会直接显示文本内容,而不会执行脚本。

何时使用HTML实体编码?

  • 输出到HTML内容时:在将用户输入、数据库数据或第三方内容插入HTML正文或属性时。

  • 避免在存储时编码:保留原始数据,仅在展示时动态编码,以适应不同场景(如导出为文本、JSON等)。

工具与函数

语言/框架编码函数示例
PHPhtmlspecialchars()htmlspecialchars($input, ENT_QUOTES, 'UTF-8')
Python (Django)模板自动转义或 escape 过滤器`{{ user_inputescape }}`
JavaScript手动替换或库(如hehe.encode(userInput, { useNamedReferences: true })
Java (Spring)Thymeleaf模板引擎自动转义<div th:text="${userInput}"></div>

绕过编码的渗透技巧(及防御)

通过未过滤的上下文绕过

  • 场景
    即使对HTML内容编码,若将用户输入插入到<script>标签或事件处理程序中,仍需额外处理。

  • 攻击载荷

<a href="#" onclick="用户输入">点击</a>
  • 若用户输入为 alert(1),会导致代码执行。

  • 防御
    根据上下文选择编码方式:

    • JavaScript上下文:使用 \uXXXX Unicode转义。

    • HTML属性:同时编码空格和括号,如 &#x20; 替代空格。


4. Hex编码(十六进制编码)

在信息传输过程中,有些字符可见,有些不可见。为了使传输过程更加规范,可以将信息编码为十六进制(hex),传输完成后再解码为原始信息。Hex编码是最常用的编码方式之一,它将信息转换为十六进制形式,适用于计算机存储和数据处理。

  • 特性:将每个字节转换为两个十六进制字符(如0x4141)。
  • 应用场景
    • 调试二进制数据(如内存转储)。
    • 二进制协议数据传输(如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)。
    • 同形字攻击(如а(西里尔) vs a(拉丁))。

UTF-8/Unicode实体编码与安全渗透的关系

  • UTF-8编码漏洞:在安全渗透测试中,UTF-8编码有时会被用作绕过传统输入过滤或字符编码解析机制的手段。一些Web应用没有正确处理UTF-8编码输入,可能导致跨站脚本(XSS)、SQL注入或命令注入等安全漏洞。攻击者可以通过插入特定的字符、实体编码、Unicode编码等方式来绕过过滤。

  • Unicode绕过过滤:攻击者通过将恶意脚本或SQL命令以Unicode编码进行传输(如 &#x3C;script&#x3E;alert(1)&#x3C;/script&#x3E;),可以绕过防护系统的输入验证或输出编码,从而实施跨站脚本攻击(XSS)。

  • Web应用中的Unicode编码注入:Unicode编码注入攻击涉及将特定字符(如斜杠或引号)用Unicode表示(例如,\u002F 表示斜杠 /),使得应用无法正确解析并过滤这些字符,进而导致攻击成功。

实际案例

XSS(跨站脚本攻击):假设某个网站没有正确处理用户输入,允许用户在输入框中插入脚本。如果输入框没有做充分的字符过滤,攻击者可以提交如下的Unicode编码字符:

&#x3C;script&#x3E;alert('XSS')&#x3C;/script&#x3E;

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编码相关的安全渗透场景:

  1. JSON注入攻击 JSON注入攻击是指攻击者将恶意的数据嵌入JSON格式的请求或响应中,以达到修改应用行为或绕过应用逻辑的目的。攻击者通常试图通过操控JSON数据,破坏系统的正常行为,或者通过操控数据内容来窃取信息。

  2. 不安全的JSON解析 一些应用程序会直接解析用户提交的JSON数据,如果没有足够的输入验证或反序列化保护,攻击者可能通过构造恶意的JSON数据来控制程序的执行。例如,攻击者可能通过在JSON中嵌入恶意的脚本,尝试引发跨站脚本(XSS)攻击。

  3. 跨站请求伪造(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(红、绿、蓝)模式转换为二进制数来存储。


二进制编码与安全渗透的关系

在安全渗透中,二进制编码扮演着重要角色,尤其在攻击时,攻击者需要操控二进制数据以绕过安全防护。以下是几个与安全渗透相关的二进制编码应用场景:

  1. 缓冲区溢出攻击
    缓冲区溢出攻击常常涉及恶意代码注入,其中攻击者通过输入精心构造的二进制数据,使得程序的控制流被修改,从而执行攻击者指定的恶意操作。例如,攻击者可以通过特定的二进制数据覆盖程序的返回地址,进而实现远程代码执行。

  2. 编码绕过防火墙和检测系统
    安全防火墙或入侵检测系统(IDS)通常会检查传入的请求,以识别恶意活动。在某些情况下,攻击者通过二进制编码或其他编码方式(如Base64编码)对数据进行编码,以绕过这些安全系统,隐藏恶意代码。例如,攻击者可能会将恶意负载(如JavaScript代码)通过Base64编码并传递,以避免被检测到。

  3. 命令注入
    在命令注入攻击中,攻击者可以将恶意命令嵌入到用户输入的字段中。如果目标系统未正确验证输入,攻击者可能会通过精心构造的二进制命令执行任意命令,通常以绕过安全过滤器为目标。

二进制编码在安全领域中的案例

  1. 恶意软件加密和编码
    恶意软件经常利用二进制编码将其代码加密或混淆,以便逃避病毒扫描软件的检测。例如,一些勒索软件会将其负载编码成Base64格式,甚至使用自定义二进制加密算法,以确保病毒不会被反病毒软件及时发现。

  2. Web应用程序攻击:XSS(跨站脚本攻击)
    在某些情况下,攻击者可能会通过二进制编码绕过输入验证,将恶意脚本隐藏在表单输入中。例如,攻击者可以通过将JavaScript代码进行二进制编码,然后在Web页面中插入该二进制编码,从而在用户的浏览器中执行恶意脚本。

  3. 二进制协议漏洞利用
    某些通信协议(例如SMB、FTP等)使用二进制协议传输数据。攻击者通过分析和构造恶意的二进制数据包,可能利用协议中的漏洞发起攻击,如信息泄露、远程执行代码等。


二进制编码、ASCII、Unicode、Hex、UTF-8、JSON、HTML实体编码和Base64编码 的详细比较表格

编码类型编码表示方式特点与用途如何一眼识别在安全领域的应用场景安全特性
二进制编码仅由 01 组成表示计算机内部数据,基础编码方式,适用于低级别硬件操作只包含 01,如:10101101110101缓冲区溢出攻击,利用二进制数据操控内存或程序流容易直接操作计算机底层数据,常用于攻击载体注入。
ASCII7 位(或扩展为 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字符,兼容ASCIIASCII字符部分与ASCII相同,非ASCII字符以 0x 开头的字节表示,如 0xE4XSS和HTML注入,通过UTF-8编码绕过过滤和输入验证兼容ASCII,广泛使用,容易被攻击者用来绕过安全措施。
JSON使用 {}[] 结构用于数据交换,采用键值对格式,支持多种数据类型(字符串、数字、数组等)数据以 {} 包裹表示对象,[] 表示数组,键值对形式:"key": "value"JSON注入,攻击者修改JSON数据,绕过身份验证或输入过滤易受恶意数据操控,可能用于伪造响应、绕过验证。
HTML实体编码使用 &; 包裹字符将特殊字符(如 <, >, & 等)转为HTML实体,防止浏览器解析为标签& 开始,以 ; 结束,例如:&lt;, &amp;, &#169;XSS攻击,利用HTML实体编码绕过输入过滤和执行恶意脚本防止HTML标签被解析,但有时能被用作绕过XSS防护。
Base64编码使用 A-Z, a-z, 0-9, +, /将二进制数据转换为可打印字符的编码,常用于URL、电子邮件等由 A-Z, a-z, 0-9 和 +, / 组成,通常以 = 填充,长度是4的倍数,例如:U29mdXQgRGV2编码绕过和数据泄露,通过Base64编码绕过传输层的安全检测可用于数据隐匿或绕过安全检测,特别在传输敏感数据时。

编码特点总结:

  1. 二进制编码:用于计算机内部的基本表示,适用于低级别硬件或内存操作。在攻击中常用于缓冲区溢出等攻击手段。
  2. ASCII:适用于英文字符集,易于在传统过滤器中检测和防范。常见于老旧系统,注入攻击如XSS可能使用ASCII字符。
  3. Unicode:支持全球所有字符的编码,字符集更广。攻击者通过Unicode字符可以绕过一些过滤器,尤其是在Web应用中。
  4. Hex(十六进制):用于将二进制数据转换为可读格式,广泛应用于调试和反向工程。在渗透测试中,常用于绕过输入过滤和注入攻击。
  5. UTF-8:支持全球字符的编码方式,且兼容ASCII。在Web应用中常用于处理多语言数据,XSS和HTML注入常涉及UTF-8字符编码。
  6. JSON:用于数据交换,易于被人类读取。在安全领域常见于注入攻击,攻击者通过操控JSON数据绕过安全控制。
  7. HTML实体编码:将特殊字符转为实体编码,防止它们被浏览器误解析为HTML标签。常用于防止XSS攻击,但也可能被攻击者利用绕过防护。
  8. Base64编码:将二进制数据转换为ASCII字符,常用于电子邮件或URL传输。在渗透测试中,常用来绕过安全过滤或进行数据隐匿。

总结:

在安全领域中,这些编码类型通常被攻击者用来绕过输入过滤、防火墙或入侵检测系统(IDS)。例如,XSS攻击常涉及HTML实体编码UTF-8编码Base64编码来避免被检测到,而JSON注入则是攻击者通过操控JSON格式的数据进行攻击。通过理解这些编码及其特点,可以帮助开发者和安全专家更好地防范编码相关的攻击。


喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/969234.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件工程-模块化设计

分解&#xff08;decomposition&#xff09; C&#xff08;P1P2&#xff09;> C&#xff08;P1&#xff09;C&#xff08;P2&#xff09; E&#xff08;P1P2&#xff09;> E&#xff08;P1&#xff09;E&#xff08;P2&#xff09; C为问题的复杂程度&#xff0c;E为解…

LabVIEW显微镜成像偏差校准

在高精度显微镜成像中&#xff0c;用户常常需要通过点击图像的不同位置&#xff0c;让电机驱动探针移动到指定点进行观察。然而&#xff0c;在实际操作中&#xff0c;经常会遇到一个问题&#xff1a;当点击位于图像中心附近的点时&#xff0c;探针能够相对准确地定位&#xff1…

【AI实践】deepseek支持升级git

当前Windows 11 WSL的git是2.17&#xff0c;Android Studio提示需要升级到2.19版本 网上找到指导文章 安装git 2.19.2 cd /usr/src wget https://www.kernel.org/pub/software/scm/git/git-2.19.2.tar.gz tar xzf git-2.19.2.tar.gz cd git-2.19.2 make prefix/usr/l…

在Windows 7操作系统,基于llama.cpp本地化部署 deepseek-r1模型的方法 2025-02-08

一、概述 现在已经是大模型时代。 个人认为&#xff0c;deepseek效果惊艳&#xff0c;大模型已进入实用阶段。 有些电脑&#xff0c;由于种种原因&#xff0c;还在用 Windows 7&#xff0c; Windows XP 等操作系统。 为了让这些电脑用上大模型&#xff0c;本教程在 llama.c…

消息中间件:RabbitMQ镜像集群部署配置全流程

目录 1、特点 2、RabbitMQ的消息传递模式 2.1、简单模式&#xff08;Simple Mode&#xff09; 2.2、工作队列模式&#xff08;Work Queue Mode&#xff09; 2.3、发布/订阅模式&#xff08;Publish/Subscribe Mode&#xff09; 2.4、路由模式&#xff08;Routing Mode&am…

【MySQL — 数据库基础】深入解析 MySQL 的联合查询

1. 插入查询结果 语法 insert into table_name1 select* from table_name2 where restrictions ;注意&#xff1a;查询的结果集合&#xff0c;列数 / 类型 / 顺序 要和 insert into 后面的表相匹配&#xff1b;列的名字不要求相同&#xff1b; create table student1(id int , …

算法学习笔记之数学基础

例1&#xff08;最小公倍数与最大公约数&#xff09; 计算最小公倍数 公式&#xff1a; LCM(A,B) A*B/GCD(A,B) A与B的最小公倍数等于A*B除以A与B的最大公约数 计算最大公约数&#xff1a;辗转相除法 原理&#xff1a;设A与B的最大公约数为x&#xff0c;则A是x的倍数&am…

通过操作系统中的IO模型理解Java中的BIO,NIO,AIO

操作系统中的三种IO模型 阻塞I/O 先来看看阻塞 I/O&#xff0c;当用户程序执行 read&#xff0c;线程会被阻塞 一直等到内核数据准备好&#xff0c;并把数据从内核缓冲区拷贝到应用程序的缓冲区中&#xff0c;当拷贝过程完成&#xff0c;read 才会返回 注意&#xff1a;阻塞…

多项式插值(数值计算方法)Matlab实现

多项式插值&#xff08;数值计算方法&#xff09;Matlab实现 一. 原理介绍二. 程序设计1. 构建矩阵2. 求解矩阵方程3. 作出多项式函数4. 绘制插值曲线5. 完整代码 三. 图例 一. 原理介绍 关于插值的定义及基本原理可以参照如下索引 插值原理&#xff08;数值计算方法&#xff…

SpringMVC请求执行流程源码解析

文章目录 0.SpringMVC九大内置组件1.processRequest方法1.请求先到service方法2.然后不管是get还是post都会跳转到processRequest方法统一处理 2.doService方法3.doDispatch方法1.代码2.checkMultipart 4.核心流程 0.SpringMVC九大内置组件 1.processRequest方法 1.请求先到se…

在vivado中对数据进行延时,时序对齐问题上的理清

在verilog的ISP处理流程中&#xff0c;在完成第一个模块的过程中&#xff0c;我经常感到困惑&#xff0c;到底是延时了多少个时钟&#xff1f;今日对这几个进行分类理解。 目录 1.输入信号激励源描述 1.1将数据延时[9]个clk 1.2将vtdc与hzdc延时[9]个clk(等价于单bit的数据…

Spring 项目接入 DeepSeek,分享两种超简单的方式!

⭐自荐一个非常不错的开源 Java 面试指南&#xff1a;JavaGuide &#xff08;Github 收获148k Star&#xff09;。这是我在大三开始准备秋招面试的时候创建的&#xff0c;目前已经持续维护 6 年多了&#xff0c;累计提交了 5600 commit &#xff0c;共有 550 多位贡献者共同参与…

蓝桥杯-洛谷刷题-day5(C++)(为未完成)

1.P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 i.题目 ii.代码 #include <iostream> #include <string> using namespace std;int N, Na, Nb; //0-"剪刀", 1-"石头", 2-"布", 3-"蜥", 4-"斯"&#xff1…

MySQL - 索引 - 介绍

索引(Index)是帮助数据库高效获取数据的数据结构. 结构 语法 创建索引 creat [unique] index 索引名 on 表名 (字段名, ...); //创建唯一索引时加上unique, 多个字段用逗号隔开 查看索引 show index from 表名; 删除索引 drop index 索引名 on 表名;

2021年全国研究生数学建模竞赛华为杯E题信号干扰下的超宽带(UWB)精确定位问题求解全过程文档及程序

2021年全国研究生数学建模竞赛华为杯 E题 信号干扰下的超宽带(UWB)精确定位问题 原题再现&#xff1a; 一、背景   UWB&#xff08;Ultra-Wideband&#xff09;技术也被称之为“超宽带”&#xff0c;又称之为脉冲无线电技术。这是一种无需任何载波&#xff0c;通过发送纳秒…

安装WPS后,导致python调用Excel.Application异常,解决办法

在使用xlwings编辑excel文件时&#xff0c;默认调用的是“Excel.Application”&#xff0c;如果安装过wps&#xff0c;会导致该注册表为WPS&#xff0c;会导致xlwings执行异常 因为安装过WPS&#xff0c;导致与Excel不兼容的问题&#xff0c;想必大家都听说过。有些问题及时删…

STM32智能小车(循迹、跟随、避障、测速、蓝牙、wifi、4g、语音识别)总结

前言 有需要帮忙代做51和32小车或者其他单片机项目&#xff0c;课程设计&#xff0c;报告&#xff0c;PCB原理图的小伙伴&#xff0c;可以在文章最下方加我V交流咨询&#xff0c;本篇文章的小车所有功能实现的代码还有硬件清单放在资源包里&#xff0c;有需要的自行下载即可&a…

机器学习所需要的数学知识【01】

总览 导数 行列式 偏导数 概理论 凸优化-梯度下降 kkt条件

singleTaskAndroid的Activity启动模式知识点总结

一. 前提知识 1.1. 任务栈知识 二. Activity启动模式的学习 2.1 standard 2.2 singleTop 2.3.singleTask 2.4.singleInstance 引言&#xff1a; Activity作为四大组件之一&#xff0c;也可以说Activity是其中最重要的一个组件&#xff0c;其负责调节APP的视图&#xff…

Java中使用EasyExcel

Java中使用EasyExcel 文章目录 Java中使用EasyExcel一&#xff1a;EasyExcel介绍1.1、核心函数导入数据导出数据 1.2、项目实际应用导入数据导出数据 1.3、相关注解ExcelProperty作用示例 二&#xff1a;EasyExcel使用2.1、导入功能2.2、导出功能 三&#xff1a;EasyExcel完整代…