0


堆叠注入。

本章分享的堆叠注入是用的靶场的第三十八关来演示

靶场下载链接:GitHub - workcha/sqli-labs-master: sql注入必练习题目

堆叠注入的原理:如果php代码中使用了mysql_multi_query()这个函数来调用MySQL里的东西,那么就表示网页有堆叠注入。mysql_multi_query()这个函数是用于执行多条sql语句,如下图

2fa76b81346e48118ecdd116f3a60aea.png

其中 mysqli_multi_query($con1, $sql) 这个表示执行存储在$sql变量中的一个或多个sql查询,$con1是连接对象,用于和MySQL保持连接。

第一步:检查网页有没有漏洞,之前的章节已经说了怎么检查网页有没有漏洞,这里就不重复说了。

第二步:使用 ?id=1';insert into users(id,username,password) value(23,"abc",123)%23 来为users表新增数据,其中;这个符号是用于结束前面sql语句,也相当于用;这个符号来分割前后两个sql语句,但是这里不能使用?id=1';select schema_name from information_schema.SCHEMATA limit 0,1 来查询MySQL里的东西,因为这个是一个单独的sql语句,就算查询了也没有显示位可以显示查询的东西,不像之前的union查询一样可以联合在一起查询,但是我们可以使用命令删除MySQL的东西或者新增数据,改动数据的操作,这里我只演示新增MySQL数据的操作。

第三步:使用 ?id=-1' union select 1,username,2 from users where id=23 %23 来查看我们刚才新增的数据有没有成功。

509523aa82c84ef68d73d0a7e2532a1e.png

如果显示上图这样,就代表新增数据成功。

总结:网页只要允许使用两条及以上的命令,那么就有堆叠注入,虽然这个注入姿势很牛,但实际遇到很少,其可能受到API或者数据库引擎,又或者权限的限制只有当调用数据库函数支持执行多条sql语句时才能够使用,利用mysqli_multi_query()函数就支持多条sql语句同时执行,但实际情况中,如PHP为了防止sql注入机制,往往使用调用数据库的函数是mysqli_ query()函数,其只能执行一条语句,;这个符号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将可能对网站造成十分大的威胁。

注:这里我把怎么获取数据库名称和表名称的步骤省略了,大家可以结合之前章节的union,盲注等手法来获取。

此堆叠注入仅供学习参考。


本文转载自: https://blog.csdn.net/q1314q520q/article/details/141147346
版权归原作者 AOA666AOA 所有, 如有侵权,请联系我们删除。

“堆叠注入。”的评论:

还没有评论