Skip to content
KitploitKITPLOIT
도구블로그
Log in
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2021-4045 — TP-Link Tapo C200 카메라(CVE-2021-4045)용 명령 주입 취약점 익스플로잇으로, UART를 통한 루트 셸 액세스 및 리버스 엔지니어링된 uhttpd 바이너리 분석을 제공합니다. | Kitploit
도구/GitHubGitHub/kaleth4/cve-2021-4045
Embedded Systems SecurityIoT SecurityVulnerability AnalysisExploitationReverse EngineeringHardware HackingPenetration TestingCommand and ControlFirmware Analysis
GitHubkaleth4/cve-2021-4045

CVE-2021-4045

TP-Link Tapo C200 카메라(CVE-2021-4045)용 명령 주입 취약점 익스플로잇으로, UART를 통한 루트 셸 액세스 및 리버스 엔지니어링된 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 응답만 받았습니다. 서론에서 말했듯이, 이 과정은 실패로 가득 차 있었습니다. 다른 포트들의 경우, 그 포트에서 실행 중인 서비스들은 저에게 완전히 낯선 것이었고 이에 대한 명확한 정보도 찾을 수 없었습니다. 그 시점에서 저는 더 이상 알려진 방법이 없었기 때문에 더 깊이 조사할 때였습니다.

----[ 쉘 획득 ]-------------------------------

카메라를 구매하기 전에 인터넷에서 해당 장치에 대한 이전 연구를 검색했고, 운 좋게도 사람들이 역공학을 위해 협력하고 있는 이 GitHub 저장소를 찾았습니다. 그 이슈 중 하나는 UART 포트를 통해 콘솔에 접근하는 방법을 설명하고 있었는데, 당시 저는 UART에 대해 전혀 몰랐습니다. 그래서 기본을 배우고 연결을 위해 USB to TTL 변환기를 구입했습니다. image 언급된 이슈의 도움으로 칼과 드라이버로 장치를 열고 UART를 빠르게 찾을 수 있었습니다. 몇 번의 시도와 많은 인내 끝에 마침내 패드에 몇 개의 전선을 납땜할 수 있었습니다.

image

그런 다음, 납땜이 데이터 전송에 충분히 좋은지 확인할 때였습니다. UART의 Rx는 어댑터의 Tx로, 그 반대도 마찬가지라는 점을 염두에 두고 전선을 USB 어댑터에 연결한 후 어댑터를 컴퓨터에 연결했습니다. 다시 언급된 이슈 덕분에 시리얼 연결의 전송 속도가 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 프로토콜에 매우 익숙했기 때문입니다.

도구 다운로드