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?
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 не очищуються належним чином, що дозволяє зловмиснику впроваджувати шкідливі запити для доступу, зміни або видалення даних без авторизації.
@ -17,7 +17,7 @@ RSQL дозволяє вам створювати розширені запит
```bash
/products?filter=price>100;category==electronics
```
Це перетворюється на структурований запит, який фільтрує продукти з ціною більше 100 та категорією "електроніка".
Це перетворюється на структурований запит, який фільтрує продукти з ціною більше 100 і категорією "електроніка".
Якщо додаток не правильно перевіряє введення користувача, зловмисник може маніпулювати фільтром для виконання несподіваних запитів, таких як:
```bash
@ -30,13 +30,13 @@ RSQL дозволяє вам створювати розширені запит
- **Модифікація або видалення даних:** Впровадження фільтрів, які змінюють записи в базі даних.
- **Ескалація привілеїв:** Маніпуляція ідентифікаторами, які надають ролі через фільтри, щоб обманути додаток, отримуючи доступ з привілеями інших користувачів.
- **Уникнення контролю доступу:** Маніпуляція фільтрами для доступу до обмежених даних.
- **Персоніфікація або IDOR:** Модифікація ідентифікаторів між користувачами через фільтри, які дозволяють доступ до інформації та ресурсів інших користувачів без належної аутентифікації.
- **Видавання себе за іншого або IDOR:** Модифікація ідентифікаторів між користувачами через фільтри, які дозволяють доступ до інформації та ресурсів інших користувачів без належної аутентифікації.
## Підтримувані оператори RSQL
| Оператор | Опис | Приклад |
|:----: |:----: |:------------------:|
| `;` / `and` | Логічний **AND** оператор. Фільтрує рядки, де *обидві* умови *істинні* | `/api/v2/myTable?q=columnA==valueA;columnB==valueB` |
| `,` / `or` | Логічний **OR** оператор. Фільтрує рядки, де *принаймні одна* умова *істинна*| `/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` |
| `==` | Виконує запит **дорівнює**. Повертає всі рядки з *myTable*, де значення в *columnA* точно дорівнюють *queryValue* | `/api/v2/myTable?q=columnA==queryValue` |
| `=q=` | Виконує запит **пошук**. Повертає всі рядки з *myTable*, де значення в *columnA* містять *queryValue* | `/api/v2/myTable?q=columnA=q=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
```
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
@ -347,7 +347,7 @@ Access-Control-Allow-Origin: *
"data": []
}
```
Використовуючи певні оператори, ми можемо перерахувати адміністративних користувачів:
Використовуючи певні оператори, ми можемо перерахувати адміністраторів:
### Запит
```
GET /api/companyUsers?include=role&filter[companyUsers]=user.id=='94****************************' HTTP/1.1
@ -395,7 +395,7 @@ Access-Control-Allow-Origin: *
}]
}
```
Після того, як відомий ідентифікатор адміністратора, можна експлуатувати підвищення привілеїв, замінивши або додавши відповідний фільтр з ідентифікатором адміністратора та отримавши ті ж привілеї:
Після того, як відомий ідентифікатор адміністратора, можна експлуатувати ескалацію привілеїв, замінивши або додавши відповідний фільтр з ідентифікатором адміністратора та отримавши ті ж привілеї:
### Request
```
GET /api/functionalities/allPermissionsFunctionalities?filter[companyUsers]=user.id=='94****************************' HTTP/1.1
@ -515,7 +515,7 @@ Access-Control-Allow-Origin: *
}]
}
```
Комбінація фільтрів може бути використана для ухилення від контролю авторизації та отримання доступу до профілів інших користувачів:
Комбінація фільтрів може бути використана для обходу контролю авторизації та отримання доступу до профілів інших користувачів:
### Request
```
GET /api/users?include=language,country&filter[users]=id=='94***************' HTTP/1.1