moin moin, ich betreibe einige MyEthernet's als Datensammler. Firmware ist OpenMCP. Diese senden die Daten an einen MySQL-Server. Login ohne Password geht. Ich möchte aber einen Password "Schutz" haben. Aus Platzmangel geht nur die Old_Password Version. Ich verwende KEIN PHP. Der Connectstring ohne Password ist: SQLLen,0,0,1,0x85,0xa6,11,0,0,0,0,0x40,8,23*0x00,user,0,mysql_native_pas sword,0. Der Connectstring mit Password ist: SQLLen,0,0,1,0x85,0xa6,11,0,0,0,0,0x40,8,23*0x00,08,1,2,3,4,5,6,7,8,user ,0,mysql_native_password,0. Das geht noch nicht. Leider kann ich das nicht auf dem Netzwerk debugen. Muss im MySQL(Version 5) Config noch irgendwas eingestellt werden? Danke.
Horst S. schrieb: > ich betreibe einige MyEthernet's als Datensammler. Firmware ist OpenMCP. > Diese senden die Daten an einen MySQL-Server. > Login ohne Password geht. > Ich möchte aber einen Password "Schutz" haben. > Aus Platzmangel geht nur die Old_Password Version. So wahnsinning viel Schutz ist das nicht. Schließlich wurde das Verfahren ja wegen seiner Unsicherheit ausgemustert. > Der Connectstring mit Password ist: > SQLLen,0,0,1,0x85,0xa6,11,0,0,0,0,0x40,8,23*0x00,08,1,2,3,4,5,6,7,8,user ,0,mysql_native_password,0. Nein. Das Login Paket ist nicht statisch. Der Server sendet mit dem Hello Paket eine Challenge (Zufallszahlen). Die muß der Client mit dem Paßwort verhashen und das Ergebnis zurückschicken. > Das geht noch nicht. > Leider kann ich das nicht auf dem Netzwerk debugen. Wireshark kann diesen Teil des MySQL-Protokolls ganz gut. > Muss im MySQL(Version 5) Config noch irgendwas eingestellt werden? Welche 5er? Ab 5.1 kann MySQL das alte Paßwort-Hashing nicht mehr. Bis 5.0 reichte es, das Paßwort in mysql.user mit der alten Hashing-Methode einzutragen. Wenn man User mit CREATE USER anlegt, entscheidet eine Servervariable (old_passwords ?) darüber, ob der neue oder alte Hash gebildet wird. Bedauerlicherweise enthält das MySQL Internals Manual: http://dev.mysql.com/doc/internals/en/authentication-method.html keine Details mehr zum alten Auth-Verfahren. Aber wenn du einen hinreichend alten MySQL-Quellcode hast, findest du alles in .../sql/password.c XL
Danke für die Info Axel. Ich wusste nicht das der Random-Code auf bei der old_password Funktion schon mit drinn ist. Das bekomme ich aus Platzmangel nicht mehr in den 644p rein. Schade.
Horst S. schrieb: > Oder vielleicht doch...... > Wie frage ich den Random-code beim Server ab? Den kriegst du frei Haus. Wenn der Client die TCP-Verbindung öffnet, sendet der Server das Hello Paket, das u.a. die Serverversion, eine Bitmap mit den Fähigkeiten des Servers und eben die Challenge (64 Bit) für das Auth Protokoll enthält. Den Link zum Internals Manual habe ich dir schon gegeben. Da ist das Protokoll Bit für Bit erklärt. XL
Nochmals danke. Leider Habe ich in der Doku auf anhieb keinen genauen aufbau des Paketes gefunden. Hast du den Parat? Ich habe noch c.a. 380 Bytes Platz im Flash des AVR's. Das wird arg eng werden.
Ach Horst, machst du auch mal was selber? Aber was solls, hat mich selber ja auch interessiert. Also habe ich ein 4.0.30 aufgesetzt, einen Testuser angelegt und das login mit Wireshark mitgeschnitten. Und dann testhalber probiert, ob ich mit der mitgesnifften Challenge und dem bekannten Paßwort selber auch auf das (mitgesniffte) gehashte Paßwort komme. Ja, funktioniert. Hier das Protokoll:
1 | 1. user anlegen |
2 | |
3 | /usr/local/mysql/mysql-4.0 $bin/mysql -u root |
4 | Welcome to the MySQL monitor. Commands end with ; or \g. |
5 | Your MySQL connection id is 1 to server version: 4.0.30 |
6 | |
7 | Type 'help;' or '\h' for help. Type '\c' to clear the buffer. |
8 | |
9 | root@localhost/(none)>delete from mysql.user where user=""; |
10 | Query OK, 2 rows affected (0.00 sec) |
11 | |
12 | root@localhost/(none)>flush privileges; |
13 | Query OK, 0 rows affected (0.00 sec) |
14 | |
15 | root@localhost/(none)>grant all on test.* to testuser@"%" identified by "vollgeheim"; |
16 | Query OK, 0 rows affected (0.00 sec) |
17 | |
18 | root@localhost/(none)>select user, password from mysql.user where user="testuser"; |
19 | +----------+------------------+ |
20 | | user | password | |
21 | +----------+------------------+ |
22 | | testuser | 6caf9d1a7e77fe1e | |
23 | +----------+------------------+ |
24 | 1 row in set (0.00 sec) |
25 | |
26 | root@localhost/(none)>Bye |
27 | |
28 | ------------------------------------------------------ |
29 | 2. login als neuer user (mit Wireshark mitgeschnitten) |
30 | |
31 | /usr/local/mysql/mysql-4.0 $bin/mysql -h 127.0.0.1 -u testuser -pvollgeheim |
32 | Welcome to the MySQL monitor. Commands end with ; or \g. |
33 | Your MySQL connection id is 5 to server version: 4.0.30 |
34 | |
35 | Type 'help;' or '\h' for help. Type '\c' to clear the buffer. |
36 | |
37 | testuser@127.0.0.1/(none)>Bye |
38 | |
39 | -------------------------------------------------- |
40 | 3. test mit challenge (von Wireshark) und passwort |
41 | |
42 | $make |
43 | cc -DSTANDALONE -c -o main.o main.c |
44 | cc -DSTANDALONE -c -o password.o password.c |
45 | cc -o old_auth main.o password.o -lm |
46 | |
47 | $./old_auth "GYl1Nv)e" vollgeheim |
48 | challenge: >GYl1Nv)e< |
49 | password: >vollgeheim< |
50 | message: >@Q\FE_@O< |
angehängt: - main.c - wie man den Paßwort-Hash erzeugt (alle benötigten Funktionen sind in password.c) - old_auth.zip - kompletter Code: leicht modifizierte password.c von MySQL, main.c, Makefile - capture.zip - das capture File, hello und login paket wie von tshark bzw. Wireshark (Screeshot) zerlegt XL
Danke Danke Danke !!! Die Routinen füs Hashen habe ich selbst gemacht. Und meinen Datenlogger auch. Dieverse Anpassungen im OpenMCP. Ebenso das Login ohne Password auf dem AVR u.s.w :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.