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
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
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
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
Pasando el 'slaver' por py2exe podríamos troyanizarlo fácilmente para poder ocultarlo y autoarrancarlo en algún Windows. ¿Me equivoco?
ResponderEliminarCreo que sería un artículo interesante.
vas a lo "útil".. jajaj me lo apunto.
ResponderEliminar¿con este metodo se puede conectar al puerto de una aplicacion para no tener que abrir puertos en mi router?
ResponderEliminareso es! :)
Eliminar