FILTRO AntiBATCH Injections 3.0

Iniciado por carlitos.dll, 30 Julio 2008, 03:12 AM

0 Miembros y 1 Visitante están viendo este tema.

carlitos.dll

#10
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

sirdarckcat


carlitos.dll

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.


sirdarckcat

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..

carlitos.dll

#14
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.

wizard_0

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-->

carlitos.dll

#16
>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.