Segfaulting del codice shell

0

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.

  1. Perché il programma segifica? Questo è un semplice testo ASCII, quindi l'offset deve essere corretto.
  2. Ho provato ad usare anche altri registri ma con un po 'di fortuna.
  3. 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.

    
posta Vinay 28.11.2016 - 10:31
fonte

1 risposta

2

Lo shellcode si auto modifica e quindi dovrebbe risiedere nello stack (o in qualche altra area scrivibile). Le seguenti istruzioni

mov byte [esi + 7], al
mov long [esi + 8], ebx
mov long [esi + 12], eax

stanno sovrascrivendo i JAAAAKKKK byte alla fine, che risiede nel segmento .text. Poiché il segmento .text non è scrivibile, il tuo programma lancia un segfault.

    
risposta data 28.11.2016 - 14:53
fonte

Leggi altre domande sui tag