Hello!
Szeretném megvalósítani PHP-ban az NT password hash generáló algoritmust, ennyit találtam róla:
The Windows NT hash is created by taking the user's password as represented in 16-bit, little-endian UNICODE and then applying the MD4 (internet rfc1321) hashing algorithm to it.
Ezt megcsináltam, http://my-tools.net/md4php/ ezzel az md4 függvénnyel, és az iconv függvénnyel (UTF-8 --> UTF-16), de rossz hash-t generál a programom (pontosabban van egy jó hash, amit ismert jelszóból álított elő a samba megfelelő utilja, ezt próbálom reprodukálni)
Jól tudom hogy azonos jelszóhoz mindig azonos NT hash tartozik?
Petya
- 2781 megtekintés
Hozzászólások
Van ötletetek?
- A hozzászóláshoz be kell jelentkezni
itt elered a "Egy elképzelt hálózat összeállítása a Debian GNU/Linux Etch verziójának segítségével" doksi offline valtozatat mert nekem most nem mukodik. ott a node59-ben van szo a mkntpwd programrol. sztem nezd meg azt
udv Zoli
- A hozzászóláshoz be kell jelentkezni
Köszönöm, ismerem azt a doksit, és az mkntpwd-t is, de én php-ban szeretném megvalósítani, Samba PDC web felülete lesz, nem szeretnék shell-t hívogatni, ha nem muszáj. Ha PHP-ból nem megy, akkor persze megoldom smbldap-passwd használatával.
Petya
- A hozzászóláshoz be kell jelentkezni
leiras alapjan ez egy perl script, esetleg atalakitva es cgikent futtatva a szerveren nem lenne jo?
szerk: most nezem a forrast es nem perl hanem c, bocs
udv Zoli
- A hozzászóláshoz be kell jelentkezni
Közben megtaláltam ezt: http://packages.debian.org/stable/perl/libcrypt-smbhash-perl
Kicsit rágyúrok a perl-re, és meg is lesz :) De azért még mindig egyszerűbb lenne PHP-ban, ha van rá lehetőség...
Petya
- A hozzászóláshoz be kell jelentkezni
Olvasd át a perl cucc forrását, talán kapsz ötletet belőle.
- A hozzászóláshoz be kell jelentkezni
Nyilvan egy jelszobol mindig ugyanazt a hasht generalja.
Milyen processzoron csinalod a dolgot? Ugyanis nem mindegy az endianness. Figyelni kell arra, h little endian legyen (x86 procik ilyenek).
UTF-16LE helyett eseteg UCS-2LE kodolassal is megprobalkozhatsz (bar **elvileg** ugyanaz.)
- A hozzászóláshoz be kell jelentkezni
Hello!
Mindkét gép (az egyik generálta a jó hash-t, és a másikon próbálok reprodukálni) Athlon 64, de 32 bites Debian Etch fut rajtuk. Elvileg ezzel nem lehet gond.
Petya
- A hozzászóláshoz be kell jelentkezni
- Azonos jelszóhoz azonos hash tartozik mindig, nincs "sózva" a jelszó (ez az egyik gyengesége az NT4 jelszónak)
- Az iconv kimenő kódolása UTF16? Mert az lehet hogy odarak elé egy BOM-ot (Byte Order Mark), legalábbis a parancssori iconv az odateszi, én kipróbálnám az UTF16LE (Little Endian) kódolással, parancssorból ez jó.
- A hozzászóláshoz be kell jelentkezni
Kipróbáltam LE-vel is, a kimenet változatlan.
Most a perl-es megoldást próbálom. A PHP-be integrálás nem megy, mert nincs PECL a gépen, és forrásból nem szeretném feltenni. Próbáltam így: http://molnarp.pastebin.co.uk/18541 http://molnarp.pastebin.co.uk/18546 egy howto alapján, de ez sem működik. Valaki eseteg tudja mi lehet a hiba? Végső esetben exec-cel futtatom le a PERL scriptet, de az azért elég ronda megoldás...
Petya
- A hozzászóláshoz be kell jelentkezni
Ha esetleg kitennéd valahová a kódot, okosabbak lennénk a hiba mibenlétét illetően...
- A hozzászóláshoz be kell jelentkezni
Kitettem a pastebin-re, ott a két link a hozzászólásban.
Petya
- A hozzászóláshoz be kell jelentkezni
Az eredeti php-s próbálkozásra gondoltam...Na mind1, kipróbáltam az általad linkelt md4 generálót, de nem az igazi. mhash-md4 viszont teljesen jó!
Ez működik:
#!/usr/bin/php
<?
$pass=$_SERVER['argv'][1];
$ntpasswd = mhash(MHASH_MD4, iconv('UTF8','UTF16LE',$pass));
print(bin2hex($ntpasswd));
?>
- A hozzászóláshoz be kell jelentkezni
Ehhez is kell a PECL, ami nekem nincs sajnos, és nem is szeretném feltenni forrásból, csomag meg nincs belőle. A perl lenne a legjobb, ha sikerülne működésre bírni...
Petya
- A hozzászóláshoz be kell jelentkezni
Hát akkor a perles szenvedés helyett inkább vagy kijavítanám-újraírnám az MD4-et php-ban, vagy reportolnám az ukrán faszinak, hogy valami nem jó az implementációjában...
Elég könnyen lehet test-caset csinálni:
require 'md4.php';
$pass='abcdefg';
$h1 = bin2hex(mhash(MHASH_MD4, $pass));
$h2 = md4($pass);
print("$h1\n$h2\n");
- A hozzászóláshoz be kell jelentkezni
Petya, miért nem rax fel pecl-t? Anélkül kevéssé fogsz boldogulni, a PHP-hoz a finomságok mind a PECL részei...
- A hozzászóláshoz be kell jelentkezni
Az miért gyengeség, hogy nem salted a password hash?
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
Wikipedia: http://en.wikipedia.org/wiki/Password_cracking#Salting
Since the salt is usually different for each user, the attacker can no longer construct tables with a single encrypted version of each candidate password. Early Unix systems used a 12-bit salt. Attackers could still build tables with common passwords encrypted with all 4096 possible 12-bit salts. However, if the salt is long enough (e.g. 32 bits), there are too many possibilities and the attacker must repeat the encryption of every guess for each user.
- A hozzászóláshoz be kell jelentkezni
Várj, most lehet, hogy nem jól értelmezem, de akkor most a cracker a hash-sel próbálkozik, és a salt itt azért jó (tudom, mi a salt), mert azt figyelembevéve kell meggenerálni a lehetséges password hashek listáját, és az így sokkal nagyobb lesz? Nem elég erre a megfelelő hashing algoritmus?
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
Igen, ha nincs salt, akkor a cracker letárolja a megtört jelszavakat, és ha egy ugyanolyan hash-t lát mégegyszer, akkor a jelszó is kapásból megvan hozzá.
Petya
- A hozzászóláshoz be kell jelentkezni
Aha, értem. Nem tudom felmérni, hogy ez mekkora extra biztonság, de ám legyen. Kösz a magyarázatot.
Wint feltörni kezdetben nem elég úgy, hogy az LMHash-t kezdjük kóstolgatni?
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
sima lmhasht erdemes tiltani helyette ntlm hitelesitest ajanlanak mindenutt
udv Zoli
- A hozzászóláshoz be kell jelentkezni
Tudom, én is tiltom, de szerinted még hányan? :-)
It doesn't matter if you like my song as long as you can hear me sing
- A hozzászóláshoz be kell jelentkezni
Már ahol használnak LM hash-t. Win2000-től felfelé már az NT hash-t használják, én pl. ezen a Samba PDC-n nem is használok LM hash-t, csak XP kliensek vannak, így nincs rá szükség.
Amúgy valóban, az LM hash-t még könnyebb feltörni.
Petya
- A hozzászóláshoz be kell jelentkezni
Nem maga a hash a salted, hanem a jelszó, és ebből van kreálva a hash.
Tehát hash(jelszó+salt) - így ha több usernek is ugyanaz a jelszava, a támadó a jelszavakat látva nem tud arra következtetni, hogy több usernek is ugyanaz a jelszava :)
- A hozzászóláshoz be kell jelentkezni
egyszeru pelda:
belenezel a hash-eket tarolo fajlba es latod, hogy ket has megegyezik, az egyik a te jelszavadhoz van... es akkor mar tudod is a masik jelszavat
ez a legdurvabb gyengesege :)
--
Those who do not understand Unix are condemned to reinvent it, poorly. (based on true story)
- A hozzászóláshoz be kell jelentkezni