AVR MySQL MyEhternet

OP #3512748
Lesenswert?

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.
#3512990
Lesenswert?

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
#3513480
Lesenswert?

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
#3515724
Lesenswert?

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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren