CVE-2018-17066复现(D-Link命令注入漏洞)

CVE-2018-17066复现(D-Link命令注入漏洞)

Loserme 看雪学苑 2024-06-08 17:59

CVE-2018-17066漏洞概述:
在该路由的前端页面中存在时间设置页面,但是我们手动输入的时间并没有被过滤,就会直接将数据传输到后端处理,经过一段函数调用后会将参数传入system作为参数从而实现命令注入!
(任意命令执行)

环境准备:kali2023因为自带bp不用安装了!

利用链:前端发送post请求将时间数据发送给后端-》websOpenListen监听请求-》收到请求后使用sub_4572A4函数进行时间设置-》由于未进行任何过滤导致doSystem(“date -s \”%s\””, Var);
会直接将传入的参数作为system的参数-》从而实现命令注入!

固件下载地址:
D-Link Technical Support (dlink.com.cn)

(http://www.dlink.com.cn/techsupport/ProductInfo.aspx?m=DIR-816)

下载后就可以检查一下文件的属性了:

文件属性:U-Boot: OS Kernel Image(“Linux Kernel Image”)[Linux,MIPS,lzma]

直接到Ubuntu里面提取一下固件文件:

·binwalk 是一种常用于数字取证和二进制分析的工具。你提供的命令 binwalk -Me DIR-816.img 是用来执行 binwalk 的特定操作的。下面解释一下命令中每个部分的含义:

◆binwalk:这是命令本身,表示你想要使用 binwalk 工具。

◆-Me:这些是修改 binwalk 行为的选项或标志。具体来说,-M 告诉 binwalk 在发现文件时自动提取它们,-e 告诉它递归地从其他文件中提取文件。

◆DIR-816.img :这是你想要 binwalk 分析并从中提取文件的文件或目录的名称。

提取出来的文件:

SquashFS 是一套基于Linux内核使用的压缩只读文件系统。该文件系统能够压缩系统内的文档,inode以及目录,文件最大支持2^64字节,简介:
squashfs介绍和安装_unsquashfs-CSDN博客(https://blog.csdn.net/mayue_web/article/details/105682004)

squashfs-root就是我们需要找到的根目录!

我们主要分析的是goahead:

查看一下goahead的属性和链接:

两种启动方法:

goahead.pid未找到报错

运行后发现报错!

在ida找到该字符串:

分析该文件的报错原因是因为没有”/var/run/goahead.pid”

解决方案手动创建一个:

var/run/nvramd.pid未找到报错

完成第一个报错修复后重新仿真程序,程序继续执行时出现错误:”waiting for nvram_daemon”,如下图所示。

根据ida继续找到字符串,发现不可以使用交叉引用,大概率是因为进行了混淆!

根据下面的字符串”goahead.c”的交叉引用找到了目标位置!还可以通过动态调试来定位!

分析发现原因,这两个字符串是通过偏移来定位的,还发现个问题这里的fopen的第二个参数是再调用fopen后才传入的不理解:

这里就算IDA的伪代码了!

解决方案继续手动创建文件。

缺少二进制ip数据报错

继续运行发现有很多东西不存在继续创建,再看下最主要的报错是:

initWebs: failed to convert to binary ip data,缺少二进制ip数据。

根据字符串锁定位置:

报错原因:nvram_bufget函数无法读取lan_ipaddr,而nvram_bufget是从/dev/nvram中读取数据。

这里的解决方案:

  1. RT-AX55环境搭建 | ioo0s’s blog

(https://ioo0s.art/2023/02/20/RT-AX55%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/)

  1. pr0v3rbs/FirmAE:面向物联网固件的大规模仿真,用于动态分析 — pr0v3rbs/FirmAE: Towards Large-Scale Emulation of IoT Firmware for Dynamic Analysis (github.com)

(https://github.com/pr0v3rbs/FirmAE)

还有其他解决方案:

1.解劫持动态链接库

2.patch原程序来实现

a. 使用LD_PRELOAD方式劫持动态链接库实现nvram设备的模拟(实现失败原因未知)

由于报错函数是nvram_bufget所以我们只需要劫持这个函数所在的so文件我们就可以实现正常的ip地址获取了!

FirmAE提供的libnvram库源码:
FirmAE/sources/libnvram/config.h at master · pr0v3rbs/FirmAE (https://github.com/pr0v3rbs/FirmAE/blob/master/sources/libnvram/config.h)

为了适配环境做一些相应的修改:

1.修改config.h的挂载路径

2.修改config.h中启动web页面的ip地址

接下来成功编译:

经过上面的步骤发现网卡不对,在ubnutu上网卡为ens33,还是切换到kali进行实现步骤如上:

b.patch 原程序来实现

先ida动态调试一下手动修改值:

IDA动态调试附加上这个端口!

修改地址:0x45CDD4 (将v0的赋值修改为0,就不会报错了)

成功运行之后就会出现登录页面,在浏览器访问ip地址后:

成功!

在这里需要绕过路由的账号和密码!

有两种方式可以绕过:

1.修改前端的asp页面的js代码

找到这个页面并且修改里面的前端检验逻辑,将非空检查这些代码去除:

这样就可以成功绕过!将账号密码都置空,从而绕过strcmp的对比!

2.动态调试修改strcmp的比对结果

成功锁定函数:

在该位置下断点并且修改v0为0。

3.登录界面前后端通信原理

(1)前端js代码通过submit提交post请求将参数传给后端来处理。

(2)后端通过websOpenListen函数持续监听前端发送过来的post请求并进行处理。

(3)成功处理后,后端会发送新的页面信息给前端,实现前端页面跳转!

成功登入之后就可以访问访问:

由于kali2023自带bp,所以可以直接使用bp拦截实现命令注入:

将ls
写入date数据段,实现命令注入成功!

通过拼接字符串将ls嵌入命令中实现任意命令执行!

linux知识点:

反引号用于命令替换,即在反引号内的命令会先执行,其输出结果会替换反引号的内容。现代脚本中,推荐使用$()
形式,因为它更易读且支持嵌套。

利用链:
前端发送post请求将时间数据发送给后端-》websOpenListen监听请求-》收到请求后使用sub_4572A4函数进行时间设置-》由于未进行任何过滤导致doSystem(“date -s \”%s\””, Var);
会直接将传入的参数作为system的参数-》从而实现命令注入!

借鉴复现笔记:

1.cve-2018-17066复现 | 1uckyc’s blog

(https://1uckyc.github.io/2023/11/24/cve-2018-17066%E5%A4%8D%E7%8E%B0/)

2.DIR-816 模拟执行与命令注入漏洞分析 – IOTsec-Zone

(https://www.iotsec-zone.com/article/213)

3.VulInfo/D-Link/DIR-816/cmd_injection_0/README.md at master · PAGalaxyLab/VulInfo (github.com)

(https://github.com/PAGalaxyLab/VulInfo/blob/master/D-Link/DIR-816/cmd_injection_0/README.md)

4.物联网终端安全入门与实践之玩转物联网固件(中) – SecPulse.COM | 安全脉搏

(https://www.secpulse.com/archives/188250.html)

5.Debugging D-Link: Emulating firmware and hacking hardware (greynoise.io)

(https://www.greynoise.io/blog/debugging-d-link-emulating-firmware-and-hacking-hardware)

看雪ID:Loserme

https://bbs.kanxue.com/user-home-970470.htm

*本文为看雪论坛优秀文章,由 Loserme 原创,转载请注明来自看雪社区

# 往期推荐

1、Windows主机入侵检测与防御内核技术深入解析

2、BFS Ekoparty 2022 Linux Kernel Exploitation Challenge

3、银狐样本分析

4、使用pysqlcipher3操作Windows微信数据库

5、XYCTF两道Unity IL2CPP题的出题思路与题解

球分享

球点赞

球在看

点击阅读原文查看更多