文章原载于公众号:猪猪谈安全
作者:随风kali
继咋们的报错注入后面呢就是我们的堆叠注入了。
什么是堆叠注入
Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做stacked injection。说直白点就是将一堆sql语句叠加在一起执行,使用分号结束上一个语句再叠加其他语句一起执行。
堆叠注入的原理
在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为: Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。
堆叠注入演示
我们可以来到sqli-lab的第38关
我们输入一个?id=-1′;select 1,2,3%23
可以看在-1’后面我们用了一个;来进行隔开,这就是相当于两个SQL语句了,产生我们的堆叠注入,我们可以回车看看会出现什么。
然而这里什么都没有出现是因为什么原因呢?
这是因为堆叠注入即使第一条查询结果为空,也不会显示第二条语句执行结果,而且就算第二条语句出错了也不会报错。那么我们该如何去验证我们的堆叠注入呢。
那我们可以构造如下语句
?id=1′;insert into users(id,username,password) values(66,’suifeng’,’hack’)%2
这条语句的意思就是在数据库里面用insert插入我们的id,username和password
我这里插入的id是66
username是suifeng(随风)
password是hack(本来想打shuai(帅)的,哈哈)
执行后
那我们可以到数据库里面去看看
这样就证明我们的堆叠注入是成功了的。
来源:freebuf.com 2020-11-03 16:24:31 by: 随风kali
请登录后发表评论
注册