
Venom - Um Proxy de Múltiplos Saltos para Testadores de Penetração
O Venom é uma ferramenta de proxy multi-nível desenvolvida em Go, projetada para testadores de penetração.
O Venom pode conectar múltiplos nós e, em seguida, usar esses nós como trampolins para construir proxies multi-nível.
Os testadores de penetração podem usar o Venom para rotear facilmente o tráfego de rede para várias camadas de redes internas e gerenciar os nós proxy de forma simples.
Esta ferramenta é destinada exclusivamente a pesquisas de segurança e fins educacionais. O usuário assume toda a responsabilidade legal e relacionada decorrente do uso desta ferramenta! O autor não assume qualquer responsabilidade legal ou relacionada!
Como dispositivos IoT (arquiteturas arm/mips/...) geralmente têm recursos limitados, para reduzir o tamanho do binário, os binários compilados para ambientes IoT neste projeto não suportam reutilização de porta e túnel SSH, e para reduzir o uso de memória, o número de conexões simultâneas e o tamanho do buffer são limitados.
Você pode baixar diretamente os executáveis compilados na release
Se você deseja compilar este projeto a partir do código fonte, precisa instalar go >= 1.11 e então executar os comandos abaixo
go get -u github.com/Dliv3/Venom/...
# $GOPATH是安装Go时配置的环境变量,可通过go env命令查看
cd $GOPATH/src/github.com/Dliv3/Venom
# 编译好的二进制文件存放在当前目录下的release文件夹中
./build.sh
Vídeo de demonstração no Youtube: https://www.youtube.com/playlist?list=PLtZO9vwOND91vZ7yCmlAvISmEl2iQKjdI
Os nós admin e agent podem escutar conexões ou iniciar conexões
admin escuta porta, agent inicia conexão:
./admin_macos_x64 -lport 9999
./agent_linux_x64 -rhost 192.168.0.103 -rport 9999
agent escuta porta, admin inicia conexão:
./agent_linux_x64 -lport 8888
./admin_macos_x64 -rhost 192.168.204.139 -rport 8888
O agent fornece dois métodos de reutilização de porta
Através da funcionalidade de reutilização de porta fornecida pelo Venom, no Windows você pode reutilizar portas de serviços como apache, mysql, etc., mas não pode reutilizar portas de serviços como RDP, IIS por enquanto. No Linux, você pode reutilizar a maioria das portas de serviço. A porta reutilizada ainda pode fornecer seu serviço original normalmente.
Primeiro método de reutilização de porta
# 以windows下apache为例
# 复用apache 80端口,不影响apache提供正常的http服务
# -lhost 的值为本机ip,不能写0.0.0.0,否则无法进行端口复用
./agent.exe -lhost 192.168.204.139 -reuse-port 80
./admin_macos_x64 -rhost 192.168.204.139 -rport 80
Segundo método de reutilização de porta
# 以linux下apache为例
# 需要root权限
sudo ./agent_linux_x64 -lport 8080 -reuse-port 80
Este método de reutilização de porta configura regras iptables na máquina local, redirecionando o tráfego da reuse-port para lport, que é então distribuído pelo agent.
Observe que se o programa for encerrado com sinais sigterm ou sigint (kill ou ctrl-c), o programa pode limpar as regras iptables automaticamente. Se o agent for morto com kill -9, as regras iptables não podem ser limpas automaticamente e precisam ser limpas manualmente, pois o programa agent não pode lidar com o sinal sigkill.
Para evitar que as regras iptables não sejam limpas automaticamente, impedindo o testador de penetração de acessar o serviço na porta 80, o segundo método de reutilização de porta usa iptables -m recent para controlar se as regras de encaminhamento iptables estão ativadas, através de um pacote TCP especial.
A implementação aqui faz referência a https://threathunter.org/topic/594545184ea5b2f5516e2033
# 启动agent在linux主机上设置的iptables规则
# 如果rhost在内网,可以使用socks5代理脚本流量,socks5代理的使用见下文
python scripts/port_reuse.py --start --rhost 192.168.204.135 --rport 80
# 连接agent节点
./admin_macos_x64 -rhost 192.168.204.135 -rport 80
# 如果要关闭转发规则
python scripts/port_reuse.py --stop --rhost 192.168.204.135 --rport 80
O Venom fornece funcionalidade de criptografia de comunicação entre nós. O usuário pode especificar uma senha através da opção -passwd, que é usada para gerar a chave necessária para a criptografia AES.
# 通过-passwd指定密码为dlive@dubhe
./admin_macos_x64 -lport 8889 -passwd dlive@dubhe
# agent指定相同的密码与admin节点连接
./agent_macos_x64 -rhost 192.168.0.103 -rport 8889 -passwd dlive@dubhe
(admin node) >>> help
help Help information.
exit Exit.
show Display network topology.
getdes View description of the target node.
setdes [info] Add a description to the target node.
goto [id] Select id as the target node.
listen [lport] Listen on a port on the target node.
connect [rhost] [rport] Connect to a new node through the target node.
sshconnect [user@ip:port] [dport] Connect to a new node through ssh tunnel.
shell Start an interactive shell on the target node.
upload [local_file] [remote_file] Upload files to the target node.
download [remote_file] [local_file] Download files from the target node.
socks [lport] Start a socks5 server.
lforward [lhost] [sport] [dport] Forward a local sport to a remote dport.
rforward [rhost] [sport] [dport] Forward a remote sport to a local dport.
A representa o nó admin, números representam nós agent
O diagrama de topologia abaixo mostra que o nó admin está conectado ao nó 1, o nó 1 está conectado aos nós 2 e 4, e o nó 2 está conectado ao nó 3
(node 1) >>> show
A
+ -- 1
+ -- 2
+ -- 3
+ -- 4
Observe que para operar em um nó recém-adicionado, você precisa primeiro executar o comando show no nó admin para sincronizar a topologia de rede e os números dos nós.
(admin node) >>> goto 1
(node 1) >>>
Após usar goto para um nó, você pode usar os comandos que serão apresentados a seguir.
(node 1) >>> setdes linux x64 blahblahblah
(node 1) >>> getdes
linux x64 blahblahblah
O nó 1 se conecta à porta 9999 de 192.168.0.103
(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
No nó 1, escute a porta 9997 e, em seguida, execute ./agent_linux_x64 -rhost 192.168.204.139 -rport 9997 em outra máquina para conectar ao nó 1