数据库攻击的目的最终是为要获取数据库中有价值的数据

数据库攻击的目的最终是为要获取数据库中有价值的数据,而获取数据最有效的方法就是直接获取DBA权限。本文通过Oracle数据库中的一个经典漏洞,演示从普通用户提权到DBA权限的过程,DBSec Labs数据库安全实验室给出针对性的防护建议。琪琪影院

Oracle漏洞分析

CTXSYS.driload.validate_stmt是一个Oracle的经典漏洞。出现在Oracle9i中,从10g开始被修复。这个漏洞是直接注入形漏洞的代表。漏洞发生在CTXSYS创建的driload包中的存储过程validate_stmt中。首先我们通过解压的方式打开validate_stmt观察源码。

validate_stmt结构如下:

CREATE OR REPLACE PACKAGE BODY DRILOAD IS

PROCEDURE VALIDATE_STMT( SQLSTMT IN VARCHAR2 )

IS

BEGIN

SRC := DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE( SRC, SQLSTMT, DBMS_SQL.NATIVE );

RET := DBMS_SQL.EXECUTE_AND_FETCH( SRC );

DBMS_SQL.CLOSE_CURSOR( SRC );

END VALIDATE_STMT;

在源码中可以直观的看到存储过程中主要使用了DBMS_SQL包中的各种存储过程和函数。这说明validate_stmt的漏洞主要是DBMS_SQL的漏洞。

既然问题出在DBMS_SQL上,那么我们就有必要对它的功能和使用场景有一个初步的了解。DBMS_SQL主要被用来解决需要动态处理数据或表结构的问题。比如对一批表里的数据进行处理,或者批量创建表,索引,触发器等等,这时就可以通过DBMS_SQL包进行操作。下图来自Oracle官方揭示了DBMS_SQL运行时的整体逻辑 http://www.776vod.com/


你可能感兴趣的:(oracle,实验室,数据库安全,针对性,琪琪影院)