渗透测试之SQL注入(五) – 作者:随风kali

文章原载于公众号:猪猪谈安全

作者:随风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关

1603172666_5f8e793a5bd8796f43cfc.png!small

我们输入一个?id=-1′;select 1,2,3%23

可以看在-1’后面我们用了一个;来进行隔开,这就是相当于两个SQL语句了,产生我们的堆叠注入,我们可以回车看看会出现什么。

1603173136_5f8e7b10dfbb49095e9b3.png!small

然而这里什么都没有出现是因为什么原因呢?

这是因为堆叠注入即使第一条查询结果为空,也不会显示第二条语句执行结果,而且就算第二条语句出错了也不会报错。那么我们该如何去验证我们的堆叠注入呢。

那我们可以构造如下语句

?id=1′;insert into users(id,username,password) values(66,’suifeng’,’hack’)%2

这条语句的意思就是在数据库里面用insert插入我们的id,username和password

我这里插入的id是66

username是suifeng(随风)

password是hack(本来想打shuai(帅)的,哈哈)

执行后

1603173639_5f8e7d07699c744b970d1.png!small

那我们可以到数据库里面去看看

1603174061_5f8e7ead44f4411451255.png!small

这样就证明我们的堆叠注入是成功了的。

来源:freebuf.com 2020-11-03 16:24:31 by: 随风kali

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论