Less-23
这一关按照一般的步骤操作时,发现使用 # --+
等注释符并不能起到作用,查看源码,发现:
注释符都被过滤为空,这里有两种选择:
1.不使用注释符,使用 ’ 构造语句将后面的 ’ 闭合。
?id=' union select 1,2,database() '
2.使用;%00
进行截断(MySQL特有)
以上两种方式皆可。
注意:使用第一种方法时,要注意逻辑上发生错误。
获得数据库:
?id=' union select 1,2,database() '
获得表:
?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' '
后面常规操作。
Less-24
二次注入。
原理:二次注入原理
我们正常的登录的username和password都是admin。
这里我们注册一个username为admin ’ #的用户,password为123456;用户名中的单引号因为转义的缘故,并不会触发sql报错,但是在插入到数据库时,又会将 ’ # 插入到数据库中:
接下来我们使用admin ’ # 用户进行登录,并修改密码为123:
发现其实修改的时admin用户的密码,二次注入完成。
Less-25
我们在使用 order by
语句判断列数时,发现or
被过滤:
查看源码:
发现 or 和 and 都被过滤,无论大小写,我们可以采取双写,或者使用符号 || &&分别表示 or 和 and 。
还需要注意的时,这一关使用联合注入不能得到结果,可以采取盲注,但是盲注太麻烦,所以试试报错注入:
获得数据库:
?id=1' aandnd updatexml (1,concat(0x7e,database(),0x7e),1)