从SQL注入到SYSTEM权限:攻击者如何在Oracle数据库内隐藏后门

导语:网络安全公司Huntress近日披露一起针对性攻击事件:攻击者通过Web应用SQL注入漏洞,渗透进入某组织的Oracle数据库,随后将后渗透工具包khunt直接编译为数据库内部对象,在未向磁盘投放可执行文件的情况下获取了底层Windows服务器的SYSTEM级别权限。

来源:本文编译自The Hacker News报道《Attackers Compile khunt Inside Oracle to Turn SQL Injection Into Windows SYSTEM Access》及Huntress官方分析报告。


一、攻击概述

2026年7月27日,Huntress公司接到告警:某终端上的Oracle数据库服务器出现凭证窃取行为。调查发现,攻击源头可追溯至一台暴露在互联网的Java/Tomcat应用,其后端连接的Oracle数据库存在SQL注入漏洞。

攻击者通过该应用的自动补全搜索字段,向数据库注入SQL命令。更值得关注的是,完成注入后,攻击者并未采用传统的落地式攻击手法——而是将名为”khunt”的后渗透工具包直接编译为Oracle数据库内部的Java对象。

这种手法的狡猾之处在于:数据库内的Java类既不是进程,也不是磁盘上的二进制文件,传统终端检测与响应(EDR)或杀毒软件通常不会检查Oracle数据库内部的对象结构。数据库从单纯的数据存储库,转变成了攻击者的据点。


二、攻击链详解

2.1 初始入口:Web表单SQL注入

攻击者利用了公网访问应用中的自动补全搜索字段。该字段未对用户输入进行验证和过滤,直接将内容拼接到SQL语句中,通过JDBC连接发送至Oracle数据库。攻击流量被追溯至IP地址178.162.151[.]229。

2.2 Oracle数据库内置Java虚拟机

Oracle数据库内置了Java虚拟机(JVM),通过CREATE JAVA SOURCE语句,用户可以直接向数据库提交Java源代码,数据库会自动编译并存储为模式对象。

攻击者利用这一特性,向数据库注入了6个Java对象和多个khunt_*PL/SQL包装函数:

  • KhuntCmd:加载cmd.exe,允许通过SQL语句向操作系统执行任意命令
  • KhuntHash:从Oracle内部用户表中提取用户名和密码哈希并写入文件
  • KhuntFS/KhuntFS2:文件资源管理器,支持列出、读取、搜索和查看文件大小
  • KhuntT:连接测试工具,用于确认工具包可正常访问
  • KhuntUnzip:用于解压归档文件
攻击链示意图

2.3 横向移动至操作系统

通过KhuntCmd模块执行cmd.exe /c whoami后,攻击者确认已获得SYSTEM级别权限。Oracle数据库在Windows上通常以LocalSystem身份运行,因此嵌入数据库的任何代码都会继承该高权限身份。

2.4 凭证窃取与本地暂存

攻击者随后执行以下操作:

使用PowerShell调用reg.exe,将SECURITY和SYSTEM注册表配置单元复制至F:OraclekhuntSECURITY.hivF:OraclekhuntSYSTEM.hiv

reg.exe save hklmSECURITY F:OraclekhuntSECURITY.hiv
reg.exe save hklmSYSTEM F:OraclekhuntSYSTEM.hiv

执行tasklist /svc枚举运行服务,结果保存至F:Oraclekhunttasks.txt

最后利用esentutl.exe(可扩展存储引擎工具)复制SAM和SECURITY配置单元:

esentutl.exe /y /d C:WindowsSystem32configSAM /d F:OraclekhuntSAM.hiv

这些注册表配置单元可用于提取和解密本地账户的密码哈希。


三、技术背景:二十年旧技术的实战再现

这一攻击技术并非新生事物。安全研究员Marco Ivaldi早在2006年就发布了名为”raptor_oraexec.sql”的漏洞利用代码,同样利用CREATE JAVA SOURCE在Oracle数据库中创建命令执行和文件读取方法,并通过PL/SQL包装函数暴露给SQL调用。khunt工具包采用了相同的基础架构。

Huntress表示,尽管这一技术早有记录,但其在野利用的完整案例很少被公开文档化。


四、蓝队防御建议

4.1 应用层修复

  • 对所有用户输入实施严格的输入验证和过滤
  • 使用参数化查询(Prepared Statements)而非字符串拼接
  • 对自动补全等搜索功能限制SQL特殊字符输入

4.2 数据库账户权限最小化

公网应用所使用的数据库账户不应具备创建Java对象或执行存储过程的权限。即使SQL注入成功,攻击者也无法编译和运行恶意代码。

4.3 监控与检测

  • 在Oracle数据库中搜索对象名以Khunt开头的Java类
  • 在SQL日志中搜索KHUNT%字符串
  • 监控Oracle进程(oracle.exe)是否异常衍生cmd.exe、reg.exe等系统命令
  • 关注F:Oracle目录下新增的可疑文件

4.4 服务账户隔离

Oracle数据库在Windows上运行时,应使用专用的低权限服务账户,而非LocalSystem。这样即便攻击者通过数据库执行代码,其影响范围也将受到限制。


五、总结

这起事件揭示了两个值得深思的问题:其一,SQL注入这一”古老”漏洞仍未被有效防范;其二,将恶意代码编译进数据库内部对象,是一种高度隐蔽的攻击手法,传统的EDR和杀软难以检测。

根据MITRE ATT&CK框架分析,本次攻击涉及以下技术点:

ATT&CK技术描述
T1505.003使用SQL命令执行,通过数据库存储过程
T1005从系统信息库窃取数据
T1003.002转储SAM数据库获取凭证
T1059.003通过命令Shell执行

版权声明:本文由华盟网原创发布,保留所有权利。配图来源已注明。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容