Come sfruttare questa vulnerabilità di SQL injection?

2

Sto imparando l'iniezione SQL su un'app web vulnerabile. L'ho scansionato con w3af. Ha mostrato molte vulnerabilità. Uno di questi è:

SQL injection in a Microsoft SQL database was found at: "http://www.example.com/Login.aspx?CurrentPage=Login", using HTTP method POST. The sent post-data was: "...ctl00$cphMain$txtUserName=d'z"0...".

Come posso sfruttare questo? Qual è l'URL che verrà effettivamente sfruttato e mi darà accesso? Qualcuno può aiutarmi in questo?

    
posta narayan 25.12.2011 - 21:45
fonte

3 risposte

5

Normalmente, quando si sfruttano gli accessi, si vuole iniettare qualcosa che impedisce al campo della password di convalidare. In genere, ciò può essere risolto inserendo la sintassi simile alla seguente come password:

myphonypassword' OR 1=1;--

Questo supporterà che tu sia l'utente amministratore, termina la stringa nella query effettiva e fai in modo che la query non si preoccupi se hai scritto una password legale o meno, poiché OR 1 = 1 rende la query sempre vera.

Ci sono molte varianti di differnet che probabilmente dovresti provare per far funzionare questo exploit (specialmente se si tratta di un exploit SQL cieco). Puoi vedere molti altri esempi in questo SQL Injection cheat sheet appositamente per il bypass di login.

Nel tuo esempio specifico probabilmente devi modificare il campo chiamato txtPassWord, tuttavia non è chiaro dai piccoli dettagli che hai fornito.

Modifica: poiché questo è un parametro solo per post non puoi attaccare solo tramite URL. Puoi intercettare la richiesta con un proxy e modificare i parametri del post in questo modo o creare una nuova richiesta con Curl come nelle altre risposte suggerite

    
risposta data 25.12.2011 - 22:19
fonte
3

Devi creare un post per l'URL http://www.example.com/Login.aspx?CurrentPage=Login . L'exploit è nei dati inviati nel corpo del POST, qualcosa come ...ctl00$cphMain$txtUserName=d'z"0... - e ' fa sembrare che txtUserName è il campo che vuoi attaccare. Il metodo standard per separare i campi è con un carattere & , ma il frammento che hai pubblicato fa sembrare che $ sia usato come separatore.

Se usi curl dalla riga di comando, potresti eseguire un comando come (nota la \ escape del% co_de incorporato per evitare che la shell lo mangi):

curl -d 'ctl00$cphMain$txtUserName=d\'z"0' http://www.example.com/Login.aspx?CurrentPage=Login

Dovrai regolare il valore per txtUserName per adattarlo alla particolare applicazione che stai attaccando.

    
risposta data 26.12.2011 - 13:20
fonte
2

Generalmente con una pagina di accesso la prima cosa che vuoi fare è tracciare l'intestazione per trovare i campi del modulo di login, cioè le variabili del modulo di post. Quindi si desidera vedere se è possibile inviare dati al server utilizzando GET anziché POST. Quindi, per esempio, se un modulo come 4 variabili, $ username, $ password e $ x, allora imposta la richiesta a:

/Login.aspx?CurrentPage=Login&username=name&password=pass&x=1

per vedere se si ottiene la risposta utente / password errata dal server. Se è così allora è molto più facile trovare un vettore di iniezione usando GET piuttosto che usare il metodo POST.

Se è consentito, puoi iniziare a provare ad attivare risposte al database come

/Login.aspx?CurrentPage=Login&username=name'[enter your SQL statement here]&password=pass&x=1

Se il metodo POST è l'unico metodo consentito, non sarà possibile utilizzare l''URL' per inviare i dati, ma piuttosto seguendo da ciò che bstpierre ha dichiarato, sarà necessario creare un submitter utilizzando uno dei seguenti i componenti aggiuntivi del browser come Live HTTP Headers per Firefox o ricostruire il modulo sul proprio server per inviarlo al sito che si sta testando.

    
risposta data 30.01.2012 - 00:00
fonte