| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 记一次漏洞挖掘【网络安全】 -> 正文阅读 |
|
[网络协议]记一次漏洞挖掘【网络安全】 |
漏洞信息从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. 静态分析 首先我们通过Shambles Desktop对该固件进行静态代码分析,确定该漏洞的代码位置。
CVE漏洞信息中提到该漏洞存在于设备的web服务器可执行文件alphapd中,攻击者在请求wireless.htm文件时,在请求参数WEPEncryption当中构造超长参数可导致栈溢出从而执行任意命令。 所以首先在文件管理器中搜索“alphapd”关键字,从而寻找对应的文件进行静态反编译操作,然后在当前反编译窗口搜索“WEPEncryption”关键字,结果返回十几处匹配信息 (如图2所示),再结合右侧代码风险检测窗“ELF Vunerability Info”的检测结果进行分析。 两处信息都多次提到sub_43b7c0附近的地址,代码风险检测中直接指出地址 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会被执行,这就需要动态模拟运行固件。 2. 动态调试 按照上述静态化分析的结论,我们得知漏洞的成因以及可能的指令位置,接下来进入第二阶段的动态验证流程: 利用Shambles Desktop的固件仿真模拟“Virtual Machine”(以下简称 “VM”)功能对该固件进行动态调试。 进入仿真模拟功能,首先我们需要将Shambles Desktop的文件管理模块切换到“云端模式”下,然后在右侧工具栏VM管理工具中点击新建,选择alphapd所在的文件系统,建立一个模拟器。然后在文件管理器中选中alphapd所在的文件系统,右键打开一个终端(下文称文件系统终端)。如下所示,固件的文件系统被挂载起来了。
在新打开的文件系统终端输入:“/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。 手动创建"alphapd.pid",命令如图8所示。再次运行alphapd,旧错误已经解决,有新的错误。同样的,搜索这个错误,定位到原因是/var/run/nvramd.pid文件不存在。
创建
同样搜索对应的错误,定位原因是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并没有中断,说明成功启动。
一般alphapd默认的web服务端口是80(如图9所示),设置端口转发,访问 用浏览器访问下http://127.0.0.1,显示如上图10所示界面,在该设备上,默认admin秘密是空。点击登录后看到如上图11所示界面,证明alphapd web服务正常运行。 3. CVE重现 下面结合我们第一节的静态分析结论,来重现该CVE。首先验证alphapd可以响应针对wireless.htm的请求。验证方法如下: 发送带有WEPEncryption的请求到 然后验证向wireless.htm发送带有WEBEncryption的网络请求,可以执行到 先在下图标注位置打断点(如图断点1所示),发送对应网络请求,调试进程确实会在断点1停留,证明向wireless.html发送带有WEPEncryption参数的网络请求会执行到strcpy。 最后验证当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。 测试1: 启动alphapd调试,在电脑本机命令行输入 测试2: 电脑终端命令行输入 以上两次测试结果对比说明发送带有WEPEncryption参数的网络请求到,会执行strcpy。这个函数会让用户输入变量拷贝到栈内存。从而导致用户输入变量可以任意修改栈内存。攻击者通过巧妙的WEPEncryption的参数构造,pc寄存器内容可以被修改为其他任意指令的地址,从而执行任意命令攻击。
至此, |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 5:33:05- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |