记一次漏洞挖掘【网络安全】

news2024/10/7 8:31:58

漏洞信息

从CVE-2019-10999查看该CVE的基础信息得知,这是一个栈溢出漏洞,攻击者在已登录的情况下可以通过向wireless.htm发送一个超长的WEPEncryption参数导致栈溢出,从而执行任意命令攻击. 现在我们利用Shambles Desktop工具确定这个漏洞的位置并且执行一次栈溢出攻击。从Dlink官网查看存在这个漏洞的设备和版本信息。我们选择DCS-932L的v2.17.01版本。下载对应固件。

复现过程

首先用Shambles Desktop打开固件,利用Shambles Desktop的在线解包功能将固件解包并抽取文件系统,这样固件包的内容将会用可视化的文件目录树形式(如图1所示)展现,方便分析。同时Shambles Cloud会对解包信息初步分析,确定设备,产商,芯片架构,设备类型等信息。如下图右侧的Firmware Info的Hardware Information所示,该设备是D-Link的MIPS芯片架构的嵌入式摄像头设备。

1. 静态分析
image.png

首先我们通过Shambles Desktop对该固件进行静态代码分析,确定该漏洞的代码位置。

【一一帮助安全学习,所有资源获取处一一】
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源

CVE漏洞信息中提到该漏洞存在于设备的web服务器可执行文件alphapd中,攻击者在请求wireless.htm文件时,在请求参数WEPEncryption当中构造超长参数可导致栈溢出从而执行任意命令。

所以首先在文件管理器中搜索“alphapd”关键字,从而寻找对应的文件进行静态反编译操作,然后在当前反编译窗口搜索“WEPEncryption”关键字,结果返回十几处匹配信息 (如图2所示),再结合右侧代码风险检测窗“ELF Vunerability Info”的检测结果进行分析。

两处信息都多次提到sub_43b7c0附近的地址,代码风险检测中直接指出地址 <sub_43b7c0+1b4> strcpy相关的栈溢出风险。所以<sub_43b7c0+1b4>的可能性比较大,双击<sub_43b7c0+1b4>跳转到 **strcpy(&var30, v2)**处查看ASM代码。
image.png

ASM代码只能看到该处是一个strcpy调用,按F5快捷键切换到“pseudo view”查看反汇编代码。如图3所示,25行把v2的内容拷贝到栈变量&var30的地址。11~19行的反编译代码逻辑为:“当p0内存地址中不存在WEPEncryption参数的时候,不进行任何有效操作并直接返回,而当p0内存地址中存在WEPEncryption参数的时候,websGetVar返回WEBEncryption的参数内容”。结合CVE信息以及函数名websGetVar的含义,推测sub_43b7c0可能是处理网络请求参数WEPEncryption的函数。验证这一猜测,需要证明当针对wireless.htm发送带有WEPEncryption参数的网络请求时,sub_43b7c0会被执行,这就需要动态模拟运行固件。

image.png

2. 动态调试

按照上述静态化分析的结论,我们得知漏洞的成因以及可能的指令位置,接下来进入第二阶段的动态验证流程: 利用Shambles Desktop的固件仿真模拟“Virtual Machine”(以下简称 “VM”)功能对该固件进行动态调试。 进入仿真模拟功能,首先我们需要将Shambles Desktop的文件管理模块切换到“云端模式”下,然后在右侧工具栏VM管理工具中点击新建,选择alphapd所在的文件系统,建立一个模拟器。然后在文件管理器中选中alphapd所在的文件系统,右键打开一个终端(下文称文件系统终端)。如下所示,固件的文件系统被挂载起来了。

image.png

image.png

/bin/alphapd

alphapd: Startup!

alphapd: cannot openpidfile#

在新打开的文件系统终端输入:“/bin/alphapd”, 启动alphapd,有错误返回,启动alphapd出错。

在alphapd中搜索对应的错误信息"cannot open pid file",只有两处引用,一处是在.rodata(字符串在可执行文件中的存放区域),另外一处是在代码段中的引用。优先查看代码段,分析该函数,62行处的if语句表明当某文件不存在的时候,会抛出"cannot open pid file"的错误。在62行处点击Tab键,切换到ASM View,从ASM的反编译辅助信息推断,这个文件应该是/var/run/alphapd.pid。
image.png

image.png

手动创建"alphapd.pid",命令如图8所示。再次运行alphapd,旧错误已经解决,有新的错误。同样的,搜索这个错误,定位到原因是/var/run/nvramd.pid文件不存在。

#mkdir/var/run

#touch/var/run/alphapd.pid

#/bin/alphapd

alphapd: Startup!

alphapd: waiting fornvram_daemonalphapd: .alphapd: .alphapd: .alphapd: 
.alphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: .alphapd: 
.alphapd: .alphapd: .alphapd: .alphapd: please executenvram_daemonfirst!#

image.png

创建"/var/run/nvramd.pid"文件, 再次运行alphapd。旧错误已经解决,有新的错误出现。

#touch/var/run/nvramd.pid

#/bin/alphapd

alphapd: Startup!

alphapd: Can't getlanipfromsysinfo!

alphapd: failed toconvert  tobinaryipdataalphapd: Shutdown!

同样搜索对应的错误,定位原因是nvram_bufget拿不到"IPAddress"(如下所示)。nvram_bufget的功能是读取信息。Shambles的模拟环境,支持从配置文件初始化设备参数配置。所以我们只需要做正确的配置,先查看固件中是否存在配置文件,不存在的话就需要从可执行文件中查询设备运行参数。

全局搜索”IPAddress”关键字,有多个文件引用,因为是查找配置文件,所以先排除可执行文件、sh文件以及cgi文件,就只剩下RT2860_default_vlan这个文件了,查看RT2860_default_vlan,发现存在多种参数配置,"IPAddress"也在其中,所以RT2860_default_vlan就是设备参数配置文件的概率比较大,可以拿来测试一下。这里比较幸运,搜索结果多的时候,需要做的排除工作比较多。

Shambles的模拟环境在/shambles目录下预置了libnvram.so,可以从配置文件加载设备参数信息。把RT2860_default_vlan拷贝到libnvarm.so所在目录,重命名为nvram.ini,再次运行alphapd,因为这次要用libnvram模拟设备信息,所以运行时需要预加载libnvram.so 。输入命令"LD_PRELOAD=/shambles/libnvram.so /bin/alphapd",运行结果如下所示,虽然还有一些其他的错误抛出,但是alphapd并没有中断,说明成功启动。

#mkdir-p /shambles/libnvram

#cp /etc_ro/Wireless/RT2860AP/RT2860_default_vlan /shambles/nvram.ini

#LD_PRELOAD=/shambles/libnvram.so /bin/alphapd

nvram_get_buf:IPAddress

sem_get: Key: 41370002

sem_get: Key: 41370002

nvram_get_buf: = "2.65.87.200"

alphapd: Can't getlanipfromsysinfo!

alphapd: Version 2.1.8 running at address 2.65.87.200:80

nvram_get_buf:AccessControlEnable

sem_get: Key: 41370002

sem_get: Key: 41370002

nvram_get_buf: = "0"

nvram_get_buf: User1

sem_get: Key: 41370002

sem_get: Key: 41370002

nvram_get_buf: = ""

nvram_get_buf: User2

sem_get: Key: 41370002

sem_get: Key: 41370002

nvram_get_buf: = ""

nvram_get_buf: User3

sem_get: Key: 41370002

sem_get: Key: 41370002

nvram_get_buf: = ""

nvram_get_buf: User4

sem_get: Key: 41370002

sem_get: Key: 41370002

nvram_get_buf: = ""

nvram_get_buf: User5

sem_get: Key: 41370002

sem_get: Key: 41370002

nvram_get_buf: = ""

nvram_get_buf: User6

sem_get: Key: 41370002

sem_get: Key: 41370002

nvram_get_buf: = ""

nvram_get_buf: User7

sem_get: Key: 41370002

sem_get: Key: 41370002

nvram_get_buf: = ""

nvram_get_buf: User8

sem_get: Key: 41370002

sem_get: Key: 41370002

nvram_get_buf: = ""

一般alphapd默认的web服务端口是80(如图9所示),设置端口转发,访问http://127.0.0.1:80试试。
image.png

image.png

image.png

用浏览器访问下http://127.0.0.1,显示如上图10所示界面,在该设备上,默认admin秘密是空。点击登录后看到如上图11所示界面,证明alphapd web服务正常运行。

3. CVE重现

下面结合我们第一节的静态分析结论,来重现该CVE。首先验证alphapd可以响应针对wireless.htm的请求。验证方法如下: 发送带有WEPEncryption的请求到wireless.htm,如果正常返回信息,则说明alphapd响应该网络请求。在电脑本机命令行输入"curl http://127.0.0.1/wireless.htm?WEPEncryption=FEWFEW",返回信息如下图所示,说明alphapd响应带有WEPEncryption的请求。
image.png

然后验证向wireless.htm发送带有WEBEncryption的网络请求,可以执行到sub_43b7c0+1b4处的strcpy。首先以调试模式启动alphapd。在刚才运行alphapd的文件系统终端中按ctrl+c关闭这个进程。然后在Shambles Desktop 的alphapd反编译界面点击调试配置把libnvram.so配置为预加载库。(这么做和我们刚才运行LD_PRELOAD=/shambles/libnvram.so /bin/alphapd是一样的作用)。启动调试,事件日志窗口返回的日志如图13所示。和文件系统终端运行alphapd显示的日志是一样的,证明调试正常启动。
image.png

image.png

先在下图标注位置打断点(如图断点1所示),发送对应网络请求,调试进程确实会在断点1停留,证明向wireless.html发送带有WEPEncryption参数的网络请求会执行到strcpy。
image.png

最后验证当WEPEncryption的参数过长时,会导致栈溢出。

验证方法如下,分别向wireless.html发送正常长度的WEPEncryption的参数请求和超长度的WEPEncryption的参数请求,网络请求完成后,对比pc寄存器中的信息。如下图断点2所示中位置打断点,查看执行jr后,pc寄存器信息是否被修改。断点2中的ra存储的是断点1 strcpy的调用函数sub_43b7c0执行完成后的跳转地址。jr指令会把ra中的值拷贝到pc寄存器。

找到断点2的过程如下:

把光标放置在sub_43b7c0函数return处(如图14所示),按tab键切换到"ASM View”。找到对应的jr指令位置。就是下图断点2所示的断点2。
image.png

1665979411_634cd4135fc0a98084559.png

测试1:

启动alphapd调试,在电脑本机命令行输入"curl http://127.0.0.1/wireless.htm?WEPEncryption=ewfwefwefewf"。调试进程会前后停在断点1和断点2,执行完成后,pc寄存器中的内容是某条指令地址(如图15所示),且网络请求会正常返回。

测试2:

电脑终端命令行输入"curl http://127.0.0.1/wireless.htm?WEPEncryption=ewfwefwefewffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefwefwefwefwefwwwwwwwwwwvvvvewfwefwefwefwefwefwefwefweffweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"。调试进程会前后停在断点1和断点2,执行完成后,pc寄存器中的内容不再是某一条指令地址,而是被修改为某个内存地址(如图16所示),此时继续执行,alphapd会崩溃,说明栈已经被破坏。

以上两次测试结果对比说明发送带有WEPEncryption参数的网络请求到,会执行strcpy。这个函数会让用户输入变量拷贝到栈内存。从而导致用户输入变量可以任意修改栈内存。攻击者通过巧妙的WEPEncryption的参数构造,pc寄存器内容可以被修改为其他任意指令的地址,从而执行任意命令攻击。

【一一帮助安全学习,所有资源获取处一一】
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源

至此,CVE-2019-10999在Shambles上重现完成。
image.png

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单商户商城系统功能拆解23—用户标签

单商户商城系统&#xff0c;也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法&#xff0c;例如拼团&#xff0c;秒杀&#xff0c;砍价&#xff0c;包邮…

在Windows使用VSCode搭建嵌入式Linux开发环境

在Windows使用VSCode搭建嵌入式Linux开发环境 百问网已经制作好了完备的Ubuntu镜像&#xff0c;可以从这里下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1vw4VUV_Mvt0HXz8IC66ACg 提取码&#xff1a;iftb 我们也正在(2022.10.17开始)使用纯粹的Ubuntu环境开始…

孙宇晨2022釜山区块链周演讲:区块链是未来数字城市发展基石

据韩国媒体全球经济新闻10月27日报道&#xff0c;波场TRON创始人孙宇晨线上出席了2022 釜山区块链周&#xff08;Blockchain Week in Busan 2022&#xff0c;以下简称BWB 2022&#xff09;&#xff0c;并发表《 The Cities of Tomorrow》主题演讲。孙宇晨表示&#xff0c;“区块…

生产环境数据库表迁移实践集锦

数据库表迁移是开发者必须要掌握的一种能力&#xff0c;对中高级开发者来说更是如此。工作中随着公司业务不断发展、系统架构的慢慢调整演化&#xff0c;迁移数据库表是不可避免的。由于数据是公司最最核心的资产&#xff0c;所以对生产环境数据库表的迁移并不是谁都可以去实施…

Web服务器、Ftp服务器、DNS服务器搭建【高级路由协议与实验04-2】

上一篇自学练习了如何搭建web服务器 文章目录网络设置1.修改配置文件2.改成桥接模式访问外网3.选择网卡4.重启网卡一、web服务器补充&#xff1a;步骤1.安装httpd软件包2.将httpd服务设为开始自启动&#xff0c;并启动该服务3.查看httpd服务是否启动4.在防火墙开放80端口并查看…

小白学习spring第一天

第二章&#xff1a;Spring 第1节&#xff1a;概述 1.1 介绍 heap stack Spring是一个分层的Java SE/EE full-stack&#xff08;一站式&#xff09;轻量级开源框架&#xff0c;以 IoC&#xff08;Inverse Of Control&#xff1a;控制反转&#xff09;和 AOP&#xff08;Aspec…

力扣刷题day32|738单调递增的数字、714买卖股票的最佳时机含手续费、968监控二叉树

文章目录738. 单调递增的数字思路难点&#xff1a;遍历顺序难点&#xff1a;设置flag714. 买卖股票的最佳时机含手续费贪心思路难点968. 监控二叉树思路难点&#xff1a;如何隔两个节点放一个摄像头738. 单调递增的数字 力扣题目链接 当且仅当每个相邻位数上的数字 x 和 y 满…

常用算法———P I D控制算法(P I D三个参数的作用和两种P I D算法的代码实现)

如果有错误请及时指出&#xff0c;大家一起学习交流。 目录 一、PID的概述 二、PID三个参数的控制原理 1、P控制器 2、I控制器 3、D控制器 4、PID控制器 5、PID的数学公式 三、位置式PID和增量式PID的差别和代码实现 1、位置式PID和增量式PID的差别 2、位置式PID …

(附源码)计算机毕业设计SSM竞赛报名管理系统

&#xff08;附源码&#xff09;计算机毕业设计SSM竞赛报名管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

mindspore实现自定义CNN图像分类模型

一、数据集定义 使用mindspore.dataset中的ImageFolderDataset接口加载图像分类数据集&#xff0c;ImageFolderDataset接口传入数据集文件上层目录&#xff0c;每个子目录分别放入不同类别的图像。使用python定义一个create_dataset函数用于创建数据集&#xff0c;在函数中使用…

[C++基础]-初识模板

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、泛型编…

【正点原子STM32连载】第五十五章 T9拼音输入法实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

1&#xff09;实验平台&#xff1a;正点原子MiniPro H750开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id677017430560 3&#xff09;全套实验源码手册视频下载地址&#xff1a;http://www.openedv.com/thread-336836-1-1.html 4&#xff…

deepwalknode2vec 代码实战

提示&#xff1a;笔记内容来自于B站up主同济子豪兄 文章目录1. Embedding嵌入的艺术2. deepwalk2.1. 什么是图嵌入&#xff1f;2.2. deepwalk的步骤1、生成graph&#xff1b;2、利用random walk生成多个路径&#xff1b;3、训练表示向量的学习&#xff1b;4、为了解决分类个数过…

航拍遥感数据集

一、Roundabout Aerial Images for Vehicle Detection 本数据集是从无人机拍摄的西班牙环形交叉口航空图像数据集&#xff0c;使用PASCAL VOC XML文件进行注释&#xff0c;指出车辆在其中的位置。此外&#xff0c;还附带一个CSV文件&#xff0c;其中包含与捕获的环形交叉口的位…

深度学习 神经网络(2)前向传播

深度学习 神经网络&#xff08;2&#xff09;前向传播一、前言二、神经网络结构三、前向传播四、参考资料一、前言 前面介绍了《感知器》&#xff0c;类似于单个神经元细胞&#xff0c;现在我们用多个感知器组合成更加复杂的神经网络。本文介绍了多层神经网络通过前向传播方法…

超市营业额数据分析

文章目录1&#xff1a;查看单日交易额最小的3天的交易数据&#xff0c;并查看这3天是周几1.1&#xff1a;导入模块1.2&#xff1a;数据处理1.3&#xff1a;输出结果完整代码2&#xff1a;把所有员工的工号前面增加一位数字&#xff0c;增加的数字和原工号最后一位相同&#xff…

FBAR滤波器的工作原理及制备方法

近年来&#xff0c;随着无线通信技术朝着高频率和高速度方向迅猛发展&#xff0c;以及电子元器件朝着微型化和低功耗的方向发展&#xff0c;基于薄膜体声波谐振器&#xff08;Film Bulk Acoustic Resonator&#xff0c;FBAR&#xff09;的滤波器的研究与开发越来越受到人们的关…

酒楼拓客营销流程,酒楼宣传推广方案

随著网络时代的发展&#xff0c;许多行业受到了大大的冲击&#xff0c;其中也涵盖酒楼&#xff0c;在目前的情况下&#xff0c;对于酒楼来说&#xff0c;无论是互联网还是线下&#xff0c;引流都是最重要的。那么酒楼如何做好营销推广工作&#xff0c;从而提升业绩&#xff1f;…

乘风而起!企业级应用软件市场迅猛发展,有哪些机会可以把握?

数字化转型战略的深入&#xff0c;使我国企业级软件市场得到了迅速的发展&#xff0c;据统计&#xff0c;2021年我国企业级应用软件市场规模超过了600亿元&#xff0c;其中商业智能&#xff08;BI&#xff09;市场规模超过了50亿元。 得益于中国企业对于数据系统的本地化部署需…

Hadoop3 - MapReduce DB 操作

一、MapReduce DB 操作 对于本专栏的前面几篇文章的操作&#xff0c;基本都是读取本地或 HDFS 中的文件&#xff0c;如果有的数据是存在 DB 中的我们要怎么处理呢&#xff1f; Hadoop 为我们提供了 DBInputFormat 和 DBOutputFormat 两个类。顾名思义 DBInputFormat 负责从数…