tendaCT6摄像头命令执行

admin 2023年2月2日19:13:19评论72 views字数 2181阅读7分16秒阅读模式

+

+

转载 来源"IOTsec-Zone"


最近逛tenda发现新上了一款摄像头,这不下载个固件看看?

直接binwalk一把梭


tendaCT6摄像头命令执行


firmAE


这里先不看文件系统,尝试下用firmAE来模拟固件

sudo ./run.sh -c ipc /mnt/hgfs/sharedir/tenda/ct6/IPC_SD_update.bin

需要使用root权限来执行firmAE文件夹下的run.sh,-c参数为check,来检查是否可以模拟,一般check完成后模拟起来会很快,但check很慢,ipc算是项目名字可定义即可


tendaCT6摄像头命令执行


sudo ./run.sh -d ipc /mnt/hgfs/sharedir/tenda/ct6/IPC_SD_update.bin

check完成后可以使用 -a参数直接执行,或者-d参数以debug模式执行,debug模式


tendaCT6摄像头命令执行


这个固件能模拟,但是不能完全模拟,知道用法就可了。

如何找到一个固件的服务进行分析

当解包一个固件的时候发现,没有http服务,没有html页面,没有httpd,boa,uhttpd,lighttpd等。

某些摄像头经常见到这个问题。

这个时候需要从启动来一点点看找到他启动了什么服务。

当然如果有设备并且获取了串口shell,也可以直接查看

这里推荐个超好用的命令 find

大概用法

find . -name “httpd”

find . -name “*cfg”

支持*这样的正则匹配

linux启动最先看inittab,一般在etc下面


tendaCT6摄像头命令执行


启动rcS,一般都在/etc/init.d/rcS


tendaCT6摄像头命令执行


这里就是执行了init.d文件夹下的文件


tendaCT6摄像头命令执行


S00devs 里使用mknod创建Linux中的符设备文件和块设备文件,不重要

S01udev 它主要的功能是管理/dev目录底下的设备节点。它同时也是用来接替devfs及热插拔的功能,这意味着它要在添加/删除硬件时处理/dev目录以及所有用户空间的行为。也不重要

S80network中也并没有发现启动的服务

那返回到rcS,执行完S*之后,执行了/opt/app/init.sh


tendaCT6摄像头命令执行


但opt中没有任何文件,这个时候就需要上面说的find命令了。


tendaCT6摄像头命令执行


吧squashfs-root-0和-1的所有内容移动到opt下


tendaCT6摄像头命令执行


运行network_setup.sh,启动telnet服务,将execute放到tmp,启动execute服务,运行daemon.sh

network_setup.sh中没有服务启动,不赘述

daemon.sh中执行了tdseq服务


tendaCT6摄像头命令执行


从先后顺序来看,来分析个execute。

这里tenda摄像头设备基本都是armel,自行file即可


execute

main中可以看到socket函数(具体请看socket网络编程)


tendaCT6摄像头命令执行


这里绑定了8899端口,但是并没有监听。启动下看看


tendaCT6摄像头命令执行


发现8899的udp协议。

可以使用netcat连接


tendaCT6摄像头命令执行


这里分析下udp协议做了什么


tendaCT6摄像头命令执行


通过recvfrom获取到传入的内容存放到v13,创建新线程将内容传进去。


tendaCT6摄像头命令执行


在线程中,吧参数给了v9,然后注意这个v17获取了前四位做了个判断。

以为是magicnumber,满足条件执行my_system,但是这个magicnumbe没有做任何奇奇怪怪的判断。所以可以直接命令执行,但是还是好奇这个sub_10D64做了什么。点进去????????????????????????????


tendaCT6摄像头命令执行


不是,脱裤子放屁都没这么放的吧。

开发者这么做,一定有他的用(大)意(病)

查了半天,也没发现这里if分支的区别。

这里应该算是个命令执行了。直接来吧!


qemu user导致的问题


这里本来使用的 sudo chroot . ./qemu-arm-static ./opt/app/execute 启动的,但是命令执行死活不成功。

gdb调试了一天,愣是没找到问题。


tendaCT6摄像头命令执行


第二天尝试了下qemu-arm-static -L . ./opt/app/execute

可以了。。。,这里xxxx就是为了填充magic number,可以写脚本传入0x00来执行到sub函数。


tendaCT6摄像头命令执行


所以各位有时候遇到这种问题可以看一下是否是qemu的问题。

当然,如果像我一样,有一个同架构的其他设备,又刚好有该设备的rce,就可以搞点牛头人操作了。


关于gdb多线程调试


gdb多线程调试,大概说一下怎么搞。

使用qemu自带的-g参数启动远程server

qemu-arm-static -L . -g 1234 ./opt/app/execute # 1234为监听的端口


tendaCT6摄像头命令执行


使用gdb-multiarch来进行调试

gdb-multiarch opt/app/execute

target remote 127.0.0.1


tendaCT6摄像头命令执行


在子线程函数中下个断点,我这边位置是0x000110E8


tendaCT6摄像头命令执行


tendaCT6摄像头命令执行


使用c来执行程序


tendaCT6摄像头命令执行


使用netcat连接udp

nc -uvv 127.0.0.1 8899


tendaCT6摄像头命令执行


连上后gdb中能发现新线程

info threads


tendaCT6摄像头命令执行


ID 2 就是断下来的心线程,使用thread 2来切换线程

thread 2


tendaCT6摄像头命令执行


此时pc指向我们的断点,要回主线程,只需要再次切换即可。

可能漏洞点比较简单,但确实挺多人拿到固件后发现不了http协议后会不知道怎么下手,这里算是提供一个思路。
当然思路不止这一种,也可以通过串口shell netstat -anp来查看哪个软件监听了哪个端口。



✦  +

+

扫描二维码关注我们

暗影安全

tendaCT6摄像头命令执行


原文始发于微信公众号(暗影安全):tendaCT6摄像头命令执行

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月2日19:13:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   tendaCT6摄像头命令执行http://cn-sec.com/archives/1341571.html

发表评论

匿名网友 填写信息