mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/rsql-injection.md'] to uk
This commit is contained in:
parent
6484584d96
commit
9408c26047
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user