Translated ['pentesting-web/parameter-pollution.md'] to ua

This commit is contained in:
Translator 2024-11-12 12:27:33 +00:00
parent 966d05b2d9
commit bc369ed92d
2 changed files with 138 additions and 53 deletions

View file

@ -604,7 +604,7 @@
* [OAuth to Account takeover](pentesting-web/oauth-to-account-takeover.md)
* [Open Redirect](pentesting-web/open-redirect.md)
* [ORM Injection](pentesting-web/orm-injection.md)
* [Parameter Pollution](pentesting-web/parameter-pollution.md)
* [Parameter Pollution | JSON Injection](pentesting-web/parameter-pollution.md)
* [Phone Number Injections](pentesting-web/phone-number-injections.md)
* [PostMessage Vulnerabilities](pentesting-web/postmessage-vulnerabilities/README.md)
* [Blocking main page to steal postmessage](pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md)

View file

@ -1,18 +1,18 @@
# Параметричне забруднення
# Parameter Pollution | JSON Injection
## Параметричне забруднення
## Parameter Pollution
{% hint style="success" %}
Вивчайте та практикуйте AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Вивчайте та практикуйте GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Підтримайте HackTricks</summary>
<summary>Support HackTricks</summary>
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
@ -21,11 +21,11 @@
{% embed url="https://websec.nl/" %}
## Огляд HTTP Параметричного Забруднення (HPP)
## HTTP Parameter Pollution (HPP) Overview
HTTP Параметричне Забруднення (HPP) — це техніка, при якій зловмисники маніпулюють HTTP параметрами, щоб змінити поведінку веб-додатку ненавмисними способами. Ця маніпуляція здійснюється шляхом додавання, модифікації або дублювання HTTP параметрів. Ефект цих маніпуляцій не є безпосередньо видимим для користувача, але може суттєво змінити функціональність додатку на стороні сервера, з помітними наслідками на стороні клієнта.
HTTP Parameter Pollution (HPP) — це техніка, де зловмисники маніпулюють HTTP-параметрами, щоб змінити поведінку веб-додатку ненавмисними способами. Ця маніпуляція здійснюється шляхом додавання, модифікації або дублювання HTTP-параметрів. Ефект цих маніпуляцій не є безпосередньо видимим для користувача, але може суттєво змінити функціональність додатку на стороні сервера, з помітними наслідками на стороні клієнта.
### Приклад HTTP Параметричного Забруднення (HPP)
### Example of HTTP Parameter Pollution (HPP)
URL транзакції банківського додатку:
@ -35,110 +35,195 @@ URL транзакції банківського додатку:
* **Маніпульований URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
Транзакція може бути неправильно стягнута з `accountC` замість `accountA`, демонструючи потенціал HPP для маніпуляції транзакціями або іншими функціональностями, такими як скидання пароля, налаштування 2FA або запити API ключів.
Транзакція може бути неправильно зарахована на `accountC` замість `accountA`, демонструючи потенціал HPP для маніпуляції транзакціями або іншими функціональностями, такими як скидання пароля, налаштування 2FA або запити API-ключів.
#### **Парсинг параметрів, специфічний для технології**
#### **Technology-Specific Parameter Parsing**
* Спосіб парсингу та пріоритету параметрів залежить від основної веб-технології, що впливає на те, як HPP може бути використано.
* Інструменти, такі як [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/), допомагають ідентифікувати ці технології та їх поведінку при парсингу.
* Спосіб, яким параметри обробляються та пріоритизуються, залежить від основної веб-технології, що впливає на те, як HPP може бути використано.
* Інструменти, такі як [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/), допомагають ідентифікувати ці технології та їх поведінку при обробці.
### PHP та експлуатація HPP
### PHP and HPP Exploitation
**Ситуація з маніпуляцією OTP:**
* **Контекст:** Механізм входу, що вимагає одноразового пароля (OTP), був експлуатований.
* **Метод:** Перехоплюючи запит OTP за допомогою інструментів, таких як Burp Suite, зловмисники дублювали параметр `email` у HTTP запиті.
* **Результат:** OTP, призначений для початкової електронної пошти, був надісланий на другу електронну адресу, вказану в маніпульованому запиті. Ця вразливість дозволила несанкціонований доступ, обминаючи заплановану міру безпеки.
* **Контекст:** Механізм входу, що вимагає одноразового пароля (OTP), був використаний.
* **Метод:** Перехопивши запит OTP за допомогою інструментів, таких як Burp Suite, зловмисники дублювали параметр `email` у HTTP-запиті.
* **Результат:** OTP, призначений для початкової електронної пошти, був надісланий на другу електронну адресу, вказану в маніпульованому запиті. Ця вразливість дозволила несанкціонований доступ, обійшовши заплановану міру безпеки.
Цей сценарій підкреслює критичну помилку в бекенді додатку, який обробляв перший параметр `email` для генерації OTP, але використовував останній для доставки.
**Ситуація з маніпуляцією API ключем:**
**Ситуація з маніпуляцією API-ключем:**
* **Сценарій:** Додаток дозволяє користувачам оновлювати свій API ключ через сторінку налаштувань профілю.
* **Вектор атаки:** Зловмисник виявляє, що, додавши додатковий параметр `api_key` до POST запиту, він може маніпулювати результатом функції оновлення API ключа.
* **Техніка:** Використовуючи інструмент, такий як Burp Suite, зловмисник формує запит, що містить два параметри `api_key`: один легітимний і один шкідливий. Сервер, обробляючи лише останнє входження, оновлює API ключ на значення, надане зловмисником.
* **Сценарій:** Додаток дозволяє користувачам оновлювати свій API-ключ через сторінку налаштувань профілю.
* **Вектор атаки:** Зловмисник виявляє, що, додавши додатковий параметр `api_key` до POST-запиту, він може маніпулювати результатом функції оновлення API-ключа.
* **Техніка:** Використовуючи інструмент, такий як Burp Suite, зловмисник формує запит, що містить два параметри `api_key`: один легітимний і один шкідливий. Сервер, обробляючи лише останнє входження, оновлює API-ключ на значення, надане зловмисником.
* **Результат:** Зловмисник отримує контроль над функціональністю API жертви, потенційно отримуючи доступ або модифікуючи приватні дані без дозволу.
Цей приклад ще раз підкреслює необхідність безпечного оброблення параметрів, особливо в таких критичних функціях, як управління API ключами.
Цей приклад ще раз підкреслює необхідність безпечного оброблення параметрів, особливо в таких критичних функціях, як управління API-ключами.
### Парсинг параметрів: Flask проти PHP
### Parameter Parsing: Flask vs. PHP
Спосіб, яким веб-технології обробляють дубльовані HTTP параметри, варіюється, що впливає на їх вразливість до атак HPP:
Спосіб, яким веб-технології обробляють дубльовані HTTP-параметри, варіюється, що впливає на їх вразливість до атак HPP:
* **Flask:** Приймає перше значення параметра, наприклад, `a=1` у рядку запиту `a=1&a=2`, надаючи пріоритет початковому екземпляру над наступними дублікатами.
* **PHP (на Apache HTTP Server):** Навпаки, надає пріоритет останньому значенню параметра, вибираючи `a=2` у наведеному прикладі. Ця поведінка може ненавмисно сприяти експлуатації HPP, визнаючи маніпульований параметр зловмисника замість оригінального.
* **Flask:** Приймає перше значення параметра, наприклад, `a=1` у рядку запиту `a=1&a=2`, пріоритизуючи початковий екземпляр над наступними дублікатами.
* **PHP (на Apache HTTP Server):** Навпаки, пріоритизує останнє значення параметра, вибираючи `a=2` у наведеному прикладі. Ця поведінка може ненавмисно сприяти експлуатації HPP, визнаючи маніпульований параметр зловмисника замість оригінального.
## Параметричне забруднення за технологією
## Parameter pollution by technology
Результати були взяті з [https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89](https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89)
### PHP 8.3.11 І Apache 2.4.62 <a href="#id-9523" id="id-9523"></a>
### PHP 8.3.11 AND Apache 2.4.62 <a href="#id-9523" id="id-9523"></a>
<figure><img src="../.gitbook/assets/image (1255).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg</a></p></figcaption></figure>
1. Ігноруйте все після %00 у назві параметра.
2. Обробляйте name\[] як масив.
3. \_GET не означає метод GET.
4. Віддавайте перевагу останньому параметру.
4. Вибирайте останній параметр.
### Ruby 3.3.5 та WEBrick 1.8.2
### Ruby 3.3.5 and WEBrick 1.8.2
<figure><img src="../.gitbook/assets/image (1257).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg</a></p></figcaption></figure>
1. Використовує роздільники & та ; для розділення параметрів.
2. Не розпізнає name\[].
3. Віддає перевагу першому параметру.
3. Вибирає перший параметр.
### Spring MVC 6.0.23 І Apache Tomcat 10.1.30 <a href="#dd68" id="dd68"></a>
### Spring MVC 6.0.23 AND Apache Tomcat 10.1.30 <a href="#dd68" id="dd68"></a>
<figure><img src="../.gitbook/assets/image (1258).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg</a></p></figcaption></figure>
1. POST RequestMapping == PostMapping & GET RequestMapping == GetMapping.
2. POST RequestMapping & PostMapping розпізнають name\[].
3. Віддайте перевагу name, якщо існують name та name\[].
2. POST RequestMapping & PostMapping розпізнають name[].
3. Вибирайте name, якщо існують name та name[].
4. Конкатенуйте параметри, наприклад, first,last.
5. POST RequestMapping & PostMapping розпізнають параметри запиту з Content-Type.
### **NodeJS** 20.17.0 **І** Express 4.21.0 <a href="#id-6d72" id="id-6d72"></a>
### **NodeJS** 20.17.0 **AND** Express 4.21.0 <a href="#id-6d72" id="id-6d72"></a>
<figure><img src="../.gitbook/assets/image (1259).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg</a></p></figcaption></figure>
1. Розпізнає name\[].
2. Конкатенуйте параметри, наприклад, first,last.
1. Розпізнає name[].
2. Конкатенує параметри, наприклад, first,last.
### GO 1.22.7 <a href="#id-63dc" id="id-63dc"></a>
<figure><img src="../.gitbook/assets/image (1260).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg</a></p></figcaption></figure>
1. НЕ розпізнає name\[].
2. Віддає перевагу першому параметру.
1. НЕ розпізнає name[].
2. Вибирайте перший параметр.
### Python 3.12.6 І Werkzeug 3.0.4 І Flask 3.0.3 <a href="#b853" id="b853"></a>
### Python 3.12.6 AND Werkzeug 3.0.4 AND Flask 3.0.3 <a href="#b853" id="b853"></a>
<figure><img src="../.gitbook/assets/image (1261).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg</a></p></figcaption></figure>
1. НЕ розпізнає name\[].
2. Віддає перевагу першому параметру.
1. НЕ розпізнає name[].
2. Вибирайте перший параметр.
### Python 3.12.6 І Django 4.2.15 <a href="#id-8079" id="id-8079"></a>
### Python 3.12.6 AND Django 4.2.15 <a href="#id-8079" id="id-8079"></a>
<figure><img src="../.gitbook/assets/image (1262).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg</a></p></figcaption></figure>
1. НЕ розпізнає name\[].
2. Віддає перевагу останньому параметру.
1. НЕ розпізнає name[].
2. Вибирайте останній параметр.
### Python 3.12.6 І Tornado 6.4.1 <a href="#id-2ad8" id="id-2ad8"></a>
### Python 3.12.6 AND Tornado 6.4.1 <a href="#id-2ad8" id="id-2ad8"></a>
<figure><img src="../.gitbook/assets/image (1263).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg</a></p></figcaption></figure>
1. НЕ розпізнає name\[].
2. Віддає перевагу останньому параметру.
1. НЕ розпізнає name[].
2. Вибирайте останній параметр.
## JSON Injection
### Duplicate keys
```ini
obj = {"test": "user", "test": "admin"}
```
Фронт-енд може вірити першій появі, тоді як бекенд використовує другу появу ключа.
### Колізія ключів: Обрізання символів та коментарі
Деякі символи не будуть правильно інтерпретовані фронт-ендом, але бекенд їх інтерпретує та використовує ці ключі, це може бути корисно для **обходу певних обмежень**:
```json
{"test": 1, "test\[raw \x0d byte]": 2}
{"test": 1, "test\ud800": 2}
{"test": 1, "test"": 2}
{"test": 1, "te\st": 2}
```
Зверніть увагу, як у цих випадках фронтенд може вважати, що `test == 1`, а бекенд буде вважати, що `test == 2`.
Це також можна використовувати для обходу обмежень значень, таких як:
```json
{"role": "administrator\[raw \x0d byte]"}
{"role":"administrator\ud800"}
{"role": "administrator""}
{"role": "admini\strator"}
```
### **Використання обрізання коментарів**
{% code overflow="wrap" %}
```ini
obj = {"description": "Duplicate with comments", "test": 2, "extra": /*, "test": 1, "extra2": */}
```
{% endcode %}
Тут ми використаємо серіалізатор з кожного парсера, щоб переглянути його відповідний вихід.
Серіалізатор 1 (наприклад, бібліотека GoJay для GoLang) створить:
* `description = "Дублювати з коментарями"`
* `test = 2`
* `extra = ""`
Серіалізатор 2 (наприклад, бібліотека JSON-iterator для Java) створить:
* `description = "Дублювати з коментарями"`
* `extra = "/*"`
* `extra2 = "*/"`
* `test = 1`
Альтернативно, просте використання коментарів також може бути ефективним:
```ini
obj = {"description": "Comment support", "test": 1, "extra": "a"/*, "test": 2, "extra2": "b"*/}
```
Бібліотека GSON Java:
```json
{"description":"Comment support","test":1,"extra":"a"}
```
Бібліотека simdjson для Ruby:
```json
{"description":"Comment support","test":2,"extra":"a","extra2":"b"}
```
### **Непослідовний пріоритет: десеріалізація проти серіалізації**
```ini
obj = {"test": 1, "test": 2}
obj["test"] // 1
obj.toString() // {"test": 2}
```
### Float and Integer
Число
```undefined
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
```
може бути декодовано в кілька представлень, включаючи:
```undefined
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9.999999999999999e95
1E+96
0
9223372036854775807
```
Які можуть створити невідповідності
## Посилання
* [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654)
* [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution)
* [https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89](https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89)
* [https://bishopfox.com/blog/json-interoperability-vulnerabilities](https://bishopfox.com/blog/json-interoperability-vulnerabilities)
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
@ -150,11 +235,11 @@ URL транзакції банківського додатку:
<details>
<summary>Підтримайте HackTricks</summary>
<summary>Підтримати HackTricks</summary>
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
</details>
{% endhint %}