![]() |
Herausfinden ob PW zu dem Benutzerkonto passt
Hi DPler
Wie kann ich herausfinden ob ein PW des mein Programm hat zum ausgewählten User passt. Also, ich hab des pw: 1234 und drei Benutzer Administrator (is immer drauf), Benutzer1 (pw: 4334), Benutzer2 (pw: 1234) nun möchte ich prüfen ob des pw von mit dem pw des Benutzer1 übereinstimmt wenn nicht ob des pw mit dem Benutzer2 übereinstimmt. Ich hab bei google schon gesucht und da hab ich viel über die SAM datei gelesen doch leider kann ich die nicht öffnen oder auslesen :wall: Könnt ihr mir helfen? |
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Liste der Anhänge anzeigen (Anzahl: 1)
Das geht über SSPI. Unit im Anhaag.
Neue Version hochgeladen, in meiner Bearbeitung waren ein paar Fehler drinne. :-? |
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Hi,
normalerweise sind die Passwörter die Windows NT/2000/XP benutzt verschlüsselt und können nicht so "einfach" ausgelesen werden. Da hilft nur noch ne BruteForce Attacke... Mfg, Steve |
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Zitat:
|
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Oder für lokale Accounts (keine Ahnung ob es mit ADS funktioniert)
Delphi-Quellcode:
(** )
type NET_API_STATUS = Integer; function NetUserChangePassword(domainname, username, oldpassword, newpassword: LPCWSTR): NET_API_STATUS; stdcall; external 'netapi32.dll'; (**) function VerifyUserPassword(const UserName, Password: WideString): DWORD; var // make sure it's the same pointer... Buffer: array [0..1023] of WideChar; begin lstrcpynW(Buffer, PWideChar(Password), SizeOf(Buffer) div SizeOf(WideChar)); Result := DWORD( NetUserChangePassword(nil, PWideChar(UserName), Buffer, Buffer)); end; //////////////////////////////////////////////////////////////////////////////// // Test procedure Test; begin ShowMessage(SysErrorMessage( VerifyUserPassword('root', 'LittlePigLittlePigLetMeIn...') )); end; |
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Zitat:
Dann kann man testen, ob beide verschlüssellten Passwörter gleich sind. gruessle |
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Danke werds gleich mal ausbrobieren
Zitat:
|
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Zitat:
Luckie hat auf seiner Homepage auch so ein Tool. Auch das ist völlig legal. |
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Zitat:
|
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Nicos Methode braucht aber etwas länger als die SSPI Methode, wenn das Passwort falsch ist. Für einen BruteForce Angriff eher unpraktisch.
|
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Um zu Testen ob des Pass richtig ist habe ich mir einen Service geschrieben. Mit dem ging es dann problemlos weil dieser mit erhöten Rechten läuft. Mit normalen Programmen wirds nicht gehen.
Übrigens: Was wollt ihr den noch Brute Forcen? Die Zeiten sind vorbei :lol: Ich bastel grad was da schmeiß ich den Hash rein und des Pass kommt in ca 30-60 Sek raus bei grösseren Sachen dauerts halt einige sekunden länger. Aber wie geht habe ich grad vergessen :lol: |
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Dann zeig mal etwas Code, das würde bestimmt hier jeden interessieren. Und wie sieht der Service aus? Wozu braucht er die erhöhten Rechte? Mit SSPI geht es eben auch ohne.
Und wie sieht deine Hash Methode aus? Benutzt du dort einen Rainbowtable oder wie machst du es? Und zum Knacken von Hashes mittels deren Hashwerte solltets du dir mal dies angucken: ![]() Wie schafst du also diese 30 bis 60 Sekunden? :gruebel: |
Re: Herausfinden ob PW zu dem Benutzerkonto passt
Nicht mekern is sicher noch verbesserungswürdig (etwa TIniFile -> TMemInifile pp.) is halt noch in der Entwicklungphase.
Delphi-Quellcode:
unit Main;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, ScktComp, IniFiles; type TLoginSrv = class(TService) ServerSocket1: TServerSocket; procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); procedure ServiceStart(Sender: TService; var Started: Boolean); procedure ServiceStop(Sender: TService; var Stopped: Boolean); private { Private-Deklarationen } public AppName: String; AppVers: String; function GetServiceController: TServiceController; override; { Public-Deklarationen } end; var LoginSrv: TLoginSrv; implementation {$R *.DFM} //////////////////////////////////////////////////////////////////////////////// procedure ServiceController(CtrlCode: DWord); stdcall; begin LoginSrv.Controller(CtrlCode); end; //////////////////////////////////////////////////////////////////////////////// function TLoginSrv.GetServiceController: TServiceController; begin Result := ServiceController; end; //////////////////////////////////////////////////////////////////////////////// function GetComputerName: String; var Buffer: Array[0..MAX_COMPUTERNAME_LENGTH+1] of Char; Size: DWORD; begin size:=256; Windows.GetComputerName(Buffer, Size); Result:=StrPas(Buffer); end; //////////////////////////////////////////////////////////////////////////////// procedure TLoginSrv.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var IniDat: TIniFile; StrList: TStringList; ErrCode: Cardinal; FileName, Username, Password: String; begin FileName := ExtractFilePath(ParamStr(0))+AppName+'.tmp'; StrList := TStringList.Create; StrList.Text := Socket.ReceiveText; StrList.SaveToFile(FileName); IniDat := TIniFile.Create(FileName); Username := IniDat.ReadString('Authentification', 'Username',''); Password := IniDat.ReadString('Authentification', 'Password',''); LogonUser(PChar(Username), PChar(GetComputerName), PChar(Password), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ErrCode); IniDat.WriteInteger('Authentification', 'ErrCode', ErrCode); IniDat.WriteString('Authentification', 'ErrCodeStr', SysErrorMessage(ErrCode)); IniDat.WriteInteger('Authentification', 'GetLastError', GetLastError); IniDat.WriteString('Authentification', 'GetLastErrorStr', SysErrorMessage(GetLastError)); StrList.Clear; StrList.LoadFromFile(FileName); LoginSrv.ServerSocket1.Socket.Connections[0].SendText(StrList.Text); LoginSrv.ServerSocket1.Socket.Disconnect(0); IniDat.Free; StrList.Free; if FileExists(FileName) then DeleteFile(FileName); end; //////////////////////////////////////////////////////////////////////////////// procedure TLoginSrv.ServiceStart(Sender: TService; var Started: Boolean); begin ServerSocket1.Open; end; //////////////////////////////////////////////////////////////////////////////// procedure TLoginSrv.ServiceStop(Sender: TService; var Stopped: Boolean); begin ServerSocket1.Close; end; //////////////////////////////////////////////////////////////////////////////// end. |
Re: Herausfinden ob PW zu dem Benutzerkonto passt
LogonUser versucht jedesmal den Benutzer einzuloggen. Und das dauert gegenüber der SSPI Methode ewig.
Edit: Ich habe meinem vorherigen Post noch etwas hinzugefügt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz