Livello easy: http://danielebellavista.blogspot.com/2011/01/dvwa-sql-injection-easy.html
Anche nel livello Medium è possibile scegliere fra Blind (senza print dell'errore mysql) e non Blind.
Il livello medium è un classico esempio di misure di sicurezza giuste applicate in contesti sbagliati.
Vediamo l'applicazione con non-blind (a scopo didattico, così si possono apprendere certe vulnerabilità che emergono da certi contesti).
Se proviamo inserendo il classico carattere ', otteniamo un errore:
[...] the right syntax to use near '\'' at line 1
Notiamo che è comparsa una slash che genera il carattere di escape \'. In questo modo l'attacco del livello easy (1' OR '1' = '1) perde di efficacia, poichè una volta aggiunte le slash si ottiene 1\' OR \'1\' = \'1. Allora perché otteniamo comunque l'errore?
Provando con dei caratteri alfabetici si ottiene il seguente errore:
Unknown column 'a' in 'where clause'perchè?
Perchè ID è un numero e in SQL, un campo numerico può essere comparato ad un valore senza l'ausilio degli apici. Ragionando su questa strada, l'errore è dovuto proprio a questo! Infatti la query risultate inserendo 1' OR '1' = '1 sarà:
SELECT * FROM tabella WHERE ID = 1\' OR \'1\' = \'1;
Che chiaramente produce un errore. Quindi il valore da inserire è 1 OR 1 , ottenendo:
SELECT * FROM tabella WHERE ID = 1 OR 1;