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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


  Mostrar Mensajes
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 19
11  Seguridad Informática / Bugs y Exploits / Re: Deshabilitando protecciones contra Buffer Overflows en: 15 Febrero 2012, 22:10 pm
Tendrias que poner el desensamblado de tu funcion. Para mi debe ser por la alineacion de 16 bytes de la pila, pero no estoy seguro. argv es mas grande y las direcciones de las variables locales se corren (mas abajo), y capaz que sp se te paso a la siguiente alineacion.
12  Seguridad Informática / Bugs y Exploits / Re: Esta vez duda usando libc en: 14 Febrero 2012, 00:11 am
haha felicitaciones!! ya estas listo pianawan ;-)

Los 200 espacios te sirven en caso de que la direccion al string /bin/sh cambie un toque, el exploit te va a seguir funcionando. Es decir, que le pases "  /bin/sh" o "         /bin/sh" a system(), el resultado es el mismo.
13  Seguridad Informática / Bugs y Exploits / Re: Esta vez duda usando libc en: 12 Febrero 2012, 21:55 pm
Asi es, lo de system/exit/tobinsh es para que lo reemplaces con las direcciones y le des al FIXME hasta que veas que sobreescribiste con la dir de system el eip.

Para que metemos /bin/sh como String?Ahhh entiendo que es para que System lo coja como parámetro?
Sip, cuando llamas a system le tenes que pasar un puntero a un string y para eso vas a tener que buscar la direccion de argv[1] en vuln.
14  Seguridad Informática / Bugs y Exploits / Re: problema ret2libc sacando direccion d memoria system() en: 12 Febrero 2012, 19:14 pm
Ah, bueno como te decia agregale el if y busca la dir de system en la plt:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. fvuln(char *temp1, char *temp2)
  5. {
  6.   char name[512];
  7.  
  8.   strcpy(name, temp2);
  9.   printf("Hello, %s %s\n", temp1, name);
  10. }
  11.  
  12. int main(int argc, char *argv[])
  13. {
  14.   fvuln(argv[1],argv[2]);
  15.   printf("Bye %s %s\n", argv[1], argv[2]);
  16.  
  17.   if (argc < 0)
  18.      system("");
  19.  
  20.  
  21.   return 0;
  22. }
  23.  

Y en gdb la sacas asi:

Código
  1. p 'system@plt'
  2.  
15  Seguridad Informática / Bugs y Exploits / Re: problema ret2libc sacando direccion d memoria system() en: 12 Febrero 2012, 15:49 pm
El hecho que haya bytes nulos te complica la vida, si es que es una cadena que le estas pasando.
La direccion es corta porque debe ser la que va directamente hacia libc, a mi me pasa lo mismo en linux. Danos mas detalles, que programa intentas explotar?

Una solucion para tener una direccion sin bytes nulos seria usar la PLT del programa vulnerable, pero la entrada de system no la vas a tener si no es usada por el programa. Si es algo que escribiste vos para testear el ret2libc podes probar de agregarla a mano:

Código
  1. if (argc < 0)
  2. system("no se va a ejecutar");
  3.  

Y ahi te deberia aparecer. En gdb la sacas con "x system" y te deberia dar una direccion dentro del espacio del programa vulnerable.

Proba asi, sino va a ser mas dificil explotarlo.

Saludos.
16  Seguridad Informática / Bugs y Exploits / Re: Esta vez duda usando libc en: 12 Febrero 2012, 15:38 pm
Hola pianista,

-Entiendo que si lo hago funcionar por ejemplo así: ./ret2libc 512 10

Tendría ya que pasarse metiendo caracteres puesto que supuestamente me rellenaría el buffer (igual que hacemos en perl) y me metería 10 direcciones de offset con lo cual debería ya estar sobreescribiendo la pila. (dado que en perl le estamos pasando 10 direcciones más y para nosotros sería como desplazarnos 10 respecto de donde está $esp)

Lo codeaste vos ret2libc? Porque no entiendo bien que es lo que intenta hacer. Todos los valores de retorno (sc) se meten al principio mientras que deberian ir al final. La direccion que se saca con find_start() tampoco es muy fiable que digamos, en principio deberia darte la direccion de la ultima variable declarada, pero ni tampoco porque la funcion find_start no es __naked, o sea te diria que lo hagas a manopla con perl ya que te va a resultar mas facil. La sola complicacion, y tampoco es gran cosa, es meter el puntero hacia "/bin/sh".

Hace una cosa, hacete una cadena asi:

Código
  1. print " " x 200 . "/bin/sh;" . "A" x FIXME . "SYSTEM()" . "EXIT()" . "TOBINSH";
  2.  

Los 200 espacios antes de /bin/sh te dan un poco de juego cuando elijas la direccion al string /bin/sh, ya que system() no los tiene en cuenta. El punto y coma despues de /bin/sh te permite meter cualquier cosa despues. En FIXME mete un valor hasta llegar a hitear eip con la direccion "SYSTEM()", o sea ahi pone la direccion de system que encontraste.
Y en TOBINSH tenes que poner la direccion al principio de ese buffer en el programa vulnerable.

EDITO: El código no sé si es correcto lo he encontrado en /include/asm-generic/errno.h

Código:
#define  EDEADLK     35 /* Resource deadlock would occur */
#define  ENAMETOOLONG   36 /* File name too long */
#define  ENOLCK      37 /* No record locks available */
#define  ENOSYS      38 /* Function not implemented */
#define  ENOTEMPTY   39 /* Directory not empty */
#define  ELOOP    40 /* Too many symbolic links encountered */

Me da que no va a ser eso, no?


mm ni idea si son esos los codigos, lo siento.

Correcto

He metido por ejemplo como dirección 60606060 y me salta esa dirección en EIP y me queda también en la pila.

La dirección de sh la saqué por memfetch como puse arriba, usándolo en un programa de C que lo invocaba y esperaba X segundos antes para darte tiempo a usar memfetch.

Y las otras las saqué mediante gdb.

Saludos y gracias.

No conocia memfetch. La de system como hiciste? corriste vuln con gdb e hicistes un "x system" ?
17  Seguridad Informática / Bugs y Exploits / Re: Esta vez duda usando libc en: 11 Febrero 2012, 00:16 am
Acabo de repensarlo y si pudieras fijarte en las direcciones, creo que realmente estaba tratando de escribir la dirección correcta, no?, que es: 0x080483a7

Esa direccion es codigo ejecutable y no la vas a poder escribir, es justo donde esta el call strcpy en main. EDIT: Al mejor te referias a ese valor en el stack?

Arranca de a poco sino. El que te arma el egg dejalo de lado, usa perl por el momento.

Código
  1. $./vuln `perl -e 'print "A" x 512 . "\xSY\xST\xEM\xAD" x 10;'`

512 para llenar bien little_array, y despues 10 veces la dir de system() para asegurarse que eip la tome bien (tenes ebp antes y despues deberia venir eip). Despues si queres fijate bien el offset para hitear justo eip.

Probalo en gdb primero
Código
  1. $gdb --args ./vuln `perl -e 'print "A" x 512 . "\xSY\xST\xEM\xAD" x 10;'`

break en el ret de main
Código
  1. b *0x080483a8

print del stack
Código
  1. x/64x $esp

Ahi te deberia aparecer la direccion de system que pusiste repetida 10 veces. El primer valor es el que va a tomar eip para el ret.

Intenta todo esto y decime como te fue.

Sino, hay varios detalles antes de poder explotar bien el codigo que pusiste.
1- Como sacaste la direccion de system() ?
2- La direccion de /bin/sh puede variar segun lo ejecutes en gdb o solo.

Saludos
18  Seguridad Informática / Bugs y Exploits / Re: problema ret2libc sacando direccion d memoria system() en: 8 Febrero 2012, 21:48 pm
No podes meter bytes nulos?
La pila no es ejecutable ?
Si no podes pasar bytes nulos podes intentar buscando pedazos de codigos, en las libs o tu modulo, que te sean utiles para formar la direccion de system que buscas a partir de bytes no nulos.

Estas en windows o linux?
19  Seguridad Informática / Bugs y Exploits / Re: Esta vez duda usando libc en: 8 Febrero 2012, 15:36 pm
Hola pianista,

Claro, yo no tengo que intentar escribir el :
0x080483a7
Eso eso, el ret de strcpy __no vas a poder sobrescribirlo__, el que tenes que buscar es el del main. strcpy te va a servir para sobreescribir el ret de main.

Si miras el call stack te vas a dar cuenta (dirs crecientes de arriba para abajo):

* variables locales de strcpy()
* ret strcpy (call strcpy)
* variables locales (little_array[512])
* ret main (call main)

Como ves, cuando queres hacer un bof de little_array lo que logras sobreescribir es el ret main puesto que vas hacia direccions crecientes. El ret de strcpy te es inaccesible.

Que aparece en mi depuración, puesto que eso es la dirección que ha metido en la pila la función strcpy para saber a donde tiene que volver, correcto??
Si. Mete un breakpoint a la vuelta de strcpy y justo antes del ret de main para ver si sobreescribiste bien las cosas.

Saludos!
20  Seguridad Informática / Bugs y Exploits / DEP bypassing en Windows en: 9 Enero 2012, 21:50 pm
Buenas exploiters!

Bueno queria compartir con ustedes un documento que habia escrito hace unos meses sobre las tecnicas "actuales" de bypass de DEP en windows, con un ejemplo practico sobre la utilizacion de una de ellas.

Data Execution Prevention (DEP) bypassing en Windows

Espero que lo disfruten y les sea de utilidad. Cualquier critica, correcion, evolucion es bienvenida!

Saludos.
Páginas: 1 [2] 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ... 19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines