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.
Ciao !
Complimenti per la guida !
Ho provato a scaricare john pero’ versione win32 ho creato un file “mypassword” e ho dato il comando
john –show c:\mypassword
Pero mi dice subito zero hash cracked. Il contenuto del file è questo
“root:104350b474b5e6d1”
Ma non c’è bisogno di dirli un algoritmo di decodifica ?
Ciaoo e grazie ;)
Mi descriveresti meglio la situazione? Ad es: su che sistemi operativi stai lavorando,…?
Così, ad intuito, mi verrebbe da pensare che la versione per Windows non abbia la patch per mysql. Quindi ti consiglio di:
– cercare la patch MySQL per Windows
– passare a Linux (seguendo la guida) e provare lì
Fammi sapere. Ciao ciao
Ciao, scusa se ti scrivo qui ma non riuscivo a capire come inserire un nuovo post.
Avrei una domanda da esporti, dopo aver letto la procedura di recupero password che hai illustrato. E’ possibile recuperare o craccare pure una password di accesso ad un sito?
Ovviamente non ho secondi fini, è solo una curiosità…
Grazie mille e comunque veramente ottime le tue guide.
L’aggiunta dei post sul blog non è permessa a tutti gli utenti. Hai fatto bene a lasciare un commento.
Per quanto riguarda la domanda che mi hai fatto, posso dirti che sei stato un po’ troppo vago. :)
Cosa intendi per “password di accesso a un sito”? Ci sono tanti modi di effettuare un accesso (tramite pannello di controllo, ssh, ftp,…).
In ogni caso, tutte le password sono memorizzate con diversi algoritmi da qualche parte in una macchina e quindi sono potenzialmente recuperabili.
Se mi dai più dettagli, provo a risponderti meglio.
Ciao ciao
Mettiamo che io abbia un account, per cui user id e password che mi permettono l’accesso alla mia area privata all’interni di un qualsiasi sito che fornisca dei servizi per gli iscritti. Dimentico la password, perche sono trascorsi mesi dall’ultimo accesso e inoltre formato il pc, è ancora possibile risalire alla password? sicuramente stiamo parlando di questioni illegali, perchè inerenti l’hacking di password di un sito, ma la mia era solo una curiosità. Non ho secondi fini. Spero che così sia abbastanza esaustivo, grazie ancora.
Prima una battuta: in questo caso ti direi che la via più breve per recuperare la password è chiederla a chi ti ha fornito il servizio :)
Poi una risposta un po’ più seria: lasciando stare le questioni legali e rimanendo sul generale, ti posso dire che in teoria è tutto possibile. Se ti riferisci ad attacchi “dictionary” o “brute-force” via rete, posso però dirti che sono facilmente individuabili ed estremamente lenti (a meno che non avevi scelto una password tipo “casa” o “ciao” :)
Spero di essere stato abbastanza chiaro.
Se hai altre domande, fai pure.
Scusa ma il tuo sistema non funziona già in partenza! scp -r -P 22 root@IPpcRemoto:/var/lib/mysql/mysql/ ./ come comando dato da shell mi restituisce l’immissione di una psw, ma se la sto cercando come faccio a inserirla!
:) Aspetta aspetta, piano con i “!” :)
1. La password che ti chiede è quella di root, non quella di MySQL. Noi stiamo cercando quella di MySQL.
2. Come ho scritto in “N.B.2”, questa procedura “vi dice come scoprire qual era la vecchia password”, non come reimpostarla.
3. Come ho scritto sotto il “N.B.2”, “Si presuppone che abbiate la possibilità di accedere in remoto nella macchina su cui dovete recuperare la password di MySQL” (quindi si presuppone che avete la password di root).
Se non è chiaro rispiego.
Ciao ciao.