• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Release Remote SQL CMD Exuecution

Neurologico

Utente Attivo
Autore del topic
29 Luglio 2010
271
0
Miglior risposta
0
Oramai nel web 2.0, vulnerabilità web come le SQL Injection sono molto diffuse e anche i non professionisti possono utilizzarle per attacare un portale.


La SQL Injection colpisce le applicazioni web che si appogiano ad un database del tipo SQL (come MySQL), ed è causata da un mancato controllo sui dati che vengono ricevuti in input, lasciando modo all'attaccante di inserire del codice malevolo (in questo tipologia di attacco si tratta appunto di codice SQL).

Infatti con questa tecnica, è possibile ad esempio autenticarsi come Admin in un form di login, oppure dumpare (copiare e salvare nel proprio pc) interi databases al fine di avere sotto mano tutti gli ID e le Password degli utenti di un sito.
Con gli anni questa tecnica si è sempre più diffusa e migliorata.
Non mi dilungo in spiegazioni basilari sulle SQL Injection perché in questo articolo parleremo di un’evoluzione molto delicata e invasiva di questa tecnica hacker: la Remote Command Execution (più precisamente, la Remote SQL Command Execution).

Se non foste ancora a conoscenza di come funziona una semplice SQL Injection, vi riporto alla guida base scritta dal mio amico e collega Gold3n, sulle SQL Injections che potete trovare nella sezione Hacking di Higeneration.it

Per seguire l’articolo che segue, vi serviranno delle basi del linguaggio SQL, sapere come funziona un database che usa questo tipo di linguaggio, e conoscere le SQL Injection.
Abbiamo tutti i requisiti? Cominciamo!.

Per prima cosa supponiamo di avere la nostra pagina PHP vulnerabile ad una semplice SQL Injection o ad una complessa Blind SQL Injection.

Chiamiamo la pagina article.php e scriviamo al suo interno queste poche righe:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Vediamo un po' questo codice:
-Avviene la connessione al database con il comando "mysql_connect".
-Viene selezionato il database "articoli" tramite "mysql_select_db".
-Viene eseguita la query all'interno delle parentesi tonde con"mysql_query" e viene messa dentro la variabile $query.
-Vengono presi i risultati della query e messi nella variabile $row tramite "mysql_fetch_row".

Questo è uno script vulnerabile, in quanto non avviene nessun controllo sui dati che entrano in input.

Potremmo provare una SQL Injection, o una Blind SQL Injection.
Ma perchè accontentarci del database, quando potremmo avere l’intero server?

Ebbene sì, prendere il controllo completo del server sfruttando la vulnerabilità SQL è possibile grazie alla Remote SQL Command Execution.

Infatti con questa tecnica è possibile eseguire l’upload di una shell sul server remoto, raggiungibile da browser, in modo da eseguire dei comandi con massimi permessi da remoto.

Vediamo quindi come un hacker può fare ciò.

Per prima cosa, ci serve sapere la rootpath:

La rootpath è la path dove è conservata la nostra pagina article.php .
Ci serve quest’informazione, in modo da sapere dove uppare (caricare) la shell.

E qui che ci viene in aiuto un'altra tecnica, chiamata "Full Path Disclosure".

Grazie a questa tecnica si è in grado di risalire alla rootpath dei webserver, in vari modi:

[1] metodo

Se, come nel nostro caso, abbiamo una variabile $_GET nell'URL, la trasformiamo in un array, mettendoci due parantesi quadre ('[]') prima del segno uguale ('='), in questo modo:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Questa genererà un errore o un warning, come questo

Warning: opendir(Array): failed to open dir: No such file or directory in /htdocs/var/www/cartella/article.php on line 27

fornendoci il full path dove si trova la pagina article.php (in questo caso la full path è "/htdocs/var/www/cartella/article.php").

[2] metodo

Se il sito utilizza le sessioni, con un PHPSESSID, possiamo annullare la sessione con un codice Javascript, in questo modo:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

questo genererà un warning di questo tipo:

Warning: session_start() [function.session-start]: The session id contains illegal characters,
valid characters are a-z, A-Z, 0-9 and '-,' in /htdocs/var/www/cartella/article.php on line 52.

[3] metodo

Se la variabile che esegue la query, è una variabile $_GET, possiamo forzarla ad eseguire un errore, che molto spesso contiene la rootpath, in questo modo:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

quindi mettendo dopo la variabile id, un'apice (').

Questo genera un errore del tipo:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'' at line xxx
PHP Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /htdocs/var/www/cartella/article.php on line 124


Bene, mettiamo il caso che la rootpath sia "/htdocs/var/www/cartella/article.php".
Esiste in SQL, un comando chiamato "INTO OUTFILE", che salva il risultato di una query su un file nel server remoto.
Ad esempio, la query

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

salva tutto quello che che è contenuto nella tabella articoli, in un file che si chiamerà pagina.txt
E se il file non fosse un file in formato txt, ma in formato PHP? E se questo file contenesse delle righe di codice PHP?
Se noi al posto del * (valore jolly del SQL che seleaziona ogni informaioni), mettessimo dei caratteri o dei numeri, verrebbero stampati sul file.

Quindi ad esempio se mettiamo

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

la query stamperà sul file .txt la scritta "3 pagina".

Vediamo nella prossima pagina come creare quindi l'attacco che ci permetterà di avere il completo controllo sul server vittima.

Fonte: Mia.
 
Riferimento: Remote SQL CMD Exuecution

Un'ottima guida, ma un bravo webmaster si aggiorna sempre sulle varie vulnerabilità del web, e le "aggiunge" alle eccezioni delle sue pagine affinchè nessuno gli rompa le scatole, ma comunque è un buon articolo per tenersi sempre aggiornati.

al fine di avere sotto mano tutti gli ID e le Password degli utenti di un sito.

La maggior parte delle volte le password sono crittografate in SHA1 o MD5.