elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Filtro Anti- BatchInyection
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Filtro Anti- BatchInyection  (Leído 6,177 veces)
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Filtro Anti- BatchInyection
« en: 4 Abril 2009, 09:54 am »

Código
  1. @echo off
  2. :code
  3. set "name="
  4. set /p "name=Teclee su nombre : "
  5. if not defined name (goto:code)
  6. for /f "tokens=2 delims==" %%_ in ('set name') do (
  7. echo.Has escrito : %%_
  8. )
  9. goto:code

La utilidad de esto es que podemos mostrar la informacion introducida por el usuario, sin temer por una inyeccion batch.

Funcionamiento :
Código:
Teclee su nombre : &cmd
Has escrito : &cmd
Teclee su nombre : &echo on
Has escrito : &echo on
Teclee su nombre : >
Has escrito : >
Teclee su nombre : <
Has escrito : <
Teclee su nombre : |
Has escrito : |
Teclee su nombre : * ? & < ^&cmd^
Has escrito : * ? & < ^&cmd^
Teclee su nombre : %homepath%
Has escrito : %homepath%
Teclee su nombre : set|more
Has escrito : set|more
Teclee su nombre : &echo on
Has escrito : &echo on
Teclee su nombre : &goto:Eof
Has escrito : &goto:Eof
Teclee su nombre : &goto:Eof^
Has escrito : &goto:Eof^
Teclee su nombre : |calc.exe
Has escrito : |calc.exe
Teclee su nombre :

PD : Al final del post esta la versión final.

Saludos.


« Última modificación: 20 Junio 2009, 20:09 pm por Leo Gutierrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
SmartGenius

Desconectado Desconectado

Mensajes: 181


:P


Ver Perfil WWW
Re: Filtro Anti- BatchInyection
« Respuesta #1 en: 4 Abril 2009, 15:32 pm »

Simple y efectivo  ;D

Gracias por compartirlo... !!

Saludos.


En línea


M a t t

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Filtro Anti- BatchInyection
« Respuesta #2 en: 4 Abril 2009, 19:24 pm »

Muy bueno Leo, felicitaciones.
En línea

0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Filtro Anti- BatchInyection
« Respuesta #3 en: 4 Abril 2009, 19:40 pm »

felicitacione Leo, solo una leve corrección, si tienes otra variable con el prefijo name, como por ejemplo: namespace te mostrará ese también.


Código:
@echo off
:code
set namespace=current
set "name="
set /p "name=Teclee su nombre : "
if not defined name (goto:code)
for /f "tokens=2 delims==" %%_ in ('set name') do (
echo.Has escrito : %%_
)
goto:code

solución:

Código:
@echo off
:code
set namespace=current
set "name="
set /p "name=Teclee su nombre : "
if not defined name (goto:code)
for /f "tokens=2 delims==" %%_ in ('set name') do (
echo.Has escrito : %%_
goto :_123456789:
)
:_123456789:
goto:code

Buen método Leo, yo ya había hecho uno, te desafío a que intentes asignar a una variable el contenido de %%_, si así lo haces, ya no hay filtración.
En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Filtro Anti- BatchInyection
« Respuesta #4 en: 4 Abril 2009, 20:40 pm »


Buen método Leo, yo ya había hecho uno, te desafío a que intentes asignar a una variable el contenido de %%_, si así lo haces, ya no hay filtración.

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :code
  4. set "name="
  5. set /p "name=Teclee su nombre : "
  6. if not defined name (goto:code)
  7. for /f "tokens=2 delims==" %%_ in ('set name') do (
  8. echo.Has escrito : %%_
  9. set "algo=%%_"
  10. goto :_123456789:
  11. )
  12. :_123456789:
  13. echo Variable asignada %%algo%% : !algo!
  14. goto:code

Salida :
Código:
Teclee su nombre : &cmd
Has escrito : &cmd
Variable asignada %algo% : &cmd
Teclee su nombre : &echo on
Has escrito : &echo on
Variable asignada %algo% : &echo on
Teclee su nombre : < > &cmd
Has escrito : < > &cmd
Variable asignada %algo% : < > &cmd
Teclee su nombre : |calc
Has escrito : |calc
Variable asignada %algo% : |calc
Teclee su nombre : |cmd
Has escrito : |cmd
Variable asignada %algo% : |cmd
Teclee su nombre : set|more
Has escrito : set|more
Variable asignada %algo% : set|more
Teclee su nombre : &goto:eof
Has escrito : &goto:eof
Variable asignada %algo% : &goto:eof
Teclee su nombre : &goto:eof^
Has escrito : &goto:eof^
Variable asignada %algo% : &goto:eof^
Teclee su nombre : %homepath%
Has escrito : %homepath%
Variable asignada %algo% : %homepath%
Teclee su nombre : ^CTeclee su nombre :
Teclee su nombre : ^C¿Desea terminar el trabajo por lotes (S/N)?
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Filtro Anti- BatchInyection
« Respuesta #5 en: 4 Abril 2009, 22:11 pm »

buen trabajo, lo que yo quise decir, es que lo intentarás sin:
!algo!
sino con:
%algo%

¿filtro?
En línea

Germaniac

Desconectado Desconectado

Mensajes: 13


Ver Perfil
Re: Filtro Anti- BatchInyection
« Respuesta #6 en: 4 Abril 2009, 23:56 pm »

Muy bien, solo que no muestra lo introducido despues de un caracter =

Código:

C:\>C:\code.bat
Teclee su nombre : no muestra lo que sigue depues de un "=" igual
Has escrito : no muestra lo que sigue depues de un "
Teclee su nombre :

Código:
@echo off
:code
set "name="
set /p "name=Teclee su nombre : "
if not defined name (goto:code)
for /f "tokens=1* delims==" %%a in ('set name^|findstr /b "name="') do (
echo.Has escrito : %%b
)
goto:code

Código:

C:\>C:\code.bat
Teclee su nombre : muestra incluso depues de un "=" igual
Has escrito : muestra incluso depues de un "=" igual
Teclee su nombre :


El chiste de un filtro Anti-BatchInyeccion seria trabajar con lo introducido por el usuario sin temor a una posible inyeccion por cararteres especiales

buen trabajo, lo que yo quise decir, es que lo intentarás sin:
!algo!
sino con:
%algo%

¿filtro?


No creo que se pueda porque este filtro no elimina los caracteres especiales y al llamar a %algo% en vez de !algo! el cmd.exe es vulnerable a una inyeccion.

Saludos
En línea

0x0309

Desconectado Desconectado

Mensajes: 215


Ver Perfil
Re: Filtro Anti- BatchInyection
« Respuesta #7 en: 5 Abril 2009, 02:06 am »

Dejo, otro filtro que encontré, que filtra, es decir, quita los carácteres considerados "nocivos".

Código:
@ECHO OFF
SETLOCAL
:INICIO
SET TEXT=
SET /P TEXT=give me your text:
IF DEFINED TEXT (CALL:CLEAN TEXT)
IF DEFINED TEXT (ECHO.%TEXT%)
GOTO:INICIO
ENDLOCAL
GOTO:EOF

:::::::::::::::::::::::::::::::::::::::::::::::::::::::
:CLEAN
:::::::::::::::::::::::::::::::::::::::::::::::::::::::
::Autor Carlos
::version 1.0 more restricted
    SETLOCAL ENABLEDELAYEDEXPANSION
    IF NOT DEFINED %~1 (GOTO:_CLEANE) || (GOTO:_CLEANE)
    SET "CONTENT=!%~1!"
    IF NOT DEFINED CONTENT (GOTO:EOF)
    SET /A COUNT=0
    :_LOOP
        SET "CHAR=!CONTENT:~%COUNT%,1!"
        IF NOT DEFINED CHAR (GOTO:_ENDLOOP)
        SET ADD=FALSE
        FOR %%A IN (0 1 2 3 4 5 6 7 8 9) DO (
            IF [^!CHAR!] EQU [%%A] (SET ADD=TRUE)
        )
        FOR %%A IN (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO (
            IF /I [^!CHAR!] EQU [%%A] (SET ADD=TRUE)
        )
        IF /I [!ADD!] EQU [TRUE] (
            SET "STRING=!STRING!!CHAR!"
        )
        SET /A COUNT +=1
        GOTO:_LOOP
    :_ENDLOOP
        ENDLOCAL&&SET "%~1=%STRING%"
        GOTO:EOF
    :_CLEANE
        ECHO.CLEAN FUNCTION RECEIVE A DEFINED VARIABLE.
        PAUSE
        GOTO:EOF
:::::::::::::::::::::::::::::::::::::::::::::::::::::::
« Última modificación: 27 Julio 2009, 07:46 am por 0x0309 » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Filtro Anti- BatchInyection
« Respuesta #8 en: 5 Abril 2009, 04:49 am »

buen trabajo, lo que yo quise decir, es que lo intentarás sin:
!algo!
sino con:
%algo%

¿filtro?


Pues no le veo ningun problema en usar !! en ves de %% ya que no estoy usando ningun comando externo (.exe) a cmd.exe, es totalmente valido.

Saludos.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Filtro Anti- BatchInyection
« Respuesta #9 en: 5 Abril 2009, 05:05 am »

Creo que así ya quedaría bien :
Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :code
  4. set "name="
  5. set /p "name=Teclee su nombre : "
  6. if not defined name (goto:code)
  7. for /f "tokens=1* delims==" %%l in ('set name ^| findstr /r /i "^Name="') do (
  8. echo.Has escrito : %%m
  9. set "algo=%%m"
  10. goto :_123456789:
  11. )
  12. :_123456789:
  13. echo Variable asignada %%algo%% : !algo!
  14. goto:code

Saludos.
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Bach] ~Filtro anti-inyecciones by LauBuru~
Scripting
LauBuru 0 1,471 Último mensaje 9 Diciembre 2011, 23:30 pm
por LauBuru
Polémica en Francia por un filtro anti publicidad instalado por un operador ....
Noticias
wolfbcn 0 996 Último mensaje 5 Enero 2013, 13:09 pm
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines