Shootback: herramienta en python para realizar un túnel TCP inverso

Shootback es una herramienta escrita en Python para realizar un túnel TCP inverso y permitir el acceso hacia una máquina detrás de un NAT o firewall. Consume menos de 1% de CPU y 8MB de memoria con una concurrencia de 800 conexiones (sockets). El cliente (Slaver) es un único fichero que sólo tiene como dependencia la librería estándar de python(2.7/3.4+) . 

Cómo funciona  

Escenarios típicos 

 1 Acceder al equipo de una compañía/escuela (sin IP pública) desde casa
 2 Hacer un sitio/red públicos
 3 Facilitar la intrusión a una red privada
 4 Ayudar a los participantes de un CTF offline
 5 Conectarse a un dispositivo con una IP dinámica, como una ADSL doméstica

Comenzando a usarlo 

 1. requisitos:
 ◦ Master: Python3.4+, independiente del SO
 ◦ Slaver: Python2.7/3.4+, independiente del SO
 ◦ no tiene dependencias externas, sólo las librerías estándar de python

 2. descarga git clone https://github.com/aploium/shootback 

 3. (opcional) si necesitas un único fichero slaver.py, ejecuta python3 build_singlefile_slaver.py

 4. ejecuta estos comandos

# master listen :10000 for slaver, :10080 for you
python3 master.py -m 0.0.0.0:10000 -c 127.0.0.1:10080

# slaver connect to master, and use example.com as tunnel target
# ps: you can use python2 in slaver, not only py3
python3 slaver.py -m 127.0.0.1:10000 -t example.com:80

# doing request to master
curl -v -H "host: example.com" 127.0.0.1:10080

5. un ejemplo más realista:
# slaver_local_ssh <---> slaver <--> master(22.33.44.55) <--> You

# ---- master ----
python3 master.py -m 0.0.0.0:10000 -c 0.0.0.0:10022

# ---- slaver ----
python(or python3) slaver.py -m 22.33.44.55:10000 -t 127.0.0.1:22

# ---- YOU ----
ssh 22.33.44.55 -p 10022

 6. para más ayuda ver python3 master.py --help
y python3 slaver.py --help

Tips

 1. ejecutar en modo daemon:

nohup python(or python3) slaver.py -m host:port -t host:port -q &
o:
# screen is a linux command
screen
python(or python3) slaver.py -m host:port -t host:port
# press  ctrl-a d  to detach screen
# and if necessary, use "screen -r" to reattach
 2. CUALQUIER servicio que use TCP es “shootback-able”. HTTP/FTP/Proxy/SSH/VNC/...

 3. shootback sólo hace la función de transmisión, no cifra ni hace de proxy. Sin embargo se puede usar un proxy de terceros (ej. shadowsocks) en el slaver.
 Por ejemplo:


shadowsocks_server--shootback_slaver--shootback_master--shadowsocks_client(socks5)

 Aviso 

 1. En windows, debido al límite de CPython select.select(), shootback no puede manejar más de 512 conexiones de forma concurrente, por lo que podrías encontrarte con el error:
 ValueError: too many file descriptors in select() 

 2. Si necesitas mayor concurrencia en Windows se recomienda usar Anaconda-Python3 que aumenta el límite a 2048

 Rendimiento

 1 En un portátil intel I7-4710MQ, win10 x64:
 ◦ 1.6Gbits/s de transferencia en loopback (usando iperf), con un uso aprox. del 5% de CPU.
 ◦ 800 threads ApacheBench, con menos de un 1% de CPU y 8MB de uso de memoria.

 Proyecto: https://github.com/aploium/shootback

4 comentarios :

  1. Pasando el 'slaver' por py2exe podríamos troyanizarlo fácilmente para poder ocultarlo y autoarrancarlo en algún Windows. ¿Me equivoco?
    Creo que sería un artículo interesante.

    ResponderEliminar
  2. ¿con este metodo se puede conectar al puerto de una aplicacion para no tener que abrir puertos en mi router?

    ResponderEliminar