写在前边
简单说堆叠注入就是将将两个SQL语句同时执行以封号隔开。虽然我们前面提到了堆叠查询可以执行任意的 sql 语句,但是这种注入方式并不是十分 的完美的。在我们的 web 系统中,因为代码通常只返回一个查询结果,因此,堆叠注入第 二个语句产生错误或者结果只能被忽略,我们在前端界面是无法看到返回结果的。 因此,在读取数据时,我们建议使用 union(联合)注入。同时在使用堆叠注入之前, 我们也是需要知道一些数据库相关信息的,例如表名,列名等信息。
less38~less41
这几关就直接放在一起做总结了,他们的区别就在于对id值闭合方式的不同。方法可直接堆叠SQL语句:1’; update users set password=‘1’ where username=‘admin’;# 对数据库信息进行更改。
less42~45
(这几关就直接放在一起做总结了,他们的区别就在于对id值闭合方式的不同,44和45不显示报错信息。)首先查看原码,发现username被mysqli_real_escape_string函数过滤而password没有,因此可在password处进行注入
用户名随便输,密码输入下边的两个可在数据库中进行操作
1’;create table jike like users# (创建一个jike的表)
1’;drop table jike# (删除 jike 表)
同样的方式可以对users数据表中的数据进行更新或者删除,
playload:1'; update users set password='1' where username='admin';#
执行结果:
要注意的是:使用堆叠注入的前提是知道数据库的一些信息。例如:数据表字段名;并且堆叠注入有一定的局限性
其他的关卡都雷同,在此不做赘述
拓展堆叠注入
desc查字段:desc table_name
show查字段:show columns from table_name