elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
12 Octubre 2008, 16:22  



+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderadores: sirdarckcat, berz3k)
| | |-+  <-!-> Taller de Stack Overflows en Windows, por Rojodos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 Ir Abajo Imprimir
Autor Tema: <-!-> Taller de Stack Overflows en Windows, por Rojodos  (Leído 19709 veces)
Rojodos
"If you wanna be free, you must be different"

Desconectado Desconectado

Mensajes: 3.525



Ver Perfil
<-!-> Taller de Stack Overflows en Windows, por Rojodos
« en: 16 Febrero 2005, 12:36 »

El texto es una introduccion al codeo de exploits sencillos, codeo de shellcodes sencillas, y explicar paso a paso el porque de un stack overflow, todo en Windows. Concretamente, los ejemplos fueron testeados en un Windows XP SP1.

Creo que no contiene errores graves, pero si los contiene, o cualquier otra cosa, no dudeis en decirmelo :)

El texto ha sido redactado por mi, con faltas o sin ellas, con explicaciones enrevesadas, con errores en definiciones, en fin, no sera el mejor texto redactado que hay sobre el tema, ni el unico :P pero me ha gustado redactarlo, y con que ayude a una sola persona, y me de las gracias por email, privado o en el foro, me vale :)

Sinceramente, me ha costado hacerlo (sobre todo tiempo), solo espero que os guste y lo aprovecheis para profundizar mas en el tema. Mi texto es solo la punta del iceberg ;)

Esta como archivo adjunto, para descargarlo, hay que estar registrado :P  ;D (cosas del admin)  ;D

O sino, usar este mirror:

http://www.telefonica.net/web/espaiwebfacultat/Exploits%20y%20Stack%20Overflows%20en%20Windows.zip

Es un texto en formato TXT, a 17 columnas, no creo que haya ningun problema en verlo en cualquier visualizador en cualquier sistema. Puede que en el futuro, se saque en PDF, pero creo que esta mucho mejor en TXT, formato ezine :P

Salu2, espero vuestros comentarios

« Última modificación: 12 Agosto 2008, 16:19 por sirdarckcat » En línea
heap

Desconectado Desconectado

Mensajes: 273



Ver Perfil WWW
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #1 en: 16 Febrero 2005, 13:00 »

Hmm el txt es bueno, asi que por ahora lo subo a mi server solito, luego cuando actualize mi compilacion de txt y ejemplos de OVERFLOWS pues lo meto.
http://heap.zapto.org/BOFS%20win.txt
En línea

fandango
Another
Colaborador

Desconectado Desconectado

Mensajes: 1.881


Powered By Slackware!


Ver Perfil
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #2 en: 16 Febrero 2005, 13:26 »

Muy bueno el texto rojodos! ;)
En línea

zhyzura
Sie sind nicht wie die anderen
Colaborador

Desconectado Desconectado

Mensajes: 2.123


"dieses ist es unsere Welt"


Ver Perfil
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #3 en: 16 Febrero 2005, 13:50 »

pues mira que te la has curao con este texto  ;D.

en lo personal me gusto bastante, quizas como tu lo dices sea una breve explicacion sobre el shellcoding pero te sirve bastante para cuando te quieres iniciar en esta rama del hacking.

enhorabuena Rojodos por tu texto, sigue asi  ;)

zaludox
En línea

- - -->>  Sie urteilen zu uns seiend unterschiedlich  <<-- - -
unser Durst des
Wissens ist unersättlich
krispin

Desconectado Desconectado

Mensajes: 90


Ver Perfil WWW
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #4 en: 16 Febrero 2005, 17:34 »

tremendo rojodos!!!mu bueno.
solo una duda de principiante:
cuando creas la shellcode, porque pones:
sub esp,04h
dices que para introducir cmd.exe pero este es de 8?¿?¿?¿
se que es una tonteria, pero bueno...
txao
En línea
Rojodos
"If you wanna be free, you must be different"

Desconectado Desconectado

Mensajes: 3.525



Ver Perfil
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #5 en: 16 Febrero 2005, 19:05 »

Bueno, gracias a un oportuno aviso, ha sido subsanado un error en la shellcode :P

Sabia yo que tenia un error  ;D

En fin, solo decir que he cambiado el texto, para descargarselo de nuevo... es lo que tiene escribir un texto tan largo, no puedes esperar a que te salga perfecto la primera vez.

Salu2
En línea
Rojodos
"If you wanna be free, you must be different"

Desconectado Desconectado

Mensajes: 3.525



Ver Perfil
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #6 en: 16 Febrero 2005, 19:30 »

Antes del sub esp,04h, solo teniamos espacio para 4bytes.

"cmd.exe0" --> 8 caracteres, 8 bytes

El "0" de fin de cadena tambien cuenta, y es muy importante, sino system no sabe donde acaba el comando.

Por eso necesitabamos 4bytes mas.

Se puede hacer la shellcode que haga solo System("cmd0"), con lo que la shellcode seria mucho mas corta, no habria que sustraer nada a ESP (solo ocupa 3bytes+1byte del 0), y solo habria que introducir 3 letras (esa es la que he usado en el exploit de Acrobat Reader) pero me parecio mucho mas didactico ponerlo completo, y asi ver el porque del sub esp,04h.

Salu2

En línea
whaky

Desconectado Desconectado

Mensajes: 150


Angel del Infierno


Ver Perfil
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #7 en: 17 Febrero 2005, 04:49 »

se ve muy bueno, lo leere con calma. muxas gracias rojodos
En línea

Los muertos hablan y las paredes oyen
por si acaso nunca reveles tu identidad.
Rojodos
"If you wanna be free, you must be different"

Desconectado Desconectado

Mensajes: 3.525



Ver Perfil
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #8 en: 17 Febrero 2005, 05:42 »

En línea
Rojodos
"If you wanna be free, you must be different"

Desconectado Desconectado

Mensajes: 3.525



Ver Perfil
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #9 en: 18 Febrero 2005, 01:26 »

En línea
PK2

Desconectado Desconectado

Mensajes: 9


¡Amo YaBB SE!


Ver Perfil
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #10 en: 18 Febrero 2005, 06:11 »

El texto está muy bueno Rojodos, ya había leído varios artículos sobre el tema y este me pareció el mejor y más claro.
Solamente tengo algunas dudas.

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
Primero unas aclaraciones (por las dudas): estoy compilando con visual C ++ 6.0 y los (todos) offset (por ejemplo el que encontrás con Findjmp.exe - 0x77F8980F-) son iguales a los de mi máquina.

????????????????
Aclarado esto paso a las consultas:

1ro:  “Si le metemos al programa esto (a través del Olly, Arguments) AAABBBBCCCCDDDD...

Veremos que peta exactamente en 54545454, es decir, en TTTT. Ya sabemos dentro
del buffer, donde debe ir la dirección de la shellcode que "cojera" EIP y
ejecutara nuestra shellcode.


   Esto dice tu manual, a mí me aparece 52525252 en lugar de 54545454 (RRRR) no se porque difiere, pero me parece más lógico ya que el array que declaraste en el programa vulnerable (char buffer[64]; //Declaramos un array con 64 bytes de espacio) es de 64 bytes, y al estar usando 4 caracteres por letra (AAAABBBB….) me parece que efectivamente debería saltar en RRRR por que 64 dividido en 4 = 16 y la letra 16 es  “Q” por lo tanto la que sigue sería la que lo haría revalsar (R). ???

2do. En tu manual:

“0040B4EC  |. 55             PUSH EBP  <---- Aquí empieza nuestra shellcode
0040B4ED  |. 8BEC           MOV EBP,ESP
0040B4EF  |. 33FF           XOR EDI,EDI
0040B4F1  |. 57             PUSH EDI
0040B4F2  |. 83EC 04        SUB ESP,4
0040B4F5  |. C645 F8 63     MOV BYTE PTR SS:[EBP-8],63
0040B4F9  |. C645 F9 6D     MOV BYTE PTR SS:[EBP-7],6D
0040B4FD  |. C645 FA 64     MOV BYTE PTR SS:[EBP-6],64
0040B501  |. C645 FB 2E     MOV BYTE PTR SS:[EBP-5],2E
0040B505  |. C645 FC 65     MOV BYTE PTR SS:[EBP-4],65
0040B509  |. C645 FD 78     MOV BYTE PTR SS:[EBP-3],78
0040B50D  |. C645 FE 65     MOV BYTE PTR SS:[EBP-2],65
0040B511  |. 8D45 F8        LEA EAX,DWORD PTR SS:[EBP-8]
0040B514  |. 50             PUSH EAX
0040B515  |. BB 4480BF77    MOV EBX,77BF8044
0040B51A  |. FFD3           CALL EBX  <--- Aqui acaba nuestra shellcode”

A mi esto me que da igual solo que el opcode que vos escribís es “55 8B EC 33 FF 57 C6 45 FC 63 C6 45 FD 6D C6 45 FE 64 8D 45 FC 50 BB 4480BF77 FF D3” y el que yo interpreto es “55 8B EC 33 FF 57 83 EC 08 C6 45 F8 63 C6 45 F9 6D C6 45 FA 64 C6 45 FB 2E C6 45 FC 65 C6 45 FD 78 C6 45 FE 65 8D 45 F8 50 BB 44 80 BF 77 FF D3” no se si entendí mal que se obtiene el opcode o que es lo que pasa?

3ro. No entiendo por que hace falta que busquemos un JMP ESP para hacerlo saltar a 55555555 y no directamente desde 54545454 lo hacemos saltar a nuestro opcode.


Calculo que por algo de lo anterior es que no funciona mi exploit, cuando lo ejecuto me sale  LO QUE ESCRIBISTE "Cadena más offset...." abajo la cadena "AAAABBBB...." hasta la letra Q que es lo que yo puse y com 30 caracteres muy extraños más, seguramente basura de la memoria (creo).

Ya probé todas las modificaciones que se me ocurrieron.

Gracias, y lo repito, muy buen manual.
En línea
Rojodos
"If you wanna be free, you must be different"

Desconectado Desconectado

Mensajes: 3.525



Ver Perfil
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #11 en: 18 Febrero 2005, 06:52 »

Aclaracion:

Los offsets del jmp esp o del system.msvcrt.dll no tienen que ver con el compilador, sino con tu sistema. Por lo que me cuentas, al ser el mismo que el mio, tendras un Windows XP SP1 Español.

Al tener el mismo SO, con el mismo SP, y con el mismo lenguaje, tenemos las mismas librerias (salvo excepciones que no vienen al caso) y por tanto, los mismos offsets

1º:

Se perfectamente porque pasa eso :). El programa vulnerable yo lo compile con el Dev Cpp, que esta basado en el "motor" del GCC. El compilador, por temas de alineamiento, añade algunos bytes a cada variable a la hora de compilar, segun su tamaño. Existe por ahi una tabla (estoy seguro de haberla visto) que te calculaba exactamente los bytes de alineamiento que producia.

Obviamente, el compilador de VC++ es distinto, y no añade dichos bytes de alineamiento, con lo que el buffer es mas pequeño.



AGH XDDDDDDDDDDD

Los opcodes que pongo, son de una shellcode "mini", que solo hacen un system("cmd") en vez de system("cmd.exe"), vaya fallo :p xDDDDDDDDD

Es que al principio, pense en hacerla simple, pero luego me arrepenti, hize la "larga", pero no cambie los opcodes.

Los opcodes correctos son los que tu pones, pero ambos funcionan, asi que no lo voy a cambiar (ya he cambiado una vez el texto :P). Que fallo xDDDD Gracias por decirmelo :)

3º:

Ten en cuenta que el RET sobreescrito tiene que ser UNA DIRECCION, no una instruccion. Es decir, si pones una instruccion NOP (la instruccion NOP simplemente hace que el procesador no haga nada y salte a la siguiente instruccion), en opcode seria 0x90, el ret quedaria sobreescrito asi:

90909090

Pero, en vez de ejecutarse los 4 NOPs, lo que pasa es que EIP trata de ejecutar lo que haya en la direccion 90909090.

El ret sobreescrito tiene que ser SIEMPRE una DIRECCION.

Lo entiendes?

Me alegra que te guste el texto :)

Cualquier duda, ya sabes :)

Salu2
En línea
Griph

Desconectado Desconectado

Mensajes: 263


Ver Perfil WWW
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #12 en: 18 Febrero 2005, 10:39 »

El texto está bien. Sobre todo el método de didáctica que usaste, lo digo por explicar unas cuantas cosas con el debugger a mano, me parece que es una buena forma de fundamentar la teoría y práctica.

A pesar de que el texto está muy explicado, yo le recomendaría a cualquiera que
quiera comenzar con el tema de los exploits y las shellcodes que aprenda bien
ensamblador (fundamentalmente este lenguaje) y C; de otra forma a pesar de que
una persona con conocimientos nulos de programación ensamblador lea textos muy
explicados como éste, se le dificultará bastante la comprensión (hay que aprender a programar bien primero).

Para quien quiera saber más o menos de que se trata este texto, aquí le dejo un mini índice (me parece que te olvidaste de esa parte Rojodos, lo podrías agregar así organizas un poco mejor tu texto ;) :) ).

Citar
-== Introducción. ==-
 - C/C++
 - Ensamblador (ASM)
 - Debugger (Depurador)
 - Dissasembler (Desamblador)
 - Hex Editor (Editor Hexadecimal)
 - La CPU (microprocesador)
 - Registros de la CPU.
 - ¿Que es una vulnerabilidad?
 - ¿Que es un exploit?
 - ¿Que es una shellcode?
 - ¿Que es un overflow?
 - ¿Porque se le llama Stack Overflow?
-== EJEMPLO CODIGO VULNERABLE A STACK OVERFLOW ==-
-== ¿PARA QUE NOS SIRVE UN STACK OVERFLOW? ==-
-== COMO HACER UNA SHELLCODE BASICA ==-
-== CREANDO EL EXPLOIT ==-
-== DOCUMENTACION ==-
-== AGRADECIMIENTOS ==-

Saludos,

Griph.
« Última modificación: 19 Febrero 2005, 11:10 por Griph » En línea

"...la Base está en Aprender a Programar..."

Esta página es interesante para áquel que le guste la programación:

http://es.wikipedia.org/wiki/Ciencias_de_la_computaci%C3%B3n
PK2

Desconectado Desconectado

Mensajes: 9


¡Amo YaBB SE!


Ver Perfil
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #13 en: 19 Febrero 2005, 07:45 »

Primero: entendí muy bien las explicaciones que me diste anteriormente Rojodos. Gracias. Pero siguo sin poder hacer funcionar el exploit. Para tratar de resolverlo estoy usando el OllyDbg y como argumento le estoy pasando la cadena evilbuffer de tu exploit. Le estoy pasando esto como argumento:

"AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLL
MMMMNNNNOOOOPPPPQQQQ\x0F\x98\xF8\x77\x55\x8B\xEC\x33
\xFF\x57\x83\xEC\x08\xC6\x45\xF8\x63\xC6\x45\xF9\x6D\xC6
\x45\xFA\x64\xC6\x45\xFB\x2E\xC6\x45\xFC\x65\xC6\x45\xFD
\x78\xC6\x45\xFE\x65\x8D\x45\xF8\x50\xBB\x44\x80\xBF\x77
\xFF\xD3"

Quería saber si esta manera de probarlo es correcta, ya que el programa llega a una instrucción en la que se clava, osea siguo apretando F7 si no avanza ni una intrucción, como que ejecutara la misma. Gracias.
En línea
®®
Colaborador

Desconectado Desconectado

Mensajes: 5.268


Ver Perfil
Re: Texto por Rojodos: EXPLOITS Y STACK OVERFLOWS EN WINDOWS - LEEDLO!
« Respuesta #14 en: 19 Febrero 2005, 08:28 »

fijate que valor tiene eip y sabras si esta sobreescrito o no.
En línea
Páginas: [1] 2 3 4 Ir Arriba Imprimir 
Ir a:  







Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

hard-h2o modding    Foros de ayuda    Yashira.org    Videojuegos    indetectables.net   

Noticias Informatica    Seguridad Informática    ADSL    Foros en español    eNYe Sec

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.6 | SMF © 2006-2008, Simple Machines LLC
Free counter and web stats