SQL Injection Issue Query multilinea

2

Al momento sto facendo un attacco SQL Injection contro un sito Web a scuola (che la tecnologia ha creato) purtroppo non posso indirizzare nessuno al sito in questione, l'insegnante ci ha permesso di acquisire le conoscenze necessarie. Ho il permesso di testare questo sito prima che la gente chieda perché voglio conoscere la risposta . Ho trovato quello che penso sia un campo uname iniettabile per creare un nuovo utente sul sito web, tuttavia ogni volta che provo e uso query multilinea la query non riesce ad eseguire. Prima di eseguire una query INSERT sembra che una query SELECT viene eseguita per controllare se l'uname esiste già nel sistema.

Suppongo che il campo del nome utente sia sfruttabile come se creo un nuovo utente con una singola citazione nel loro cognome:

uname: o'connor 

Ottengo il seguente errore SQL dettagliato:

OH DEAR - unable execute SQL query: SELECT * FROM usertable WHERE uname='o'connor'

Tuttavia, se provo a usare un punto e virgola ed eseguo un'istruzione multilinea, non riesce ad eseguire, ad esempio:

uname: admin'; UPDATE  usertable SET password='pass' WHERE uname='admin'; 

Si è verificato un errore:

OH DEAR - unable execute SQL query: SELECT * FROM usertable WHERE uname='admin'; UPDATE usertable SET password='pass' WHERE uname='admin'; '

lo script PHP che elabora i dati POST sembra aggiungere una sola citazione alla fine, ma la mia comprensione era che la mia query iniettata sarebbe stata eseguita prima di raggiungere questa citazione singola. Sto eseguendo correttamente le interrogazioni multilinea?

** AGGIORNAMENTO Ho anche provato:

uname: admin'; UPDATE  usertable SET password='pass' WHERE uname='admin'; -- 

inutilmente lo stesso problema che non è in grado di eseguire e so che tutti questi nomi di colonne e nomi di tabelle sono corretti. Esiste comunque la possibilità di inviare la query originale a un file di testo o qualcosa di simile o quando i risultati vengono restituiti modificare il valore di qualcosa che viene visualizzato nella pagina nelle password?

    
posta Tubby Tommy 10.02.2015 - 16:45
fonte

2 risposte

3

Non sono un programmatore PHP, ma credo che molte persone usino mysql_query() quando eseguono query MySQL in PHP e questo consentirà solo di eseguire una dichiarazione SQL alla volta. È possibile eseguire più istruzioni in PHP, ma è necessario adottare specifici passaggi .

È possibile che chiunque abbia scritto questo codice utilizzi mysql_query , il che significherebbe che non sarai in grado di inserire istruzioni SQL aggiuntive.

L'iniezione SQL è ancora possibile ma su un livello molto più limitato. Ad esempio, è possibile inserire sql nella clausola where passando il seguente valore:

test' OR '1'='1

Quale genererebbe la query:

SELECT * FROM usertable WHERE uname='test' OR '1'='1'

Potresti anche aggiungere una clausola UNION che interroga un'altra tabella e restituisce risultati:

test' UNION SELECT * from creditCardTable where uname = 'admin

Quale genererebbe la query:

SELECT * FROM usertable WHERE uname='test' 
UNION 
SELECT * from creditCardTable where uname = 'admin'

Spero che questo aiuti.

    
risposta data 10.02.2015 - 17:43
fonte
0

Non è assolutamente garantito che ogni applicazione esegua query impilate. In effetti, la vecchia estensione ext/mysql (che è ancora comunemente usata in PHP) non li ha mai supportati.

Quindi un attacco "ingenuo" in cui aggiungi solo le tue query potrebbe non funzionare qui. Probabilmente dovrai lavorare con la query originale stessa. Tuttavia, ci sono ancora molte tecniche di attacco come la manipolazione della clausola WHERE per recuperare un utente diverso, selezionando dati arbitrari attraverso una clausola UNION , possibilmente creando uno script dannoso con una clausola INTO OUTFILE .

    
risposta data 10.02.2015 - 17:47
fonte

Leggi altre domande sui tag