堆叠注入。

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

 靶场下载链接: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,盲注等手法来获取。

 

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值