复现 DLink DIR-859 RCE 漏洞(CVE-2019–20215)

复现 DLink DIR-859 RCE 漏洞(CVE-2019–20215)

漏洞介绍

该漏洞允许远程攻击者通过 urn 执行任意操作系统命令:到 /htdocs/cgibinssdpcgi()中的 M-SEARCH 方法,因为 REMOTE_PORT 处理不当。urn: service/device 的值使用 strstr 函数进行检查,该函数允许攻击者连接由 shell 元字符分隔的任意命令。

漏洞影响

D-Link DIR-859 1.05 和 1.06B01 Beta01 设备

漏洞等级

严重

环境搭建

在 kali 中下载 FirmAE
运行仿真固件

  1. 这个固件是千镜杯赛题,iot 部分下载得到 DIR.zip,解压后得到 DIR859Ax_FW106b01_beta01.bin

  2. 用 FirmAE 将固件运行起来。
    在这里插入图片描述

  3. 用binwalk提取文件系统
    在这里插入图片描述

模拟攻击

网上已有该漏洞poc,可直接利用。
poc
因为是未授权漏洞,所以可以使用poc直接打
在这里插入图片描述

漏洞原理

  1. 分析exp知漏洞点在ssdpcgi()中发现了远程执行代码漏洞,供应商已经创建了一个修补程序来修复该漏洞。使用HTTP_ST为攻击向量。
  2. ida分析cgbin中的ssdpcgi_main函数。
    在这里插入图片描述
    分析函数后,知道我们需要完成以下步骤来利用此漏洞。
  3. 必须在 ST 变量中发送值 urn:,以达到其他条件而不执行返回。
  4. 检查是否发送了两个字符串deviceservice中的一个。这样,我们已经可以验证漏洞的存在,因为strstr()函数允许连接命令。
  5. 该字符串作为参数发送到 lxmldbc_system()

查看堆栈
在这里插入图片描述

查看lxmldbc_system()函数
在这里插入图片描述
发现这些字符串未过滤便直接传给了lxmldbc_system函数并作为参数带入。
因此我们可以控制这些值或将其他值连接到现有值,例如REMOTE_PORT=13;lsSERVER_ID=1;ls,则这些值使用 vsnprintf() 存储在缓冲区中,以格式化最终命令。
返回后,格式化的命令将存储在记录 s0=buffer 所指向的缓冲区中,该缓冲区将是系统 (s0) 函数的参数。转储(内存)也与结构一样显示。当注入的命令被以字符串的格式引用时。我们便得到了触发了命令注入。
在这里插入图片描述
这样,我们只要构造包头为

IP="127.0.0.1"
PORT="1337"
METHOD=”M-SEARCH”
URI="/"
HTTP_ST="urn:device:1;{cmd}"
REMOTE_PORT="13"
SERVER_ID="1"

即可任意命令执行。

解决方案

升级固件至1.06B01 Beta01以上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值