基本介绍
堆叠注入(Stacked injections)从名词的含义就可以看到应该是一堆sql语句(多条)一起执行,而在真实的运用中也是这样的,我们知道在mysql中主要是命令行中每一条语句结尾加;表示语句结束,这样我们就想到了是不是可以多句一起使用呢?这个就叫做stacked injection
注入原理
在SQL中分号(;)是用来表示一条sql语句的结束,试想一下我们在;结束一个sql语句后继续构造下一条语句会不会一起执行,因此这个想法也就造就了堆叠注入,而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句,例如:
select * from users where id=8;select * from users where id=7;select * from users where id=9;
PS:oracle不能使用堆叠注入哦~
注入条件
mysqli_multi_query执行查询语句且sql语句可控
注入流程
这里以Less-38为例做演示:
程序代码分析
<?php
error_reporting(0);
include("../sql-connections/db-creds.inc