Mostrando entradas con la etiqueta Exploiting. Mostrar todas las entradas
Mostrando entradas con la etiqueta Exploiting. Mostrar todas las entradas

domingo, 4 de octubre de 2015

Mr. Robot - Una serie para nosotros

Con el objetivo de retomar mi tan descuidado blog, hoy compartiré una pequeña entrada sobre una serie que particularmente me llama mucho la atención Mr. Robot, serie que trata sobre una Elliot un especialista en seguridad informática que trabaja en Allsafe empresa que brinda servicios sobre seguridad a diferentes empresas.


Elliot es una persona asocial que una de las formas de interactuar con la sociedad se dedicaba a comprometer la seguridad de sus “amigos” para conocer un poco mas de su vida.

Por el momento existe coherencia en los términos utilizados, herramientas y técnicas; en cada capitulo se puede observar el uso de herramientas o comandos nativos de Linux.

Incluso en un capitulo escuche el termino “cadena de custodia”, para la preservación de la evidencia de los archivos comprometidos por un grupo de Hackers denominado Fsoecity.


Saludos
iA

domingo, 1 de septiembre de 2013

Escribiendo un Exploit ( Buffer Overflow) I

Existen muchos artículos en Internet "de todos los colores y sabores del arcoiris" que explican como funciona el "buffer overlflow" , voy a tratar de explicarlo como me hubiera gustado que me lo expliquen xD.

Antes de entrar a sobre-escribir las direcciones de memoria y buscar un jmp , tenemos que conocer la teoría para llevarlo a la practica.

Comencemos por lo básico que son los registros del procesador, si necesitas saber sobre sistemas de numeración como ser binario , decimal o hexadecimal te sugiero el siguiente enlace.

La forma en que se representa la memoria depende únicamente de la arquitectura del procesador dicho esto existen 2 formas de hacerlo
  • Big Endian: El byte más significativo se representa a la izquierda.De izquierda a derecha).
  • Little Endian: El byte mas significativo se representa a la derecha. Análogamente, de derecha a izquierda
Representación de la dirección de memoria 01234567

EAX , EBX , ECX , ESI , EDI : Son registros multipropositos para usarlo segun el programa.

EAX: Es el registro acumulador cualquier instruccion de retorno la almacena el valor en EAX.

EBX: Este registro es utilizado como manejador o "handler" de ficheros de direcciones de memoria.

ECX: Se utiliza como registro contador , por ejemplo para aplicar un ciclo o loop , cuando ECX llega a 0 el ciclo acaba
ESI & EDI: Son registros que son utilizados para guardar direcciones de memoria.
EIP: Es el registro donde se almacena la dirección de la siguiente instrucción que debe ejecutar el ordenador.

EBP: Es el registro "puntero a base", apunta al elemento mas alto de la pila ; la pila es una estructurara de datos que utiliza el procesador para ayudarse en la ejecución de los programas.

ESP:  Es el registro que apunta a la "cima" , apunta a la direccion de memoria (donde comienza la pila).

NOP: Instrucción en ensamblador que significa "No Operation" , lo único que hace e aumentar en uno el registro de la siguiente instrucción "EIP".

Cabe aclarar que el modo de acceso a la "pila" es LIFO , "last in ;first out" el ultimo en entrar el primero en salir.


¿Que es el desbordamiento de memoria?

Sencillamente se puede definir como un error en nuestro código que no controla correctamente la cantidad de datos que se copian sobre una area de memoria reservada (Buffer).

Si tenemos asignados en un array (independiente del lenguaje de programación) 30 espacios y nosotros "introducimos" 40 espacios en , estamos causando un desbordamiento de memoria por que los asignados son 30 y no 40.

El siguiente código (escrito en C) es vulnerable


#include  
int main (int argc, char **argv)

    char buffer[64];
    if (argc < 2){ 
        printf ("Introduzca un argumento al programa\n");  
        return 0;  acaba
        }
    strcpy (buffer, argv[1])
    return 0; 
}

La funcion principal recibe argumentos como parametro ,reservamos un buffer de 64 espacios continuos en memoria de tipo "char" creando nuestro buffer.

char *strcpy(char *cadena1, const char *cadena2);

La funcion strcpy copia la cadena2 (incluyendo el caracter nulo "\0" en la cadena1) , el gran problema es que no verifica que la cadena2 sea del mismo "tamaño" o menor a la del buffer sobre-escribiendo las direcciones de memoria contiguas generando el desbordamiento.

Creo que para ser la introducción por el momento estamos bien!  , en el proximo post, queda totalmente prohibido la teoria y directo a la practica!

Slds
Related Posts Plugin for WordPress, Blogger...