mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/deserialization/nodejs-proto-prototype-p
This commit is contained in:
parent
9a8fe31b00
commit
6d9097611d
@ -43,9 +43,9 @@ Nella programmazione basata su prototipi, le proprietà/metodi sono ereditati da
|
||||
|
||||
Va notato che quando una proprietà viene aggiunta a un oggetto che funge da prototipo per altri oggetti (come `myPersonObj`), gli oggetti ereditanti ottengono accesso a questa nuova proprietà. Tuttavia, questa proprietà non viene visualizzata automaticamente a meno che non venga esplicitamente invocata.
|
||||
|
||||
## \_\_proto\_\_ pollution <a href="#id-0d0a" id="id-0d0a"></a>
|
||||
## \_\_proto\_\_ inquinamento <a href="#id-0d0a" id="id-0d0a"></a>
|
||||
|
||||
## Esplorare la Pollution del Prototipo in JavaScript
|
||||
## Esplorare l'inquinamento del prototipo in JavaScript
|
||||
|
||||
Gli oggetti JavaScript sono definiti da coppie chiave-valore e ereditano dal prototipo dell'oggetto JavaScript. Ciò significa che alterare il prototipo dell'oggetto può influenzare tutti gli oggetti nell'ambiente.
|
||||
|
||||
@ -154,7 +154,7 @@ b[0] //undefined
|
||||
b[1] //"yolo"
|
||||
c[1] // 2 -- not
|
||||
```
|
||||
### Inquinamento degli elementi Html
|
||||
### Html elements pollution
|
||||
|
||||
Quando si genera un elemento HTML tramite JS, è possibile **sovrascrivere** l'attributo **`innerHTML`** per farlo scrivere **codice HTML arbitrario.** [Idea e esempio da questo writeup](https://blog.huli.tw/2022/04/25/en/intigriti-0422-xss-challenge-author-writeup/).
|
||||
```javascript
|
||||
@ -171,7 +171,7 @@ settings[root][ownerDocument][body][innerHTML]="<svg onload=alert(document.domai
|
||||
|
||||
### Esempio di base
|
||||
|
||||
Una contaminazione del prototipo si verifica a causa di un difetto nell'applicazione che consente di sovrascrivere le proprietà su `Object.prototype`. Ciò significa che poiché la maggior parte degli oggetti deriva le proprie proprietà da `Object.prototype`
|
||||
Una contaminazione del prototipo si verifica a causa di un difetto nell'applicazione che consente di sovrascrivere le proprietà su `Object.prototype`. Questo significa che poiché la maggior parte degli oggetti deriva le proprie proprietà da `Object.prototype`
|
||||
|
||||
L'esempio più semplice è aggiungere un valore a un **attributo indefinito di un oggetto** che verrà controllato, come:
|
||||
```javascript
|
||||
@ -191,7 +191,7 @@ Le condizioni sotto le quali questo attacco può essere eseguito con successo, c
|
||||
- Definire proprietà basate su un percorso.
|
||||
- Clonare oggetti.
|
||||
|
||||
### Funzione di override
|
||||
### Override function
|
||||
```python
|
||||
customer.__proto__.toString = ()=>{alert("polluted")}
|
||||
```
|
||||
@ -213,12 +213,12 @@ client-side-prototype-pollution.md
|
||||
|
||||
### CVE-2019–11358: Attacco di inquinamento del prototipo tramite jQuery $ .extend
|
||||
|
||||
[Per ulteriori dettagli controlla questo articolo](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) In jQuery, la funzione `$ .extend` può portare a inquinamento del prototipo se la funzionalità di copia profonda viene utilizzata in modo improprio. Questa funzione è comunemente usata per clonare oggetti o unire proprietà da un oggetto predefinito. Tuttavia, quando è configurata in modo errato, le proprietà destinate a un nuovo oggetto possono essere assegnate al prototipo invece. Ad esempio:
|
||||
[Per ulteriori dettagli controlla questo articolo](https://itnext.io/prototype-pollution-attack-on-nodejs-applications-94a8582373e7) In jQuery, la funzione `$ .extend` può portare a inquinamento del prototipo se la funzione di copia profonda viene utilizzata in modo improprio. Questa funzione è comunemente usata per clonare oggetti o unire proprietà da un oggetto predefinito. Tuttavia, quando è configurata in modo errato, le proprietà destinate a un nuovo oggetto possono essere assegnate al prototipo invece. Ad esempio:
|
||||
```javascript
|
||||
$.extend(true, {}, JSON.parse('{"__proto__": {"devMode": true}}'))
|
||||
console.log({}.devMode) // Outputs: true
|
||||
```
|
||||
Questa vulnerabilità, identificata come CVE-2019–11358, illustra come una copia profonda possa modificare involontariamente il prototipo, portando a potenziali rischi per la sicurezza, come l'accesso non autorizzato come admin se proprietà come `isAdmin` vengono controllate senza una corretta verifica di esistenza.
|
||||
Questa vulnerabilità, identificata come CVE-2019–11358, illustra come una copia profonda possa modificare involontariamente il prototipo, portando a potenziali rischi per la sicurezza, come l'accesso non autorizzato da parte di un amministratore se proprietà come `isAdmin` vengono controllate senza una corretta verifica di esistenza.
|
||||
|
||||
### CVE-2018–3721, CVE-2019–10744: attacco di inquinamento del prototipo tramite lodash
|
||||
|
||||
@ -228,9 +228,9 @@ Questa vulnerabilità, identificata come CVE-2019–11358, illustra come una cop
|
||||
|
||||
### Un altro tutorial con CVE
|
||||
|
||||
{{#ref}}
|
||||
https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2
|
||||
{{#endref}}
|
||||
|
||||
- [https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2](https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2)
|
||||
|
||||
|
||||
### Strumenti per rilevare l'inquinamento del prototipo
|
||||
|
||||
@ -243,7 +243,7 @@ NodeJS utilizza ampiamente gli Abstract Syntax Trees (AST) in JavaScript per fun
|
||||
|
||||
#### Analisi della vulnerabilità di Handlebars
|
||||
|
||||
Il motore di template Handlebars è suscettibile a un attacco di inquinamento del prototipo. Questa vulnerabilità deriva da specifiche funzioni all'interno del file `javascript-compiler.js`. La funzione `appendContent`, ad esempio, concatena `pendingContent` se è presente, mentre la funzione `pushSource` reimposta `pendingContent` su `undefined` dopo aver aggiunto la sorgente.
|
||||
Il motore di template Handlebars è suscettibile a un attacco di inquinamento del prototipo. Questa vulnerabilità deriva da specifiche funzioni all'interno del file `javascript-compiler.js`. La funzione `appendContent`, ad esempio, concatena `pendingContent` se è presente, mentre la funzione `pushSource` reimposta `pendingContent` a `undefined` dopo aver aggiunto la sorgente.
|
||||
|
||||
**Processo di sfruttamento**
|
||||
|
||||
@ -251,7 +251,7 @@ Lo sfruttamento si basa sull'AST (Abstract Syntax Tree) prodotto da Handlebars,
|
||||
|
||||
1. **Manipolazione del Parser**: Inizialmente, il parser, tramite il nodo `NumberLiteral`, impone che i valori siano numerici. L'inquinamento del prototipo può eludere questo, consentendo l'inserimento di stringhe non numeriche.
|
||||
2. **Gestione da parte del Compilatore**: Il compilatore può elaborare un oggetto AST o un template string. Se `input.type` è uguale a `Program`, l'input viene trattato come pre-parsato, il che può essere sfruttato.
|
||||
3. **Iniezione di Codice**: Attraverso la manipolazione di `Object.prototype`, è possibile iniettare codice arbitrario nella funzione template, il che può portare all'esecuzione remota di codice.
|
||||
3. **Iniezione di Codice**: Attraverso la manipolazione di `Object.prototype`, è possibile iniettare codice arbitrario nella funzione template, il che può portare all'esecuzione di codice remoto.
|
||||
|
||||
Un esempio che dimostra lo sfruttamento della vulnerabilità di Handlebars:
|
||||
```javascript
|
||||
|
Loading…
x
Reference in New Issue
Block a user