DLINK DCS-5020L无线云摄像机远程代码执行漏洞分析

简介

本文主要是向大家演示,如何找到物联网(IOT)设备中的漏洞。查找以下命令注入的过程可以分为3个步骤,有点类似于100 point CTF challenge:下载二进制文件,运行字符串,跟踪系统调用到原点的输入。

DLINK DCS-5020L

“DCS-5020L无线N Day&Night云台/倾斜云台摄像机是一款日夜型网络摄像机,可轻松连接到您现有的家庭网络,并支持在各种移动设备上进行远程观看。 它具有平移,倾斜和数码变焦功能,可让您使用单台相机查看更为广阔的区域,内置Wi-Fi扩展器,轻松扩展无线覆盖范围,夜视距离达5米,声音和运动检测终极的安心无忧,H.264视频压缩为高质量的图像。“

提取固件

与任何物联网设备一样,我们需要做的第一件事就是(如果我们有权访问它)从固件映像中提取文件系统。而对于这种设备,第一次binwalk扫描不会显示任何东西:

我们正在寻找的是某种形式的嵌入式文件系统,比如squashfs。如果找不到它,通常是因为它被使用了分层压缩。 我们需要做的就是使用-M选项,递归运行binwalk。最终,我们在2层压缩下发现了cpio文件系统。

让我们来查看下负责Web服务器的httpd二进制文件。

文件名:alphapd

Md5sum: ea622a926c435e4637f4852536aafa8c

漏洞

就像文章开头所说的那样,首先我们在二进制文件上运行字符串,看看会发生什么:

这些看起来像是传递给系统的命令。这里的’sed’命令非常有趣,看起来好像是从某个地方输入的。下一步是跟踪输入,看看我们是否可以控制它。

我们可以看到这里有两个引用我们感兴趣的字符串的函数。

反过来,每个函数都在setFormDefineManagement中被引用:

这些都是我们可以发送请求的POST表单。 例如,如果我们以下面的形式更改密码,我们向setSystemAdmin发出POST请求:

应该注意的是,您需要拥有管理员凭据才能访问此页面,稍后再介绍。还有一点需要注意的是,setSystemUserModify表单总是返回一个404,所以我们坚持分析setSystemAdmin。

因此,从sub_42DCCC开始,代码将从非易失性RAM以及websGetVar中取值。

这里的一个关键信息是对CheckSystemVar的调用,这段代码调用websGetVarCheck来处理大量的输入值,包括AdminID。

然后websGetVarCheck调用checkVarString,如下所示:

这显然只是一个switch/case结构。我们感兴趣的值是AdminID,可以看到它的值必须小于13个字节。

所以我们知道AdminID的约束是它必须少于13个字节。完成所有这些后,通过格式字符串传递给我们的AdminID参数来调用DoSystem。

很显然,攻击者可以使用一个简单的payload来躲避’sed’命令,比如‘touch a’。 另一个例子是AdminID=a’telnetd’,它允许用户登录为“a”,并将此视作新的root帐户:

注意,我们使用空密码登录。

进一步说明

我们还发现,我们可以通过在大多数密码字段中发送长密码,来对web server segfault。如果我们发送198个字节,服务会发生段错误,并且会导致总线错误。

不过可惜的是,我找不到让gdbserver进入设备的方法,因此也无法转储核心文件并抓取它。

以下是使用210A的DDNSPassword参数向/setSystemNetwork发出POST请求的示例。

掌握凭据的攻击者可以利用该漏洞,在摄像机的Web界面上导致其拒绝服务。如果我们能找到在设备上调试二进制文件的方法,也有可能做到RCE。

影响

目前,这些设备中有近7000个连接到互联网:

MISC

受影响的版本 - 固件1.14.09

受影响的二进制文件 - Alphapd - ea622a926c435e4637f4852536aafa8c

补丁 - DLink的公告

TIMELINE

2017.11.21 - 向厂商披露,收到William Brown的回复,并发送给研发部门 2017.11.29 - MITRE CVE请求,分配CVE 2017-17020,然后发送给Dlink并更新它们。 W. Brown询问公开披露时间,我们告诉他没有时间限制,只有在补丁发布后才会被公开披露。 2018.4.27 - Dlink的解决方案正式上线 2018.4.27 - 博客上线并更新了CVE

*参考来源:fidusinfosec,FB小编 secist 编译,转载请注明来自FreeBuf.COM

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-05-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

内网渗透主机发现的技巧

在内网渗透中,为了扩大战果,往往需要寻找更多主机并且对这些主机进行安全检测或帐号密码测试,所以主机发现这个步骤必不可少。我们如何在不实用扫描器的情况下发现更多主...

2970
来自专栏FreeBuf

没有外部工具,如何快速发现Windows中毒了

从事应急响应工作几年之后,我认为总结一份快速确定计算机是否被感染木马和病毒的“方法论”是十分有用的。这显然不是那么简单的,可我却发现感染几乎存在于所有不复杂的攻...

2095
来自专栏行者悟空

一次nginx引起的线上502故障

今天突然接到某PM的求救,说微信支付到应用的请求一直返回502,于是初步了解完情况后,就进入了问题排查阶段。

7912
来自专栏小白课代表

软件分享 | 3DS MAX 2018安装教程

3D Studio Max,常简称为3d Max或3dsMAX,是Discreet公司开发的(后被Autodesk公司合并)基于PC系统的三维动画渲染和制作软件...

971
来自专栏散尽浮华

Linux系统是否被植入木马的排查流程梳理

在日常繁琐的运维工作中,对linux服务器进行安全检查是一个非常重要的环节。今天,分享一下如何检查linux系统是否遭受了入侵? 一、是否入侵检查 1)检查系统...

7208
来自专栏小怪聊职场

Java|网络IO之同步、异步、阻塞、非阻塞

3587
来自专栏木头编程 - moTzxx

ThinkCMF 初次见面/折腾一下

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

2272
来自专栏前端正义联盟

amazing 真的不错,备份苹果手机系统简直不能再厉害!

3424
来自专栏疯狂的小程序

ASP获取微信小程序的OpenID服务器端代码

尝试一下新鲜事物“微信小程序”,其中有一个业务场景,通过微信登陆小程序,这样需要获取小程序的用户ID(也就是openid)。微信小程序从安全角度考虑,不提供直接...

7518
来自专栏安恒信息

Hacking Team 病毒测试环境分析

0x00 前言 安恒研究团队在Hacking Team泄露的文件中除了发现大量的后门、木马等攻击的源码,还发现了两个用于病毒安全性测试的源代码,分别是test...

3855

扫码关注云+社区

领取腾讯云代金券