Posso utilizzare una vulnerabilità XSS per leggere i file sul server iniettando il codice PHP nella pagina? Esempio: usa document.write
per iniettare il codice PHP che legge il file.
No. XSS consente di eseguire Javascript in un browser di un altro utente. Ciò rende possibile fare richiesta per conto dell'utente. Poiché il codice viene eseguito solo nel browser, non è possibile utilizzare il codice PHP.
Se si dispone di XSS e si desidera eseguire il codice sul server, l'approccio migliore sarebbe quello di rubare i cookie di un amministratore connesso utilizzando XSS e utilizzare l'interfaccia di amministrazione per accedere ulteriormente al server. Il furto dei cookie con XSS non funziona se il cookie è contrassegnato come httponly, perché in tal caso non è possibile leggere il cookie con Javascript.
Esiste una variante di XSS, talvolta chiamata "Script cross-site lato server". È molto meno comune di XSS lato client. Infatti, l'ho visto solo una volta su un sito web live.
Si verifica quando il server esegue il rendering di documenti HTML. Ciò può accadere quando il server produce un PDF (ad esempio una fattura stampabile) e l'HTML fa parte della catena. Se l'utente malintenzionato può inserire tag in questo codice HTML, può fare riferimento alle risorse locali sul server. Nell'esempio che ho visto, era possibile includere solo le immagini, ma le varianti potrebbero consentire di includere altri tipi di file.
Alcune persone potrebbero obiettare che non si tratta di XSS. È un esempio di CWE-610: riferimento controllato esternamente a una risorsa in un'altra sfera . Altri esempi potrebbero essere entità esterne XML e riferimenti esterni da documenti Word o SVG. Penso che "Server-side XSS" sia un nome ragionevole per questo, ma sono aperto ad altri suggerimenti.
Stai confondendo script eseguiti sul server e script eseguiti sul client.
Quando si esegue XSS, si inserisce lo script sul client. Di solito è JavaScript, ma potrebbe essere VBScript o qualche altro linguaggio di scripting client.
Non puoi usare document.write
per scrivere PHP. Quella funzione è JavaScript ed è quindi eseguita sul client. Scrive nel documento che sta utilizzando il client (ad esempio il browser). Poiché PHP viene eseguito sul server, questo non funzionerà.
È possibile inserire codice PHP se esiste una vulnerabilità nel codice lato server che consente di eseguire codice. Per esempio. se hai qualcosa di simile
eval($_GET['param']);
potresti usarlo per eseguire codice PHP arbitrario e rubare i file dal server. Tale vulnerabilità è molto più grave di una normale vulnerabilità XSS, ma anche molto meno comune.
Immaginiamo che ci sia un account amministratore in webapp appositamente predisposta e che l'account abbia i diritti per ottenere determinati file dal server (come, se l'amministratore richiede /getfile.php?filename.txt, il file getfile.php restituisce il contenuto di "nomefile .testo"). Quindi è possibile iniettare una richiesta ajax sul lato client dell'amministratore e richiedere i file con quello.
Leggi altre domande sui tag php web-application xss