mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['pentesting-web/parameter-pollution.md'] to it
This commit is contained in:
parent
1c24212b16
commit
763b4e675a
2 changed files with 110 additions and 25 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 @@
|
||||||
# Inquinamento dei Parametri
|
# Parameter Pollution | JSON Injection
|
||||||
|
|
||||||
## Inquinamento dei Parametri
|
## Parameter Pollution
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Impara e pratica Hacking AWS:<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">\
|
||||||
Impara e pratica Hacking GCP: <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>Supporta HackTricks</summary>
|
<summary>Support HackTricks</summary>
|
||||||
|
|
||||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **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)**.**
|
||||||
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su 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 @@ Impara e pratica Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
## Panoramica dell'Inquinamento dei Parametri HTTP (HPP)
|
## Panoramica sull'HTTP Parameter Pollution (HPP)
|
||||||
|
|
||||||
L'Inquinamento dei Parametri HTTP (HPP) è una tecnica in cui gli attaccanti manipolano i parametri HTTP per cambiare il comportamento di un'applicazione web in modi non intenzionati. Questa manipolazione avviene aggiungendo, modificando o duplicando i parametri HTTP. L'effetto di queste manipolazioni non è direttamente visibile all'utente, ma può alterare significativamente la funzionalità dell'applicazione sul lato server, con impatti osservabili sul lato client.
|
HTTP Parameter Pollution (HPP) è una tecnica in cui gli attaccanti manipolano i parametri HTTP per cambiare il comportamento di un'applicazione web in modi non intenzionati. Questa manipolazione avviene aggiungendo, modificando o duplicando i parametri HTTP. L'effetto di queste manipolazioni non è direttamente visibile all'utente, ma può alterare significativamente la funzionalità dell'applicazione sul lato server, con impatti osservabili sul lato client.
|
||||||
|
|
||||||
### Esempio di Inquinamento dei Parametri HTTP (HPP)
|
### Esempio di HTTP Parameter Pollution (HPP)
|
||||||
|
|
||||||
Un URL di transazione di un'applicazione bancaria:
|
Un URL di transazione di un'applicazione bancaria:
|
||||||
|
|
||||||
|
@ -37,36 +37,36 @@ Inserendo un ulteriore parametro `from`:
|
||||||
|
|
||||||
La transazione potrebbe essere erroneamente addebitata a `accountC` invece di `accountA`, dimostrando il potenziale dell'HPP di manipolare transazioni o altre funzionalità come il ripristino della password, le impostazioni 2FA o le richieste di chiavi API.
|
La transazione potrebbe essere erroneamente addebitata a `accountC` invece di `accountA`, dimostrando il potenziale dell'HPP di manipolare transazioni o altre funzionalità come il ripristino della password, le impostazioni 2FA o le richieste di chiavi API.
|
||||||
|
|
||||||
#### **Parsing dei Parametri Specifico per Tecnologia**
|
#### **Parsing dei parametri specifico per tecnologia**
|
||||||
|
|
||||||
* Il modo in cui i parametri vengono analizzati e prioritizzati dipende dalla tecnologia web sottostante, influenzando come l'HPP può essere sfruttato.
|
* Il modo in cui i parametri vengono analizzati e prioritizzati dipende dalla tecnologia web sottostante, influenzando come l'HPP può essere sfruttato.
|
||||||
* Strumenti come [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) aiutano a identificare queste tecnologie e i loro comportamenti di parsing.
|
* Strumenti come [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/) aiutano a identificare queste tecnologie e i loro comportamenti di parsing.
|
||||||
|
|
||||||
### Sfruttamento di PHP e HPP
|
### Sfruttamento di PHP e HPP
|
||||||
|
|
||||||
**Caso di Manipolazione OTP:**
|
**Caso di manipolazione OTP:**
|
||||||
|
|
||||||
* **Contesto:** Un meccanismo di accesso che richiede una Password Usa e Getta (OTP) è stato sfruttato.
|
* **Contesto:** È stata sfruttata una meccanismo di login che richiede una Password Usa e Getta (OTP).
|
||||||
* **Metodo:** Intercettando la richiesta OTP utilizzando strumenti come Burp Suite, gli attaccanti hanno duplicato il parametro `email` nella richiesta HTTP.
|
* **Metodo:** Intercettando la richiesta OTP utilizzando strumenti come Burp Suite, gli attaccanti hanno duplicato il parametro `email` nella richiesta HTTP.
|
||||||
* **Risultato:** L'OTP, destinato all'email iniziale, è stato invece inviato al secondo indirizzo email specificato nella richiesta manipolata. Questo difetto ha consentito l'accesso non autorizzato eludendo la misura di sicurezza prevista.
|
* **Risultato:** L'OTP, destinato all'email iniziale, è stato invece inviato al secondo indirizzo email specificato nella richiesta manipolata. Questo difetto ha consentito l'accesso non autorizzato eludendo la misura di sicurezza prevista.
|
||||||
|
|
||||||
Questo scenario evidenzia una grave svista nel backend dell'applicazione, che ha elaborato il primo parametro `email` per la generazione dell'OTP ma ha utilizzato l'ultimo per la consegna.
|
Questo scenario evidenzia una grave svista nel backend dell'applicazione, che ha elaborato il primo parametro `email` per la generazione dell'OTP ma ha utilizzato l'ultimo per la consegna.
|
||||||
|
|
||||||
**Caso di Manipolazione della Chiave API:**
|
**Caso di manipolazione della chiave API:**
|
||||||
|
|
||||||
* **Scenario:** Un'applicazione consente agli utenti di aggiornare la propria chiave API tramite una pagina delle impostazioni del profilo.
|
* **Scenario:** Un'applicazione consente agli utenti di aggiornare la propria chiave API tramite una pagina delle impostazioni del profilo.
|
||||||
* **Vettore di attacco:** Un attaccante scopre che aggiungendo un ulteriore parametro `api_key` alla richiesta POST, può manipolare l'esito della funzione di aggiornamento della chiave API.
|
* **Vettore di attacco:** Un attaccante scopre che aggiungendo un ulteriore parametro `api_key` alla richiesta POST, può manipolare l'esito della funzione di aggiornamento della chiave API.
|
||||||
* **Tecnica:** Utilizzando uno strumento come Burp Suite, l'attaccante crea una richiesta che include due parametri `api_key`: uno legittimo e uno malevolo. Il server, elaborando solo l'ultima occorrenza, aggiorna la chiave API al valore fornito dall'attaccante.
|
* **Tecnica:** Utilizzando uno strumento come Burp Suite, l'attaccante crea una richiesta che include due parametri `api_key`: uno legittimo e uno malevolo. Il server, elaborando solo l'ultima occorrenza, aggiorna la chiave API al valore fornito dall'attaccante.
|
||||||
* **Risultato:** L'attaccante ottiene il controllo sulla funzionalità API della vittima, potenzialmente accedendo o modificando dati privati senza autorizzazione.
|
* **Risultato:** L'attaccante ottiene il controllo sulla funzionalità API della vittima, potenzialmente accedendo o modificando dati privati in modo non autorizzato.
|
||||||
|
|
||||||
Questo esempio sottolinea ulteriormente la necessità di una gestione sicura dei parametri, specialmente in funzionalità critiche come la gestione delle chiavi API.
|
Questo esempio sottolinea ulteriormente la necessità di una gestione sicura dei parametri, specialmente in funzionalità critiche come la gestione delle chiavi API.
|
||||||
|
|
||||||
### Parsing dei Parametri: Flask vs. PHP
|
### Parsing dei parametri: Flask vs. PHP
|
||||||
|
|
||||||
Il modo in cui le tecnologie web gestiscono i parametri HTTP duplicati varia, influenzando la loro suscettibilità agli attacchi HPP:
|
Il modo in cui le tecnologie web gestiscono i parametri HTTP duplicati varia, influenzando la loro suscettibilità agli attacchi HPP:
|
||||||
|
|
||||||
* **Flask:** Adotta il primo valore del parametro incontrato, come `a=1` in una stringa di query `a=1&a=2`, dando priorità all'istanza iniziale rispetto ai duplicati successivi.
|
* **Flask:** Adozione del primo valore del parametro incontrato, come `a=1` in una stringa di query `a=1&a=2`, privilegiando l'istanza iniziale rispetto ai duplicati successivi.
|
||||||
* **PHP (su Apache HTTP Server):** Al contrario, dà priorità all'ultimo valore del parametro, optando per `a=2` nell'esempio fornito. Questo comportamento può facilitare involontariamente gli exploit HPP onorando il parametro manipolato dall'attaccante rispetto all'originale.
|
* **PHP (su Apache HTTP Server):** Al contrario, privilegia l'ultimo valore del parametro, optando per `a=2` nell'esempio fornito. Questo comportamento può facilitare involontariamente gli exploit HPP onorando il parametro manipolato dall'attaccante rispetto all'originale.
|
||||||
|
|
||||||
## Inquinamento dei parametri per tecnologia
|
## Inquinamento dei parametri per tecnologia
|
||||||
|
|
||||||
|
@ -94,8 +94,8 @@ I risultati sono stati presi da [https://medium.com/@0xAwali/http-parameter-poll
|
||||||
<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 riconoscono name[].
|
2. POST RequestMapping & PostMapping riconoscono name\[].
|
||||||
3. Preferisce name se name e name[] esistono.
|
3. Preferisce name se name E name\[] esistono.
|
||||||
4. Concatenare i parametri e.g. first,last.
|
4. Concatenare i parametri e.g. first,last.
|
||||||
5. POST RequestMapping & PostMapping riconoscono i parametri di query con Content-Type.
|
5. POST RequestMapping & PostMapping riconoscono i parametri di query con Content-Type.
|
||||||
|
|
||||||
|
@ -134,19 +134,104 @@ I risultati sono stati presi da [https://medium.com/@0xAwali/http-parameter-poll
|
||||||
1. NON riconosce name[].
|
1. NON riconosce name[].
|
||||||
2. Preferisce l'ultimo parametro.
|
2. Preferisce l'ultimo parametro.
|
||||||
|
|
||||||
|
## JSON Injection
|
||||||
|
|
||||||
|
### Chiavi duplicate
|
||||||
|
```ini
|
||||||
|
obj = {"test": "user", "test": "admin"}
|
||||||
|
```
|
||||||
|
Il front-end potrebbe credere alla prima occorrenza mentre il backend utilizza la seconda occorrenza della chiave.
|
||||||
|
|
||||||
|
### Collisione di Chiavi: Troncamento dei Caratteri e Commenti
|
||||||
|
|
||||||
|
Alcaratteri non verranno interpretati correttamente dal frontend, ma il backend li interpreterà e utilizzerà quelle chiavi, questo potrebbe essere utile per **bypassare certe restrizioni**:
|
||||||
|
```json
|
||||||
|
{"test": 1, "test\[raw \x0d byte]": 2}
|
||||||
|
{"test": 1, "test\ud800": 2}
|
||||||
|
{"test": 1, "test"": 2}
|
||||||
|
{"test": 1, "te\st": 2}
|
||||||
|
```
|
||||||
|
Nota come in questi casi il front end potrebbe pensare che `test == 1` e il backend penserà che `test == 2`.
|
||||||
|
|
||||||
|
Questo può anche essere usato per bypassare le restrizioni sui valori come:
|
||||||
|
```json
|
||||||
|
{"role": "administrator\[raw \x0d byte]"}
|
||||||
|
{"role":"administrator\ud800"}
|
||||||
|
{"role": "administrator""}
|
||||||
|
{"role": "admini\strator"}
|
||||||
|
```
|
||||||
|
### **Utilizzo della Troncatura dei Commenti**
|
||||||
|
|
||||||
|
{% code overflow="wrap" %}
|
||||||
|
```ini
|
||||||
|
obj = {"description": "Duplicate with comments", "test": 2, "extra": /*, "test": 1, "extra2": */}
|
||||||
|
```
|
||||||
|
{% endcode %}
|
||||||
|
|
||||||
|
Qui utilizzeremo il serializer di ciascun parser per visualizzare il rispettivo output.
|
||||||
|
|
||||||
|
Serializer 1 (ad esempio, la libreria GoJay di GoLang) produrrà:
|
||||||
|
|
||||||
|
* `description = "Duplicate with comments"`
|
||||||
|
* `test = 2`
|
||||||
|
* `extra = ""`
|
||||||
|
|
||||||
|
Serializer 2 (ad esempio, la libreria JSON-iterator di Java) produrrà:
|
||||||
|
|
||||||
|
* `description = "Duplicate with comments"`
|
||||||
|
* `extra = "/*"`
|
||||||
|
* `extra2 = "*/"`
|
||||||
|
* `test = 1`
|
||||||
|
|
||||||
|
In alternativa, l'uso diretto dei commenti può essere altrettanto efficace:
|
||||||
|
```ini
|
||||||
|
obj = {"description": "Comment support", "test": 1, "extra": "a"/*, "test": 2, "extra2": "b"*/}
|
||||||
|
```
|
||||||
|
La libreria GSON di Java:
|
||||||
|
```json
|
||||||
|
{"description":"Comment support","test":1,"extra":"a"}
|
||||||
|
```
|
||||||
|
La libreria simdjson di Ruby:
|
||||||
|
```json
|
||||||
|
{"description":"Comment support","test":2,"extra":"a","extra2":"b"}
|
||||||
|
```
|
||||||
|
### **Precedenza Incoerente: Deserializzazione vs. Serializzazione**
|
||||||
|
```ini
|
||||||
|
obj = {"test": 1, "test": 2}
|
||||||
|
|
||||||
|
obj["test"] // 1
|
||||||
|
obj.toString() // {"test": 2}
|
||||||
|
```
|
||||||
|
### Float e Intero
|
||||||
|
|
||||||
|
Il numero
|
||||||
|
```undefined
|
||||||
|
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
|
||||||
|
```
|
||||||
|
può essere decodificato in più rappresentazioni, inclusi:
|
||||||
|
```undefined
|
||||||
|
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
|
||||||
|
9.999999999999999e95
|
||||||
|
1E+96
|
||||||
|
0
|
||||||
|
9223372036854775807
|
||||||
|
```
|
||||||
|
Which might create inconsistences
|
||||||
|
|
||||||
## Riferimenti
|
## Riferimenti
|
||||||
|
|
||||||
* [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>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% hint style="success" %}
|
||||||
Impara e pratica Hacking AWS:<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">\
|
||||||
Impara e pratica Hacking GCP: <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>
|
||||||
|
|
||||||
|
@ -154,7 +239,7 @@ Impara e pratica Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data
|
||||||
|
|
||||||
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
|
||||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
|
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
Loading…
Reference in a new issue