elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 19:58  


Tema destacado: [AIO elhacker.NET] Compilación herramientas análisis y desinfección malware

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  No consigo hacer un programa vulnerable a stack overflow (Solucionado)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: No consigo hacer un programa vulnerable a stack overflow (Solucionado)  (Leído 2,739 veces)
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
No consigo hacer un programa vulnerable a stack overflow (Solucionado)
« en: 31 Marzo 2008, 19:43 »

Pues si, soy así de tonto  :huh:

Estoy intentando hacer un programa vulnerable a stack overflow en asm (por pura comodidad a la hora de debugear) q haga algo similar a la función strcpy para hacer alguna prueba con scodes y tal, pero no consigo hacerlo petar, por q meto punteros en la pila y lógicamente no peta...

Aki pongo como lo estoy intentando para q se coja la idea mas q nada, por q llevo un buen rato dandole vueltas al asunto y no me sale:

Código
include 'H:\archivos de programa\fasm\include\win32ax.inc'
 
.data
       buffer db '0123456789', 0       ; Buffer de 10 bytes
       addStr db '0123456789ABCDEF',0  ; La cadena a añadir
 
.code
start:
       push addStr
       push buffer
       call strcpy
 
       invoke ExitProcess, 0
 
proc strcpy buff, pegar
       invoke lstrlen, [pegar]
       inc eax
       invoke RtlMoveMemory, [buff], [pegar], eax
       invoke MessageBox, 0, [buff], 0, 0
       ret
endp
 
.end start

La cosa es q por muy grande q sea la cadena a añadir el programa no peta (lo mas q se podria lograr es si declarara buffer debajo de addStr seria modificar alguna variable....) weno, ya se q es lógico q no pete, ya q meto punteros, y casi me daba vergüenza preguntar una cosa tan tonta, pero es q no comprendo como trabaja strcpy para ser vulnerable..   :huh: :huh: :huh:

Si alguien me pudiera orientar un poco de como mete el buffer entero en la pila en vez del puntero o que hace se lo agradeceria mucho

Salu2


« Última modificación: 2 Abril 2008, 16:43 por E0N » En línea
leos_79

Desconectado Desconectado

Mensajes: 189


Anyway, Anyhow, Anywhere


Ver Perfil
Re: No consigo hacer un programa vulnerable a stack overflow.... 0_o
« Respuesta #1 en: 31 Marzo 2008, 22:13 »

no estoy muy en este tema , pero no es por la proteccion de stack del windows? el DEP?
En línea
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
Re: No consigo hacer un programa vulnerable a stack overflow.... 0_o
« Respuesta #2 en: 1 Abril 2008, 17:30 »

Por eso no es, por q si que puedo hacer programas vulnerables en C, pero quiero ver bien bien q hacen esos programas para ser vulnerables, la cosa es q no consigo emularlos...
En línea
Ferсhu


Desconectado Desconectado

Mensajes: 1.213

Menos palabras y Mas codigos.


Ver Perfil WWW
Re: No consigo hacer un programa vulnerable a stack overflow.... 0_o
« Respuesta #3 en: 1 Abril 2008, 23:03 »

Citar
Por eso no es, por q si que puedo hacer programas vulnerables en C, pero quiero ver bien bien q hacen esos programas para ser vulnerables, la cosa es q no consigo emularlos...

si lo q kieres es verlo, en cualkier prog en c se puede.

Lo q vas a ver es q la variable local esta en la pila y al meter datos mayores a el espacio q reservo el programa para la rutina, se empieza a pisar datos, y si sobrescribis algun retorno, al seguir corriendo el programa va a saltar hacia donde apunte, o tildar si  no corresponde a ninguna direccion.

con olly se ve perfectamente :p
En línea

RaiSe

Desconectado Desconectado

Mensajes: 53


Ver Perfil WWW
Re: No consigo hacer un programa vulnerable a stack overflow.... 0_o
« Respuesta #4 en: 2 Abril 2008, 00:22 »

Yo no estoy muy puesto en formato de ensambladores, pero eso tiene pinta de que el overflow no se produce en la pila. Los punteros los pusheas a la pila, pero el overflow se produce en el segmento de datos (.data), con lo que no vas a conseguir sobreescribir la dirección de retorno de ninguna funcion. No hay algo para meter variables en la pila en los ensambladores? (.stack ?).

Un saludo.
En línea

RaiSe | eNYe-Sec.org
byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: No consigo hacer un programa vulnerable a stack overflow.... 0_o
« Respuesta #5 en: 2 Abril 2008, 01:03 »

Código:
include 'c:\cosas\fasm\include\win32ax.inc'
.code
start:
call strcpy
invoke ExitProcess, 0

proc strcpy
mov edi,buffer
mov esi,addStr
mov ecx,1000h
rep movsb
ret
endp         

buffer db 11h
addStr db "METE AQUI UN BUFFER GRANDE DE A Y VERAS LA PILA LLENA DE 41 Y EIP ="
.end start 

el codigo es una burrada pero peta.
En línea
RaiSe

Desconectado Desconectado

Mensajes: 53


Ver Perfil WWW
Re: No consigo hacer un programa vulnerable a stack overflow.... 0_o
« Respuesta #6 en: 2 Abril 2008, 11:46 »

Código:
include 'c:\cosas\fasm\include\win32ax.inc'
.code
start:
call strcpy
invoke ExitProcess, 0

proc strcpy
mov edi,buffer
mov esi,addStr
mov ecx,1000h
rep movsb
ret
endp         

buffer db 11h
addStr db "METE AQUI UN BUFFER GRANDE DE A Y VERAS LA PILA LLENA DE 41 Y EIP ="
.end start 

el codigo es una burrada pero peta.

Mm, eso no hace que buffer y addStr esten en el segmento de codigo?, ese segmento siempre es de no escritura, entonces al intentar escribir en él dará una violacion de segmento. Creo que eso tampoco tiene que ver con un stack overflow, a no ser que el ensamblador meta los buffers buffer y addStr en la pila. No tengo ni idea de como se declaran variables en la pila en formato ensamblador, pero puedes mirar donde están en ese ejemplo con un debugger, y así salimos de dudas.

Un saludo.
En línea

RaiSe | eNYe-Sec.org
byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: No consigo hacer un programa vulnerable a stack overflow.... 0_o
« Respuesta #7 en: 2 Abril 2008, 13:10 »

tienes razon, asi peta pero no como se busca  :rolleyes:. lo de los permisos de la sección de codigo es lo de menos, siempre se pueden modificar antes de escribir en el.

ya lo tengo, la declaras como local dentro de la funcion y entonces va a la pila:

Citar
locals
buffer db 11h
endl   

Citar
DS:[ESI]=[0040106F]=41 ('A')
ES:[EDI]=stack [0006FFFF]=00

ahi si que estan los datos en la pila y chafa lo que encuentra por su camino. como ya dije el codigo es una burrada era para probar jeje.
« Última modificación: 2 Abril 2008, 13:18 por ®® » En línea
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
Re: No consigo hacer un programa vulnerable a stack overflow.... 0_o
« Respuesta #8 en: 2 Abril 2008, 14:07 »

Gracias por los comentarios, ya me e aclarado algunos conceptos, pero sigo sin entender por q la funcion strcpy mete los parametros a la pila, no le veo mucho sentido, es mas logico meter los punteros, como toda la vida y mas simple por otra parte no?

Weno, seguiré probando, me parece q la única opción para emular esto es declarar las variables como locales como ha dicho ®®, ya q esas variables se declaran dentro de la pila, así q no hay q meterles nada :P

Salu2
En línea
Distorsion

Desconectado Desconectado

Mensajes: 212


15Hz ~ 20Hz


Ver Perfil
Re: No consigo hacer un programa vulnerable a stack overflow.... 0_o
« Respuesta #9 en: 2 Abril 2008, 14:41 »

Strcpy pone los datos en la pila porque es mas rapido al acceder y despues se desechan los datos almacenados rapidamente para no consumir memoria de mas(se sobreescriben). Se ponen punteros al pasar tablas de dos dimensiones o typos de varibles creados por el usuario. Creo :rolleyes:
« Última modificación: 2 Abril 2008, 14:44 por Distorsion » En línea

byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re: No consigo hacer un programa vulnerable a stack overflow.... 0_o
« Respuesta #10 en: 2 Abril 2008, 14:49 »

Bueno, pero no seria mas seguro meter un puntero?
En línea
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.983


Ver Perfil WWW
Re: No consigo hacer un programa vulnerable a stack overflow.... 0_o
« Respuesta #11 en: 2 Abril 2008, 16:41 »

Si Mek, estoy de acuerdo, mas seguro y mas simple, weno al tema ya e pillado bien el concepto y e hecho un programa en asm vulnerable a stack overflow. Usar variables locales estaria mejor, pero me modifican la pila y es mas lioso, ademas la idea se entiende, q es lo q importa xD

Aki os lo dejo, vereis q si escribis suficientes "AAAAA.." en addStr el programa petará ya q se sobreescribe la dirección de retorno q es laidea. Ahora a programar alguna shell code para el programa  ;D

Código:
include 'H:\archivos de programa\fasm\include\win32ax.inc'

.data
        buffer  db '0000000', 0
        addStr  db 'AAAAAAAAAAAAAA',0        ; La cadena a meter en el buffer
        retorno dd ?

        tamBuffer dd ?
        tamAddStr dd ?

.code
start:

        call strcpy
        invoke MessageBox, 0, [retorno], 0, 0

        invoke ExitProcess, 0

proc strcpy ; Metemos sddStr en el buffer

        ; Obtenemos los tamaños de buffer y addStr
        invoke lstrlen, buffer
        inc eax
        mov [tamBuffer], eax
        invoke lstrlen, addStr
        inc eax
        mov [tamAddStr], eax

        sub esp, [tamBuffer]  ; Reservamos espacio en la pila para el buffer
        mov ebx, esp          ; y ponemos en ebx donde empieza dicho espacio

        invoke RtlMoveMemory, ebx, addStr, [tamAddStr] ; Copiamos en la pila la cadena

        invoke LocalAlloc, LPTR, eax
        mov [retorno], eax
        invoke RtlMoveMemory, [retorno], ebx, [tamAddStr]

        add esp, [tamBuffer]
        ret
endp

.end start         

Lo e comentado un poco, pero me parece a mi q se entiende, lo unico aclarar q RtlMoveMemory es lo mismo q el api CopyMemory (copymemory realmente es un alias ;))

Salu2

PD - Se supone q es esto lo q hacen las funciones vulnerables en C no?
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Solucionado] Hacer un programa que responda preguntas
Programación C/C++
Caster 7 866 Último mensaje 22 Diciembre 2011, 16:31
por BioHazardTM
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines