less23

尝试之前的get题的方法发现总是有语法错误,而且报错内容中多出一个引号,我们可以推断我们注释符号没有起作用,查看源码。

1736866487923

果然给干没了,既然不能注释掉多余的引号那么我们可以想到使用多个or来中和掉多出来的一个引号payload如下:

?id=2' or extractvalue(1,concat(0x7e,(select database()),0x7e)) or '1'='1

成功。

1736866811069

less24

首先查找注入点

1738307969207

发现在登录和注册都有过滤,我们试着登录看看

1738308060203

发现能改密码,但也过滤了,无思路,我们看看源码。发现这里是用session获取的用户名且并没过滤,这就是注入点

1738308271201(1)

1738308636055

这里的原理是注册一个危险字段的用户,由于通过session获取的时候没过滤,那么储存在session中的危险字段便能利用(这里注册时的转义只是暂时的)。

我们讲用户名注册成例如这样

admin'#

此时sql语句变成这样

"UPDATE users SET PASSWORD='$pass' where username='admin'#' and password='$curr_pass' "

那么#后面的语句便被注释了,也就是说我们不需要知道当下的密码便可以修改admin的密码。

less25&less25a

由提示可知,”AND”和”OR”被过滤了,那么我们可以使用双写绕过。

双写绕过:

即讲“or”写成“OorR”,这样中间的“or”会被过滤掉,而“OR”则被留下,值得注意的是,如果在payload中的其他单词中也有“or”或者“and”的部分,则也要双写以防被过滤。

less25a则是数字型注入,其余和less25差不多。

less26&less26a

在这一关,除了or 和and被过滤,还有注释符和空格也被过滤了,那么我们可以利用其他的字符代替使用“%a0”“%0b” 替代空格,使用“||” 替代 “or”,使用“%26%26” 替代 “and”。

26a不回显报错信息,所以我们只能让信息爆在显示位上。

less27&less27a

or和and没被过滤,不过空格和注释符还有select和union被过滤了。我们可以用大小写过滤,即将大小写混杂,也可以使用报错注入来回显信息。

27a报错无回显,那么就用大小写过滤。

我们发现有些过滤语句后面的反斜杠上有m或s,这是什么意思呢,这是设定的修正符,修正符的具体效果参照下面这个链接:
正则表达式中的修正符