XPath Injection.
Le applicazioni web utilizzano sempre più i database per immagazzinare e incorporare all'interno di essi i dati necessari al loro funzionamento.
Da molti anni i database sono la tecnologia preferita per la gestione e incorporamento dei dati, ma ultimamente hanno cominciato a farsi avanti anche soluzioni specifiche organizzate in strutture XML. Se i Database venivano interrogati utilizzando il linguaggio SQL, i database XML utilizzano XPath per effettuare le query.
Così come esistono vulnerabilità e bug nel linguaggio SQL, ve ne sono alcune anche nell’Xpath.
In questo caso , l’XPath injection consente di iniettare sintassi (stringhe) Xpath all’interno della richiesta che l’applicazione web deve interpretare, permettendoci così di eseguire query perfette per, per esempio, oltrepassare meccanismi di autentificazione o accedere ad informazioni riservate.
La struttura di un database XML è composta cosi:
Per capire come funziona ed esercita una query XPath, dobbiamo immaginare un database che contiene dei dati di autenticazione (username, password e livello di accesso):
HTML:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Specifichiamo nel dettaglio cosa rappresentano i tag utilizzati nel codice soprastante:
- <auth>: è l’elemento radice, edobbiamo considerarlo il nome che vogliamo dare al nostro database.
- <user>: definisce la prima separazione degli elementi dello stesso insieme, questo corrisponde al nome della tabella.
- <username>, <password> e <account>: definiscono i vari record logici relativi ad ogni <user>
La nostra prima XPath injection creata:
Al momento della verifica delle credenziali d’accesso, verrà generata una stringa simile a questa:
HTML:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
Qui, l’input che fornisce l'utente è rappresentato dalle stringhe USERNAME e PASSWORD.
Se l’applicazione che elabora il codice XPath non “filtra” entrambe in maniera corretta (cioè, in questo caso, non bisogna rimuovere gli apici), essa sarà esposta ad una vulnerabilità di tipo Xpath injection.
Per prima cosa dobbiamo andare a verificare la fattibilità dell’injection, e possiamo farlo inserendo un singolo apice. In questo modo se il server ritornerà un errore di sintassi, possiamo essere abbastanza sicuri del fatto che l’applicazione è vulnerabile all' Xpath injection.
Vediamo ora come possiamo utilizzarla:
Supponiamo che le stringhe precedentemente utilizzate (USERNAME e PASSWORD) sono valorizzate come segue:
Codice:
Perfavore,
Entra
oppure
Registrati
per vedere i codici!
La condizione presente in questa query ritornerà sempre un risultato positivo (TRUE), garantendo sicuramente l'accesso attraverso il primo account all’interno del database, senza che l’utente ha inserito le giuste credenziali d'accesso.
Ultima modifica: