由于传播、利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,Cyb3rES3c及文章作者不承担任何责任。请遵守《中华人民共和国个人信息保护法》、《网络安全法》等相关法律法规。
在正常的SQL执行时,我们进行的操作很有限,比如我们执行查询语句时,我们只能进行查询,不能进行增删改操作,但是堆叠注入就不一样了,这种注入方式可以一次性输入并执行多条SQL语句,也就是可以同时进行增删改查操作,大大提高了工作效率,但是也增加了一定的漏洞风险。
堆叠注入的利用条件很严苛,会受到API、数据库引擎以及权限的控制。只有当调用数据库函数支持执行多条SQL语句时才可以利用,例如mysqli_multi_query()函数就支持同时执行多条SQL语句,但是mysqli_query()函数一次就只能执行一条SQL语句。
输入单引号报错
闭合单引号并注释后面的代码
没有出现报错信息,这里可以使用 Less-1 的 payload,也可以使用堆叠注入添加用户
数据库中的用户信息
添加一个用户 less38
?id=1';insert into users(id,username,password) values(15,'less38','less38')--+
查看用户信息
less38用户添加成功
漏洞成因:
在执行sql语句时使用了 mysqli_multi_query() 函数,并且没有对用户输入的参数进行过滤
输入1',查询
报错了,存在单引号类型的注入
输入
1' order by 1--+
1' order by 2--+
输入 1' order by 3--+
出现错误信息,说明有两个字段
判断回显位置
发现与增删改查相关的关键字被过滤了,但是没有过滤与堆叠注入相关的关键字
查表 -1';show tables%23
发现两张表,根据表名猜测 flag 在第一张表中
查表中的内容(注意:要将表名用``闭合来标识这是一个表名而不是一个普通的字符串)
发现 flag,但是 select 被过滤了,不能直接读出 flag,还好在 MySQL 中还可以使用 handler 语句读取表中的数据
构造 payload
-1';handler `1919810931114514` open;handler `1919810931114514` read first%23
成功读到 flag
在实际开发中,执行SQL语句时还是尽量使用 mysqli_query() 函数,虽然mysqli_query() 函数的效率可能没有 mysqli_multi_query() 函数的执行效率高,但是这降低了网站被攻击的风险。
原文始发于微信公众号(Cyb3rES3c):堆叠注入
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论