前言
Venom是一款由go语言开发的多平台多级代理工具,渗透测试人员可以使用Venom轻松地将网络流量代理到多层内网,并轻松地管理代理节点
下载地址:https://github.com/Dliv3/Venom/releases
如果想通过源码进行编译安装则下载https://github.com/Dliv3/Venom
环境准备
准备三台虚拟机
主机A 192.168.2.131 CentOS 主机B 192.168.2.135 CentOS
主机C 192.168.2.136 windows server 2008
Venom分为admin节点及agent节点,本次实验主要以主机A做为admin节点,特殊场景下也会有其他内网主机作admin节点。
admin/agent 连接
admin节点监听端口,agent节点连接
admin节点(主机A)执行
./admin_linux_x64 -lport 6666
agent节点(主机B)执行
./agent_linux_x64 -rhost 192.168.2.131 -rport 6666
agent节点监听端口,admin节点连接
agent节点主机B)执行
./agent_linux_x64 -lport 6666
admin节点(主机A)执行
./admin_linux_x64 -rhost 192.168.2.135 -rport 6666
端口复用
通过venom提供的端口复用功能,在windows上可以复用apache、mysql等服务的端口,暂时无法复用RDP、IIS等服务端口,在linux上可以复用多数服务端口。被复用的端口仍可正常对外提供其原有服务。
方法一
windows服务器(主机C)开启apache服务,开放80端口,该主机做为agent节点
agent节点(主机C)执行
agent.exe -lhost 192.168.2.136 -reuse-port 80 #注意这里lhost的ip地址写本机地址,但不要写0.0.0.0
admin节点(主机A)执行
./admin_linux_x64 -rhost 192.168.2.136 -rport 80
访问主机C的80端口,apache服务正常使用
方法二
与方法一不同,方法二主要是通过iptables进行转发,所以仅在linux使用,并且需要root权限,另外这里参考了其他大佬的文章,了解到如果通过sigterm
,sigint
信号结束程序(kill或ctrl-c),程序可以自动清理iptables规则。如果agent被kill -9
杀掉则无法自动清理iptables规则,需要手动清理,因为agent程序无法处理sigkill
信号,为了避免iptables规则不能自动被清理导致无法访问80端口服务,所以第二种端口复用方法采用了iptables -m recent
通过特殊的tcp包控制iptables转发规则是否开启。至于如何操作,则需要使用Venom自带的python脚本
主机A做agent节点,开启apache服务
主机B做admin节点
agent节点(主机A)执行
./agent_linux_x64 -lport 8080 -reuse-port 80
admin节点(主机B)执行
python port_reuse.py --start --rhost 192.168.2.131 --rport 80 #当回显出现“[+]Done!”时再执行 ./admin_linux_x64 -rhost 192.168.2.131 -rport 80
在admin中使用connect/listen/sshconnect实现节点间互连
使用connect互连
主机A作admin节点,主机C作agent节点1,主机B做agent节点2,实现节点2与节点1互连
agent节点1(主机C)执行
agent.exe -lport 8080
admin节点(主机A)执行
./admin_linux_x64 -rhost 192.168.2.136 -rport 8080
连接完成后,在admin端使用show命令查看节点信息
确认节点1成功连接
agent节点2(主机B)监听本地端口8080,执行
./agent_linux_x64 -lport 8080
在admin节点(主机A)执行
goto 1 #进入节点1 connect 192.168.2.135 8080 #使用节点1连接节点2
使用listen互连
connect是在节点2监听8080端口后,使用节点1连接节点2,listen是节点1监听本地端口,让节点2来连接节点1
节点1的配置与connect一样,主要后面的listen操作
admin节点和节点1配置好后,在admin节点(主机A)执行
goto 1 listen 8081
agent节点2(主机B)执行
./agent -rhost 192.168.2.136 -rport 8081
使用sshconnect实现节点互连
在节点1中使用ssh登陆的方式,连接节点2
节点1的配置与connect一样,主要后面的ssh登陆操作
agent节点2(主机B)监听本地端口8080,执行
./agent_linux_x64 -lport 8080
在admin节点(主机A)执行
goto 1 #进入节点1 sshconnect root@192.168.2.135 8080 #注意这里是连接节点2监听的端口不是22端口
执行完成后,会出现选项,1为密码登陆,2为密钥登陆,视情况自行选择
upload/download向节点上传/下载文件
比较好理解,admin节点和agent节点建立连接后,使用goto进入要操作的节点,然后输入文件名上传和下载就可以了
goto 1 upload [file_path] [upload_path] #上传文件 download [file_path] [download_path] #下载文件
节点启用socks代理
admin节点和agent节点建立好连接后,使用goto进入节点,开启socks代理
socks 777
开启代理后会在admin节点本地开启777端口,使用代理工具连接就可以用了
交互式shell建立
admin节点和agent节点建立好连接后,使用goto进入节点,在输入shell就可与节点建立交互式shell
lforward/rforward
lforward
将admin本地端口转发到节点端口
admin与agent建立连接后,使用lforward进行转发
将admin节点(主机A)的80端口转发至节点1(主机B)的8090端口
lforward 127.0.0.1 80 8090
访问节点1的8090端口
rforward
将节点的端口远程转发到admin
admin与agent建立连接后,使用lforward进行转发
将节点1(主机B)的80端口转发至admin(主机B)的8070端口
rforward 192.168.2.135 80 8070
访问admin节点8070端口(主机B上部了个zabbix所以访问是301)
参考文献
https://xz.aliyun.com/t/4058
youtobe视频教程:https://www.youtube.com/playlist?list=PLtZO9vwOND91vZ7yCmlAvISmEl2iQKjdI