根据给定的信息,我们可以深入探讨SQL注入绕过的几种方法及其背后的原理。这将涵盖十六进制编码、Unicode编码、各种注释技术以及如何利用特定的符号和函数来绕过Web应用防火墙(WAF)。
### 一、十六进制编码
十六进制编码是一种常见的绕过技术,通过将SQL查询中的字符转换为对应的十六进制形式来逃避WAF的检测。例如,将`union`转换为`/!u%6eion/`,这样可以绕过那些仅识别特定ASCII表示形式的WAF。
#### 实例分析:
- **基本十六进制编码**:
- 将`union`转换为`/!u%6eion/`。
- 将`select`转换为`/!se%6cect/`。
- **字符串整体编码**:
- 将`'admin'`转换为`extractvalue(0x3C613E61646D696E3C2F613E,0x2f61)`。
这种技术尤其适用于那些对输入进行简单过滤或转换的WAF系统。
### 二、Unicode编码
Unicode编码是一种更为复杂的绕过技术,通过使用不同的Unicode编码来绕过WAF的过滤机制。Unicode编码支持多种不同的编码方式,包括标准编码和非标准编码。
#### 实例分析:
- **单引号的不同Unicode编码**:
- `%u0027`: 常规单引号的Unicode编码。
- `%u02b9`、`%u02bc`、`%u02c8`、`%u2032`、`%uff07`等:非标准编码下的单引号。
- **空格的不同Unicode编码**:
- `%u0020`: 常规空格的Unicode编码。
- `%uff00`、`%c0%20`、`%c0%a0`、`%e0%80%a0`等:非标准编码下的空格。
通过使用这些不同类型的Unicode编码,攻击者可以构建出更加难以被检测的SQL注入尝试。
### 三、注释技术
注释技术是另一种常见的绕过手段,可以通过在SQL查询中插入注释来逃避WAF的过滤。主要有两种注释类型:
- **普通注释**:使用`--`或`#`来创建注释。
- **内联注释**:使用`/*`和`*/`来创建注释。
#### 实例分析:
- 使用`--`或`#`来注释掉可能被检测的部分:
- `select * from users where id = 1 --`
- `select * from users where id = 1 #`
- 使用`/*`和`*/`来注释掉可能被检测的部分:
- `select * from users /* where id = 1 */`
这些注释技术可以帮助绕过那些简单地查找特定SQL关键词的WAF。
### 四、函数或变量
利用数据库的内置函数或变量也是绕过WAF的有效手段之一。例如,使用`@@datadir`获取数据目录路径,或使用`information_schema.tables`来获取表信息。
#### 实例分析:
- **获取数据目录路径**:
- `select @@datadir;`
- **获取表信息**:
- `select table_name from information_schema.tables;`
这些内置函数或变量通常不容易被WAF识别,因此可以有效地绕过过滤机制。
### 五、特殊符号
利用特殊符号也是一种有效的绕过方法,尤其是在WAF对常规符号进行过滤的情况下。例如,可以使用`/**/`作为注释符号来绕过检测。
#### 实例分析:
- 使用`/**/`作为注释符号:
- `select /**/ * from users;`
以上介绍的这些绕过技术都是为了应对WAF的过滤策略而设计的。需要注意的是,在实际环境中使用这些技术可能会带来法律风险,并且应该仅用于合法的安全测试和评估目的。