URL: https://www.overclockers.at/coding-stuff/normale_salted_md5_hashes_fuer_auth_ins_htpasswd_f_194239/page_1 - zur Vollversion wechseln!
Grüße!
Bevor ich zum eigentlichen Problem komme zuerst die Ausgangslage in Sachen Software:
Code:static void to64(char *s, unsigned long v, int n) { static unsigned char itoa64[] = /* 0 ... 63 => ASCII - 64 */ "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; while (--n >= 0) { *s++ = itoa64[v&0x3f]; v >>= 6; } }
ZitatMD5
"$apr1$" + the result of an Apache-specific algorithm using an iterated (1,000 times) MD5 digest of various combinations of a random 32-bit salt and the password. See the APR source file apr_md5.c for the details of the algorithm.
Ich hab den Thread nur ueberflogen und grade im Moment aufgrund anderer Obligationen keine Zeit, den Quellcode des Apache-md5-Hashers anzusehen, aber wenn da wirklich 1000mal iteriert und gehasht wird, ist das ganze schon alleine deswegen ein bisschen ein Krampf, weil du den Serv-U-Hash so transformieren muesstest, dass nach 999maligem Anwenden des Apache-Algorithmus auf den "konvertierten" Hash der selbe Apache-kodierte Hash wie in der htpasswd-File rauskommt (du muesstest also den Wert des "Apache-Hashes" nach der ersten Hashing-Iteration kennen). Gut, das erhoeht die Komplexitaet des Problems dann eigentlich auch nicht mehr schlimm, aber ich wuerde dennoch die Wahl eines anderen Auth-Backends als Investition in die Zukunft in Betracht ziehen
Oder Serv-U rigoros kuebeln, und mod_ftp fuer Apache holen...
Edith kann's doch nicht lassen und meint: Ich glaub, es waer fast einfacher, das Serv-U-Hasformat in der apr-Library zu unterstuetzen. Hast du da zuverlaessige Informationen/"Forschunsergebnisse", wie die Hases generiert werden? Vielleicht hab ich ja demnaechst mal an einem Abend etwas Zeit dafuer.
Sowas hab ich mir auch schon gedacht (Serv-U Hash durch Apache unterstützen). Problem dabei ist nur, daß ich dazu nicht die nötigen Fähigkeiten besitze.
Der Serv-U Hash ist wie gesagt ein einfacher MD5 mit 16-Bit Salt.
Salt ist ein Prefix, also wird der MD5 immer von <salt><pwd> generiert. Wenn der Salt also wie oben "qi" ist, und das PWD "testuser", wird der MD5 über "qitestuser" generiert. Der Salt ist Random, kann aber als Klartext ausgelesen werden.
Wie der MD5 Algorithmus genauer arbeitet, weiß ich nicht, da habe ich zu wenig Ahnung aus Kryptografie, und Serv-U ist closed Source. Es scheint aber ein ziemlicher "standard" MD5 zu sein, da "mdcrack" den Serv-U Hash ja auch knacken kann.
Beim Apache kann ich mich eigentlich auch nur wiederholen, alles was ich weiß, habe ich gepostet.. 6-Bit Codierung mittels oben im Code-Teil gezeigten Alphabets, und der Algo soll eben in apr_md5.c stehen, nur ist mir der Source bei weitem zu hoch...
Aufgabe des Serv-U ist leider nicht möglich, Aufgabe des Apachen auch nicht. In beiden Servern steckt schon zuviel Arbeit drin, und sie sind ansonsten auch perfekt geeignet für das, was sie tun sollen mit den Features, die sie besitzen...
Danke für jede Hilfestellung!
du könntest auch ein für das betroffene dir ein php-file prependen, das die auth übernimmt. mit php kannst du (bei richtiger konfig) auf das pw-file vom ftp zugriefen und das eingegebene pw nach dem algorithmus vom ftp hashen und vergleichen.
imho die einfachste variante.
Wo kriegt man denn dieses mdcrack (nachdem das den Serv-U hash cracken kann sollte man darin ja auch sehen koennen, wie der Hash generiert wird) im Source? Ich kann die Komplexitaet der apr-Modifikation noch nicht genau abschaetzen, aber wuerde es dir was bringen, wenn ich fuer genau diese Apache-Version, die du verwendest, Support fuer den Hash aus Serv-U implementiere? (Wenn das ganze I/O-Zeug entsprechend gut wegabstrahiert ist, sollte das kein unbewaeltigbares Problem sein.) Garantie, dass das mit kommenden Releases von Apache dann auch noch kompatibel ist, gaeb's halt keine... und man muesste sich einen verbindlichen Prefix ausmachen, der einen Serv-U Hash kennzeichnet (ums von Plaintext unterscheidbar zu machen).
@COLOSSUS: [mdcrack 1.2 C Source Tarball]
Sicher, daß du dir so eine Arbeit antun willst? Ich kanns zwar noch weniger abschätzen, aber es klingt schon nach einigem Aufwand. Wenn das nur bei meiner jetzigen Version (2.2.4 Win32) funktioniert, wäre das schon großartig, ich update sowieso nicht grade häufig.
Als Präfix würde ich (da der Hash ja nicht rein Serv-U spezifisch ist) sowas wie "simplemd5" oder als htpasswd-Anlehnung mit den $-Delimitern "$simplemd5$" vorschlagen, aber im Prinzip bleibt das ganz dir überlassen, wenn du das wirklich angehen willst.
Das mit PHP ist auch keine so blöde Idee, auch wenn's mir lieber wär, das Auth direkt im Apachen zu haben. Das wäre aber eine Alternative, wenn die Implementation in den Webserver selbst zu schwierig sein sollte.
Danke!
oder du nutzt die ODBC anbindung vom ftp. fürn indianer gibts ja auch ein auth_db. ich hoffe doch, daß da auch odbc unterstützt wird.
Wobei sich da wieder die Frage stellt, ob sich die User mit ihren PWDs so einfach vom Serv-U INI-File in eine Datenbank schupfen lassen... Hab mir das noch nicht angesehen.
wenn du die pw mit mdcrack knacken kannst, dann wäre das eine einmalige sache.
Ich knacke grad ein relativ langes mit 16 Stellen und mit Einverständnis des Benutzers. Also 18 Stellen mit Salt... Scheint ewig zu dauern bei der Länge. Challenge-Alphabet ist A-Z, a-z und 0-9.
Ich will nur nicht PWDs von Usern knacken, die nichts davon wissen.. Und hausieren will ich halt auch ned.
also jetzt mal ganz ehrlich, warum so ein aufwand für "mickrige" 30 user ?
Aber oke...
Naja ich würd das problem vielleicht von einer anderen Seite her angehen:
Du weißt, dass sich die md5hashes unterscheiden, aber bei beiden system werden kalrerweise immer die selben herauskommen. Die frage die sich mir jetzt stellt ist: wer erstellt die user am FTP ? ein Script oder ein program ? oder du/admin ?
Möglichkeit:
du machst den auth nicht über .htpassword sondern über php mit $_SERVER["HTTP_AUTH_USER"] und $_SERVER["HTTP_AUTH_PW"] wenn sich jetzt ein user einloggen will hast du in einem file sowohl den hash vom apache als auch den hash vom servu in einem file oder ner db stehen und nimmst dann das was du gerade brauchst ?
Ähm, ehrlich gesagt, ich verstehe nicht, was du mir da vorschlägst? Ich bin mir zwar nicht sicher, aber irgendwie scheint mir, daß du voraussetzt, daß sowohl die Serv-U MD5 Hashes, als auch die htpasswd Hashes bereits vorliegen, was nicht der Fall ist!
Der oben von kleinerChemiker vorgeschlagene Fall, mit PHP einfach gegen das Passwortfile von Serv-U zu authentifizieren leuchtet mir noch ein, aber ich verstehe deinen Vorschlag leider nicht ganz..
Zitatwenn sich jetzt ein user einloggen will hast du in einem file sowohl den hash vom apache als auch den hash vom servu in einem file oder ner db stehen und nimmst dann das was du gerade brauchst?
naja ganz ehrlich verstehe ich auch nicht so 100% was du willst, daher hab ich mal eine annahme getroffen dass du folgende Herausforderung hast (es gibt keine Probleme!!! )
Du hast einen ServU FTp und einen Apache. ServU hat eine eigene Technik um user PWs abzuspeichern. Du willst aber dass man über das Web seine Statistiken zum User anzeigen kann, daher willst du dass wenn er sich einloggt, die Informationen zum Login von ServU genommen werden. Das problem is, dass egal wie du das PW via apache oder via PHP md5 hashst es kommt nicht das selbe raus wie bei ServU somit ist ein vergleich mit herkömmlichen methoden nicht möglich?
Ich hoffe ich hab die Problematik richtig verstanden .
Fast. Mit PHP läßt sich der Hash von Serv-U ganz sicher nachbilden (Da gibts doch eine md5() Funktion, die habe ich schon Mal benutzt, um das Passwort eines eAccelerator Interfaces besser zu sichern). Wenn man im Web MD5 Hashgeneratoren benutzt - da gibts ja ein paar - kann man den Hash von Serv-U auch nachbilden, wenn man nicht auf den Salt vergißt.
Ich habs aber jetzt mit PHP nicht versucht, weil ich damit schon ewig nichts mehr gemacht habe, und eben nicht wirklich ein Entwickler bin. Und halt, weil mir die Lösung über das Apache-eigene Auth System viel lieber wäre.
naja dann probier halt mal
<?
echo md5("blablabaOHNEsalt");
?>
dann siehst eh mal obs ähnlich is oder nicht...
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2024