Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Venom — Venom - Un proxy de múltiples saltos para probadores de penetración | Kitploit
Herramientas/GitHubGitHub/dliv3/venom
Herramientas de Cifrado/DescifradoMapeo de RedesPruebas de PenetraciónComando y ControlRed TeamingHerramienta de Acceso Remoto
GitHubdliv3/venom

Venom

Venom - Un proxy de múltiples saltos para probadores de penetración

Ver Repositorio
2.2k3584hace 6 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Venom - Un Proxy Multi-Salto para Probadores de Penetración

简体中文 | English

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!

Características

  • Topología de red visual
  • Proxy SOCKS5 multinivel
  • Reenvío de puertos multinivel
  • Reutilización de puertos (Apache/MySQL/...)
  • Túnel SSH
  • Shell interactivo
  • Carga y descarga de archivos
  • Cifrado de comunicación entre nodos
  • Soporta múltiples plataformas (Linux/Windows/MacOS) y múltiples arquitecturas (x86/x64/ARM/MIPS)

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.

Instalación

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:

root@kitploit:~
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

Uso

Video de demostración en Youtube: https://www.youtube.com/playlist?list=PLtZO9vwOND91vZ7yCmlAvISmEl2iQKjdI

1. Parámetros de línea de comandos de admin/agent

  • 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:

    root@kitploit:~
    ./admin_macos_x64 -lport 9999
    
    root@kitploit:~
    ./agent_linux_x64 -rhost 192.168.0.103 -rport 9999
    

    El agent escucha en un puerto, el admin inicia la conexión:

    root@kitploit:~
    ./agent_linux_x64 -lport 8888
    
    root@kitploit:~
    ./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:

    1. Reutilización de puertos mediante las opciones SO_REUSEPORT y SO_REUSEADDR.
    2. Reutilización de puertos mediante iptables (solo compatible con Linux).

    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

    root@kitploit:~
    # 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
    
    root@kitploit:~
    ./admin_macos_x64 -rhost 192.168.204.139 -rport 80
    

2. Comandos integrados del nodo admin

  • help Muestra la ayuda

    root@kitploit:~
    (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.

    root@kitploit:~
    (node 1) >>> show
    A
    + -- 1
         + -- 2
              + -- 3
         + -- 4
    

3. Notas importantes

  • Por ahora, solo un nodo admin puede gestionar la red.
  • 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.
  • Cuando utilice el segundo método de reutilización de puertos (basado en iptables), debe usar script/port_reuse.py para activar las reglas de reutilización de puertos configuradas por el agent en la máquina objetivo.

TODO

  • Integración con reGeorg
  • Múltiples nodos admin gestionando la red simultáneamente
  • Cifrado del tráfico de comunicación entre nodos
  • Soporte UDP en SOCKS5
  • Integración con Meterpreter (pendiente)
  • API RESTful
  • Cerrar proxy y reenvío de puertos

Agradecimientos

  • rootkiter#Termite
  • ring04h#s5.go
  • n1nty#远程遥控 IPTables 进行端口复用
Descargar herramienta

Segundo método de reutilización de puertos

root@kitploit:~
# 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

root@kitploit:~
# 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.

    root@kitploit:~
    # 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
    
  • 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

    root@kitploit:~
    (admin node) >>> goto 1
    (node 1) >>> 
    

    Una vez que haya ido a un nodo, puede usar los comandos que se describen a continuación.

  • getdes/setdes Obtener/establecer la descripción del nodo

    root@kitploit:~
    (node 1) >>> setdes linux x64 blahblahblah
    (node 1) >>> getdes
    linux x64 blahblahblah
    
  • connect/listen/sshconnect Conexión entre nodos

    El nodo 1 se conecta al puerto 9999 de 192.168.0.103.

    root@kitploit:~
    (node 1) >>> connect 192.168.0.103 9999
    connect to 192.168.0.103 9999
    successfully connect to the remote port!
    (node 1) >>> show
    A
    + -- 1
         + -- 2
    

    El nodo 1 escucha en el puerto 9997; luego en otra máquina ejecute ./agent_linux_x64 -rhost 192.168.204.139 -rport 9997 para conectarse al nodo 1.

    root@kitploit:~
    (node 1) >>> listen 9997
    listen 9997
    the port 9997 is successfully listening on the remote node!
    (node 1) >>> show
    A
    + -- 1
         + -- 2
         + -- 3
    

    En 192.168.0.104 ejecute ./agent_linux_x64 -lport 9999; el nodo 3 establece un túnel SSH mediante sshconnect para conectarse al puerto 9999 de 192.168.0.104. Puede usar contraseña o clave privada SSH para la autenticación.

    root@kitploit:~
    (node 1) >>> goto 3
    (node 3) >>> sshconnect [email protected]:22 9999
    use password (1) / ssh key (2)? 2
    file path of ssh key: /Users/dlive/.ssh/id_rsa
    connect to target host's 9999 through ssh tunnel ([email protected]:22).
    ssh successfully connects to the remote node!
    (node 3) >>> show
    A
    + -- 1
         + -- 2
         + -- 3
              + -- 4
    
  • shell Obtener un shell interactivo en el nodo

    root@kitploit:~
    (node 1) >>> shell
    You can execute commands in this shell :D, 'exit' to exit.
    bash: no job control in this shell
    bash-3.2$ whoami
    whoami
    dlive
    bash-3.2$ exit
    exit
    exit
    
  • upload/download Subir/descargar archivos desde/hacia el nodo

    Subir el archivo local /tmp/test.pdf al nodo 1 como /tmp/test2.pdf.

    root@kitploit:~
    (node 1) >>> upload /tmp/test.pdf /tmp/test2.pdf
    upload /tmp/test.pdf to node 1: /tmp/test2.pdf
    this file is too large(>100M), do you still want to upload it? (y/n)y
     154.23 MiB / 154.23 MiB [========================================] 100.00% 1s
    upload file successfully!
    

    Descargar el archivo /tmp/test2.pdf del nodo 1 a local como /tmp/test3.pdf.

    root@kitploit:~
    (node 1) >>> download /tmp/test2.pdf /tmp/test3.pdf
    download /tmp/test2.pdf from node 1: /tmp/test3.pdf
    this file is too large(>100M), do you still want to download it? (y/n)y
     154.23 MiB / 154.23 MiB [========================================] 100.00% 1s
    download file successfully!
    
  • socks Establecer un proxy SOCKS5 hacia un nodo

    root@kitploit:~
    (node 1) >>> socks 7777
    a socks5 proxy of the target node has started up on local port 7777
    

    Después de ejecutar el comando socks, se abrirá un puerto local en el nodo admin, como el 7777 mencionado. Use el 7777 para el proxy SOCKS5.

  • lforward/rforward Redirigir un puerto local a uno remoto / redirigir un puerto remoto a uno local

    lforward redirige el puerto local 8888 del nodo admin al puerto 8888 del nodo 1.

    root@kitploit:~
    (node 1) >>> lforward 127.0.0.1 8888 8888
    forward local network 127.0.0.1 port 8888 to remote port 8888
    

    rforward redirige el puerto 8889 de la red del nodo 1 (192.168.204.103) al puerto local 8889 del nodo admin.

    root@kitploit:~
    (node 1) >>> rforward 192.168.204.103 8889 8889
    forward remote network 192.168.204.103 port 8889 to local port 8889