Test Foro de elhacker.net SMF 2.1

Seguridad Informática => Hacking => Bugs y Exploits => Mensaje iniciado por: Kaxperday en 2 Octubre 2014, 11:01 AM

Título: Ayuda para mi primer exploit
Publicado por: Kaxperday en 2 Octubre 2014, 11:01 AM
Hola a todos, haber tengo un programa en C compilado con el siguiente código:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
int main(int argc,char **argv)
{
   char string[16];
   strcpy(string,argv[1]);
   return 0;
}


Vale quiero hacer un stack overflow, para ello meto de argumentos :

AAAAAAAAAAAAAAAABBBBBBBBCCCCDDDD

Vale con estos argumentos el programa ya da error, uso windows 8 y al parecer no deja explorar los errores luego no puedo ver la dirección del return pues no hay opción de detallar los problemas a diferencia de win7.

Vale ahora abro inmunnity debugger, abro el ejecutable, lo corro y que tengo que hacer? Le puse también los mismo argumentos y ahora? como encuentro la dirección de return? y cuando la encuentre tendría que meter hay un payload no?

Ayuda y gracias.
Título: Re: Ayuda para mi primer exploit
Publicado por: kub0x en 2 Octubre 2014, 14:25 PM
Empieza por aquí. En todas las prácticas se utiliza Inmunnity Debugger o WinDbg, yo uso OllyDbg para gustos los colores.

https://www.corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stack-based-overflows/

Este team es de los mejores, eso si espero que sepas Inglés, sino lo llevas difícil.

Una explicación breve sobre lo que estás haciendo:

Si el input que introduces es mayor que el tamaño del buffer "string" entonces se sobreescribirán los datos adyacentes al mismo. Como el buffer se encuentra reservado en la pila, todas las direcciones que le siguen se sobreescribiran con el input. Por lo que si agarramos un depurador y vemos la pila podremos observar que en efecto habrá una gran colección de nuestro input en la pila.

Vale, el programa es vulnerable al desboradmiento de buffer/pila, por lo que podemos hacer que el programa ejecute código arbitrario.
Te recomiendo que aprendas un poco de ASM para generar tus Shellcodes. Instálate Cygwin para crear las shellcodes. Para crear una shellcode necesitas el code en ASM (NASM) y luego con un programa (xxd-shellcode.sh) lo traduces a shellcode. No quiere decir que sea el proceso maestro, pero a mi me da buen resultado.

Cualquier cosa pregunta por aquí.

Saludos!
Título: Re: Ayuda para mi primer exploit
Publicado por: MCKSys Argentina en 2 Octubre 2014, 20:50 PM
Cita de: kub0x en  2 Octubre 2014, 14:25 PM
En todas las prácticas se utiliza Inmunnity Debugger o WinDbg, yo uso OllyDbg para gustos los colores.

Inmunnity Debugger es OllyDbg!  :P

Saludos!
Título: Re: Ayuda para mi primer exploit
Publicado por: dRak0 en 2 Octubre 2014, 22:18 PM
Cita de: Kaxperday en  2 Octubre 2014, 11:01 AM
Hola a todos, haber tengo un programa en C compilado con el siguiente código:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
int main(int argc,char **argv)
{
    char string[16];
    strcpy(string,argv[1]);
    return 0;
}


Vale quiero hacer un stack overflow, para ello meto de argumentos :

AAAAAAAAAAAAAAAABBBBBBBBCCCCDDDD

Vale con estos argumentos el programa ya da error, uso windows 8 y al parecer no deja explorar los errores luego no puedo ver la dirección del return pues no hay opción de detallar los problemas a diferencia de win7.

Vale ahora abro inmunnity debugger, abro el ejecutable, lo corro y que tengo que hacer? Le puse también los mismo argumentos y ahora? como encuentro la dirección de return? y cuando la encuentre tendría que meter hay un payload no?

Ayuda y gracias.

Primero tenes que saber como fue compilado el codigo.¿Le agregaron alguna proteccion?Si no tiene ninguna , es tan simple como localizar la direccion donde se encuentra la variable , fijarse a cuanto esta el eip , y sobreescribir a la direccion que queres que salte.Creo que el gcc tiene proteccion por default , deberias indicar que no queres que tenga proteccion.

Tenes que saber algo basico como cuando se hace un call ,anteriormente se habian pusheados los argumentos de este y se pushea la direccion a donde se va a volver luego de la funcion llamada.Cada funcion crea un marco de pila, pushea ebp e iguala ebp con esp, despues reserva las variables locales.Si uno desborda una , sobreescribira todo lo de arriba , variables locales , ebp,eip , argumentos.

Si no entendes lo que te digo (se que soy medio medio explicando) , busca como funciona el tema de las funciones en asm,convenciones para limpiar la pila , etc.

No uses Inmunnity Debugger , usa IDA, ta mas lindo.En cuanto a tutoriales , entra a la pagina de ricardo narvaja , que tiene de todo, incluso subieron en español los tutes de corelan.

Para practicar http://exploit-exercises.com/ , yo aprendi de ahi.Es orientado a GNU/Linux , pero la base es practicamente igual a windows.

Saludos.
Título: Re: Ayuda para mi primer exploit
Publicado por: Kaxperday en 4 Octubre 2014, 20:43 PM
Hola a todos siento la tardanza, me desconecté un poco del tema.

CitarInmunnity Debugger es OllyDbg!  :P

Pues vaya, tengo los 2 pensaba que eran diferentes pero ya veo son iguales, usaré de momento el que usen en los tutoriales xD

CitarNo uses Inmunnity Debugger , usa IDA

No sé cual es ese, pero no creo que lo descargue de momento ya tengo 2 que hacen lo mismo xD

CitarCreo que el gcc tiene proteccion por default

Pues usé gcc así que es probable que eso tenga algo que ver, aunque creo que el problema soy yo que no tengo idea de esto y no lo sé bien como hacer.

La página de exploits de ejercicios tiene buena pinta pero hay que descargar y demás, intentaré aprender sin descargar a ser posible trabajando sobre mis programas, aunque no descarto usarla en el futuro.

La página de corelan ya la vi anteriormente, bueno supongo que solo tengo que leerla más detalladamente. Abrí el tema, y realmente apenas dediqué tiempo a crear el exploit solo traté de hacer un tutorial que no me salió, solo tengo que dedicarlo más tiempo.

Por cierto si que se un poco de ensamblador hace tiempo lo di en clase, el problema lo tengo a la hora de encontrar el return una vez que abro el .exe con el programa, ¿como se busca y en qué ventana?

Hasta lo que se abro el .exe lo corro, y me voy a la ventanita de CPU y abro la subventana de abajo a la derecha y alli le doy a lock stack, y me deberían de aparecer los argumentos que he metido como se asignan pero me siguen saliendo @ y así, sabeis algo?

Saludos
Título: Re: Ayuda para mi primer exploit
Publicado por: ameise_1987 en 2 Noviembre 2014, 03:12 AM
Cita de: MCKSys Argentina en  2 Octubre 2014, 20:50 PM
Inmunnity Debugger es OllyDbg!  :P

Saludos!

Con varios bug parchados y soporta scripting en python que te ayuda a realizar las tareas
10 veces más rápido ejejejejje ......
Título: Re: Ayuda para mi primer exploit
Publicado por: MCKSys Argentina en 2 Noviembre 2014, 05:05 AM
Cita de: ameise_1987 en  2 Noviembre 2014, 03:12 AM
Con varios bug parchados y soporta scripting en python que te ayuda a realizar las tareas

Hay muchas versiones de Olly parcheadas. Y hay un plugin de python que permite usar el lenguaje en Olly.

Cita de: ameise_1987 en  2 Noviembre 2014, 03:12 AM
10 veces más rápido ejejejejje ......

OK. Si tu lo dices...  :P
Título: Re: Ayuda para mi primer exploit
Publicado por: ameise_1987 en 2 Noviembre 2014, 05:33 AM
Cita de: MCKSys Argentina en  2 Noviembre 2014, 05:05 AM
Hay muchas versiones de Olly parcheadas. Y hay un plugin de python que permite usar el lenguaje en Olly.

OK. Si tu lo dices...  :P

Sabía que me responderías ajajajajja, se que eres fanboy de olly hermano, yo lo soy de immunity, he
leído post donde defiendes a pie juntillas , solo era broma .... por cierto mis respetos he leído varios documentos tuyos en ricardonarvaja.ino .

saludos!
Título: Re: Ayuda para mi primer exploit
Publicado por: plataplomo2948 en 8 Noviembre 2014, 22:47 PM
No puede ver un crash porque eso no es un buffer overflow. Si ponga una llamada a "printf("%s\n", string)" despues del strcpy va a mostrar exactamente lo que puso sin error, aun que el buffer es "demasiada pequena".

Un bufferoverflow no siempre va a pasar cuando hay un buffer demasiada pequena. Los overflows del stack solo pasan cuando hay otro data en el stack para borrar, en en ese caso debido al tomano de la programa, no hay otra informacion, y la programa sigue normalmente. Si ponga mas variables, y hace mas operaciones dentro de su programa, antes de la llamada a strcpy, tal vez puede ver un overflow.

Yo le recomendaria practicar con otras programas que ya son explotadas para aprender.