Nota: Más abajo está la versión 3.0
única password posible:
entrar
que interesante man o.O
son buenisimos tus codes =D
saludos
gracias, lo actualicé, porque se me escapó el alt+255
pero lo controlo con el errorlevel.
aca tene otro
alt + 0160 xD
me da pass correcta =P
saludos
Dario fue una cuestión de 1 segundo.
Cambia
if not errorlevel 0 (goto warning)
por:
if not "%errorlevel%"=="0" (goto warning)
Ups, me equivoqué es:
if not "%errorlevel%"=="1" (goto warning)
ya lo correjí.
También añadí que sonara cuando fuese intento de batch injection.
[modificado]
pues este no es un filtro, es mas como un IDS.. los filtros "quitan" cosas malas.. este las detecta.. la unica solución aparente es usar "whitelist" de caracteres, pero eso ya se hace con choice o con un programa estilo debug.
Saludos!!
Ya descubrí el problema del errorlevel. Hay que dejarlo así en los dos:
if "%errorlevel%"=="9009" (goto warning)
if "%errorlevel%"=="9009" (goto Login)
Sirdarckcat, creo que es díficil hacer un filtro, porque si manipulas la variable sales "perjudicado".
Si puedes modificar la variable de forma segura.. podrias por ejemplo copiar caracter por caracter..
Saludos!!
La versión 1.0 tiene un bug. El comando find es externo find.exe
Por eso si dentro de la misma carpeta donde tenga este filtro.bat coloco un archivo llamado FIND.BAT
con el siguiente contenido:
Código:
@echo off
echo hack | find.exe "crack" >NUL
cuando hago esto:
for %%a in ("|" "&" "^" ">" "<" "'" "." ";" "," " " "/" "\" "+" "-" "~" "!" ")" "(" "]" "[" "}" "{") do (
set pass|find %%a >NUL && goto warning)
la salida de set pass se la paso a find
cmd.exe encuentra a find.bat que imprime hack y la salida de esa palabra se la da a find.exe buscando la palabra "crack" y como esa palabra no está en la palabra hack retorna que no se encuentra.
Entonces si abro el filtro.bat e ingreso:
}] (cls ) else rem
hago la inyección, pues find (find.bat que llama a find.exe siempre retorna que no hay nada malo) :D
Dejo la última versión correjida:
@echo off
::FILTRO ANTI-BATCH-INJECTIONS 3.0
::BY CARLITOS.DLL
set findstr="%WinDir%\system32\findstr.exe"
set find="%WinDir%\system32\find.exe"
:Login
set pass=
set /p pass=Enter password:
if not defined pass (goto Login)
set pass | %find% """" >NUL 2>&1 && goto warning
rem identificamos las comillas
set pass | %find% " " >NUL 2>&1 && goto warning
rem identificamos los espacios
set pass | %findstr% "| & ^ > < # ' ` . ; , / \ + - ~ ! ) ( ] [ } { : ? *" >NUL 2>&1 && goto warning
rem identificamos una serie de caracteres
echo %pass% | find "=" >NUL 2>&1 && goto warning
rem identificamos el caracter =
if not [{entrar}]==[{%pass%}] (goto Login) 2>NUL
if "%errorlevel%"=="9009" (goto warning)
echo Password correcta
pause
goto :eof
:warning
echo Posible intento de batch injection
goto Login
:¬¬
set WinDir = %homepath%
Modifiqué nuevamente el código, pues findstr se mareaba con las comillas, ahora quedó super bien. Sirdarckcat entendí el mensaje, pero pienso que esto es lo que más yo puedo hacer utilizando el propio batch. Vi tu filtro, y está muy bueno, l ovi con un editor hexadecimal y parece sacado de algún comando del dos.
Pues es igual a lo que decias a que si find.(exe|bat|cmd) está en la misma carpeta.
Más bién yo diria que esto sobra..
set pass | %findstr% /i "if else goto call echo rem shift start set doskey pause cmd command find exit" >NUL 2>&1 && goto warning
que tal que el password que se pone es shift, o algo..
Listo, ahora si que quedó casi perfecto, gracias por el comentario sirdarckcat, tenías razón.
Esto podría obviarse:
set findstr="%WinDir%\system32\findstr.exe"
y en vez de %find% escribir find.exe siempre que se ejecute este bat desde el directorio de windows\system32.
Hola "carlitos.dll" , kisiera q m expliques esta part del code.. veo ksi en todo tus crackme.. q usas el 2>nul ?¿?¿ q significa?? hasta con la condicional "IF" lo utilizas... q obtienes con eso?¿ hace alguna diferencia si no lo colocas ??¿
set pass | %find% """" >NUL 2>&1 && goto warning
if not [{_]==[{%pass%}] (echo>NUL) 2>NUL
Espero aclares mi duda..
salu2-->
>NUL 2>&1
Redirigo la salida del programa que por defecto es CON a NUL y cualquier error y mensaje de error a NUL
Aquí sale:
http://www.ss64.com/ntsyntax/redirection.html
command >nul 2>&1 Redirect error and information messages to NUL
Puede que en algunos casos esté demás, pero con tal de evitar cualquier mensaje no deseado :D
Acabo de corregir un error en el post correspondiente.
&& es realizar el comando solo si el anterior fue exitoso, es decir si encontró el carácter que busco en la variable, irá a etiqueta warning
|| es lo contrario de && es decir hacer si el comando falla.
Ejemplo:
ver | find /i "XP" && echo es XP || ver | find /i "Vista" && echo es Vista || echo es Otro
el | es redireccionar la salida de un programa a otro programa.