复现 DLink DIR-859 RCE 漏洞(CVE-2019–20215)_dydymm的博客-程序员秘密

技术标签: 安全  渗透测试  linux  网络安全  

复现 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以上。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wcwdnmdnmd/article/details/122052333

智能推荐

k8s基础(13)之scheduler调度器_k8s scheduler_正在输入中…………的博客-程序员秘密

k8s基础(13)之scheduler调度器kube-scheduler是kubernetes系统的核心组件质疑,主要负责整个集群资源的调度功能,根据特定的调度算法和策略,将Pod调度到最优的一个工作节点上面去,从而更加的合理、更加充分的利用集群的资源。调度器流程scheduler 是Kubernetes的调度器,它的主要作用就是根据特定的调度算法和调度策略将Pod调度到合适的Node节点上去,是一个独立的二进制程序,当我们通过API 或者kubectl工具发送创建Pod的指令后,apiserver会

微服务和分布式的区别_分布式和微服务区别_阳光不锈@的博客-程序员秘密

--------------------------------------------------------------------------------------------------------------------------简单的说,微服务是架构设计方式,分布式是系统部署方式,两者概念不同。简单来说微服务就是很小的服务,小到一个服务只对应一个单一的功能,只做一件事。这个服务可以单独部署运行,服务之间可以通过RPC来相互交互,每个微服务都是由独立的小团队开发,测试,...

09 JAVA如何将字符串反转?_暴走的山交的博客-程序员秘密

09 JAVA如何将字符串反转?答:1.StringBuilder的reverse()方法,最简单```sqlpublic static String reverse4(String s) { return new StringBuffer(s).reverse().toString();}2.使用字符串数组,实现从尾部开始逐个逆序放入字符串sublic static String reverse3(String s) { char[] array = s.toCharArray

由滑动顶端悬浮引发的性能优化大坑坑坑—ScrollView嵌套ListView以及层层嵌套_风一样的男人zzz的博客-程序员秘密

请尊重个人劳动成果,转载注明出处,谢谢! http://blog.csdn.net/xiaxiazaizai01看题目就知道,今天我们主要讲的主角是关于scrollview嵌套listview以及再层层嵌套导致的性能优化问题。现在市面上好多app都有这样一种功能,在页面中间某一位置有一个布局,在页面整体向上滑动时,当此布局到达屏幕顶端或者某一位置时要求此布局悬浮停靠,本文实现的思路是在需要

贪心算法总结_weixin_34162228的博客-程序员秘密

为什么80%的码农都做不了架构师?>>> ...

软技能-代码之外的生存指南_dcfeng32的博客-程序员秘密

作为一个初级程序员,生活不仅有眼前的bug,还应该有诗和远方。最近读了一本书,虽然只读了一半但其中阐明的思想让我感受颇深。受本书的影响我决定写博客,争取一周写2~3篇原创文章。无关字数,无关质量,无关话题…初次看到这本书时候,就像书名软技能—代码之外的生存指南一样,直觉告诉我这肯定不是一本专业枯燥的技术或者通篇鸡汤讲大道理的书籍,如果真的是那样翻开书就头疼想睡觉的我肯看不下去。该书大概内容是:...

随便推点

Homebrew安装git后仍是系统自带git版本问题解决_使用brew安装git后依旧是旧版本_Debug陈缘圈的博客-程序员秘密

为了方便以后更新git版本,今天选择在mbp上使用Homebrew安装git安装命令很简单brew install git安装完成后查看git版本,发现还是系统自带的git的版本号,即默认使用的还是系统预装的gitgit --version………以下是解决方法,希望对遇到同样问题的你们有所帮助~cd ~vim .bash_profile添加export GIT=/usr/local/Cellar/git/2.18.0export PATH=GIT/bin:GIT/bin:G.

ES6新语法概览_徐小七七的博客-程序员秘密

语法箭头函数、thisES6中可以使用 => 作为函数表达形式,极简风格,参数+ => +函数体。var foo = function(){return 1;};//等价于let foo = () => 1;let nums = [1,2,3,5,10];let fives = [];nums.forEach(v => { if (v % 5 === 0) fives.push(

黑马程序员—-C语言入门十重奏之三相悉_songyanannm的博客-程序员秘密

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-首先,认识一个新的xCode快捷键吧:shift+cmd+k清楚缓存我们认识了C语言后,就该熟悉它了,当然要从最基本的开始,就像我上节说的,可以把C语言当做一门类似英语的语种来学习,那么知道了C语言组成的单词,今天就来讲讲它是用什么连贯成句的。1.表达式算数、关系、逻辑表达式一定有返回值表达式后面加上分号

性能测试概念到底是设么_消息都是的博客-程序员秘密

在性能测试行业中,长久以来,都存在几个关键的概念误差。在我从业性能测试十几年的经历中,也看到过书籍或网上传播着各种性能测试的概念、方法论等,但是究其本质,再对应到具体的项目工作中,我发现这些概念以及方法论实在没有指导的价值,并且有些概念的产出,也没有确凿的证据来源。所以在今天,专栏正式更新的第一天,我希望能把这些内容做些梳理,同时这些梳理的内容也会对应到后续的篇幅之中,以便保持理念的一致性。性能测试概念我们经常看到的性能测试概念,有人或称之为性能策略,或称之为性能方法,或称之为性能场景分类,大概可以看到性能

【嵌入式学习】Keil5 链接报错: No space in execution regions with .ANY selector 解决方案_海獭的小爱情的博客-程序员秘密

之前在使用nucleo STM32F091RCT6进行项目实验时,代码编译链接无报错。最近需要将代码移植到nucleoSTM32F072RBT6上,在更改Target中device芯片以及C++define后,再次编译链接,出现了几十个相同类型的错误,均为No space in execution regions with .ANY selector matching xxx.o(.data)。...

vim.rc配置(deepin)_weixin_30772105的博客-程序员秘密

set nocompatible " be iMproved, requiredfiletype off " required" set the runtime path to include Vundle and initializeset rtp+=~/.vim/bundle/Vundle.v...

推荐文章

热门文章

相关标签