摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)

将摄像头与互联网进行连接初始化之后,使用nmap扫描摄像头的开放端口:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(1)

可以看到摄像头开放了五个端口,这里关注到80端口,在浏览器中输入http://192.168.2.116:80

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(2)

发现会302重定向到http://192.168.2.116/home.htm,最终跳转到http://192.168.2.116/xxx/xxx/XXTest.asp:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(3)

而这个网站什么都没有。因为有官方的手机App,所以在不逆向的前提下可以通过抓包分析手机与云服务的通信状态,其中有一个关于固件升级的包:

//---------------------------------------------------------------固件升级 POST /xx/xx/query_device_upgrade_task HTTP/1.1 Host: www.xxx.com Content-Type: application/json; charset=utf-8 Content-Length: 278 Accept-Encoding: gzip, deflate User-Agent: okhttp/3.12.8 Connection: close { "header": { "device_list": [ "xxx" ], "seqno": "xxx", "user_id": "xxx", "package_name": "xxx", "language": "zh_CN", "client_version": "x.x.x.x", "token": "xxx", "phone_model": "xxx" } } //---------------------------------------------------------------响应包 HTTP/1.1 200 OK Date: Mon, 04 Jul 2022 00:57:26 GMT Content-Type: text/plain; charset=utf-8 Content-Length: 463 Connection: close Set-Cookie: xxx=xxx; path=/ Set-Cookie: xxx=xxx; path=/ Server: elb { "error_code": "0", "error_msg": "success", "body_info": { "upgrade_task": [ { "device_id": "xxx", "is_force": "N", "main_version": { "device_version": "xx.xx.xx.xx", "version_type": 0, "url": "http://xxx.img", "md5sum": "xxx", "remark": "1.优化固件功能,提高用户体验。", "is_support_sdcard_prealloc": 1, "last_app_version": "" }, "sub_versions": [], "switchto_sdcard_prealloc": "Y" } ] } }

即,当摄像头存在固件升级时可以获取固件的URL,将固件下载后因为发现固件过小,所以可以知道是”增量包”而不是”全量包”,在ubuntu中尝试使用firmware_mod_kit./extract-firmware.sh进行解压:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(4)

摄像头使用的架构为MIPS 32位小端序:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(5)

来到固件目录,使用grep命令尝试搜索关键字:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(6)

goahead中的http://" location.hostname "/xxxx/xxx/upload_firmware.asp引人注目,在浏览器中访问:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(7)

发现未授权固件上传漏洞。查看增量包中的两个shell脚本,修改其中的startapp:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(8)

发现内置的telnetd接口,取消其注释,使用firmware_mod_kit的build-firmware.sh重新打包:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(9)

为了避免一些不必要的问题,我们将打包后的固件重命名为原升级包的名称:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(10)

使用upload_firmware.asp上传:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(11)

再次使用nmap扫描端口:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(12)

开放了telnet的23端口,尝试连接:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(13)

嘶,需要密码,回到配置文件,修改为telnetd -l /bin/sh &

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(14)

保存修改后重新打包上传:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(15)

重新尝试telnet登录:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(16)

拿到root shell,可以使用的命令如下:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(17)

命令还不少,有base64、wget等。web目录在:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(18)

这能访问的asp页面不少啊,其中就包括前面使用的upload_firmware.asp。关于telnetd:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(19)

telnetd -l /bin/sh &telnetd -l /bin/sh表示直接启动shell,&表示telnet后台运行。并且因为摄像头有云服务,所以它也是通外网的:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(20)

因为这个摄像头有base64命令,所以可以通过它来上传或下载文件,比如现在我要下载goahead,对文件进行base64编码:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(21)

将编码保存到txt中,然后base64 --decode即可:

摄像头唤起失败请给予相应权限(某摄像头存在通用未授权命令执行漏洞)(22)

总结:

1.通过流量分析软件/固件的行为,或许是一个很便捷的方法。

2.厂商不注重对某些网页的鉴权,甚至可以导致任意刷写修改过后的固件。

3.通过取消注释启动脚本中的telnet服务,即可建立主机与摄像头的telnet链接。

4.对文件进行base编码即可达到下载传输文件的目的。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页