【SQL注入-07】堆叠注入案例—以sqli-labs-less38为例

1 堆叠注入概述

1.1 定义

英文为 stacked injection。
在SQL数据库中,每条语句是以;分开的,堆叠注入就是一次性注入并执行多条语句(多语句之间以分号隔开)的注入方式。

1.2 与union联合查询注入的对比

union联合查询注入执行的语句类型是有限的,可以用来执行查询语句。
堆叠注入可以执行的是任意的语句,如增删改等。
另外的,如布尔盲注延时盲注等其他语句也可以并到多语句中执行,只是没什么必要。

1.3 局限性

(1)多语句执行受数据库类型、API、数据引擎的限制,有的不能实现。
(1)增删改也受到用户权限的限制。

2 堆叠注入案例—以sqli-labs-less38为例

2.1 实验平台

实验靶场——虚拟机(IP为172.16.1.1):本节实验靶场是在win2008系统上基于phpstudy搭建的一个sqli-labs漏洞靶场,win2008及phpstudy的安装过程可以参考《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》,sqli-labs漏洞靶场的搭建可以参考《【环境搭建】基于WAMP环境的sqli-labs漏洞靶场的搭建

注入工具——真实机:本实验利用火狐浏览器来实现union注入,为方便注入过程的编码,建议安装一个扩展插件harkbar,安装过程参考《HackBar免费版安装方法》由于该教程中的2.1.3harkbar我安装后无法正常使用,就安装了HackBar Quantum来代替。安装后出现下图左侧的东西。
在这里插入图片描述
靶机与真实机桥接到同一局域网中。

2.2 实验目标

使用堆叠注入往第38关数据库注入新账号;
查询新账号是否注入成功。

2.3 堆叠注入实验步骤

2.3.1 注入前准备

(1)真实机打开火狐浏览器,访问靶机IP地址,出现下图,可以不重置实验平台,直接点击Page3进入堆叠实验的关卡less38。
在这里插入图片描述

(2)进入第38关,初始界面如下:
在这里插入图片描述

2.3.2 判断注入点及注入类型

(1)输入参数为?id=1可以看到网页成功返回第一个用户账号及密码。修改id=2则是返回第二个账号密码,说明id是一个访问者可以控制输入的参数且页面会根据参数进行响应,是一个注入点。且由于网页有回显,可以优先采用union联合查询注入。
在这里插入图片描述
在这里插入图片描述

(2)修改参数为?id=1'可以看到数据库没有回显账号密码,同时提示错误信息如下,分析错误提示可知该注入参数为字符型,且为单引号闭合。
在这里插入图片描述

(3)修改参数为?id=1'and '1'='1,根据反证法可知,该参数确实为单引号闭合的字符型,后续构成注入语句需要格外注意闭合单引号
在这里插入图片描述

(4)输入参数为?id=1‘ --+可以看到网页成功返回第一个用户账号及密码。说明–+可以成功注释掉后面的语句。
在这里插入图片描述
综上所述,注入点为字符型注入,且由于网页有回显,可以优先采用union联合查询注入获取账号密码是在哪个表哪些字段中,接着再往该表和字段中插入新的账户及密码。

2.3.3 判断回显列数及回显位置

(1)修改参数为?id=1' order by 3--+,页面正常显示,当修改参数为4时,页面显示错误,说明回显内容有3列。
在这里插入图片描述
在这里插入图片描述

(2)修改参数为?id=-1' union select 1,2,3--+,可以看到2和3列数据可以回显。
在这里插入图片描述

2.3.4 union注入获取库名表名字段名

目的:为了往数据库中注入新的账号密码,我们需要知道账号密码是在哪个表哪些字段中,因此需要先用union联合注入获取相关信息。具体步骤如下:
(1)获取库名。修改参数为?id=-1' union select 1,2,database()--+,发现本站点数据库为security。
在这里插入图片描述
(2)获取表名。修改参数为?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = database()--+,发现该数据库下公有4个表,其中有个users的表,是我们注入的目标。
在这里插入图片描述
(3)获取字段名。修改参数为?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273--+,发现该表格下公有3个字段。
在这里插入图片描述

2.3.5 堆叠注入

目的:往后台数据库增加一个账号。
(1)修改参数为?id=1';insert into users(id,username,password) values (100,'good','good')--+

(2)验证是否插入成功,修改命令为?id=100,查询结果如下,实验成功。
在这里插入图片描述

3 总结

(1)了解堆叠注入与union联合查询注入的区别;
(2)了解堆叠注入的限制性因素;
(3)掌握手动堆叠注入的方法。

参考文章

[1] 《【SQL注入07】堆叠注入基础及实操(基于sqli-labs-less38)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值