hacktricks/src/crypto-and-stego/hash-length-extension-attack.md

41 lines
1.9 KiB
Markdown

# Hash Length Extension Attack
{{#include ../banners/hacktricks-training.md}}
## Riepilogo dell'attacco
Immagina un server che **firma** alcuni **dati** **aggiungendo** un **segreto** a dei dati di testo chiaro noti e poi hashando quei dati. Se conosci:
- **La lunghezza del segreto** (questo può essere anche forzato a bruteforce da un intervallo di lunghezza dato)
- **I dati di testo chiaro**
- **L'algoritmo (e è vulnerabile a questo attacco)**
- **Il padding è noto**
- Di solito viene utilizzato un padding predefinito, quindi se gli altri 3 requisiti sono soddisfatti, anche questo lo è
- Il padding varia a seconda della lunghezza del segreto + dati, ecco perché è necessaria la lunghezza del segreto
Allora, è possibile per un **attaccante** **aggiungere** **dati** e **generare** una **firma** valida per i **dati precedenti + dati aggiunti**.
### Come?
Fondamentalmente, gli algoritmi vulnerabili generano gli hash prima **hashando un blocco di dati**, e poi, **dallo** **hash** **precedentemente** creato (stato), **aggiungono il prossimo blocco di dati** e **lo hashano**.
Poi, immagina che il segreto sia "secret" e i dati siano "data", l'MD5 di "secretdata" è 6036708eba0d11f6ef52ad44e8b74d5b.\
Se un attaccante vuole aggiungere la stringa "append" può:
- Generare un MD5 di 64 "A"
- Cambiare lo stato dell'hash precedentemente inizializzato a 6036708eba0d11f6ef52ad44e8b74d5b
- Aggiungere la stringa "append"
- Completare l'hash e l'hash risultante sarà un **valido per "secret" + "data" + "padding" + "append"**
### **Strumento**
{{#ref}}
https://github.com/iagox86/hash_extender
{{#endref}}
### Riferimenti
Puoi trovare questo attacco ben spiegato in [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)
{{#include ../banners/hacktricks-training.md}}