请勿截屏传播

宽字节注入

宽字节注入(Wide Byte Injection)是一种常见的SQL注入攻击技术,主要针对使用宽字节字符集(如GBK、GB2312等)的Web应用程序。以下是其核心原理和特点:

1.什么是宽字节注入

宽字节注入(Wide Byte Injection)是一种常见的SQL注入攻击技术,主要针对使用宽字节字符集(如GBK、GB2312等)的Web应用程序。以下是其核心原理和特点:

1. 技术原理

  • 字符编码差异 :宽字节字符集(如GBK)使用2个字节表示一个字符,而ASCII编码使用1个字节。
  • 转义字符被"吃掉" :当应用程序使用单引号( ' )作为SQL查询的参数边界时,通常会通过添加反斜杠( \ )进行转义。但在宽字节环境下,攻击者可以输入一个特殊字符(如 %df ),使其与转义字符 \ (十六进制为 %5c )组合成一个有效的GBK字符(如 %df%5c 对应GBK中的"運"字),从而使转义失效。

2. 攻击过程

  1. 输入特殊字符 :攻击者在输入框中提交包含宽字节编码的payload,如 %df' OR 1=1# 。
  2. 转义被绕过 :后端代码对单引号进行转义,变为 %df' OR 1=1# ,但 %df%5c 会被解析为一个GBK字符,导致单引号未被转义。
  3. SQL注入成功 :最终执行的SQL语句可能变为 SELECT * FROM users WHERE username='運' OR 1=1#' ,从而绕过身份验证或获取敏感数据。

2.怎么判断是否为宽字节注入

1. 检查目标网站的字符编码

宽字节注入仅在使用 宽字节字符集 (如GBK、GB2312、Big5等)的环境下可能发生。若网站使用UTF-8编码,通常不会触发该漏洞。 检测方法 :

  • 查看HTTP响应头的 Content-Type 字段,例如: Content-Type: text/html; charset=gbk 。
  • 查看页面源码中的 标签,例如:

2. 测试单引号转义情况

宽字节注入的前提是应用程序对单引号( ' )进行转义(通常添加反斜杠 \ )。首先测试单引号是否被转义: 操作 :

  • 在输入框(如登录、搜索框)中输入单引号 ' ,提交后观察响应。 预期结果 :
  • 若返回SQL语法错误(如 You have an error in your SQL syntax ),说明单引号未被转义,可能存在普通SQL注入,但不是宽字节注入。
  • 若无错误(可能被转义为 ' ),则继续下一步测试。

3. 尝试宽字节字符绕过转义

核心测试步骤:利用宽字节编码(如GBK)将转义字符 \ (十六进制为 %5c )“吃掉”,使单引号恢复为未转义状态。 操作 :

  • 输入宽字节字符+单引号的组合,例如: %df' ( %df 是GBK编码中常见的高位字节)。 原理 :若后端使用GBK编码, %df (十六进制)会与转义的 \ ( %5c )组合成一个有效的GBK字符(如 %df%5c 对应GBK中的“運”字),导致单引号 ' 未被转义。 预期结果 :
  • 若返回SQL语法错误(如 You have an error in your SQL syntax ),说明宽字节注入漏洞存在。
  • 若无错误,可能是其他防护机制(如参数化查询)或字符编码不是宽字节。

4. 验证SQL注入效果

若第3步出现SQL错误,可进一步构造payload验证注入是否成功: 操作 :

  • 输入 %df' OR 1=1# ,提交后观察响应。 预期结果 :
  • 若返回所有数据(如登录成功、显示所有记录),说明注入成功。
  • 若返回与正常请求不同的结果,也可确认漏洞存在。
报错注入
布尔盲注

评论区

评论加载中...