保姆级CVE-2018-17066漏洞复现 DLink命令注入漏洞(更新完结)

news2025/2/26 2:33:45

参考文章

CVE-2018-17066复现-CSDN博客

IOT-CVE-2018-17066(D-Link命令注入漏洞)_firmae路由仿真-CSDN博客

https://www.cnblogs.com/from-zero/p/13300396.html

IOT-CVE-2018-17066(D-Link命令注入漏洞)_iot设备漏洞-CSDN博客

cve-2018-17066复现 | 1uckyc's blog

漏洞环境搭建

旧的环境搭建笔记

固件官网可以进行下载

D-Link Technical Support

之后按照之前复现的方式一样 我们丢到kali中执行binwalk解析

解析完成可以获得

之后为了模拟 可以在kali里安装qemu-mipsel

在bin目录下可以尝试将goahead的环境搭配好

启动遇到报错

根据参考文章CVE-2018-17066复现-CSDN博客可知,以上这种qemu的方法启动存在很多bug,且难以修复。所以我们这里也学习博主,采用qemu的远程调试的思路来进行模拟。

参考的另一篇文章如下

https://www.cnblogs.com/from-zero/p/13300396.html

原文中采用的是ubuntu的系统,我们这里采用的是kali来进行模拟即可。

我们首先找到ida软件的安装目录 下的dbgsrv目录下的linux_server和linux_server64

我们将这两个文件放到我们的kali中 并且赋予其执行权限

这是我们kali的ip地址

接下来我们启动该linux服务器(32位启动linux_server即可)

之后我们去ida中进行链接操作 从而启动远程调节

(以上内容后续存在了问题,所以以接下来为准)

----------------------------------------------------------

2024.9.10更新

一些相关的引用参考:

IDA工具的快捷键使用等

CTF逆向工程 2.逆向工具IDA的使用_哔哩哔哩_bilibili

IDA工具的选用

我们需要注意 有很多版本的IDA工具 但是有的版本是不支持远程调试 或者说调试不能指定端口 有的过高的版本是没有办法通过Fn+F5进入反编译(会提示没有插件) 所以一定要选择一个正确合适的版本

本人尝试了很多版本 最后选择了7.7的版本

给出了具体的下载地址,不能下载的话评论区私我(不是我的链接)

[2023新年快乐] IDA Pro 7.7.220118纯净汉化修正版至上 - 『逆向资源区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

可以考虑的思路如下:

1.本地调试的方案 通过qemu来模拟启动goahead服务器文件 同时指定一个GDB调试的端口监听连接 在IDA中连接到GDB 以GDB作为中间桥梁来一边运行一边又可以借助IDA进行调试

由于远程动态调试的资料更多 所以这里我们先试着学习使用这种方法来模拟调试

2.远程动态调试的方案 在kali中负责启动qemu模拟 远程到本机windows配合IDA进行断点的调试

学习的参考地址:

ida在kali-linux虚拟机上进行远程调试(提供可能的解决无法连接的思路)内含本机与linux虚拟机无法互相ping通的解决方法(见标题四.(七))_ida远程调试linux-CSDN博客

https://www.cnblogs.com/haof31/p/18194327

按照两种建议的思路 我们来进行尝试复现

具体的操作流程和之前一样 我们把服务器端文件移动到kali上以后 接下来启动监听

开启监听以后 我们继续在kali上开启goahead文件用qemu模拟 同时指定远程调试端口为1234

指定完毕以后,接下来回到我们的IDA工具 我们接下来会需要一步一步的来解决BUG 

首先启动我们的IDA工具

调试方法选择如下

之后我们按住F9启动调试

文件位置选择本机的即可 地址设定为我们的kali的地址 端口为1234

 此时也就成功了 

接下来我们可以开始尝试运行 根据不同的报错bug 我们通过调试的方式一步一步改BUG

在调试器下选择继续进程 表示其开始运行 也就是F9

出现这个就表示正在运行

此时我们的kali端出现了报错而终止

这是我们需要解决的第一个BUG,我们回到IDA 去搜索这个字符串

找到了相应的目标 我们进入

按住ctrl+x 我们找其函数

进入以后 我们转成伪代码的视图 按住F5即可(笔记本是Fn+F5)

分析可知我们只需要把v1在执行的时候改成1 即可跳出这个while的循环 也就没有报错了

光标放到if(v1)那里 按住tab键回到源代码 

这就是那行代码 我们后续给其设置一个断点即可

重新继续在kali监听1234端口 重新启动调试

接下来我们任选一个地址 右键

选择跳转到指定地址 我们输入0045C748即可 然后添加断点

我们把光标定位到断点的前一行 然后运行的时候 选择运行到光标处

之后就可以看到当前所有寄存器的数值了

然后根据代码的原理 我们把v0的数值改成非0即可绕过这个报错(如果修改v1为1的话 可以绕过while的循环 但是fclose可能会出错)

第一个BUG就算解决了 接下来是另一个报错导致的终止

接下来我们继续去搜索字符串定位函数

同样我们继续回溯

找到了报错的位置 只要在运行调试的时候 将v19的数值改成非-1即可绕过这个报错

我们看一下这个函数的地址 便于后续定位 0045CDDC

我们继续重新模拟一遍 依次为这两个地方打上断点绕过bug

我们将v19的数值进行修改即可(此时依然修改的是v0寄存器)

此时就处于一直成功运行的状态 没有出现报错

并且去访问路由器的地址也可以成功访问了(注意不是https 是http)

http://192.168.206.162/dir_login.asp

漏洞复现

刚才已经搭建好了漏洞的环境,启动了路由器的界面 接下来我们直接复现漏洞的利用

接下来首先要做的事是绕过这个路由器的前端登录页面,两篇文章都提供了不错的办法。不论是直接修改前端,还是用IDA进行空绕过都是可以的。我们采取前面的方案 这样最快捷

我们可以按照如下的路径找到之前解析后的web的页面的代码所在的位置

我们找到刚才登录页面的asp文件 dir_login.asp

结合前端知识 点击登录以后 会进入onlogin方法进行处理 我们找到这个js

可以发现 其主要的前端工作就是为了限制用户名不能为空 否则会alert内容 

之后信息会以表单的形式传入如下后端进行处理 formLogin

接下来我们尝试去定位 看一下后端的代码是如何处理账号密码的登录的

我们可以尝试去字符串的位置搜索username等 看看是否有结果

定位到以后 通过ctrl+x来找其函数

首先我们进入第一个去看一下

很明显 这是类似于修改密码的部分 我们去看第二个

很明显 这部分符合我们的页面的逻辑 将前端得到的username和password进行decode64之后和bufget的内容进行比对获得结果 使用的是strcmp函数

根据源代码

如果我们登录错误 就会进入else的部分 我们可以自己尝试随便输入以后点击登录看看

如下图所示

那么根据代码可知 正常情况下比较结果为0表示正确 取反就可以进入验证

我们只需要让账号和密码都为空 即可绕过这个后端的验证  这个就有两个办法

我们可以直接把前端的代码给注释掉,使其允许输入空串即可 

又或者我们可以通过IDA修改strcmp的数值即可绕过

登录页面绕过

方案1:修改前端

我们理解了后端代码处理的逻辑后 最简单的方法 直接将onlogin的js代码给注释掉 绕过前端对于空输入的限制 即可利用strcmp的逻辑漏洞直接绕过登录 我们可以进行尝试

我们打开dir_login.asp的文件 直接进行注释 保存即可

然后我们重新启动这个模拟 用户名和密码都用空登录即可

此时已经没有前端的限制 也绕过了两个strcmp的限制 也就成功登录了

方案2:IDA修改strcmp的结果

我们继续重复之前的操作 只不过我们需要定位一下strcmp结果的位置

按住Tab键 恢复源代码的样子 

不知道在哪里下断点的注意了!!!我们按住空格键即可进入视图的页面

我们可以发现 判断的分支核心就在这一条 所以我们下断点修改数值的核心就是这个位置

也就是断点位置:0045711C  我们接下来先把页面正常打开

在该位置添加一个断点  然后前端随便输入一个内容 网页开始转圈

IDA已经成功到断点的位置了

自行验证方案,如果修改过程出现了问题 就会出现如下页面 被重定向到了dir_login.asp

我们可以尝试用户名随便输 密码输入为空用户名不为空就可以绕过前端的限制了) 之后我们运行时,将v0修改为0 即可绕过对于用户名的strcmp的限制 密码为空本身就可以绕过strcmp 这样也就登录成功了

之后我们点击登录 修改v0为0即可

之后我们继续运行进程即可成功登录

方案3:BurpSuite抓包直接绕过

由于kali自带bp 可以直接抓包 输入的时候输入用户名和密码 抓包直接改为空即可绕过前端js的限制 也很简单 这里就不再赘述了 读者可以自己测试 很简单

登陆成功漏洞利用

登录成功绕过以后 我们就可以进入如下这个漏洞存在的页面 进行漏洞的复现了

http://192.168.206.162/d_wizard_step1_start.asp

这是漏洞的页面位置

同样 这里前端页面对于输入的内容也有限制 我们可以通过bp抓包的方式

通过bp抓包 我们将我们的命令可以放入datetime字段

通过 ` ` 这种符合嵌入到命令中 即可导致命令执行 ls的结果已经显示出来了

我们可以在kali中进行验证

很明显通过反引号指出的命令会被优先执行 具有更高的优先级

漏洞原理分析

我们找一下后端的代码,搜索字符串datetime

一步一步回溯找到相应的代码 最终我们找到函数sub_4572A4

可以发现其后续对于输入的datetime数值Var 没有做任何过滤处理 就执行了dosystem函数

这也是为什么我们前面需要将命令拼接到datetime的原因 至此原理分析也完毕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

web渗透—RCE

一:代码执行 相关函数 1、eval()函数 assert()函数 (1)原理:将用户提交或者传递的字符串当作php代码执行 (2)passby:单引号绕过:闭合注释;开启GPC的话就无法绕过(GPC就是将单引号转换为"反斜杠单引号"&a…

【Redis】缓存和数据库一致性问题及解决方案

往期文章: 【Redis】Redis 底层的数据结构(结合源码) 【Redis】为什么选择 Redis 做缓存? 【Redis】缓存击穿、缓存穿透、缓存雪崩原理以及多种解决方案 一、前言 在前面的文章中,我们探讨了为什么要使用 Redis…

独居打工人,把超市当顶配食堂

文 | 螳螂观察 作者 | 如意 独自在大城市扎根的年轻人有着自己的小确幸,比如“周末可以睡到下午才起床,不会有任何人打扰”,“瘫在沙发上吃着零食享受一部自己想看很久的电影,也不会被唠叨。” 但生活并不总是尽如人意&#xf…

基于SpringBoot+Vue的学生宿舍水电信息管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

PDF在线编辑哪家强?2024年4款热门工具大比拼

如今是数字化的时代,PDF 文件对我们工作和学习来说特别重要。不过呢,遇到那些麻烦的 PDF 编辑和转换的事情时,你是不是常常觉得没招儿,甚至还得加班到半夜?别犯愁啦,今天我给你讲讲四款非常好用的 PDF 在线…

深入理解全连接层:从线性代数到 PyTorch 中的 nn.Linear 和 nn.Parameter

文章目录 数学概念(全连接层,线性层)nn.Linear()nn.Parameter()Q1. 为什么 self.weight 的权重矩阵 shape 使用 ( out_features , in_features ) (\text{out\_features}, \text{in\_features}) (out_features,in_features)而不是 ( in_featur…

【人工智能】OpenAI最新发布的GPT-o1模型,和GPT-4o到底哪个更强?最新分析结果就在这里!

在人工智能的快速发展中,OpenAI的每一次新模型发布都引发了广泛的关注与讨论。2023年9月13日,OpenAI正式推出了名为o1的新模型,这一模型不仅是其系列“推理”模型中的首个代表,更是朝着类人人工智能迈进的重要一步。本文将综合分析…

10款超好用的电脑文件加密软件推荐|2024文件加密软件排行榜

在数字时代,数据安全已成为个人和企业不可忽视的重要议题。加密软件作为守护数据安全的坚固防线,其重要性不言而喻。以下是2024年备受推荐的十款电脑文件加密软件。 1.安秉网盾 安秉网盾以其全面的数据保护和安全防护功能备受企业青睐。它支持多种加密…

C语言内存函数(21)

文章目录 前言一、memcpy的使用和模拟实现二、memmove的使用和模拟实现三、memset函数的使用四、memcmp函数的使用总结 前言 正文开始,发车! 一、memcpy的使用和模拟实现 函数模型:void* memcpy(void* destination, const void* source, size…

深入Redis:分布式锁

在一个分布式的系统中,会涉及到多个节点访问同一个公共资源的情况。此时就需要通过锁来做互斥控制,避免出现类似于“线程安全”的问题。 Java中的synchronize只能在当前线程中生效,在分布式的这种多个进程多个主机的场景下就无能为力了。此时…

原型模式详细介绍和代码实现

🎯 设计模式专栏,持续更新中, 欢迎订阅:JAVA实现设计模式 🛠️ 希望小伙伴们一键三连,有问题私信都会回复,或者在评论区直接发言 Java实现原型模式 介绍: 原型模式(Prototype Patte…

C4D2025来了!亮眼的新功能一览

C4D2025新功能亮点,同步上新的Redshift 2025.0.2。等我体验了再给大家讲详细的 成都渲染101云渲染支持对应软件渲染,3090等显卡,云渲码6666 渲染101云渲码6666 Mograph增强 引入线性域标签,用于精细控制对象参数。 为追踪器对象新…

安泰功率放大器有哪些特点呢

功率放大器是电子设备中的重要组成部分,其作用是将输入信号的电功率放大到足够的水平,以驱动负载,如扬声器或天线。功率放大器有一些独特的特点,这些特点对于各种应用至关重要。下面将详细介绍功率放大器的特点,以更好…

【Vue】移动端访问Vue项目页面无数据,但是PC访问有数据

问题: Vue项目,PC访问时下拉列表有数据,移动端访问时下拉列表没有数据; 思路: 首先打开了Fiddler抓包工具,把抓到的url复制到PC浏览器进行访问,结果发现PC上访问这个页面是有数据的&#xff…

利用Leaflet.js创建交互式地图:绘制固定尺寸的长方形

在现代Web开发中,交互式地图已成为展示地理位置数据的重要工具。Leaflet.js是一个轻量级、功能丰富的开源JavaScript库,用于构建移动友好的交互式地图。在本文中,我们将探讨如何利用Leaflet.js在地图上绘制一个固定尺寸的长方形,扩…

堆+堆排序+topK问题

目录 堆: 1、堆的概念 2、堆的结构 3、堆的实现 3.1、建堆 3.1.1、向上调整建堆(用于堆的插入) 3.1.2、向下调整建堆 3.2、堆的删除 3.3、堆的代码实现 3.3.1、Heap.h 3.3.2、Heap.c 堆排序:(O(N*log(N))) 1、排序如何…

接口测试用例的编写

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1、接口测试发现的典型问题 接口测试经常遇到的bug和问题,如下: 传入参数处理不当,导致程序crash类型溢出,导…

下载chromedriver驱动

首先进入关于ChromeDriver最新下载地址:Chrome for Testing availability 进入之后找到与自己所匹配的,在浏览器中查看版本号,下载版本号需要一致。 下载即可,解压,找到 直接放在pycharm下即可 因为在环境变量中早已配…

严重干扰的验证码识别系统源码分享

严重干扰的验证码识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comp…

领夹麦克风哪个品牌好?大疆、西圣、博雅无线麦克风在线测评

​随着科技的不断进步,越来越多的专业音频设备出现在大家的视野中,无线领夹麦克风就是其中之一,并且很多人在视频创作、直播等场景中都会进行选购。但是近些年来无线领夹麦克风市场较为复杂,很多质量不佳的产品混杂其中&#xff0…