Translated ['src/pentesting-web/rsql-injection.md'] to uk

This commit is contained in:
Translator 2025-04-15 00:02:32 +00:00
parent 6484584d96
commit 9408c26047

View File

@ -7,7 +7,7 @@
## RSQL Injection ## RSQL Injection
## Що таке RSQL? ## Що таке RSQL?
RSQL - це мова запитів, розроблена для параметризованого фільтрування вхідних даних у RESTful API. Заснована на FIQL (Feed Item Query Language), спочатку визначеній Марком Ноттінгемом для запитів до Atom-каналів, RSQL вирізняється своєю простотою та здатністю виражати складні запити компактним і сумісним з URI способом через HTTP. Це робить її відмінним вибором як загальної мови запитів для пошуку REST-інтерфейсів. RSQL - це мова запитів, розроблена для параметризованого фільтрування вхідних даних у RESTful API. Заснована на FIQL (Feed Item Query Language), спочатку визначеній Марком Ноттінгемом для запитів до Atom-каналів, RSQL вирізняється своєю простотою та здатністю виражати складні запити компактно та відповідно до URI через HTTP. Це робить її відмінним вибором як загальної мови запитів для пошуку REST-інтерфейсів.
## Огляд ## Огляд
RSQL Injection - це вразливість у веб-додатках, які використовують RSQL як мову запитів у RESTful API. Подібно до [SQL Injection](https://owasp.org/www-community/attacks/SQL_Injection) та [LDAP Injection](https://owasp.org/www-community/attacks/LDAP_Injection), ця вразливість виникає, коли фільтри RSQL не очищуються належним чином, що дозволяє зловмиснику впроваджувати шкідливі запити для доступу, зміни або видалення даних без авторизації. RSQL Injection - це вразливість у веб-додатках, які використовують RSQL як мову запитів у RESTful API. Подібно до [SQL Injection](https://owasp.org/www-community/attacks/SQL_Injection) та [LDAP Injection](https://owasp.org/www-community/attacks/LDAP_Injection), ця вразливість виникає, коли фільтри RSQL не очищуються належним чином, що дозволяє зловмиснику впроваджувати шкідливі запити для доступу, зміни або видалення даних без авторизації.
@ -17,7 +17,7 @@ RSQL дозволяє вам створювати розширені запит
```bash ```bash
/products?filter=price>100;category==electronics /products?filter=price>100;category==electronics
``` ```
Це перетворюється на структурований запит, який фільтрує продукти з ціною більше 100 та категорією "електроніка". Це перетворюється на структурований запит, який фільтрує продукти з ціною більше 100 і категорією "електроніка".
Якщо додаток не правильно перевіряє введення користувача, зловмисник може маніпулювати фільтром для виконання несподіваних запитів, таких як: Якщо додаток не правильно перевіряє введення користувача, зловмисник може маніпулювати фільтром для виконання несподіваних запитів, таких як:
```bash ```bash
@ -30,13 +30,13 @@ RSQL дозволяє вам створювати розширені запит
- **Модифікація або видалення даних:** Впровадження фільтрів, які змінюють записи в базі даних. - **Модифікація або видалення даних:** Впровадження фільтрів, які змінюють записи в базі даних.
- **Ескалація привілеїв:** Маніпуляція ідентифікаторами, які надають ролі через фільтри, щоб обманути додаток, отримуючи доступ з привілеями інших користувачів. - **Ескалація привілеїв:** Маніпуляція ідентифікаторами, які надають ролі через фільтри, щоб обманути додаток, отримуючи доступ з привілеями інших користувачів.
- **Уникнення контролю доступу:** Маніпуляція фільтрами для доступу до обмежених даних. - **Уникнення контролю доступу:** Маніпуляція фільтрами для доступу до обмежених даних.
- **Персоніфікація або IDOR:** Модифікація ідентифікаторів між користувачами через фільтри, які дозволяють доступ до інформації та ресурсів інших користувачів без належної аутентифікації. - **Видавання себе за іншого або IDOR:** Модифікація ідентифікаторів між користувачами через фільтри, які дозволяють доступ до інформації та ресурсів інших користувачів без належної аутентифікації.
## Підтримувані оператори RSQL ## Підтримувані оператори RSQL
| Оператор | Опис | Приклад | | Оператор | Опис | Приклад |
|:----: |:----: |:------------------:| |:----: |:----: |:------------------:|
| `;` / `and` | Логічний **AND** оператор. Фільтрує рядки, де *обидві* умови *істинні* | `/api/v2/myTable?q=columnA==valueA;columnB==valueB` | | `;` / `and` | Логічний **AND** оператор. Фільтрує рядки, де *обидва* умови є *істинними* | `/api/v2/myTable?q=columnA==valueA;columnB==valueB` |
| `,` / `or` | Логічний **OR** оператор. Фільтрує рядки, де *принаймні одна* умова *істинна*| `/api/v2/myTable?q=columnA==valueA,columnB==valueB` | | `,` / `or` | Логічний **OR** оператор. Фільтрує рядки, де *принаймні одна* умова є *істинною*| `/api/v2/myTable?q=columnA==valueA,columnB==valueB` |
| `==` | Виконує запит **дорівнює**. Повертає всі рядки з *myTable*, де значення в *columnA* точно дорівнюють *queryValue* | `/api/v2/myTable?q=columnA==queryValue` | | `==` | Виконує запит **дорівнює**. Повертає всі рядки з *myTable*, де значення в *columnA* точно дорівнюють *queryValue* | `/api/v2/myTable?q=columnA==queryValue` |
| `=q=` | Виконує запит **пошук**. Повертає всі рядки з *myTable*, де значення в *columnA* містять *queryValue* | `/api/v2/myTable?q=columnA=q=queryValue` | | `=q=` | Виконує запит **пошук**. Повертає всі рядки з *myTable*, де значення в *columnA* містять *queryValue* | `/api/v2/myTable?q=columnA=q=queryValue` |
| `=like=` | Виконує запит **подібно**. Повертає всі рядки з *myTable*, де значення в *columnA* подібні до *queryValue* | `/api/v2/myTable?q=columnA=like=queryValue` | | `=like=` | Виконує запит **подібно**. Повертає всі рядки з *myTable*, де значення в *columnA* подібні до *queryValue* | `/api/v2/myTable?q=columnA=like=queryValue` |
@ -162,7 +162,7 @@ Access-Control-Allow-Origin: *
} }
} }
``` ```
У випадку, якщо знайдено дійсний обліковий запис електронної пошти, програма поверне інформацію про користувача замість класичного *“true”*, *"1"* або чогось подібного у відповіді серверу: У випадку, якщо знайдено дійсний обліковий запис електронної пошти, програма поверне інформацію про користувача замість класичного *“true”*, *"1"* або чогось подібного у відповіді на сервер:
### Request ### Request
``` ```
GET /api/registrations?filter[userAccounts]=email=='manuel**********@domain.local' HTTP/1.1 GET /api/registrations?filter[userAccounts]=email=='manuel**********@domain.local' HTTP/1.1
@ -209,7 +209,7 @@ Access-Control-Allow-Origin: *
} }
``` ```
## Уникнення авторизації ## Уникнення авторизації
У цьому сценарії ми починаємо з користувача з базовою роллю і в якого немає привілейованих дозволів (наприклад, адміністратора) для доступу до списку всіх користувачів, зареєстрованих у базі даних: У цьому сценарії ми починаємо з користувача з базовою роллю, у якого немає привілейованих дозволів (наприклад, адміністратора) для доступу до списку всіх користувачів, зареєстрованих у базі даних:
### Запит ### Запит
``` ```
GET /api/users HTTP/1.1 GET /api/users HTTP/1.1
@ -347,7 +347,7 @@ Access-Control-Allow-Origin: *
"data": [] "data": []
} }
``` ```
Використовуючи певні оператори, ми можемо перерахувати адміністративних користувачів: Використовуючи певні оператори, ми можемо перерахувати адміністраторів:
### Запит ### Запит
``` ```
GET /api/companyUsers?include=role&filter[companyUsers]=user.id=='94****************************' HTTP/1.1 GET /api/companyUsers?include=role&filter[companyUsers]=user.id=='94****************************' HTTP/1.1
@ -395,7 +395,7 @@ Access-Control-Allow-Origin: *
}] }]
} }
``` ```
Після того, як відомий ідентифікатор адміністратора, можна експлуатувати підвищення привілеїв, замінивши або додавши відповідний фільтр з ідентифікатором адміністратора та отримавши ті ж привілеї: Після того, як відомий ідентифікатор адміністратора, можна експлуатувати ескалацію привілеїв, замінивши або додавши відповідний фільтр з ідентифікатором адміністратора та отримавши ті ж привілеї:
### Request ### Request
``` ```
GET /api/functionalities/allPermissionsFunctionalities?filter[companyUsers]=user.id=='94****************************' HTTP/1.1 GET /api/functionalities/allPermissionsFunctionalities?filter[companyUsers]=user.id=='94****************************' HTTP/1.1
@ -515,7 +515,7 @@ Access-Control-Allow-Origin: *
}] }]
} }
``` ```
Комбінація фільтрів може бути використана для ухилення від контролю авторизації та отримання доступу до профілів інших користувачів: Комбінація фільтрів може бути використана для обходу контролю авторизації та отримання доступу до профілів інших користувачів:
### Request ### Request
``` ```
GET /api/users?include=language,country&filter[users]=id=='94***************' HTTP/1.1 GET /api/users?include=language,country&filter[users]=id=='94***************' HTTP/1.1