目录导航
Viper简介
- VIPER是一款图形化红队评估工具,将红队评估过程中常用的战术及技术进行模块化及武器化.
- VIPER集成杀软绕过,内网隧道,文件管理,命令行等基础功能.
- VIPER当前已集成55个模块,覆盖初始访问/持久化/权限提升/防御绕过/凭证访问/信息收集/横向移动等大类.
- VIPER目标是帮助红队工程师提高攻击效率,简化操作,降低技术门槛.
项目地址
GitHub: https://github.com/FunnyWolf/Viper
安装使用文档地址
https://www.yuque.com/funnywolfdoc/viperdoc
Viper安装手册
Viper安装
- 准备一台linux系统的 VPS,安装 docker及docker compose
apt-get update curl -sSL https://get.daocloud.io/docker | sh service docker start curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
- 执行如下命令生成docker-compose.yml, diypassword 替换为自定义密码
mkdir -p ~/viper cd ~/viper tee docker-compose.yml <<-'EOF' version: "3" services: viper: image: registry.cn-shenzhen.aliyuncs.com/toys/viper:latest container_name: viper-container network_mode: "host" restart: always command: ["diypassword"] EOF
- 执行如下命令启动VIPER
docker-compose up -d
首次启动会自动下载docker image
- 等待系统启动(30s),访问 https://vps互联网IP:60000 登录服务器.(用户名:root 密码:自定义密码)
- 在 平台配置-网络配置 页面设置回连 IP 为 vps互联网IP
如果 VPS 内存小于 1G,需要增加 2G 虚拟内存.
更新命令
- 删除原有容器
此操作会清空已有数据
cd ~/viper docker-compose down
- 更新 docker 镜像
docker-compose pull
- 新建并启动容器
docker-compose up -d
- 访问 https://vpsip:60000 登录服务器(用户名:root 密码:自定义密码)
- 在系统设置-网络配置页面设置回连 IP 为 vpsip
关闭/重启
- 关闭容器
cd ~/viper docker-compose stop
- 再次打开(无需重新建立容器)
cd ~/viper docker-compose start
- 查看容器日志
docker logs viper-container
- 进入容器命令行
docker exec -it viper-container bash
替换SSL证书
此处生成的证书用于控制台前端与后台WEB服务通讯的https加密,与reverse_https证书无关.
- VIPER内置一套自签名SSL证书,用于实现前后端Https连接
- 如果你所在网络环境存在流量监测设备,建议替换内置的SSL证书,绕过流量监测,方法如下:
docker exec -it viper-container bash # 进入容器命令行 /root/viper/NginxConf/gencert.sh # 按照提示输入域名及密码 service nginx restart # 重启nginx服务,稍等片刻后即可正常访问
校对时间
- VIPER前端展示使用浏览器提供的时间,而通知/session心跳/模块日志使用后端服务器时间,可能会导致时间不同步,可以在vps主机中通过以下命令校对时间
apt-get install ntpdate ntpdate cn.pool.ntp.org
登录平台
安装Viper成功后访问https://vpsip:60000打开登录界面
用户名:root,密码为安装过程中输入的密码(默认为:diypassword,请务必修改为其他强密码)


退出平台
- 主界面中选择
平台设置
>>关于VIPER
>>点击退出登录
即可退出

使用教程
入门
生成监听
- 选择 监听载荷-新增监听 ,进入新增监听页面

以 reverse_tcp 为例

请注意 LHOST 填写为 VPS 的外网 IP 地址,Viper会自动提示
如果使用国内的 vps 如京东云,阿里云等,请使用 reverse_https 并配置证书,绕过流量检测
生成载荷
- 点击对应监听的 生成载荷 ,浏览器会自动下载一个包含免杀载荷的 zip 包

免杀载荷可能由于杀毒软件厂商添加 md5 标签而失效,可以自行编写 shellcode 加载器进行免杀
First Session
- 将生成的 zip 包解压后上传到要控制主机中,然后执行 loader.exe


以蚁剑 webshell 为例,Session 是一种增强版的 Shell,后续 Session 统称为权限
- 此时控制台已经获取了一个 Session

主机和 Session

控制台中显示 session 的重要信息,从左到右分别介绍各个图标的含义.
- 正方形图标表示主机的图标标签,可以通过 添加备注 自行修改
- 黄色的 IP 地址表示主机在内网中的 IP
内网可以理解为在 NAT 后面的网络
- 半透明文字为主机的备注信息,可通过 添加备注 自行修改
- 彩色长方形标签表示 session 最后的心跳时间
在心跳时间超过 1 分钟后图标会变成红色,此时 VIPER 后台认为该 session 很可能已经失效,但是对于 http 类型的 payload,在长时间不操作时可能处于休眠状态导致心跳超过 1 分钟,对 session 重新操作即可唤醒 session
- 带有编号的紫色标签是 sid,用于标注 session.
- IP 的长方形标签表示 session 在互联网测的连接端口,此 ip 地址一般为企业出口路由器的公网 IP,此时鼠标移动到该标签上方会显示 session 完整网络连接信息及 GeoIP(地理位置信息)
- x64 及 x86 标签表示 session 的 arch,x64 及 x86 颜色不同
这里的 arch 只是表示 session 进程的 arch,并不表示操作系统的 arch,操作系统的 arch 可以在主机信息里面查看
- 标识 session 是 windows 系统还是 linux 系统及系统版本
- 长方形标签展示主机名,当前用户等信息.其中白色的表示该 session 是普通用户权限,金色表示 session 是管理员权限(已过 uac),便于直观判断
- 权限操作中集成了 session 的所有快捷操作

主机操作中可以操作/查看/修改/更新以主机 IP 为 ID 的信息集

运行模块可以查看当前session及主机可以运行的所有模块

平台会根据当前目标是否有 session 权限来自动过滤模块
常见问题
- 为什么 VIPER 部署在阿里云 VPS 上没有正确生成 Session?
阿里云等国内云厂商有流量监控设备,请使用带加密的监听(reverse_https),由于 vps 带宽原因,执行 payload 后请稍等一段时间,请勿删除对应监听
- 为什么我看到的界面和文档中的界面不一样/页面错乱?
最低分辨率支持 1366×768,如果界面错乱请尝试清空浏览器缓存.
基础
在获取一个 Session 之后,我们在内网就已经有了一个立足点,可以进行后续信息收集/横向移动等操作了.
Session 克隆
- 操作 Session 过程中可能会由于杀毒软件或网络的原因导致 Session 掉线,在实战会生成多个 Session,然后再进行进一步操作,以免丢失权限.VIPER 中可以使用 Session克隆 快速的复制多个 Session.

还可以将常用的模块加星,模块会在下次打开时置顶
- 这样我们就有多个 Session 了,可以大胆的进行后续操作而不用担心权限丢失.

权限信息
- 通过权限操作-权限信息查看 Session 的详细信息,以便于决定后续提权/扫描/信息收集的方向.

文件管理
- 使用权限操作–文件管理快捷打开文件浏览器

可以在文件浏览器中对文件进行可视化操作,就像操作本地文件一样进行浏览/上传/下载/删除/执行.
下载的文件可以在文件列表中查看

命令终端
- 可以使用权限操作-命令终端打开 session 命令行

- 命令终端集成了 Session 所有基础功能,可以在下方输入框输入命令,点击下方快捷键快速执行指定命令.点击 help 查看帮助.
shell + 命令 执行系统命令,如:shell whoami
主机信息
- 主机信息中展示已控主机的详细信息,包括 systeminfo,网络连接,进程列表等

点击重新请求按钮会发送请求到已控主机的 Session 中进行信息收集操作,结果缓存到数据库中.

- 点击读取缓存按钮会读取数据库最新缓存的信息
主机信息会展示可能和渗透相关的进程信息,比如 lsass 进程,杀毒软件进程等
添加备注
- 在多人协作或者渗透大型内网过程中,我们需要对主机进行一些备注以方便记录

常见问题
- 为什么有些操作会显示超时?
由于网络延时原因实时操作可能不及时,如果超时可以尝试重试操作.
进阶
当我们获取内网主机的一个 Session 后,通常使用该 Session 作为跳板/入口点进行进一步的内网渗透.
本机信息收集
Session 信息
- 选择 权限操作-权限信息 查看Session信息,信息用于确认该入口点拥有哪些权限,是否需要提权,是否在域中,操作系统等信息.
- 权限信息,确定是否需要提权.域信息确定 Session 是否需要下一阶段进行域信息收集/域渗透.
主机信息
- 在确定 Session 信息后我们还需要对已控制的主机进行更详细的信息收集.具体操作可以参考 主机操作-主机信息
- 该信息主要用于确认主机当前有多少用户正在登录,主机版本,用于后续抓取密码(Windows)
- 外网连接 主要用于确认主机的用途,通常通过该方法快速查找向外网提供服务的进程.
- 内网连接 主要用于查看该主机连接了哪些内网 IP 地址,为下一步内网网络扫描/内网漏洞扫描做准备.一些数据库连接,RDP 连接,SMB 连接等还可以进行密钥提取等操作
- 重要进程 信息用于识别主机的杀毒软件,远控软件等进程
本机密码
- 感谢 kiwi ,我们可以抓取已控制 windows 主机的明文密码或 hash,为之后的渗透做准备,VIPER 中有多个模块可以完成该工作,以获取 windows 内存密码(新)为例进行演示

收集到的凭证信息还可以在凭证列表中查看

网络代理
一般我们将 NAT 后面的网络称为内网,当前内网分为两种
内网主机可直接访问互联网,互联网无法直接访问内网主机(如基于路由器的家庭网络)
内网主机不可直接访问互联网,互联网无法直接访问内网主机(如银行,公安等机要部门网络)
当前章节默认网络为第一种网络.
内网路由
- 所谓内网路由是一种基于 Session 的透明代理,通过 Sesison 添加对应路由后,VIPER 中的监听/横向移动/漏洞扫描/Socks 代理,漏洞利用等功能会自动使用该路由连接内网对应的 IP 地址.
- 假设 VIPER IP 地址为 45.45.45.45,Session 的内网 IP 为 10.10.10.10,如需连接 10.10.10.11
没有添加路由:
45.45.45.45 ==>10.10.10.11(这是无法连接的)
当添加路由后:
45.45.45.45 <=内网路由=>10.10.10.10==>10.10.10.11(这样就可以连接了)
- 网络直连表示 VIPER 服务器在尝试连接到该内网在主机时采用直连的方式,很明显在绝大多数情况下由于主机在 NAT 后面是无法连接的,这时需要我们在 Session 上添加内网路由才能使 VIPER 连接到内网主机.

选择自动时 VIPER 会根据 Session 主机的网卡配置的 IP 地址添加路由
如果对方有多个内网网段可以选择手动添加
- 如果添加了对应的路由,会提示连接该 ip 所用的路由 sessionid ,便于判断是通过那个 Session 进行路由.

- 这是我们最常用的正向直连内网的方法,也是 VIPER 模块默认的连接内网方法
socks 代理
- 上一节的内网路由只能由 VIPER 内置的功能进行调用,外部的工具(如 Nmap)是无法使用的,我们可以使用 VIPER 的内网代理模块搭建一个基于内网路由的 socks 代理供外部程序使用

socks 代理的流量转发是基于内网路由的,所以在添加代理前确保正确配置了内网路由
内网代理和内网路由是相互配合的
端口转发
- 通常内网路由及 socks4a 代理可以满足我们常见的内网正向连接的请求.但有些时候外部工具无法直接使用代理(mstsc.exe)或某些工具需要反向链接(Cobalt strike),这时就需要端口转发功能.


详细帮助可以参考页面下方帮助
- 如果需要总览所有端口转发,可以在内网代理中查看
外部工具
- 有很多外部工具可以实现内网穿透型的代理,如老牌的 ew,htran 等,推荐两款稳定的代理工具,具体操作方法见对应的说明文档
https://github.com/fatedier/frp
https://github.com/FunnyWolf/TFirewall
内网网络扫描
- 在我们完成跳板机的信息收集及代理搭建后,下一步就要看一下跳板机能连接内网的哪些主机,这时就需要使用内网网络扫描模块.
内网端口扫描与服务识别
- 内网端口扫描与服务识别是最常用的内网网络扫描模块,模块本身会包含端口探测及基于指纹的端口识别功能

后台任务标签可以查看正在运行的任务

运行结果

扫描到的主机会自动在主控台显示出来,还可以点击开放端口按钮查看该主机开放的端口


模块所有的网络连接都是在内网中进行,所以扫描速度与准确度远高于基于代理的内网扫描.
如果你希望扫描流量更少,不触发内网中流量探测设备的告警,可以使用内网端口扫描,模块不会进行端口服务识别,使用方式与内网端口扫描与服务识别相同
如果你只对主机是否存活感兴趣,可以使用内网 arp 扫描
内网漏洞扫描
- 在网络扫描完成后,我们可以通过漏洞扫描模块来确定我们可以攻陷哪些内网主机
在完成扫描之前需要确认已经建立了对应内网主机的内网路由,确保我们模块可以正确连接该主机
具体方法见 网络代理-内网路由 章节
MS17-010 扫描

还可以选择已知漏洞查看已扫描到的漏洞


内网横向移动
内网横向移动从方式上可以大概分为两种
- 基于漏洞的方式获取权限,如 MS17-010,weblogic RCE 等
- 基于凭证暴力破解方式获取权限,如基于获取到的凭证或弱密码破解其他主机的 smb,mssql,mysql 等
在完成利用之前需要确认已经建立了对应内网主机的内网路由,确保我们模块可以正确连接该主机具体方法见网络代理-内网路由
Cobalt Strike 上线
- VIPER 可以通过虚拟监听+Session 克隆的方式方便 Cobalt Strike 上线.
- 首先在 Cobalt Strike 建立监听

在 VIPER 中建立对应的虚拟监听

选择对应的 Session,然后运行 Session 克隆模块

运行后 Cobalt Strike 即上线

其他功能
此处介绍入门/基础/进阶未涉及的 VIPER 的其他基础功能.
msfconsole
- 使用方式与原生控制台相同,支持选择自动复制,拷贝,删除,CTRL+C,CTRL+Z

生成载荷


系统状态

系统配置


常见问题
- 为什么我无法抓取到本机密码?
抓取密码需要本地管理员权限,在 windows server2012 抓取密码有一定几率失败.
- 为什么使用横向移动模块没有获取到 Session?
漏洞利用可能会失败/传递的凭证可能无法登陆该主机.
对方主机无法直接连接 VIPER,这时你可以使用正向监听(bind_xxx)尝试利用
全网漏洞扫描
总览
该功能类似于AutoSploit,当前只开放测试用途的模块


全网搜索/漏洞扫描
执行全网搜索功能前,首先要获取FOFA的APIkey,然后在
平台设置
FOFA API
中设置
- 点击
新建任务
可打开新建任务界面

- 选择模块后,可使用搜索功能查找当前互联网适配该模块的主机
每个模块内置指纹规则,如SSH暴力破解模块的适配规则为”protocol=”SSH”,可以在
说明
部分查看.用户输入的规则,如ip=”47.240.60.0/24″会与模块已有规则组合成 ip=”47.240.60.0/24″ && “protocol=”SSH”发送到后端,后端会调用FOFA的API查询,并将结果返回
- 新建任务后会自动建立等待列表,Viper自动从列表中取出任务执行
Viper自动控制后台之多同时执行3个任务,无需担心流量过大问题