Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-4045 — 命令注入漏洞利用工具,针对TP-Link Tapo C200摄像头(CVE-2021-4045),通过UART提供root shell访问,并包含逆向工程的uhttpd二进制分析。 | Kitploit
工具/GitHubGitHub/kaleth4/cve-2021-4045
嵌入式系统安全物联网安全漏洞分析漏洞利用逆向工程硬件黑客渗透测试命令与控制固件分析
GitHubkaleth4/cve-2021-4045

CVE-2021-4045

命令注入漏洞利用工具,针对TP-Link Tapo C200摄像头(CVE-2021-4045),通过UART提供root shell访问,并包含逆向工程的uhttpd二进制分析。

223个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

🔍 CVE-2021-4045:TP-Link Tapo C200 命令注入漏洞

image

CVE-2021-4045


📌 概述

CVE-2021-4045 是 TP-Link Tapo C200 摄像头中发现的 命令注入 漏洞,允许攻击者 以 root 权限完全控制设备。该漏洞影响 所有早于 1.1.16 Build 211209 Rel. 37726N 的固件版本。

🔗 INCIBE 官方公告: https://www.incibe.es/incibe-cert/alerta-temprana/vulnerabilidades/cve-2021-4045 (请替换为真实链接)

🔧 推荐解决方案:将固件更新至 1.1.16 或更高版本。



🛠 初步侦查

设备配置与特性

  • 经济型 IP 摄像头(约30欧元),具备高级功能:
    • SD 卡录制。
    • 水平旋转 360°,垂直旋转 90°。
    • 通过移动应用实时播放音频。

端口扫描```bash

$ nmap -sV -p- 192.168.1.81

**结果**:```
PORT     STATE SERVICE
443/tcp  open  https
554/tcp  open  rtsp
2020/tcp open  xinupageserver
8800/tcp open  sunwebadmin
image 可以看到,设备有一些有趣的开放端口。我首先测试了443端口。虽然nmap明确表明它使用https,但在初始扫描时,我忽略了这一点,花了很长时间以为443端口使用的是http。因此,我只尝试了http://192.168.1.81:443而不是https://192.168.1.81:443,所以只得到了400响应。正如我在引言中所说,这个过程充满了失误。至于其他端口,上面运行的服务对我来说完全陌生,没有找到任何明确的信息。那时,我已经没有已知的选项了,所以是时候进一步深入研究了。

----[ 获取Shell ]-------------------------------

在购买摄像头之前,我在网上搜索了关于该设备的先前研究,幸运的是,我找到了这个GitHub仓库,人们在那里合作进行逆向工程。其中一个问题解释了如何通过UART端口获得控制台访问权限,这在当时我完全不知道怎么做。于是我学习了基础知识,并购买了一个USB转TTL转换器进行连接。 image 借助提到的问题,我用刀和螺丝刀打开了设备,并迅速找到了UART。经过几次尝试和足够的耐心,我终于成功地将一些线焊接到焊盘上。

image

然后,该检查焊接是否足够好以进行数据传输了。我将线连接到USB适配器,注意UART的Rx连接到适配器的Tx,反之亦然,然后将适配器连接到我的电脑。再次感谢提到的问题,我知道串行连接的波特率是57600,于是我运行了:

$ sudo screen /dev/tty.usbserial-0001 57600

其中'/dev/tty.usbserial-0001'是适配器连接的USB端口,同时也为设备供电。我立即开始接收数据,太好了。

然而,我仍然没有控制台访问权限。我接收到的只是设备的启动序列,实际上是U-Boot引导加载程序。它看起来像这样:

U-Boot 2014.01-v1.2 (Jul 16 2021 - 18:41:10)

Board: IPCAM RTS3903 CPU: 500M :rx5281 prid=0xdc02 force spi nor mode DRAM: 64 MiB @ 1066 MHz Skipping flash_init Flash: 0 Bytes flash status is 0, 0, 0 SF: Detected XM25QH64A with page size 256 Bytes, erase size 64 KiB, total 8 MiB Using default environment

Autobooting in 1 seconds copying flash to 0x81500000 flash status is 0, 0, 0 SF: Detected XM25QH64A with page size 256 Bytes, erase size 64 KiB, total 8 MiB SF: 8388608 bytes @ 0x0 Read: OK

[...]

按下Enter后,系统要求输入用户名和密码。感谢那个GitHub问题,我们知道凭据,因此可以使用用户'root'和密码'slprealtek'成功登录,最终获得控制台访问权限。

确认连接正常后,我需要加固焊接,因为在安装外壳过程中它断过两次。我使用了热熔胶来固定所有线缆,然后关闭设备,断开所有电机。现在,我的测试单元准备好了。

image

----[ 探索设备 ]--------------------------

现在我们已经有了一个外壳,让我们探索设备:

root@SLP:~# uname -a Linux SLP 3.10.27 #1 PREEMPT Wed Nov 11 20:42:05 CST 2020 rlx GNU/Linux

root@SLP:~# cat /etc/openwrt_version 12.09-rc1

可以看到,这是一台运行Linux 3.10.27的OpenWRT机器。现在让我们检查活跃进程和开放端口:

root@SLP:~# ps PID USER VSZ STAT COMMAND 1 root 2328 S init 2 root 0 SW [kthreadd] 3 root 0 SW [ksoftirqd/0] 4 root 0 SW [kworker/0:0] 5 root 0 SW< [kworker/0:0H] 6 root 0 SW [kworker/u2:0] 7 root 0 SW [rcu_preempt] 8 root 0 SW [rcu_bh] 9 root 0 SW [rcu_sched] 10 root 0 SW< [khelper] 11 root 0 SW< [writeback] 12 root 0 SW< [bioset] 13 root 0 SW< [kblockd] 14 root 0 SW [khubd] 15 root 0 SW [kworker/0:1] 16 root 0 SW [kswapd0] 17 root 0 SW [fsnotify_mark] 18 root 0 SW< [crypto] 27 root 0 SW [kworker/u2:1] 46 root 0 SW< [deferwq] 47 root 0 SW< [kworker/0:1H] 247 root 2328 S -ash 262 root 0 SW [irq/27-gpio res] 273 root 0 SW< [cryptodev_queue] 282 root 860 S /sbin/hotplug2 --override --persistent --set-rules-f 304 root 888 S /sbin/ubusd 325 root 8152 S tp_manage 357 root 3416 S /usr/bin/ledd 361 root 3408 S /sbin/msglogd 367 root 3220 S /usr/sbin/netlinkd 370 root 5468 S < /usr/bin/system_state_audio 379 root 10180 S /usr/sbin/wlan-manager 491 root 1636 S /sbin/netifd 492 root 1520 S /usr/sbin/connModed 494 root 11488 S /usr/bin/dsd 496 root 1532 S /usr/sbin/connModed 502 root 7640 S /bin/cloud-service 520 root 4360 S /bin/cloud-brd -c /var/etc/cloud_brd_conf 653 root 15020 S /bin/cloud-client 830 root 2320 S /usr/sbin/telnetd -b 127.0.0.1 861 root 3852 S /usr/sbin/uhttpd -f -h /www -T 180 -A 0 -n 8 -R -r C 870 root 6048 S /usr/bin/relayd 872 root 5948 S /usr/bin/rtspd 879 root 4612 S /usr/bin/p2pd 884 root 11152 S /bin/dn_switch 889 root 4180 S /bin/storage_manager 920 root 40940 S /bin/cet 956 root 32336 S /bin/vda 960 root 3808 S /bin/wtd 970 root 11288 S /bin/nvid 1019 root 2332 S udhcpc -p /var/run/static-dhcpc.pid -s /lib/netifd/s 1037 root 0 SW [RTW_CMD_THREAD] 1059 root 1212 S wpa_supplicant -B -Dwext -iwlan0 -P/tmp/supplicant_p 1089 root 2332 S /usr/sbin/ntpd -n -p time.nist.gov -p 133.100.9.2 -p 1103 root 3840 S /usr/bin/motord 1447 root 2324 R ps

root@SLP:~# netstat -natpu Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:8800 0.0.0.0:* LISTEN 920/cet tcp 0 0 127.0.0.1:929 0.0.0.0:* LISTEN 875/p2pd tcp 0 0 0.0.0.0:20002 0.0.0.0:* LISTEN 325/tp_manage tcp 0 0 0.0.0.0:2020 0.0.0.0:* LISTEN 969/nvid tcp 0 0 0.0.0.0:554 0.0.0.0:* LISTEN 920/cet tcp 0 0 127.0.0.1:23 0.0.0.0:* LISTEN 832/telnetd tcp 0 0 127.0.0.1:921 0.0.0.0:* LISTEN 878/relayd tcp 0 0 127.0.0.1:922 0.0.0.0:* LISTEN 877/rtspd tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 863/uhttpd tcp 0 0 192.168.1.80:37380 52.19.66.90:443 ESTABLISHED 507/cloud-brd udp 0 0 0.0.0.0:20002 0.0.0.0:* 325/tp_manage udp 0 0 0.0.0.0:38000 0.0.0.0:* 1087/ntpd udp 0 0 0.0.0.0:3702 0.0.0.0:* 969/nvid

我们可以看到nmap扫描中看到的那些开放端口背后的进程,比如uhttpd或cet。我特别关注了uhttpd进程,因为它是https服务器背后的进程(当时我仍然认为它是http),并且我已经非常熟悉http协议。

uhttpd是OpenWRT为运行该发行版的嵌入式设备创建的一个web服务器。此时,我想知道是否可以获取有关它的更多信息,比如源代码,或者至少是路径。我访问了OpenWRT维基,学习了uhttpd和OpenWRT的一般知识。在OpenWRT机器上,有一个叫做统一配置接口(UCI)的系统,基本上用于轻松配置系统服务。使用这个,我们可以获得uhttpd的配置:

下载工具