一、异常的SQL语法结构
- 特殊符号 :包含大量单引号
'
、双引号"
、分号;
、注释符(--
、#
、/* */
)等。- 例如:
' OR 1=1 --
、" UNION SELECT null,version()#
- 例如:
- 逻辑运算符 :频繁出现
OR
、AND
、UNION
、SELECT
、FROM
、WHERE
等关键字。- 例如:
' OR 'a'='a
、1' UNION SELECT 1,2,3 --
- 例如:
二、异常的参数值
- 永真条件 :参数中包含类似
1=1
、'a'='a'
的永真逻辑,用于绕过验证。- 例如:
?id=1' OR 1=1 --
- 例如:
- 数据库函数/变量 :如
version()
、database()
、user()
、concat()
、sleep()
等。- 例如:
?id=1' UNION SELECT version(),2 --
- 例如:
- 系统表名 :尝试访问系统表(如
information_schema.tables
、sysdatabases
等)。- 例如:
?id=1' UNION SELECT table_name FROM information_schema.tables --
- 例如:
三、异常的请求行为
- 多次重复请求 :同一参数反复变化,尝试不同的注入载荷(如盲注攻击)。
- 例如:
?id=1' AND (SELECT SUBSTRING(password,1,1) FROM users)='a' --
- 例如:
- 超长参数值 :参数值异常长,可能包含编码后的注入语句。
- 例如:
?id=1'%20AND%20SLEEP(5)--
(URL编码后的时间盲注)
- 例如:
四、数据库类型特征
不同数据库的语法差异可能导致流量中暴露特定关键字:
- MySQL :
CONCAT()
、LIMIT
、/**/
注释。 - SQL Server :
WAITFOR DELAY '0:0:5'
、xp_cmdshell
。 - Oracle :
DUAL
表、UTL_HTTP
。 - PostgreSQL :
pg_sleep()
、||
字符串拼接。
五、错误响应中的数据库信息
- 若应用程序未屏蔽错误,返回的HTTP响应可能包含数据库错误信息:
- 例如:
You have an error in your SQL syntax; check the manual for your MySQL server version...
- 例如:
六、编码或混淆
- URL编码 :注入语句被编码为
%27
('
)、%20
(空格)、%3B
(;
)等。 - 十六进制/Unicode编码 :如
0x414243
(ABC的十六进制)或CHAR(65)
。 - 多重嵌套 :如
1'/*!UNION*/SELECT/**/1,2,3--
七、盲注特征
- 布尔盲注 :通过条件判断返回不同页面内容。
- 例如:
?id=1' AND (SELECT COUNT(*) FROM users) > 10 --
- 例如:
- 时间盲注 :通过
SLEEP()
或BENCHMARK()
函数触发延迟。- 例如:
?id=1' AND IF(1=1, SLEEP(5), 0) --
- 例如: