热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

2016-08-2910:54:06作者:mpk_no1阅读:655次点赞(1)收藏(1)分享到:在过去的几天里,我们仔细分析了由ShadowBrokers泄露的国安局漏洞利用代码EXTR

2016-08-29 10:54:06 作者:mpk_no1 
阅读:655次 点赞(1) 收藏(1)


分享到:

http://p3.qhimg.com/t01426314a771767e39.jpg

在过去的几天里,我们仔细分析了由Shadow Brokers泄露的国安局漏洞利用代码EXTRABACON。根据XORcat得出的初步分析,这个利用代码能够利用SNMP服务中的内存崩溃漏洞绕过思科ASA设备的身份验证。我们在实验室里对这段代码进行了分析和测试,甚至进行了修改使其能够应用到9.2 (4) 版本。不过,在官方未发布修复补丁之前我们不打算公开这个升级代码。在这篇文章中,我们希望对移植过程进行一个详细的描述:移植的先决条件是什么,需要付出多少努力来扩展功能。同时我们也希望这篇总结能够给那些开始研究思科ASA的人们提供一个很好的资源。


思科ASA是什么?


思科自适应安全设备(ASA)是一种广泛采用的网络安全设备,除了提供标准数据包过滤功能,还提供了一个“智能”的组合,应用程序级的功能比如L7协议检验或VPN等。这个复杂的功能集大概是思科选择32位x86处理器来实现的原因之一。

供应商的主页数据显示有超过100万的这种设备部署在世界各地。

广泛部署,加上其体系结构的复杂性(很可能存在很多bug)使得思科ASA成为了黑客们梦寐以求的攻击对象。

测试准备工作


开始研究ASA最好有一些实际的硬件。幸运的是,ASA 5505在在线拍卖网站上可以以相对便宜的价格找到。

当拥有了硬件,你可能对它的配置毫无头绪,这个时候,你应该建立一个串行连接,从而在没有密码的情况下重置配置和访问控制台。因此你需要一个思科控制台连接线(RJ45-to-DB9)和一个RS232-USB转换器。通过这些你可以将设备的控制台端口连接到你的工作站上的USB端口。在Linux上你可以使用调制解调器通信程序(minicom)连接到控制台,连接参数有:

9600 baud、Parity:8N1

连接完毕之后,你可以检查固件版本并对设备进行配置。对我们来说,配置IP网络接口,允许SSH和SNMP是很重要的。

安装新的固件,你首先需要匹配的固件二进制文件。版本9.2(4) 映像文件的名称为asa924-k8.bin。可以使用SCP将新的固件上传到设备的内部闪存中:

scp asa924-k8.bin admin@192.168.5.1:/asa924-k8.bin

启动顺序可以根据官方手册(https://www.cisco.com/c/en/us/support/docs/security/asa-5500-x-series-next-generation-firewalls/200142-ASA-9-x-Upgrade-a-Software-Image-using.html)配置。

拥有了首选的固件版本和串行连接之后,你就可以通过发送下面的长SNMP OID来验证EXTRABACON造成的内存损坏利用:

1 1.3.6.1.4.1.9.9.491.1.3.3.1.1.5.9.95.184.16.204.71.173.53.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144.144


这可能会导致访问冲突,并会在串行控制台上输出一些基本的调试信息。

远程调试


远程调试的配置参考的是Alec Stuart 的教程(https://www.youtube.com/watch?v=KXqrovapQ5A),我们现在只是给出一个快速概述的过程。

ASA运行一个类似linux的操作系统,称为lina,固件映像文件包含根文件系统的所有二进制文件和配置文件——可以用binwalk提取:

1  $ binwalk -e asa924-k8.bin
12345678     DECIMAL     HEX         DESCRIPTION    -------------------------------------------------------------------------------------------------------------------    514         0x202       LZMA compressed data, properties: 0x64, dictionary size: 2097152 bytes, uncompressed size: 1048576 bytes    144510      0x2347E     gzip compressed data, from Unix, last modified: Wed Jul 15 06:53:23 2015, max compression    1500012     0x16E36C    ELF    1501296     0x16E870    gzip compressed data, was "rootfs.img", from Unix, last modified: Wed Jul 15 07:19:52 2015    28192154    0x1AE2D9A   Zip archive data, at least v2.0 to extract, name: "com/cisco/webvpn/csvrjavaloader64.dll"      28773362    0x1B70BF2   Zip archive data, at least v2.0 to extract, name: "AliasHandlerWrapper-win64.dll"


我们将Alec演示的repack.sh脚本修改为了:

1.从固件的映像中自动发现和修改rootfs.img

2.解压缩

3.替换rcS,这样在调试模式下会启动lina

4.重新打包rootfs

5.使用dd把新的rootfs归档到固件的二进制文件中

替换设备上的原有固件映像之后,lina开始等待启动时的GDB附加:

1 Process /asa/bin/lina created; pid = 518Remote debugging using /dev/ttyS0


继续执行,作为根用户启动GDB,并串行附加到目标上:

1 (gdb) target remote /dev/ttyUSB0


现在你可以交互式地调试你的设备了。

分析与修改


当我们开始处理EXTRABACON时,我们的主要问题是了解将其扩展到支持新的固件版本有多难。出于这个原因,我们采取了一个“hacky”方法寻找最简单的方法来解决这个问题,而不太关心思科的内部解析或其他细节。

首先让我们看一下目录结构:.

12345678910111213141516 ├── extrabacon_1.1.0.1.py├── Mexeggs│   ├── all.py│   ├── argparse.py│   ├── hexdump.py│   ├── __init__.py│   ├── loglib.py│   ├── log.py│   ├── sploit.py│   └── version.py├── scapy...└── versions    ├── shellcode_asa802.py...    └── shellcode_asa844.py


我们可以看到,不同版本的shellcode都是单独存储在目录下的versions文件夹中,主要利用代码是一个单独的Python文件——extrabacon_1.1.0.1.py。

Mexeggs是漏洞利用的“迷你框架”:它定义了标准接口,处理一些常见的任务,如参数解析和日志记录(默认的日志目录是D:\DSZOPSDisk\logs,日志存储在代号为“concernedparent”的目录中)。

因为是模块化的,所以一旦我们修复了Extrabacon.fw_version_check()函数中的版本检测功能,我们的主要关注点就是主利用脚本。

让我们来看看shellcode脚本!下图是版本8.0(2)和8.4(4)之间的对比:

http://p6.qhimg.com/t011b8ecfd35406ea29.png

我们可以看到,这两个版本的shellcode大部分是相同的,只有2 - 4字节的差异。每一个版本的my_ret_addr值有明显的差异,但凡做过这种类型开发的人都会非常高兴看到这个变量名(或值):在版本检测代码中添加了两行之后,我们在versions目录下拷贝了一个原始的shellcode代码,将其命名为shellcode shellcode_asa924.py,然后将my_ret_addr的值设为 0 x41414141。这个利用正式启动后,我们获得了一个不错的小SIGSEGV信号:

1 Program received signal SIGSEGV, Segmentation fault.[Switching to Thread 523]0x41414141 in ?? ()(gdb) info regeax            0x0    0ecx            0xcbd65a48    -875144632edx            0x0    0ebx   &n
推荐阅读
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 本文介绍了连接库的定义和使用方法。连接库是通过编译生成的dll文件,例如php_mysql.dll。在使用扩展时,需要去掉配置文件中的分号,并通过phpinfo查看是否正确加载了mysql连接库。详细内容请参考链接:https://www.cnblogs.com/xiaobiaomei/p/7654750.html。摘要字数:180字。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
author-avatar
手机用户2602901861
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有