Recuperare la password di root di MySQL

Se non vi ricordate più la password di root di MySQL, potete provare questo metodo che descriverò qui di seguito.

N.B.1: Questa procedura potrebbe non andare a buon fine (nel senso che potrebbe impiegarci davvero tanto tempo) se la password che avete scelto in origine è molto lunga e/o complessa (= avete usato lettere maiuscole e minuscole, numeri e caratteri speciali). Questo perché il programma che verrà utilizzato sfrutta tecniche di brute-force.

N.B.2: In rete è pieno di guide che vi dicono come reimpostare la password di root di MySQL, questa, invece, vi dice come scoprire qual era la vecchia password.

Si presuppone che abbiate la possibilità di accedere in remoto nella macchina su cui dovete recuperare la password di MySQL e che abbiate un secondo pc con Linux su cui effettuate questa operazione. Nel mio caso ho utilizzato una distribuzione Linux Ubuntu.

Portiamoci sulla macchina di test e installiamo il pacchetto mysql-server tramite il gestore pacchetti Synaptic (potete usare anche apt-get install); assegnamo una password all’utente root non appena viene chiesto.

Sappiamo che mysql memorizza il contenuto dei database nella cartella /var/lib/mysql e che ogni database è contenuto a sua volta in una cartella.
Ad esempio, sicuramente, avrete la cartella /var/lib/mysql/mysql poiché il database “mysql” viene creato di default. Dentro questa cartella troverete numerosi file *.frm, *.MYD, e *.MYI. Nota:

  • i file .frm definiscono la struttura della tabella
  • i file .MYD contengono i dati
  • i file .MYI servono per il rapido utilizzo dei dati

Ora dobbiamo copiare la cartella /var/lib/mysql/mysql del server remoto in locale. Per fare ciò usiamo scp (supponiamo che la porta di SSH sia la 22):

# cd
# scp -r -P 22 root@IPpcRemoto:/var/lib/mysql/mysql/ ./

Ora creiamo la cartella “mysql2”:

# mkdir /var/lib/mysql/mysql2

E poi copiamo lì dentro i file appena presi da remoto:

# cp /root/mysql/* /var/lib/mysql/mysql2/

Diamo i permessi giusti ai file:

# chown -R mysql:mysql /var/lib/mysql/mysql2

E riavviamo il servizio mysql:

# /etc/init.d/mysql restart

Ora accediamo a mysql:

# mysql -u root -p

inseriamo la password quando richiesto.

Ora dovremmo vedere il nostro database “mysql2” nell’elenco:

show databases;

Lo “prendiamo” con:

use mysql2;

mostriamo le tabelle con:

show tables;

selezioniamo i campi user e password con:

select user, password from user;

Ora verrà visualizzata una tabella contenente le password cifrate per ogni utente, simile alla seguente:

+------------------+------------------+
| user             | password         |
+------------------+------------------+
| root             | 1f12ff3e9887278e |
| debian-sys-maint | 0b553b5596ae84cf |
+------------------+------------------+

Aprite un’altra shell e create un file in cui mettete in ogni riga “user:password” copiandoli dalla tabella che avete appena letto. Ad esempio:

# vim mypassword

al cui interno, ricopiando da sopra, scrivete:

root:1f12ff3e9887278e

Salvate e chiudete il file.

Disconnettetevi da mysql con:

quit

Installazione di John the Ripper

Passiamo ora all’installazione del programma John The Ripper.

Poiché la sua installazione tramite il gestore di pacchetti Synaptic di Ubuntu non installa il modulo per MySQL, abbiamo deciso di scaricare i sorgenti e la patch e compilarli.

Usiamo tranquillamente un utente non-root e ci posizioniamo ad esempio nella sua home directory con:

$ cd

Scarichiamo i sorgenti di John the Ripper con:

$ wget http://www.openwall.com/john/f/john-1.7.0.2.tar.gz

e la patch:

$ wget http://www.openwall.com/john/contrib/john-1.7.2-mysql-1.diff.gz

Estraiamo i file sorgenti con:

$ tar -xzvf john-1.7.0.2.tar.gz

Estraiamo la patch con:

$ gzip -d john-1.7.2-mysql-1.diff.gz

Spostiamo la patch nella cartella di john the ripper appena creata:

$ mv john-1.7.2-mysql-1.diff john-1.7.0.2/

Se non ce li abbiamo già installati, installiamo il pacchetto “patch” e “build-essential” con:

$ sudo apt-get install patch build-essential

Ci spostiamo nella directory di john the ripper e applichiamo la patch con:

$ cd john-1.7.0.2/
$ cat john-1.7.2-mysql-1.diff | patch -p1

Ci spostiamo ora nella directory src e lanciamo il make:

$ cd src/
$ make

A questo punto viene dato un elenco di piattaforme. Scegliere quella appropriata per la propria macchina e diamo ad esempio il comando:

$ make clean linux-x86-mmx

ci spostiamo nella cartella run con:

$ cd ../run

Lanciamo ora john the ripper sul file “mypassword” che avevamo creato in precedenza:

$ sudo ./john --show /root/mypassword

Se tutto è andato come previsto, dopo qualche secondo/minuto/ora/giorno :-) (tutto dipende da quanto era robusta la password), di seguito comparirà la password di root scritta tra parentesi. Nel mio caso, fortunatamente, in meno di un minuto sono saltate fuori le password che mi servivano.

Troverete la password nel file “jack.pot” contenuto nella cartella “run” di john the ripper.

Come ultima verifica non ci resta che tornare nel pc remoto e provare ad accedere a mysql:

# mysql -u root -p

Mettiamo la password che il buon john ci ha dato. :-)

N.B.3: Potrebbe succedere che nella tabella le password siano come le seguenti:

+------------------+-------------------------------------------+
| user             | password                                  |
+------------------+-------------------------------------------+
| root             | *7E8154FA4C86DEE52EF28BED69012F4DA4F6B401 |
| debian-sys-maint | *BD55EE3E53CF587EFE8710ADC1F5EE5880A12BD3 |
+------------------+-------------------------------------------+

In questo caso bisognerebbe trovare un altro breaker di password. Se ho novità, non esito a postarle.