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

2 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