IPCAM Hacking Part 3 - Camera Firmware Analysis

Secably Research
Jul 06, 2026
1 min read
Security Research
IPCAM Hacking Part 3 - Camera Firmware Analysis

[+]redrain//**/

汪汪汪

Embedded devices hacking --IPCAM hacking_3

Embedded devices hacking

--IPCAM hacking

author:redrain


一直以来,hacking题材的电影都非常炫酷,黑客们入侵大楼在键盘上噼里啪啦,不多时就如入无人之境,分分钟黑下大楼的所有系统,其中,对监控摄像头的hacking描写也很多,这次我们就来“意淫”一下,入侵大楼时,hacking监控摄像(文中案例都是我编的,请勿对号入座)

  • IPCAM&&videorecorders

    一般大楼内都有许多摄像头,它们通常区分为网络摄像头和录像机,录像机是可以保存画面数据的,先来大致了解一下他们是如何工作的:

    image

    image

如上图,管理界面可以分屏查看当前在线的所有cam画面

从简易到拓扑我们可以看到,在整个系统中manage server用作管理下属cam,通常有web ui,管理还可通过自己的设备接入进行管理操作,管理的日志和数据存放在数据库中,说明是有数据查询交互的,DVR录像机的画面数据也会存放在server中,而ipcam则会实时传输,也就是说,我们hacking的入手点,可以放在DVR,IPCAM,manager的web方向

也就是说,我们可以通过:

web ui(manager server) -->HTTP(apache。。。) -->OS(system)-->Hardware(DVR&&IPCAM)

OR

Hardware(DVR&&IPCAM) -->OS(system)-->HTTP(apache。。。) -->web ui(manager server) 

一个是通过上层到底层,另一个则直接通过IPCAM或DVR的固件问题直接hacking

  • some tricks

    上一篇文章中我们通过执行payload时使用curl发包,用ping来检测命令是否注入,在embedded devices hacking中,还有一些小trick可以帮助我们

    • 很多时候,厂商对原始设备进行了二次开发,所以有些命令你在其他设备work,在目标设备就不work,所以我们可以多采用几种命令进行测试,如curl,wget,nc

    • 灵活使用linux命令进行字符串操作

$ if test `sed -n '/^root/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi 
1 
// 检测root,下面是一些更好的方式。 
$ if test `sed -n '/^r/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi 
1 
$ if test `sed -n '/^ro/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi
1 
$ if test `sed -n '/^roo/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi 
1 
$ if test `sed -n '/^root/{s/^\(.\{1\}\).*/\1/g;p}' /etc/passwd`;then echo 1;else echo 2;
fi 
1

(学习自wooyun zone)


  • 当遇到目标有限制字符时,可以写入shell脚本进行执行

  • 如果你非常不幸,遇到了一个阉割命令的busybox多嵌入式设备,权限很高却无法执行命令,那么,你需要参考喔之前的一篇文章网络设备中限制用户命令交互的逃逸


    ssh给我们提供了一个可以按照配置预期执行命令的功能,在$HOME/.ssh/ config中进行配置,我们可以达到这样的效果,我们在配置文件中预期执行添加一个新的root用户,UID为0且无限制执行命令,以此来逃逸网络设备的限制问题
  • 你看到的不是真相

    在电影里,我们除了看到黑客直接把大楼系统黑下,还经常看到篡改摄像头的画面,这是怎么做到的~DVR我没研究过,所以暂时不发表观点,在IPCAM,因为数据时以流的形式传送的,所以,如果我们把数据传输的流掐断,会怎样呢~

    答案是管理在web ui上看到的,会冻结在掐断之前的画面,之后摄像头捕捉到到所有画面都不会实时传输回去,以此来达到篡改的目的

    举个栗子,在Trendnet的一款摄像头中,通过fmk分离固件,我看到了一个叫做mjpg.cgi的文件,这个cgi程序起到的作用就是用来传输摄像头到web ui这个过程的,那么~

    我只需要kill掉mjdp进程,整个画面就冻结在kill之前的画面了,在这个攻击中,我甚至都不用ssh连接后本地执行,因为我们可以配合之前所说道的攻击流程,直接对cam固件分析,通过类似RCE的方式kill~

    有同学问到了一个问题,关于时间戳的事儿,这得分情况,如果是DVR的话,录像画面都是从存储设备中调取,所以要篡改,需要更换文件(因为美研究过DVR,这是我意淫的)

    对于IPCAM,有部分不带时间戳,不用考虑这个问题,如果带的,也不用担心,因为他们处理画面传输和时间的进程时两个不同的,你kill了画面的而已(这涉及到他设备的功能实现问题,如果他二者都在一起,当我没说~)

    但是~这并不是一个最好的hacking方法,因为这有一个弊端,如果管理员重新加载浏览管理页面时,进程又会重启,他又会得到实时的画面传输

    那么,大招来了,我们是不是可以通过什么攻击方式来实时更改画面传输,或者说,我们是不是可以通过更好的hacking手段来进行实时欺骗,答案很明显~当然可以

    我们可以通过一个很简单的shell脚本来替换进程传输的画面为你需要的一个静态图片来达到欺骗的目的,大概实现如下:

    #!/bin/sh
     echo -ne “HTTP/1.1 200 OK\r\nContent-Type: image/jpeg\r\n\r\n”
     cat ztzsb.jpg
    
    

    如何执行这个东西,就不用赘述了,你可以直接新建一个,也可以直接加入到cgi脚本中,让他自己来执行,如果有更棒的方法,求告知学习~在执行我们的脚本后,管理得到的画面将是你的欺骗画面

    多说一句的是,我比较推荐的是备份原始cgi,用新的脚本来执行欺骗,这样有个好处是可以针对普遍情况的设备,避免二次开发或者不同设备对原始cgi的依赖问题,避免错误

image

big bro is watching u~

Tagged in: hacking, embedded devices, ipcam
comments powered by Disqus
Related tool: Try Secably's free Port Scanner online.

Check your site for vulnerabilities

Run a free security scan — no signup, results in seconds.

Related Posts

Stronger security starts with visibility.

Scan your website for vulnerabilities and get actionable insights.

Secure your website and accounts

Tools we recommend for site owners and admins.

Compare VPS prices →

Affiliate links: we may earn a commission, your price stays the same.