sql绕过

单字符过滤型

过滤空格

/**/绕过:/**/在mysql中是注释的意思

/*!*/绕过:这种注释在mysql中叫做内联注释,当!后面所接的数据库版本号时,当实际的版本等于或是高于那个字符串,应用程序就会将注释内容解释为SQL,否则就会当做注释来处理。默认的,当没有接版本号时,是会执行里面的内容的。

()绕过,:括号也可以充当分割符的作用

编码绕过:

%09    TAB 键(水平)
%0a    新建一行
%0c    新的一页
%0d    return 功能
%0b    TAB 键(垂直)
%a0    空格
%20    空格
长按alt 然后数字敲0160 松开alt  可以打出全角空格,有时也能绕部分waf

过滤逗号

offsetlimit 0,1:mysql中 limit 0,1等同于 limit 1 offset 0(记得0和1位置是换过来的)

joinselect 1,2,3:mysql中 select * from ((select 1)A join (select 2)B join (select 3)C) 等同于 select 1,2,3

from forsubstr(,,):mysql中 substr('cbase' from 1 for 5) 等同于substr('cbase',1,5)

过滤 > < =

in、between、strcmp、greatest和mid等方法都可以绕过< = >,不细说

过滤 ‘

如果是gbk编码,可以用%df'来注入,宽字节注入可以百度搜索原理

过滤#或者

--#:一样的效果,都是注释后面,记得--的后面有个空格,url就是+,有些版本还能用“ `来注释的

多字符过滤型

双写绕过

过滤一般分为直接ban和替换成空,替换成空很简单直接双写就行,例如select就用selselectect代替…

大小写绕过

SelEct绕过select:mysql中默认不区分大小写

二次编码绕过

$id=urldecode($_GET['id']);

如果后台是这么写的话可以用%2527来绕单引号的一些过滤,因为从浏览器发送数据到服务器会自动urldecode一次,%2527就变成了%27(%25的urldecode就是%)

编码绕过

例如admin被ban了,可以用hex编码然后unhex()解码得到admin,或者base64编码后用from_base()解码(from_base不是每个版本的mysql都有)

||or:mysql中 1||0 等同于1 or 0

&&and:mysql中 1&&0 等同于1 and 0

intoorder by:mysql中order by 2可以用into @1,@2来绕过,都可以测出列数(下图回显不一样,从而判断出列数)

正则匹配类

  1. 匹配一些函数名之后不能跟(, 可以用/*version*/()或者version[空格]()或者version/**/()绕过

其他

网站特性

例如一定版本的IIS+SQL server可以用%来绕过关键字的过滤,例如过滤select可以用se%lect绕过,但是要注意%后面最好不要跟16进制的字符,以免因为urldecode把%后面的关键字吃掉

参数污染

有些waf只是针对第一传参进行检测未对第二个传参进行检测

index.php?id=1&id=2’+or+1=1–+

文本格式

有些waf仅对Content-Type为application/x-www-form-urlencoded数据格式进行过滤,因此我们只要将Content-Type格式修改为multipart/form-data,即可绕过waf

SSRF

在内部服务之间进行访问,即可绕过waf

POST请求

  1. 有的waf只过滤GET请求,而对POST请求没做别的限制,因此,可以将GET型换为POST型
  2. 有的时候,由于数据太大,会导致waf无法将所有的数据都检测完,这个时候会忽略掉我们代入的sql注入语句,从而绕过waf,即:使用POST请求,对服务器请求很大资源逃逸sql注入语句

post分块传输

分块传输是用在防安全狗等一些非后台waf,原理自己百度

bp有插件可以分块传输的插件,add进去就行,然后要用就右键encoding request body然后send发包

链接:https://pan.baidu.com/s/1VlV76tfWNTOZ2J9ZYHjkcQ
提取码:emo2

还有很多还没加,以后补上去

  1. 断包绕过
  2. 缓冲区溢出
  3. 协议不兼容
说点什么
支持Markdown语法
在"sql绕waf"已有2条评论
Loading...