这个题,其实之前做过,这里只是换了个名字而已
输入1,提交后可以明显发现url发生变化 ,可以猜测SQL注入
源码提示sqlmap是没有灵魂的,说明确实是sql注入
万能密码可以可以到,所包含的表
利用order by查看,发现只有两个字段
查询数据库,发现正则过滤,并且不区分大小写,尝试过/**/注释符对select分隔,但是识别不了,哪还有一种方法就是堆叠注入
查数据库,除去系统自带的,说明红框的就是当前所处数据库
查表,只包含两个表,但是select被过滤掉了,所以我们可以使用show columns来查看表中字段
这里要注意的是,一定要使用反引号将表名称包裹起来,不然不会识别到
查看表字段后,可以看到有包含flag 的字段名称。但是select被过滤掉了,我们没办法直接去查看flag字段的值
我们继续查看一下words表中字段
这个时候就要发散一下思维,可以看到之间传参1所回显的数据,和words表字段的结构其实是差不多的
这里就是默认将接受到的参数传递给words表的id字段,然后回显id字段对应的字符串数据
也就是,前面万能密码锁回显的数据
所以这里的解法有一种就是,更改表和字段名称,因为mysql本身也是查找words表中的id字段嘛
前提是本题没有对alert和rename进行过滤
尽量一次性做完哦,不然有可能变成以下这样,其实变成这样,也可以验证咱的思路
最终payload就是这样
?inject=1';show tables;alter table `words` rename to `a`;alter table `1919810931114514` rename to `words`;alter table `words` change flag id varchar(50);show tables--+
执行完后可以直接,利用万能密码查看flag