Ayuda para mi primer exploit

Iniciado por Kaxperday, 2 Octubre 2014, 11:01 AM

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

Kaxperday

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.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

kub0x

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!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


MCKSys Argentina

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!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


dRak0

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.

Kaxperday

#4
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
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

ameise_1987

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 ......
firma retirada por insultar/cachondearse de (anelkaos) del staff.

MCKSys Argentina

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

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


ameise_1987

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!
firma retirada por insultar/cachondearse de (anelkaos) del staff.

plataplomo2948

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.