Accesso al codice sorgente HTML grezzo dopo l'elaborazione lato client angolare

1

Ho bisogno di aiuto per verificare se i parametri sono sensibili alle iniezioni XSS in una pagina web generata da angularjs .

Oggi molti siti web usano angularjs per deportare la costruzione della pagina del client sul lato client (quindi questo lavoro non deve più essere eseguito sul lato server).

Quindi, quando eseguo una richiesta HTTP, il server risponde con un codice sorgente che è un modello angolare per costruire la pagina. Quindi, questa risposta del server non corrisponde alla pagina web finale che posso vedere dopo l'elaborazione angolare.

utilizzando CTRL + U (mostra il codice sorgente), questo è lo stesso problema, vedrò solo la risposta del server (prima dell'elaborazione angolare).

Usando firebug o la console per sviluppatori web, posso vedere solo una sorta di "rendering" del codice sorgente grezzo.
Ad esempio, se provi a iniettare <script> in un parametro, dopo l'elaborazione di angularjs, forse <script> verrà disinfettato in &lt;script&gt; .
Ma, nella console degli sviluppatori web (o in firebug). Vedrò <script> anche se < e > sono sterilizzati (perché &lt; e &gt; sono interpretati e stampati umanamente da me).

Quindi, è molto difficile controllare se il mio modello di iniezione è sfuggito o no (ok non vedo un popup, quindi credo che qualcosa sia sfuggito). Sto cercando un modo per ottenere facilmente il codice sorgente raw della pagina dopo che angularjs ha costruito la pagina finale.

Ho sentito parlare di phantomjs, ma non sono sicuro che questo copra esattamente le mie esigenze e forse c'è un modo più facile o più veloce

Modifica
So che quell'angolare ha le sue regole di fuga. Ma sono riuscito a inserire il codice javascript all'interno di un parametro ed eseguirlo da qualche altra parte (dove viene visualizzato su un'altra pagina web). Quindi so che alcune parti del sito Web non sono protette.

Su una pagina web specifica, il parametro viene visualizzato ma il javascript non viene eseguito, quindi suppongo che alcuni caratteri speciali siano sfuggiti. E voglio sapere quali.

Firefox e Chrome Inspector mi danno la stessa vista:

<span ...>aaaaaa<script>alert(1);</script>aaaaaa</span>

Infine, ho trovato che se faccio un clic destro e "copia html" (chrome) o "modifica" firefox. Riesco a vedere il codice sorgente non elaborato che mi mostra cosa è effettivamente sfuggito:

<span ...>aaaaaa&lt;script&gt;alert(1);&lt;/script&gt;aaaaaa</span>

Per la piccola storia, ho trovato questo volendo copiare l'estratto del codice in un commento su security.stackexchange.com ^^

    
posta Sibwara 05.07.2016 - 16:18
fonte

2 risposte

1

Puoi utilizzare Chrome's Inspector per visualizzare l'albero DOM come HTML. Lì si vede il risultato del rendering dell'elaborazione AngularJS.

Tuttavia, purché si utilizzi AngularJS correttamente, si occupa di tutto l'escape e non consente alcuna vulnerabilità XSS (altrimenti si tratta di vulnerabilità in AngularJS stesso). Devi usare $sce e ng-bind-html per fare in modo che AngularJS inserisca l'HTML casuale non salvato nel documento.

    
risposta data 05.07.2016 - 16:58
fonte
0

Come hai detto, caratteri come < e > hanno interpretato un umanamente stampato, puoi sapere se fai doppio clic su innerHTML di qualsiasi elemento sugli strumenti di sviluppo del browser, a volte sono racchiusi tra virgolette doppie , il che significa che è interpretato come testo.

Se provi a iniettare un alert(1); e non viene eseguito, potrebbe significare che la stringa sia stata analizzata correttamente o che il browser abbia bloccato l'XSS (i browser Moderni non eseguiranno il codice JS che si trova anche nell'URL) .

Un'altra cosa che puoi fare se non riesci a vedere la pagina web in cui i dati vengono stampati, è richiedere un'immagine (solo per fare un esempio) da un server web a cui hai accesso, dove l'URL dell'immagine sarebbe server- lato generato e ad un certo punto della generazione dell'immagine, si memorizza da qualche parte una conferma che il codice è stato eseguito, può sembrare poco chiaro, quindi faccio un esempio:

https://example.com/hackyImage.jpg?someParam=hacked

Che inseriresti nell'SRC di un'immagine iniettata in qualche input

<img src="https://yourserver.com/hackyImage.jpg?someParam=hacked"><inputname="user" value="[INSERT PICTURE CODE HERE]">
    
risposta data 04.08.2016 - 19:11
fonte

Leggi altre domande sui tag