目录
[1. ASCII编码的安全绕过](#1. ASCII编码的安全绕过)
[2. Unicode编码的安全绕过](#2. Unicode编码的安全绕过)
[3. Hex编码的安全绕过](#3. Hex编码的安全绕过)
[4. UTF-8编码的安全绕过](#4. UTF-8编码的安全绕过)
[5. JSON编码的安全绕过](#5. JSON编码的安全绕过)
[6. HTML实体编码的安全绕过](#6. HTML实体编码的安全绕过)
[7. Base64编码的安全绕过](#7. Base64编码的安全绕过)

编码类型在安全绕过中的应用场景与高级技巧
在安全渗透测试中,攻击者常常使用不同的编码方式来绕过安全防护措施,如Web应用程序的输入验证、过滤器、反病毒软件、入侵检测系统(IDS)等。编码可以使恶意载荷看起来像是合法的输入,从而绕过传统的安全防护。
下面我会详细介绍这些编码方式的应用场景,并为你提供如何利用这些编码方式进行安全绕过的高级技巧。
1. ASCII编码的安全绕过
应用场景:
- 跨站脚本(XSS)攻击: 许多Web应用程序会过滤或转义HTML标签,防止恶意JavaScript代码被执行。攻击者通过ASCII编码的方式注入特殊字符(如
<、>、&)来绕过这些防护。
高级场景:
- XSS绕过: 如果一个应用程序不允许HTML标签,但允许纯ASCII字符,攻击者可能会通过将字符转换为其ASCII值的方式绕过过滤器。比如,攻击者将
<script>alert('XSS')</script>转换为其ASCII字符的数字表示。- 字符
<的ASCII值是60,>是62,/是47,攻击者可以输入这样的字符:<script>alert('XSS')</script>。
- 字符
- 命令注入绕过: 在Web应用程序中,某些特殊字符如
&、;等被用来分隔命令。攻击者可以将这些特殊字符转为ASCII编码形式,避免被检测或过滤。- 比如,
&可以被写为&,;可以被写为;。
- 比如,
步骤:
- 找出输入字段,例如搜索框或URL参数,允许用户输入数据。
- 测试ASCII字符 ,尝试输入特殊字符(如
<、>、&)并观察是否被过滤。 - 构造恶意载荷 ,将特殊字符转换为其ASCII编码形式,例如将
<script>转换为<script>。 - 提交数据并验证是否能绕过过滤器并执行恶意脚本。
2. Unicode编码的安全绕过
应用场景:
- 绕过输入验证: 一些Web应用程序可能会基于字符集验证用户输入的内容。攻击者可以利用Unicode编码来绕过这些验证。
高级场景:
- Unicode XSS绕过: Unicode可以表示各种字符,包括不常见的字符。攻击者可以使用Unicode来替代某些字符,从而绕过防火墙或输入验证。特别是在一些Web应用程序中,UTF-8与Unicode字符集会被不完全过滤,攻击者通过Unicode编码的特殊字符来逃避检测。
- 例如,攻击者可以将
<script>alert('XSS')</script>中的<字符替换为Unicode编码:%u003Cscript%u003Ealert('XSS')%u003C/script%u003E。
- 例如,攻击者可以将
- URL编码绕过: 利用Unicode或URL编码,攻击者可以绕过服务器对URL中字符的过滤或限制。例如,
%2F可以表示斜杠/,%3C表示小于号<。
步骤:
- 检查是否允许Unicode字符,特别是对于非英文字符集的应用。
- 测试常见字符的Unicode替代形式 ,例如,尝试将
<替换为%u003C,>替换为%u003E,&替换为%u0026。 - 构造恶意载荷 ,将注入脚本的特殊字符使用Unicode编码,例如通过
%u003Cscript%u003Ealert('XSS')%u003C/script%u003E。 - 提交恶意载荷并验证其能否绕过过滤器并执行。
3. Hex编码的安全绕过
应用场景:
- 命令注入攻击: 很多防火墙或IDS会阻止常见的命令分隔符(如
;、&&)。攻击者可以使用Hex编码绕过这些检查。
高级场景:
- 十六进制命令注入: 攻击者可以将命令的特殊字符(如
;、|、&)转换为十六进制编码,以绕过防火墙或IDS的检测。- 比如,
&字符可以用%26表示,;可以用%3B表示,这样攻击者可以绕过输入验证。 - 例如,攻击者可以将
id; rm -rf /变成id%3B rm -rf /来避免被防火墙阻止。
- 比如,
步骤:
- 识别受限字符 ,例如
&、;等,这些字符常常被过滤。 - 使用Hex编码转换这些字符 ,例如,将
&转为%26,;转为%3B。 - 构造注入命令,将Hex编码应用于命令注入的载荷。
- 提交数据并验证命令是否成功注入。
4. UTF-8编码的安全绕过
应用场景:
- 跨站脚本(XSS)攻击: Web应用可能会过滤掉常见的脚本标记或特殊字符,但UTF-8的多字节特性可能绕过这些限制。
高级场景:
- UTF-8 XSS绕过: 攻击者可以利用UTF-8字符集中的多字节字符来注入恶意代码。通过UTF-8编码,攻击者可以用不同的字节组合表示一些字符,绕过传统的检测系统。
- 例如,将
<script>alert('XSS')</script>中的<用UTF-8编码转换为%C2%AB,>转换为%C2%BB,形成不同的编码模式。
- 例如,将
步骤:
- 识别UTF-8支持的字符集,特别是在多语言环境下。
- 将有害字符转换为UTF-8编码 ,例如
<转换为%C2%AB,>转换为%C2%BB。 - 提交编码后的数据,检查是否能够绕过过滤器并触发恶意脚本。
5. JSON编码的安全绕过
应用场景:
- JSON注入: Web应用程序常使用JSON格式进行数据传输,攻击者通过构造恶意的JSON数据注入来绕过安全机制。
高级场景:
- JSON对象伪造: 攻击者可以通过伪造JSON对象,注入恶意的
admin权限或伪造的身份信息。- 例如,攻击者可以修改JSON中的
role字段,将其从user修改为admin,从而提升权限。
- 例如,攻击者可以修改JSON中的
步骤:
- 分析API请求中的JSON格式 ,识别可能的用户身份字段(如
username、role)。 - 构造恶意的JSON数据 ,伪造用户权限信息,例如
{ "role": "admin" }。 - 发送伪造的JSON数据,检查是否能够绕过身份验证或权限控制。
6. HTML实体编码的安全绕过
应用场景:
- 跨站脚本(XSS)攻击: HTML实体编码常被用于防止HTML标签被解析,但攻击者可以利用这些实体编码绕过过滤系统,注入恶意脚本。
高级场景:
- HTML实体XSS绕过: 攻击者可以将JavaScript代码的特殊字符(如
<、>、&)转为HTML实体编码,绕过输入验证。- 例如,
<script>可以被编码为<script>,然后在客户端被解析为实际的<script>标签。
- 例如,
步骤:
- 检查输入过滤器,确定哪些字符被转义为HTML实体。
- 使用HTML实体编码替代特殊字符 ,如将
<替换为<,将>替换为>。 - 提交包含HTML实体编码的恶意脚本 ,例如:
<script>alert('XSS')</script>。
7. Base64编码的安全绕过
应用场景:
- 绕过防火墙或IDS: Base64编码常用于将二进制数据(如图像、文件)
编码成可打印字符,攻击者可以通过Base64编码绕过安全过滤器。
高级场景:
- 命令注入绕过: Base64编码可以用来绕过输入过滤和IDS,特别是在URL或HTTP请求的参数中,Base64编码可用于注入恶意命令。
- 攻击者可以将恶意命令(如
id; rm -rf /)进行Base64编码,提交给服务器,使得服务器无法直接识别。
- 攻击者可以将恶意命令(如
步骤:
- 将恶意命令进行Base64编码 ,例如,将
id; rm -rf /编码为aWQ7IHJtIC1yZiAv。 - 在URL或POST请求中提交Base64编码后的数据,绕过防火墙或IDS。
- 解码并执行,服务器解码Base64后执行恶意命令。
总结:
这些编码方式(ASCII、Unicode、Hex、UTF-8、JSON、HTML实体编码和Base64)可以用来绕过输入过滤、权限控制、XSS防护、SQL注入防护等安全机制。攻击者通过将特定字符转换为其编码表示,绕过传统的字符匹配或过滤规则,从而成功执行恶意代码或命令。
在进行渗透测试时,你可以通过以下步骤来进行绕过:
- 识别输入点(如URL参数、表单输入、HTTP请求等)。
- 测试常见字符的编码方式,看看是否被过滤。
- 构造恶意载荷,并通过不同的编码形式尝试绕过过滤器。
- 提交数据并分析结果,验证是否绕过了安全防护措施。
理解这些编码方式及其绕过技巧可以帮助你更好地识别和防范相关的安全漏洞。