SQL Injection Modify / Insert Table Values

5

È possibile aggiornare un campo in un database MySQL o inserire una nuova riga usando SQL injection in questo caso:

  1. L'unica protezione nel codice PHP è mysql_real_escape_string ().
  2. La query è composta da virgolette doppie: "select id from db where id = $id" non virgolette singole stringa.
  3. Il database è mysql (usando la chiamata php mysql_query) quindi non penso che le query impilate siano possibili (correggimi se sbaglio).
  4. Uso di mysql non mysqli.

Ho provato a usare qualcosa come 1; update users set first_name = foo senza fortuna e ho provato a passare in virgole ' in formato esadecimale e ottale senza fortuna: chr(0x27) char(0x27) chr(047) altre tabelle .

È possibile aggiornare o inserire effettivamente in queste condizioni?

    
posta Crizly 11.11.2014 - 18:19
fonte

2 risposte

2

Lo stacking delle query, ovvero select * from tbl; update ... -- è vietato dalla maggior parte dei sistemi di gestione dei database. Per abilitare l'impilamento delle query in PHP / MySQL, l'applicazione deve utilizzare la funzione mysql_mutli_query() per eseguire la query. Questa funzione è rara in natura.

In SQL injection senza stacking di query, l'attacker è limitato da operatori di query accessibili e funzioni SQL. Lo strumento SQLMap consente a un utente malintenzionato di accedere alle funzionalità esposte tramite l'iniezione SQL con una shell facile da usare. La vulnerabilità di esempio sql injection ha fornito forse injection sql cieco , che può essere sfruttato con SQLMap.

In MySQL, un utente malintenzionato può aggiungere una selezione unione per accedere ad altre tabelle:

select id from db where id = 1 union select password from users

o una sottoselezione:

select id from db where id = (select password from users)

Inoltre, un utente malintenzionato può leggere il file utilizzando la funzione load_file() :

select from db where id = load_file('/etc/passwd')

Solo le istruzioni select possono utilizzare l'operatore di query into outfile :

select from db where id = 1 union select password from users into outfile '/var/www/backup.txt'

L'operatore into outfile richiede l'uso di virgolette singole e non può essere utilizzato in un exploit di SQL injection quando viene utilizzato mysql_real_escape_string() .

Il documento Hackproofing MySQL è ancora pertinente e copre questi attacchi e altro ancora.

    
risposta data 11.11.2014 - 19:22
fonte
2

Potrebbe essere possibile utilizzare selezionare %codice% Tuttavia, poiché l'attaccante non controlla direttamente il valore id, l'attacker avrebbe bisogno di un altro metodo per controllare questi dati affinché l'attacco possa avere un impatto significativo.

    
risposta data 12.11.2014 - 05:34
fonte

Leggi altre domande sui tag