[+]redrain//**/
汪汪汪
Embedded devices hacking --IPCAM hacking_4
Embedded devices hacking
--IPCAM hacking
author:redrain**
我是如何劫持你的摄像头的
之前的几篇文章已经介绍了ipcam的几种玩法和案例
在ipcam hacking_3中,我们还简单的介绍了一种劫持摄像头画面传输的hacking手法
那么,我们今天就来主要看看劫持ipcam的姿势
我们说过,如何对ipcam进行画面劫持,得弄明白这款摄像头实现画面传输的逻辑,我们大概可以对劫持准备进行这么几步:
- 确定用于视频流传输的协议
- 找到处理视频流的CGI
- 分析脚本文件,找到脚本中的功能函数
- 有些摄像头固件是没有动态脚本的,功能处理都写在server的bin中,所以还要分析server的bin文件
- 你看到的不是真的,hack it!
很简单,一步一步来,相对于白盒,直接黑盒测试更方便判断协议和找到处理脚本,然后在针对的进行白盒分析
固件分离我们就不说了,可以参看我之前的几篇文章,我们在视频传输的功能页面进行抓包,得到这样的报文:
####0x00,确定协议
GET /videostream.cgi HTTP/1.1
Host: 10.10.1.3
Connection: keep-alive
Authorization: Basic YWRtaW46
HTTP/1.1 200 OK
Server: Netwave IP Camera
Date: Thu, 01 Jan 1970 22:10:36 GMT
Accept-Ranges: bytes
Connection: close
Content-Type: multipart/x-mixed-replace;boundary=ipcamera
--ipcamera
Content-Type: image/jpeg
Content-Length: 17561
......JFIF..............Lavc54.27.100....Cztzztzztzztzztzztz
链接类型是multipart/x-mixed-replace,通过http协议来模拟画面的推送
就是说每次的画面传输都是ipcam使用的mjpeg流的传输,画面就是一张图一张图连贯起来形成的视频画面
####0x01,找到处理视频的CGI
同样,在web界面中的画面监控的地方进行抓包,得到了整个传输过程的报文
从live.html --> cam.html --> videostream.cgi
通过使用fmk对固件分离,grep找到了videostream.cgi是写在handle_cgi_requests这个bin文件中的

通过鼠标滚轮大法,我发现除了videostream.cgi这个文件控制画面传输功能之外,还有videostream.asf,这在之前的黑盒测试中是无法发现的

所以我们一会儿分析的时候除了videostream.cgi还有videostream.asf
可能有朋友要问了,你不会顺着跟踪函数来分析功能么?为什么还傻乎乎的滚鼠标一个一个找?
(QAQ因为我是web狗)
####0x02,找到实现功能的函数
因为这个固件是将功能写入到bin文件中的,所以找到其实现的函数也是在bin中找(web狗压力好大。。。)
通过跟踪videostream.cgi和videostream.asf,可以找到这样一个函数

函数功能用于接收摄像头捕捉到的画面并且会返回一个相应的包头和jpg的数据
(接下来就是对这个bin文件的详细分析,web狗做的分析,肯定有很多不对,求各位斧正)
image_counter = 0;
image_data = malloc(size_of_image);
[r4, #4] = image_data;
sprintf(&image_data, "/home/my_picture_%d",
image_counter);
f = fopen(image_data, "rb");
fread(&image_data, 1, size_of_image, f);
fclose(f);
[R4, #0xC] = size_of_image;
image_counter ++;
image_counter = image_counter % number_of_images;
看得出来,每次画面的选取都是从/home/my_picture这里选取的,因为之前说过,整个画面传输的工作都是连续的图片传输,所以,如果我们可以对这里的文件进行批量的写操作,就能够对画面进行实时欺骗了呢
yep,但是对ipcam的画面劫持的前提是,你需要获得到这个摄像头的会话,并且有一定权限,对文件进行写操作
所以,整个过程,应该是这样:
- 找到目标摄像头并确定其版本,型号,对固件进行下载分析
- 利用之前该版本爆出过的漏洞或者自己对固件分析后得到的漏洞获取会话
- 确定用于视频流传输的协议
- 找到处理视频流的CGI
- 分析脚本文件,找到脚本中的功能函数
- 有些摄像头固件是没有动态脚本的,功能处理都写在server的bin中,所以还要分析server的bin文件
- 你看到的不是真的,hack it!
####0x03,something fun
在我对视频流劫持查找资料学习的时候,我找到了一个小玩意videojak
videojak是一个很简单的ipcam的安全测试工具,它可以在你获取到的ipcam中做一个类似MITM的中间人攻击,直接劫持整个画面的传输流,或者重放上一个传输流
挺好玩呢
还有一个针对2013年blackhat大会上,Craig Heffner大神的好莱坞hacking议题中提到的所有摄像头漏洞的直接利用工具,ipcamshell
ipcamshell可以帮助你直接获取一个交互式的会话,并且拿到这个摄像头的认证用户名和密码
####0x04,last
文章最后,感谢各位不喷我这班门弄斧的crack水平和bin分析,因为每款型号的摄像头的固件功能实现都不相同,所以文中的例子只是一个例子而已,主要是介绍一下整个分析思路和过程。
我也还在折腾学习摄像头方面的hacking,希望各位不吝赐教~