tags: sql_injection #2˚_ordine


In un’iniezione SQL basata su errori, l’attaccante forza il database a restituire messaggi di errore in risposta ai suoi input. Successivamente, l’attaccante può analizzare i messaggi di errore ottenuti dal database sottostante per raccogliere informazioni che possono essere utilizzate per costruire la query dannosa. L’attaccante utilizza questo tipo di tecnica di iniezione SQL quando non è in grado di sfruttare direttamente altre tecniche di iniezione SQL. L’obiettivo principale di questa tecnica è generare il messaggio di errore dal database, che può essere utilizzato per eseguire un attacco di iniezione SQL riuscito. Tale sfruttamento può differire da un DBMS all’altro.

Considera la seguente query SQL:

SELECT * FROM products WHERE id_product=$id_product 

Considera la richiesta a uno script che esegue la query precedente:

http://www.example.com/product.php?id=10 

La richiesta dannosa sarebbe (ad esempio, Oracle 10g):

http://www.example.com/product.php? id=10||UTL_INADDR.GET_HOST_NAME( (SELECT user FROM DUAL) )—

Nell’esempio sopra menzionato, il tester concatena il valore 10 con il risultato della funzione UTL_INADDR.GET_HOST_NAME. Questa funzione Oracle proverà a restituire il nome host del parametro passatogli, che è un’altra query, ovvero il nome dell’utente. Quando il database cerca un nome host con il nome del database utente, fallirà e restituirà un messaggio di errore come :

ORA-292257: host SCOTT unknown

Il tester può quindi manipolare il parametro passato alla funzione GET_HOST_NAME() e il risultato verrà visualizzato nel messaggio di errore.

SQLMap

Possiamo utilizzare SQLMap per automizzare l’attacco, il comando è il seguente:

sqlmap -u "http://www.moviescope.com" --dbs --technique=E  

• -u: Specifica l’URL target.
• —dbs: Enumera i database disponibili sul server.
• —technique=E: Limita l’attacco alla tecnica error-based.