Client Side Prototype Pollution
Last updated
Last updated
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Gli strumenti https://github.com/dwisiswant0/ppfuzz, https://github.com/kleiton0x00/ppmap e https://github.com/kosmosec/proto-find possono essere utilizzati per trovare vulnerabilità di inquinamento del prototipo.
Inoltre, puoi anche utilizzare l'estensione del browser PPScan per scansionare automaticamente le pagine a cui accedi per vulnerabilità di inquinamento del prototipo.
Una volta identificata una vulnerabilità di prototype pollution da uno degli strumenti, e se il codice non è eccessivamente complesso, potresti trovare la vulnerabilità cercando parole chiave come location.hash
, decodeURIComponent
o location.search
negli Strumenti per sviluppatori di Chrome. Questo approccio ti consente di individuare la sezione vulnerabile del codice JavaScript.
Per codebase più grandi e complesse, un metodo semplice per scoprire il codice vulnerabile prevede i seguenti passaggi:
Usa uno strumento per identificare una vulnerabilità e ottenere un payload progettato per impostare una proprietà nel costruttore. Un esempio fornito da ppmap potrebbe apparire così: constructor[prototype][ppmap]=reserved
.
Imposta un punto di interruzione alla prima riga di codice JavaScript che verrà eseguita nella pagina. Aggiorna la pagina con il payload, mettendo in pausa l'esecuzione a questo punto di interruzione.
Mentre l'esecuzione di JavaScript è in pausa, esegui il seguente script nella console JS. Questo script segnalerà quando la proprietà 'ppmap' viene creata, aiutando a localizzarne l'origine:
Naviga di nuovo alla scheda Sources e seleziona “Resume script execution”. Il JavaScript continuerà a essere eseguito e la proprietà 'ppmap' sarà inquinata come previsto. Utilizzando il frammento fornito si facilita l'identificazione della posizione esatta in cui la proprietà 'ppmap' è inquinata. Esaminando lo Call Stack, è possibile osservare diversi stack in cui si è verificato l'inquinamento.
Quando si decide quale stack investigare, è spesso utile mirare agli stack associati a file di librerie JavaScript, poiché l'inquinamento del prototipo si verifica frequentemente all'interno di queste librerie. Identifica lo stack rilevante esaminando il suo attacco a file di librerie (visibile sul lato destro, simile a un'immagine fornita come guida). In scenari con più stack, come quelli alle righe 4 e 6, la scelta logica è lo stack alla riga 4, poiché rappresenta la prima occorrenza di inquinamento e quindi la causa principale della vulnerabilità. Cliccando sullo stack verrai indirizzato al codice vulnerabile.
Il gadget è il codice che sarà abusato una volta scoperta una vulnerabilità PP.
Se l'applicazione è semplice, possiamo cercare parole chiave come srcdoc/innerHTML/iframe/createElement
e rivedere il codice sorgente e controllare se porta all'esecuzione di javascript. A volte, le tecniche menzionate potrebbero non trovare affatto gadget. In tal caso, una revisione pura del codice sorgente rivela alcuni bei gadget come l'esempio qui sotto.
Controlla questo writeup: https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
Questa ricerca mostra gadget PP da utilizzare per bypassare le sanizzazioni fornite da alcune librerie di sanitizzazione HTML:
sanitize-html
dompurify
Closure
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)