mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['pentesting-web/parameter-pollution.md'] to ua
This commit is contained in:
parent
966d05b2d9
commit
bc369ed92d
2 changed files with 138 additions and 53 deletions
|
@ -604,7 +604,7 @@
|
||||||
* [OAuth to Account takeover](pentesting-web/oauth-to-account-takeover.md)
|
* [OAuth to Account takeover](pentesting-web/oauth-to-account-takeover.md)
|
||||||
* [Open Redirect](pentesting-web/open-redirect.md)
|
* [Open Redirect](pentesting-web/open-redirect.md)
|
||||||
* [ORM Injection](pentesting-web/orm-injection.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)
|
* [Phone Number Injections](pentesting-web/phone-number-injections.md)
|
||||||
* [PostMessage Vulnerabilities](pentesting-web/postmessage-vulnerabilities/README.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)
|
* [Blocking main page to steal postmessage](pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md)
|
||||||
|
|
|
@ -1,18 +1,18 @@
|
||||||
# Параметричне забруднення
|
# Parameter Pollution | JSON Injection
|
||||||
|
|
||||||
## Параметричне забруднення
|
## Parameter Pollution
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
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">\
|
||||||
Вивчайте та практикуйте 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 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>
|
<details>
|
||||||
|
|
||||||
<summary>Підтримайте HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **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)**.**
|
||||||
* **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на GitHub.
|
* **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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
@ -21,11 +21,11 @@
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% 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 транзакції банківського додатку:
|
URL транзакції банківського додатку:
|
||||||
|
|
||||||
|
@ -35,110 +35,195 @@ URL транзакції банківського додатку:
|
||||||
|
|
||||||
* **Маніпульований URL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
|
* **Маніпульований 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 може бути використано.
|
* Спосіб, яким параметри обробляються та пріоритизуються, залежить від основної веб-технології, що впливає на те, як HPP може бути використано.
|
||||||
* Інструменти, такі як [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/), допомагають ідентифікувати ці технології та їх поведінку при парсингу.
|
* Інструменти, такі як [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/), допомагають ідентифікувати ці технології та їх поведінку при обробці.
|
||||||
|
|
||||||
### PHP та експлуатація HPP
|
### PHP and HPP Exploitation
|
||||||
|
|
||||||
**Ситуація з маніпуляцією OTP:**
|
**Ситуація з маніпуляцією OTP:**
|
||||||
|
|
||||||
* **Контекст:** Механізм входу, що вимагає одноразового пароля (OTP), був експлуатований.
|
* **Контекст:** Механізм входу, що вимагає одноразового пароля (OTP), був використаний.
|
||||||
* **Метод:** Перехоплюючи запит OTP за допомогою інструментів, таких як Burp Suite, зловмисники дублювали параметр `email` у HTTP запиті.
|
* **Метод:** Перехопивши запит OTP за допомогою інструментів, таких як Burp Suite, зловмисники дублювали параметр `email` у HTTP-запиті.
|
||||||
* **Результат:** OTP, призначений для початкової електронної пошти, був надісланий на другу електронну адресу, вказану в маніпульованому запиті. Ця вразливість дозволила несанкціонований доступ, обминаючи заплановану міру безпеки.
|
* **Результат:** OTP, призначений для початкової електронної пошти, був надісланий на другу електронну адресу, вказану в маніпульованому запиті. Ця вразливість дозволила несанкціонований доступ, обійшовши заплановану міру безпеки.
|
||||||
|
|
||||||
Цей сценарій підкреслює критичну помилку в бекенді додатку, який обробляв перший параметр `email` для генерації OTP, але використовував останній для доставки.
|
Цей сценарій підкреслює критичну помилку в бекенді додатку, який обробляв перший параметр `email` для генерації OTP, але використовував останній для доставки.
|
||||||
|
|
||||||
**Ситуація з маніпуляцією API ключем:**
|
**Ситуація з маніпуляцією API-ключем:**
|
||||||
|
|
||||||
* **Сценарій:** Додаток дозволяє користувачам оновлювати свій API ключ через сторінку налаштувань профілю.
|
* **Сценарій:** Додаток дозволяє користувачам оновлювати свій API-ключ через сторінку налаштувань профілю.
|
||||||
* **Вектор атаки:** Зловмисник виявляє, що, додавши додатковий параметр `api_key` до POST запиту, він може маніпулювати результатом функції оновлення API ключа.
|
* **Вектор атаки:** Зловмисник виявляє, що, додавши додатковий параметр `api_key` до POST-запиту, він може маніпулювати результатом функції оновлення API-ключа.
|
||||||
* **Техніка:** Використовуючи інструмент, такий як Burp Suite, зловмисник формує запит, що містить два параметри `api_key`: один легітимний і один шкідливий. Сервер, обробляючи лише останнє входження, оновлює API ключ на значення, надане зловмисником.
|
* **Техніка:** Використовуючи інструмент, такий як Burp Suite, зловмисник формує запит, що містить два параметри `api_key`: один легітимний і один шкідливий. Сервер, обробляючи лише останнє входження, оновлює API-ключ на значення, надане зловмисником.
|
||||||
* **Результат:** Зловмисник отримує контроль над функціональністю API жертви, потенційно отримуючи доступ або модифікуючи приватні дані без дозволу.
|
* **Результат:** Зловмисник отримує контроль над функціональністю API жертви, потенційно отримуючи доступ або модифікуючи приватні дані без дозволу.
|
||||||
|
|
||||||
Цей приклад ще раз підкреслює необхідність безпечного оброблення параметрів, особливо в таких критичних функціях, як управління API ключами.
|
Цей приклад ще раз підкреслює необхідність безпечного оброблення параметрів, особливо в таких критичних функціях, як управління API-ключами.
|
||||||
|
|
||||||
### Парсинг параметрів: Flask проти PHP
|
### Parameter Parsing: Flask vs. PHP
|
||||||
|
|
||||||
Спосіб, яким веб-технології обробляють дубльовані HTTP параметри, варіюється, що впливає на їх вразливість до атак HPP:
|
Спосіб, яким веб-технології обробляють дубльовані HTTP-параметри, варіюється, що впливає на їх вразливість до атак HPP:
|
||||||
|
|
||||||
* **Flask:** Приймає перше значення параметра, наприклад, `a=1` у рядку запиту `a=1&a=2`, надаючи пріоритет початковому екземпляру над наступними дублікатами.
|
* **Flask:** Приймає перше значення параметра, наприклад, `a=1` у рядку запиту `a=1&a=2`, пріоритизуючи початковий екземпляр над наступними дублікатами.
|
||||||
* **PHP (на Apache HTTP Server):** Навпаки, надає пріоритет останньому значенню параметра, вибираючи `a=2` у наведеному прикладі. Ця поведінка може ненавмисно сприяти експлуатації HPP, визнаючи маніпульований параметр зловмисника замість оригінального.
|
* **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)
|
Результати були взяті з [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>
|
<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 у назві параметра.
|
1. Ігноруйте все після %00 у назві параметра.
|
||||||
2. Обробляйте name\[] як масив.
|
2. Обробляйте name\[] як масив.
|
||||||
3. \_GET не означає метод GET.
|
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>
|
<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. Використовує роздільники & та ; для розділення параметрів.
|
1. Використовує роздільники & та ; для розділення параметрів.
|
||||||
2. Не розпізнає name\[].
|
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>
|
<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.
|
1. POST RequestMapping == PostMapping & GET RequestMapping == GetMapping.
|
||||||
2. POST RequestMapping & PostMapping розпізнають name\[].
|
2. POST RequestMapping & PostMapping розпізнають name[].
|
||||||
3. Віддайте перевагу name, якщо існують name та name\[].
|
3. Вибирайте name, якщо існують name та name[].
|
||||||
4. Конкатенуйте параметри, наприклад, first,last.
|
4. Конкатенуйте параметри, наприклад, first,last.
|
||||||
5. POST RequestMapping & PostMapping розпізнають параметри запиту з Content-Type.
|
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>
|
<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\[].
|
1. Розпізнає name[].
|
||||||
2. Конкатенуйте параметри, наприклад, first,last.
|
2. Конкатенує параметри, наприклад, first,last.
|
||||||
|
|
||||||
### GO 1.22.7 <a href="#id-63dc" id="id-63dc"></a>
|
### 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>
|
<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\[].
|
1. НЕ розпізнає name[].
|
||||||
2. Віддає перевагу першому параметру.
|
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>
|
<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\[].
|
1. НЕ розпізнає name[].
|
||||||
2. Віддає перевагу першому параметру.
|
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>
|
<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\[].
|
1. НЕ розпізнає name[].
|
||||||
2. Віддає перевагу останньому параметру.
|
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>
|
<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\[].
|
1. НЕ розпізнає name[].
|
||||||
2. Віддає перевагу останньому параметру.
|
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://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://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://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>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
|
@ -150,11 +235,11 @@ URL транзакції банківського додатку:
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Підтримайте HackTricks</summary>
|
<summary>Підтримати HackTricks</summary>
|
||||||
|
|
||||||
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
|
* Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи Telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Приєднуйтесь до** 💬 [**групи 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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
Loading…
Reference in a new issue