Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CRIME-poc — :hocho: Attacco CRIME PoC : un oracolo di compressione attacca CVE-2012-4929 :hocho: | Kitploit
Strumenti/GitHubGitHub/mpgn/crime-poc
Analisi delle VulnerabilitàExploitSicurezza WebCrittografiaPaper e RicercaApprendimento e Formazione
GitHubmpgn/crime-poc

CRIME-poc

🔪 Attacco CRIME PoC : un oracolo di compressione attacca CVE-2012-4929 🔪

Vedi Repository
31107 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CRIME-poc

Attacco CRIME: un attacco oracle di compressione CVE-2012-4929 scoperto da Juliano Rizzo e Thai Duong;

In un attacco oracle di compressione, l'uso della compressione adattiva dei dati su una miscela di plaintext scelto e plaintext sconosciuto può causare variazioni sensibili al contenuto nella lunghezza del testo compresso, rilevabili anche se il contenuto del testo compresso stesso viene successivamente cifrato. Questo può essere usato negli attacchi di protocollo per rilevare quando il plaintext noto iniettato è anche solo parzialmente simile al contenuto sconosciuto di una parte segreta del messaggio, riducendo notevolmente la complessità della ricerca di una corrispondenza per il testo segreto. Gli attacchi CRIME e BREACH sono esempi di attacchi di protocollo che usano questo fenomeno.

L'attacco CRIME consente di recuperare i dati cifrati inviati da un client a un server sfruttando la lunghezza dei dati cifrati. Non consente di recuperare la chiave privata usata per cifrare il messaggio o la richiesta HTTP.

Indice

  1. Spiegazione
  2. Prova di concetto
    1. Cifrario a flusso RC4
    2. Modalità di cifratura CBC
  3. Exploit

Spiegazione

Molti articoli spiegano come funziona l'attacco CRIME, ma queste sono le migliori spiegazioni che ho trovato su internet:

  1. questa risposta: Crime come battere il successore di Beast
  2. SSL Attacks Survey di NCC Group

Questo attacco non è davvero complesso; la parte davvero interessante è l'implementazione, che è un po' diversa dalla 'teoria'.

Controlliamo il metodo ingenuo come descritto nell'articolo: è un buon modo per capire come funziona:

L'attaccante può controllare le richieste inviate dal client (usando javascript, per esempio). L'obiettivo è recuperare il cookie segreto. L'attaccante invia più richieste come questa e controlla la lunghezza dei dati cifrati:

Poiché cookie=q corrisponde a cookie=quokkalight del cookie segreto, la lunghezza dei dati cifrati sarà la stessa e l'attaccante sa di aver trovato un byte.

Ma questo metodo fallisce alcune volte e non è affidabile, quindi useremo un altro metodo. Prima inviamo una richiesta con il carattere che vogliamo trovare seguito da più caratteri che non possono essere trovati nella richiesta iniziale, come alcuni caratteri speciali: chr(i) + "#:/[@/&". Poi inviamo una seconda richiesta ma invertiamo il payload in questo modo: "#:/[@/&" + chr(i) e confrontiamo le due lunghezze. Se len(enc(req1)) < len(enc(req2)) allora abbiamo trovato un byte. Questo metodo si chiama two_tries ed è molto più affidabile:

L'attaccante ha trovato un byte!

root@kitploit:~
if len(enc(request1)) < len(enc(request2)):
    print("found byte")

Il metodo two_tries che ho implementato è completamente ricorsivo, ma perché? A volte può essere trovato più di un byte perché la compressione corrisponde a più pattern.

Prendiamo il segreto: cookie=quokkalight. Se eseguiamo l'algoritmo two_tries troveremo il seguente risultato:

root@kitploit:~
result 1: cookie=quokie=quokie=quokie=quokie=quokie=
result 2: cookie=quokkalight

L'algoritmo deve seguire tutti i percorsi dell'albero per trovare tutte le possibili soluzioni. Possiamo vedere tutti i risultati come un albero che può essere rappresentato così:

img

Prova di concetto

Cifrario a flusso RC4

La prova di concetto dell'attacco CRIME contro la modalità a flusso si trova nel file: CRIME-RC4-poc.py. Questa è un'implementazione in Python della spiegazione precedente.

root@kitploit:~
python3 CRIME-RC4-poc.py

Demo completa e risultato:

asciicast

Modalità di cifratura CBC

Quando la modalità di cifratura CBC è usata con AES o DES, l'attacco non è semplice come con RC4. Poiché tutto è diviso in blocchi, l'attacco è un po' più complesso (non troppo).

cbc

Per esempio, supponiamo di usare AES in modalità CBC: il blocco sarà diviso con una lunghezza di 16 e un padding verrà aggiunto alla fine se len(data)%16 != 0. Nella modalità CBC, è importante notare che il payload payload=rand produrrà una lunghezza di 16 e non di 12, poiché un padding verrà aggiunto alla fine dei dati prima della cifratura. Quindi il nostro attacco precedente non può funzionare.

Esempio:

In questo esempio, la lunghezza sarà sempre la stessa perché se aggiungiamo o rimuoviamo un byte, la lunghezza sarà sempre la stessa, cambierà solo il padding. L'attaccante vede solo i dati cifrati e non ha modo di conoscere il padding usando i dati cifrati.

Soluzione: giocare con le specifiche della modalità CBC, così la lunghezza del padding sarà 1 aggiungendo un valore casuale nella variabile GARB (nel parametro GET, poiché l'attaccante controlla i dati GET e POST).

Se il byte corrisponde a un pattern, la lunghezza sarà la stessa; se non corrisponde, la lunghezza sarà diversa.

Successivamente, dobbiamo solo usare lo stesso metodo spiegato nella parte RC4; aggiungiamo solo un passaggio prima.

  1. chiamiamo la funzione adjust_padding() in modo da avere un padding di lunghezza 1
  2. chiamiamo la funzione two_tries_recursive() e possiamo trovare il FLAG segreto!
root@kitploit:~
python3 CRIME-cbc-poc.py

asciicast

Exploit

in arrivo molto presto...

root@kitploit:~
                \     /
                 \ _ /
              ----/_\----
  x--------------( . )--------------x
       x|x   | |_|\_/|_| |   x|x
        x    x           x    x     

Riferimenti

https://www.nccgroup.trust/globalassets/our-research/us/whitepapers/ssl_attacks_survey.pdf https://github.com/cloudflare/cf-nocompress https://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf https://security.stackexchange.com/questions/19911/crime-how-to-beat-the-beast-successor/19914#19914

Scarica lo strumento
Richiestalunghezza
GET /cookie= DATA cookie=quokkalight80
GET /cookie=a DATA cookie=quokkalight81
GET /cookie=b DATA cookie=quokkalight81
GET /cookie=. DATA cookie=quokkalight81
GET /cookie=q DATA cookie=quokkalight80
Richiesta per recuperare il byte qlunghezza
GET /cookie=a~#:/[@/& DATA cookie=quokkalight81
GET /cookie=~#:/[@/&a DATA cookie=quokkalight81
GET /cookie=b~#:/[@/& DATA cookie=quokkalight81
GET /cookie=~#:/[@/&b DATA cookie=quokkalight81
GET /cookie=q~#:/[@/& DATA cookie=quokkalight80
GET /cookie=~#:/[@/&q DATA cookie=quokkalight81
blocco1blocco2blocco3lunghezza
GET /cookie= DATA cookie=quokkalight + PAD(11)48
GET /cookie=a DATA cookie=quokkalight + PAD(10)48
GET /cookie=b DATA cookie=quokkalight + PAD(10)48
GET /cookie=. DATA cookie=quokkalight + PAD(10)48
GET /cookie=q DATA cookie=quokkalight + PAD(11)48
blocco1blocco2blocco3blocco4lunghezza
GET /GARBcookie= DATA cookie=quokkalight + PAD(1)48
GET /GARBcookie=a DATA cookie=quokkalightPAD(16)64
GET /GARBcookie=b DATA cookie=quokkalightPAD(16)64
GET /GARBcookie=. DATA cookie=quokkalightPAD(16)64
GET /GARBcookie=q DATA cookie=quokkalight + PAD(1)48