Explotación de Format String Bugs

Hoy le llego la hora al Exploit Writing, un tema que me encanta pero por falta de tiempo siempre lo tengo que dejar de lado. Hoy vamos a hablar de un tipo de bugs de la que todos han escuchado hablar, pero pocos saben explotar.

Se trata de los conocidos format string bugs. Estos errores son explotados desde la edad de piedra, pero siempre esta copado aprender algo que no se conoce, así que acá voy a ir anotando mis avances. Encima si ayudo a alguien aunque sea un poco a que entienda esto… entonces doble felicidad.

Antes de comenzar la explicación, voy a pegar una imagen que encontre aca, ese dibujito, resume muy bien cual es el bug 😉

La mayoría de los textos que van a encontrar dando vueltas por internet sobre este tema, explotan todo en Linux y usan el espartano gdb para analizarlo. Encima en ese tiempo no existia la tecla “Impr Pant” por lo tanto no encontras una captura de pantalla ni de suerte :-P.

Vamos a comenzar con un típico programa vulnerable de prueba, para entender la cosa:

#include <stdio.h>

char cookie;

int main(int argc, char **argv) {
char *p;
p = &cookie;
printf(argv[1]);

if(cookie == (char)0xFE) {
printf("\n[+] You are a great exploit writer\n");
} else {
printf("\n[-] -1 for you\n");
}
return 0;
}

Un programa muy simple, definimos una variable cookie a la cual no le asignamos ningún valor, pero la misma es comparada con un valor (0xFE), si es igual te imprime el good boy, sino el bad boy.

Antes de adentrarnos donde esta el error, vamos a comenzar viendo el programa:

Read more…

Construyendo tipos de datos de C con ctypes

Seguimos con estos post dedicados a python y su libreria ctypes. En este caso voy a dar algunos ejemplos para saber que tipo de datos usar en cada variable que criemos.

Hago esto… porque yo como muchos reversers estoy acostumbrado a ver todo como BYTE, WORD, DWORD. Ya cuando me agregan palabras como punteros o integer, ya me rompe la paciencia 😛 por eso vamos a ver que tamaño le da a cada cosa nuestra querida librería de python.

Esta es la lista de estructura de datos que nos provee el librito “Gray Hat Python“:

C Type Python Type ctypes Type
char 1-character string c_char
wchar_t 1-character Unicode string c_wchar
char int/long c_byte
char int/long c_ubyte
short int/long c_short
unsigned short int/long c_ushort
int int/long c_int
unsigned int int/long c_uint
long int/long c_long
unsigned long int/long c_ulong
long long int/long c_longlong
unsigned long long int/long c_ulonglong
float float c_float
double float c_double
char * (NULL terminated) string or none c_char_p
wchar_t * (NULL terminated) unicode or none c_wchar_p
void * int/long or none c_void_p

Read more…

Calling conventions y ctypes

Comencé a leer el libro “Gray Hat Python” y ya comenzamos con escollos por el camino, como no podía ser de otra manera… el primer ejemplo que se me ocurrió probar me tiraba un error.

En estas poquitas lineas voy a dejar documentado como fue que la safe, para que a nadie le suceda de nuevo.

Tal vez el error se dio porque me apure a agarrar el interprete, antes de documentarme bien acerca de ctypes y python. Pero hay veces que leer tanto le quita la gracia, y uno quiere probar rápidamente si tal o cual cosa sirve para sus propósitos ❗

Recién comencé con el capitulo 2 y me tope con ctypes, una librería que no conocía y que provee la funcionalidad de usar .dll’s desde el mismo código de python. No hace falta decir lo valioso que puede ser para nosotros tener este poder al alcance de la mano.

En el libro tenemos el siguiente ejemplo:

from ctypes import *
msvcrt  = cdll.msvcrt
message_string = "Hello world!\n"
msvcrt.printf("Testing: %s", message_string)

ahí nomas sin dudarlo, agarre la consola interactiva y me dispuse a probar ese ejemplo.

Read more…

Introduccion a RSA – parte I

March 29, 2011 2 comments

Hoy traigo un ejemplo practico para comenzar a meternos en los crypto challenges de RSA, documentacion sobra por todos lados pero esta media pobre. Con pobre me refiero a que son medios para gente muy avanzada que ya esta en el tema hace rato y no dan muchas pistas de como resolvieron tal o cual problema

Por cuestiones de espacio el tute fue dividido en dos partes, en esta trataremos el reverseo del programa, y en la segunda vamos a darle un poco a las matematicas con python para tratar de resolverlo

nuestro objetivo sera un crackme inocente que encontre en crackmes.de bajo el nombre de Ninja Crackme by Bart

esto no va a ser un tute sobre como resolverlo, sino que voy a dar algunos pantallazos para que me puedan seguir (no esperen que explique como poner un bp)

carita del crackme

miracl_II-1

Read more…

Finding the M.I.R.A.C.L.

March 10, 2011 3 comments

Hola a todos, puede parecer que voy a encarar un tema religioso en las proximas lineas pero a no equivocarse. Lo que sigue va a ser una serie de articulos dedicados a la criptografia en diferentes crackmes.

Lo primero que note es que cuando me meti con RSA todos me decian: “usa la funcion tatata de euler que sale” y me tiraban una funcion copy/pasteada del tipo

d=e^{-1}\mod{n}

esto me dio la pauta de que muy bien nadie sabe como funciona esto del crypto, y cada vez que preguntas algo te contestan con mas preguntas….. calculo que esa fue la primera piedra en el camino que me encontre, en unos dias le voy a dedicar un post enterito a Euler, pero por ahora vamos con otra cosa.

Si han leido algun tute por ahi sobre crackmes con criptografia RSA habran aunque sea oido de la libreria M.I.R.A.C.L. esta libreria nos ayuda a trabajar con numeros muy grandotes conocidos como BIGNUM, permitiendonos usar los numeros gigantes que manejan en este tipo de retos.

Si nos encontramos con algun programa que use esta libreria, veremos que tiene un monton de funciones inlineadas bastante complicadas de tracear, dichas funciones son de la libreria estatica miracl

basta con ir un rato a http://crackmes.de/ bajarse un reto con crypto echo en MASM y me juego la cabeza a que usaron miracl para algo

estas librerias que se añaden al ejecutable no tienen ningun nombre cuando las vemos con nuestros debuggers favoritos

miracl-2

Read more…

Nuevo Plugin para FUU – dePFE

February 18, 2011 1 comment

Hola amigos, hoy les traigo una pequeña reseña sobre el packer PFE CX v0.1 con el cual hice mis primeros pinitos en TitanEngine y FUU

primero echemos una mirada a la GUI del protector

Read more…