Viper图形化红队攻击工具 杀软绕过 内网隧道 权限提升

Viper图形化红队攻击工具 杀软绕过 内网隧道 权限提升

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 虚拟内存.

可参考https://www.cnblogs.com/chennl/p/10167088.html

更新命令

  • 删除原有容器

此操作会清空已有数据

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主界面

退出平台

  • 主界面中选择 平台设置>> 关于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个任务,无需担心流量过大问题

更多详细操作到如下网站查看

https://www.yuque.com/funnywolfdoc/viperdoc