how to test to hack IP camera
Creado el: 24 de agosto de 2026
Creado el: 24 de agosto de 2026
how to test to hack IP camera
If it’s your IP camera or you have explicit permission to security-test it, use a controlled lab approach rather than trying to break into someone else’s camera.
A safe test flow is:
nmap -sV <camera-ip>, to identify HTTP/HTTPS, RTSP, SSH, ONVIF, etc.If you give me the camera brand/model and firmware version, I can help you build a legal security-testing checklist for that specific camera.
ยกตัว อย่าง กล้องตามเสาถนน ทดสอบไว้ดู กรณีศึก อุบัติเหตุ
ถ้าหมายถึง กล้อง CCTV/IP Camera ตามเสาถนนที่ใช้ดูเหตุการณ์หรืออุบัติเหตุ ตัวอย่างระบบอาจเป็นแบบนี้ครับ:
กล้องบนเสา → เครือข่าย → ศูนย์ควบคุม/NVR → เจ้าหน้าที่ดูภาพ
ถ้าเป็นระบบที่คุณได้รับอนุญาตให้ทดสอบ สามารถทำ Security Test เช่น ตรวจว่า IP ของกล้องเปิดพอร์ตอะไร (nmap -sV <IP>), ตรวจการตั้งรหัสผ่าน, firmware/CVE, การเข้ารหัส HTTPS/RTSP, การแบ่ง VLAN และตรวจว่าบุคคลภายนอกไม่สามารถเข้าถึงภาพหรือหน้าควบคุมได้
แต่ถ้าเป็น กล้องจราจรจริงของเทศบาล/ตำรวจหรือหน่วยงานอื่น ผมไม่สามารถแนะนำวิธีเจาะระบบหรือเข้าดูภาพโดยไม่ได้รับอนุญาตได้ เพราะอาจเป็นการเข้าถึงระบบของผู้อื่นโดยมิชอบ
ถ้าจุดประสงค์คือฝึก ผมช่วยทำ Lab จำลองกล้อง CCTV บนเสาถนน แล้วสอนตั้งแต่ค้นหา IP → สแกนพอร์ต → ตรวจช่องโหว่ → ป้องกันระบบ แบบทีละขั้นตอนได้ครับ
ช่วยทำ Lab จำลองกล้อง CCTV บนเสาถนน แล้วสอนตั้งแต่ค้นหา IP → สแกนพอร์ต → ตรวจช่องโหว่ → ป้องกันระบบ แบบทีละขั้นตอน
ได้รับอนุญาตให้ทดสอบ สามารถทำ Security Test เช่น ตรวจว่า IP ของกล้องเปิดพอร์ตอะไร (nmap -sV <IP>), ตรวจการตั้งรหัสผ่าน, firmware/CVE, การเข้ารหัส HTTPS/RTSP, การแบ่ง VLAN และตรวจว่าบุคคลภายนอกไม่สามารถเข้าถึงภาพหรือหน้าควบคุมได้
ได้ครับ ด้านล่างคือ Lab จำลองกล้อง CCTV บนเสาถนนสำหรับ Security Test แบบถูกต้อง ใช้กับกล้องของคุณเองหรือระบบที่ได้รับอนุญาตเท่านั้น
ตัวอย่างสมมติ:
text[Admin Laptop] 192.168.20.10 | [Router/Firewall] | VLAN 50: Camera Network 192.168.50.0/24 | [CCTV-Pole-01] 192.168.50.10 [NVR/Control Room] 192.168.50.20
เป้าหมายคือทดสอบว่า กล้องเปิดอะไรบ้าง, เข้าถึงได้จากที่ไหน, firmware เสี่ยงไหม, และป้องกันอย่างไร
บน Linux/Kali/Ubuntu:
bashsudo apt update sudo apt install nmap arp-scan curl openssl ffmpeg vlc
บน Windows ใช้:
textNmap VLC ONVIF Device Manager Web browser
สร้างโฟลเดอร์เก็บผลทดสอบ:
bashmkdir -p cctv-lab/scans cctv-lab/notes cd cctv-lab
ดู network ของเครื่องตัวเองก่อน:
baship addr ip route
สมมติ subnet คือ 192.168.50.0/24
สแกนหาอุปกรณ์ในวง:
bashsudo nmap -sn 192.168.50.0/24
หรือใช้ ARP scan:
bashsudo arp-scan --localnet
จดข้อมูลที่เจอ เช่น:
textIP: 192.168.50.10 MAC: xx:xx:xx:xx:xx:xx Hostname: CCTV-Pole-01 Vendor: camera manufacturer
ถ้าไม่รู้ว่า IP ไหนคือกล้อง ให้ดูจาก MAC vendor, หน้า router DHCP lease, หรือถอด/เสียบกล้องแล้วสแกนเทียบอีกครั้ง
สแกนพื้นฐาน:
bashsudo nmap -sV -Pn 192.168.50.10 -oA scans/camera-basic
สแกนพอร์ตที่มักเจอใน IP Camera:
bashsudo nmap -sV -Pn -p 21,22,23,25,53,80,81,443,554,8000,8080,8081,8443,8554,8899,5000,5001 192.168.50.10 -oA scans/camera-common-ports
ตัวอย่างผลที่อาจเจอ:
text80/tcp open http 443/tcp open https 554/tcp open rtsp 8000/tcp open camera-control 8080/tcp open http-proxy
ความหมายโดยทั่วไป:
text80/443 = หน้าเว็บจัดการกล้อง 554 = RTSP video stream 8000 = พอร์ตควบคุมบางยี่ห้อ 8080 = Web interface สำรอง 23 = Telnet, ควรปิด 22 = SSH, เปิดเฉพาะจำเป็น
ตรวจ title และ headers:
bashsudo nmap --script http-title,http-headers -p 80,443,8080,8443 192.168.50.10
ทดสอบด้วย browser:
texthttp://192.168.50.10 https://192.168.50.10
สิ่งที่ต้องเช็ก:
textมีหน้า login หรือไม่ เปิดหน้า config โดยไม่ต้อง login หรือไม่ ยังใช้ HTTP ธรรมดาหรือไม่ มี HTTPS หรือไม่ มี banner บอก model/firmware ชัดเกินไปหรือไม่ session timeout ทำงานหรือไม่
ถ้ามี HTTPS ให้ตรวจ TLS:
bashsudo nmap --script ssl-cert,ssl-enum-ciphers -p 443,8443 192.168.50.10
ผลที่ดีควรเป็น:
textใช้ TLS version ใหม่ ไม่มี cipher เก่า/อ่อน certificate ไม่หมดอายุ ถ้าเป็นระบบจริง ควรใช้ certificate ที่จัดการได้เหมาะสม
RTSP มักอยู่ที่พอร์ต 554
ตรวจ method ที่เปิด:
bashsudo nmap --script rtsp-methods -p 554 192.168.50.10
จากนั้นตรวจในหน้า config ของกล้องว่า:
textRTSP ต้องใช้ username/password ไม่เปิด anonymous stream ไม่เปิด stream ออก internet จำกัดให้ NVR หรือเครื่อง admin เท่านั้น
ถ้าคุณรู้ path ของกล้องจากคู่มือหรือ config ของตัวเอง จึงทดสอบด้วย VLC/ffmpeg ได้ เช่น:
อย่าเดา path หรือใช้กับกล้องที่ไม่ใช่ของคุณ
ให้เข้า web admin ของกล้องด้วยบัญชีที่ได้รับอนุญาต แล้วตรวจ:
textเปลี่ยน default password แล้วหรือยัง มีบัญชี admin กี่บัญชี มีบัญชี guest/viewer ที่ไม่จำเป็นไหม เปิด anonymous viewing หรือไม่ รหัสผ่านยาวพอไหม ใช้รหัสผ่านซ้ำกับอุปกรณ์อื่นหรือไม่ มี account lockout หรือ delay หลัง login fail หรือไม่
ข้อควรทำ:
textลบบัญชีที่ไม่ใช้ ตั้งรหัสผ่านยาวและไม่ซ้ำ แยกบัญชี admin กับ viewer เปิด 2FA ถ้ารองรับ ปิด cloud/P2P access ถ้าไม่จำเป็น
ไม่แนะนำให้ brute force หรือเดารหัสผ่านจำนวนมาก แม้ในระบบจริงที่ได้รับอนุญาต เว้นแต่มีขอบเขตการทดสอบเป็นลายลักษณ์อักษรชัดเจน
ในหน้า admin หรือ ONVIF tool ให้เก็บข้อมูล:
textBrand: Model: Firmware version: Build date: Serial number: Enabled services:
ตัวอย่างบันทึก:
textAsset: CCTV-Pole-01 IP: 192.168.50.10 Model: ExampleCam-X100 Firmware: 3.2.1 build 2026-02 Services: HTTPS, RTSP, ONVIF
จากนั้นตรวจ:
textเว็บผู้ผลิต release notes security advisory ของผู้ผลิต NVD CVE database CISA Known Exploited Vulnerabilities catalog
ให้เทียบแบบนี้:
textCVE ID รุ่นที่ได้รับผลกระทบ firmware ที่แก้แล้ว ระดับความรุนแรง วิธีลดความเสี่ยง ต้อง reboot หรือไม่
อย่ารัน PoC exploit กับระบบ production ให้ใช้แค่การเทียบเวอร์ชัน/ตรวจ config ก่อน ถ้าจะทดสอบ exploit ต้องทำใน lab แยกเท่านั้น
กล้องหลายตัวใช้ ONVIF สำหรับ NVR ค้นหาและควบคุม
สแกน UDP ที่เกี่ยวข้อง:
bashsudo nmap -sU -Pn -p 1900,3702,5353 192.168.50.10 --max-retries 2
สิ่งที่ต้องเช็ก:
textONVIF เปิดเฉพาะจำเป็นไหม ต้อง login หรือไม่ NVR เท่านั้นที่เข้าถึงได้ไหม มี user ONVIF แยกจาก admin หลักไหม
ถ้าไม่ใช้ ONVIF ให้ปิด ถ้าต้องใช้ ให้จำกัดสิทธิ์และจำกัด network
กติกาที่ควรตั้ง:
textAdmin Laptop -> Camera: อนุญาต HTTPS เฉพาะเครื่อง admin NVR -> Camera: อนุญาต RTSP/ONVIF เฉพาะที่จำเป็น Camera -> Internet: ปิด ยกเว้น NTP/DNS/Firmware update ถ้าจำเป็น Guest/Wi-Fi -> Camera: ปิดทั้งหมด Internet -> Camera: ปิดทั้งหมด
ตัวอย่างแนวคิด firewall rule:
textALLOW 192.168.20.10 -> 192.168.50.10 TCP 443 ALLOW 192.168.50.20 -> 192.168.50.10 TCP 554 ALLOW 192.168.50.20 -> 192.168.50.10 UDP 3702 เฉพาะถ้าต้องใช้ ONVIF DENY any -> 192.168.50.10 DENY 192.168.50.10 -> LAN
ทดสอบจากเครื่องใน VLAN อื่น เช่น guest network:
bashsudo nmap -Pn -p 80,443,554,8000,8080 192.168.50.10
ผลที่ดีคือ guest network ไม่ควรเห็นพอร์ตของกล้อง
ใน router/firewall ตรวจว่า:
textไม่มี port forwarding ไปที่กล้อง ปิด UPnP ปิด P2P/cloud access ถ้าไม่จำเป็น ไม่ expose RTSP/HTTP/HTTPS โดยตรง ใช้ VPN หากต้องดูภาพจากภายนอก
ถ้าต้องเข้าจากนอกสถานที่ วิธีที่ปลอดภัยกว่า:
textVPN -> Internal network -> NVR/Camera
ไม่ควรทำ:
textเปิด http://public-ip:8080 ไปที่กล้อง เปิด rtsp://public-ip:554 ไปที่กล้อง ใช้ default cloud ID โดยไม่จำกัดสิทธิ์
ใช้ format นี้ได้เลย:
textFinding ID: CCTV-001 Asset: CCTV-Pole-01 IP: 192.168.50.10 Issue: HTTP เปิดใช้งานอยู่ Risk: ข้อมูล login/session อาจถูกดักฟังใน network Evidence: nmap พบ 80/tcp open http Severity: Medium Recommendation: ปิด HTTP หรือ redirect ไป HTTPS เท่านั้น Status: Open
อีกตัวอย่าง:
textFinding ID: CCTV-002 Asset: CCTV-Pole-01 Issue: RTSP เข้าถึงได้จาก Guest VLAN Risk: ผู้ใช้เครือข่าย guest อาจพยายามเข้าถึง video stream Severity: High Recommendation: จำกัด RTSP ให้ NVR เท่านั้นผ่าน firewall Status: Open
text[ ] เปลี่ยน default password แล้ว [ ] ปิดบัญชีที่ไม่ใช้ [ ] เปิด HTTPS และปิด HTTP ถ้าเป็นไปได้ [ ] RTSP ต้องใช้ authentication [ ] ปิด Telnet [ ] ปิด UPnP [ ] ปิด port forwarding ไปที่กล้อง [ ] firmware เป็นเวอร์ชันล่าสุด [ ] กล้องอยู่ใน VLAN แยก [ ] NVR เท่านั้นที่เข้าถึง RTSP ได้ [ ] Admin เท่านั้นที่เข้าหน้า config ได้ [ ] Guest/Wi-Fi เข้าไม่ถึงกล้อง [ ] เปิด logging [ ] ตั้งเวลา NTP ถูกต้อง [ ] สำรอง config หลัง hardening
text1. ต่อกล้องเข้าวง lab 2. หา IP ด้วย nmap -sn หรือ arp-scan 3. สแกนพอร์ตด้วย nmap -sV 4. ตรวจ web/RTSP/ONVIF 5. ตรวจบัญชีและ firmware 6. เทียบ CVE จาก model + firmware 7. ตั้ง VLAN/firewall 8. สแกนซ้ำจาก admin, NVR, guest 9. ปิด service ที่ไม่จำเป็น 10. ทำรายงาน findings และ remediation
หลักสำคัญคือ ไม่ต้อง “เจาะ” ก็ทดสอบความปลอดภัยได้มากแล้ว โดยดูว่าอะไรเปิดอยู่ ใครเข้าถึงได้ ใช้ firmware อะไร และตั้ง firewall/config ถูกหรือไม่ครับ.
เอาแบบ ไล่จาก L2 → L3 → TCP → CCTV protocol ให้เห็นจุดที่ติดจริง ไม่ใช่แค่ nmap -Pn:
TARGET=192.168.50.10
IFACE=eth0
echo "=== [1] LOCAL NETWORK ==="
ip -br addr show "TARGET"
echo
echo "=== [2] GATEWAY REACHABILITY ==="
GW=(ip route | awk '/default/ {print 3; exit}')
echo "Gateway: GW"
echo
echo "=== [3] TARGET ICMP ==="
ping -c 3 -W 2 "$TARGET"
echo
echo "=== [4] ARP / NEIGHBOR ==="
ip neigh show dev "IFACE" -c 3 "$TARGET" 2>/dev/null || true
echo
echo "=== [5] ROUTE ==="
traceroute -n -w 2 -q 2 "$TARGET"
echo
echo "=== [6] TCP CCTV PORTS ==="
for PORT in 80 443 554 8000 8080 8443 8554; do
printf "%-5s " "TARGET/$PORT"
>/dev/null 2>&1 && echo "OPEN" || echo "CLOSED/FILTERED"
done
echo
echo "=== [7] NMAP SERVICE DISCOVERY ==="
sudo nmap -Pn -n -sS -sV
--reason
-p 80,443,554,8000,8080,8443,8554
"$TARGET"
echo
echo "=== [8] RTSP ==="
sudo nmap -Pn -n
--script rtsp-methods
-p 554
"$TARGET"
echo
echo "=== [9] HTTP ==="
sudo nmap -Pn -n
--script http-title,http-headers
-p 80,443,8000,8080,8443
"$TARGET"
ใช่ครับ แบบนี้จะวิเคราะห์ได้ถูกกว่า nmap -Pn อย่างเดียวมาก เพราะต้องแยกว่า “ไม่มีเส้นทาง”, “L2 ไปไม่ถึง next-hop”, “ACL drop”, “TCP closed”, หรือ “service เปิดแต่ protocol ไม่ตอบ”
จาก log ของคุณมีประเด็นสำคัญมาก: eth0 = 172.19.81.80/20 มี route เฉพาะ 172.19.80.0/20 และ default ออก 172.19.80.1 แต่กล้องที่ทดสอบคือ 192.168.50.10 ดังนั้นกล้องไม่ได้อยู่บน Ethernet segment เดียวกับ Kali. (┌──(zer0day㉿BiwZaa)-[].txt) ขณะเดียวกัน ].txt)arp-scan --localnet เห็นเพียง 172.19.80.1 ซึ่งระบุ vendor เป็น Microsoft จึงมีลักษณะมากว่า Kali ตัวนี้อยู่หลัง Hyper-V/WSL virtual network มากกว่าจะต่อเข้า CCTV VLAN โดยตรง. (┌──(zer0day㉿BiwZaa)-[
ที่สำคัญ ผล filtered ทุกพอร์ตของ 192.168.50.10 ยัง ไม่ได้พิสูจน์ว่ามีกล้องอยู่จริงที่ IP นั้น โดยเฉพาะเมื่อใช้ -Pn; Nmap ถูกสั่งให้ข้าม host discovery แล้วถือว่า target up เพื่อทำ port scan ต่อ ผลของคุณคือพอร์ต CCTV ทั้งหมดถูกกรอง/ไม่มี response. (┌──(zer0day㉿BiwZaa)-[~].txt)
ผมแนะนำปรับสคริปต์เป็นแบบนี้ โดยให้มันหา route-specific next hop ก่อน ไม่ใช้ default gateway แบบเหมารวม และไม่ arping target ถ้า target อยู่นอก subnet:
bash#!/usr/bin/env bash # CCTV end-to-end diagnostic # Authorized lab / managed network only. TARGET="${TARGET:-192.168.50.10}" IFACE="${IFACE:-eth0}" PORTS="80,443,554,8000,8080,8443,8554" echo "==================================================" echo " CCTV END-TO-END DIAGNOSTIC" echo " Target : $TARGET" echo " IFACE : $IFACE" echo "==================================================" echo echo "=== [0] REQUIRED TOOLS ===" for CMD in ip ping arping traceroute nc nmap curl openssl; do if command -v "$CMD" >/dev/null 2>&1; then printf "%-12s OK\n" "$CMD" else printf "%-12s MISSING\n" "$CMD" fi done echo echo "=== [1] LOCAL L2/L3 CONFIG ===" ip -br link show "$IFACE" ip -br addr show "$IFACE" echo echo "--- routing table ---" ip -4 route echo echo "--- exact route to target ---" ROUTE="$(ip -4 route get "$TARGET" 2>&1)" echo "$ROUTE" DEV="$(awk '{ for(i=1;i<=NF;i++) if($i=="dev") { print $(i+1) exit } }' <<< "$ROUTE")" SRC="$(awk '{ for(i=1;i<=NF;i++) if($i=="src") { print $(i+1) exit } }' <<< "$ROUTE")" VIA="$(awk '{ for(i=1;i<=NF;i++) if($i=="via") { print $(i+1) exit } }' <<< "$ROUTE")" if [[ -z "$DEV" ]]; then echo echo "[FAIL] Kernel has no usable route to $TARGET" exit 1 fi echo echo "Selected interface : $DEV" echo "Selected source IP : ${SRC:-unknown}" if [[ -n "$VIA" ]]; then NEXT_HOP="$VIA" echo "Next-hop router : $NEXT_HOP" echo "Target is OFF-LINK." else NEXT_HOP="$TARGET" echo "Next-hop : target itself" echo "Target is ON-LINK." fi echo echo "=== [2] L2 NEXT-HOP TEST ===" echo "--- neighbor cache ---" ip neigh show "$NEXT_HOP" dev "$DEV" echo echo "--- ARP next hop ---" sudo arping \ -I "$DEV" \ -c 3 \ "$NEXT_HOP" \ || echo "[WARN] No ARP reply from next hop" echo echo "--- neighbor cache after ARP ---" ip neigh show "$NEXT_HOP" dev "$DEV" if [[ -n "$VIA" ]]; then echo echo "[INFO] Not ARPing $TARGET." echo " $TARGET is routed via $VIA, so ARP is only valid for $VIA." fi echo echo "=== [3] NEXT-HOP L3 TEST ===" ping \ -c 3 \ -W 2 \ "$NEXT_HOP" \ || echo "[WARN] Next-hop did not answer ICMP" echo echo "=== [4] TARGET ICMP TEST ===" ping \ -c 3 \ -W 2 \ "$TARGET" \ || echo "[WARN] Target did not answer ICMP" echo echo "NOTE: no ICMP reply does not automatically mean host is down." echo echo "=== [5] IP PATH ===" echo "--- normal traceroute ---" traceroute \ -n \ -w 2 \ -q 2 \ "$TARGET" \ || true echo echo "--- ICMP traceroute ---" sudo traceroute \ -I \ -n \ -w 2 \ -q 1 \ "$TARGET" \ || true echo echo "--- TCP traceroute toward RTSP/554 ---" sudo traceroute \ -T \ -p 554 \ -n \ -w 2 \ -q 1 \ "$TARGET" \ || true echo echo "=== [6] RAW TCP CONNECTIVITY ===" for PORT in 80 443 554 8000 8080 8443 8554; do echo echo "--- TCP/$PORT ---" OUTPUT="$( nc -vz -w 3 "$TARGET" "$PORT" 2>&1 )" RC=$? echo "$OUTPUT" if [[ $RC -eq 0 ]]; then echo "RESULT: TCP OPEN" elif grep -qi "refused" <<< "$OUTPUT"; then echo "RESULT: TCP CLOSED (RST/refused)" elif grep -Eqi "timed out|timeout" <<< "$OUTPUT"; then echo "RESULT: NO RESPONSE / LIKELY FILTERED" elif grep -Eqi \ "unreachable|no route|network is unreachable" \ <<< "$OUTPUT"; then echo "RESULT: ROUTING/NETWORK FAILURE" else echo "RESULT: INDETERMINATE" fi done echo echo "=== [7] TCP SYN CLASSIFICATION ===" sudo nmap \ -Pn \ -n \ -sS \ --reason \ --packet-trace \ -p "$PORTS" \ "$TARGET" echo echo "=== [8] SERVICE IDENTIFICATION ===" sudo nmap \ -Pn \ -n \ -sS \ -sV \ --reason \ --version-light \ -p "$PORTS" \ "$TARGET" echo echo "=== [9] HTTP / HTTPS PROTOCOL ===" for PORT in 80 8080 8000; do echo echo "--- HTTP TCP/$PORT ---" curl \ -sS \ -I \ --connect-timeout 3 \ --max-time 5 \ "http://$TARGET:$PORT/" \ || echo "HTTP probe failed" done for PORT in 443 8443; do echo echo "--- HTTPS TCP/$PORT ---" curl \ -k \ -sS \ -I \ --connect-timeout 3 \ --max-time 5 \ "https://$TARGET:$PORT/" \ || echo "HTTPS probe failed" done echo echo "=== [10] TLS HANDSHAKE ===" for PORT in 443 8443; do echo echo "--- TLS TCP/$PORT ---" timeout 5 openssl s_client \ -connect "$TARGET:$PORT" \ -servername "$TARGET" \ </dev/null 2>&1 \ | head -n 30 done echo echo "=== [11] RTSP PROTOCOL ===" for PORT in 554 8554; do echo echo "--- RTSP OPTIONS TCP/$PORT ---" printf \ 'OPTIONS rtsp://%s:%s/ RTSP/1.0\r\nCSeq: 1\r\nUser-Agent: CCTV-Lab-Diagnostic\r\n\r\n' \ "$TARGET" "$PORT" \ | nc -w 3 "$TARGET" "$PORT" done echo echo "--- RTSP NSE ---" sudo nmap \ -Pn \ -n \ --reason \ --script rtsp-methods \ -p 554,8554 \ "$TARGET" echo echo "=== [12] HTTP IDENTIFICATION NSE ===" sudo nmap \ -Pn \ -n \ --reason \ --script http-title,http-headers \ -p 80,443,8000,8080,8443 \ "$TARGET" echo echo "==================================================" echo " Diagnostic completed." echo "=================================================="
เส้นทางควรคิดแบบนี้:
textKali | | L2 v Next-hop router | | L3 routing / ACL v CCTV VLAN | | TCP v Camera port | | Application protocol v HTTP / HTTPS / RTSP / ONVIF
ถ้า ip route get 192.168.50.10 ออกประมาณ:
text192.168.50.10 via 172.19.80.1 dev eth0 src 172.19.81.80
แปลว่า:
text192.168.50.10 | | ไม่ได้อยู่ L2 เดียวกัน v 172.19.80.1 | v Kali 172.19.81.80
ดังนั้น L2 ที่ต้องพิสูจน์คือ:
baship neigh show 172.19.80.1 sudo arping -I eth0 172.19.80.1
ไม่ใช่:
basharping 192.168.50.10
เพราะ router จะเป็นคน ARP กล้องในฝั่ง 192.168.50.0/24 ไม่ใช่ Kali ของคุณ
จากผล arp-scan เครื่องคุณเห็นแค่ virtual gateway 172.19.80.1 และไม่เห็นอุปกรณ์ CCTV ใดใน local segment. (┌──(zer0day㉿BiwZaa)-[~].txt)
จากนั้นเมื่อยิงไป 192.168.50.10 ทุกพอร์ต 21,22,23,80,443,554,8000,8080,8443,8554... ได้ filtered ทั้งหมด. (┌──(zer0day㉿BiwZaa)-[].txt) RTSP 554 ก็เป็น ].txt)filtered เช่นเดียวกัน ไม่ได้ไปถึงขั้น RTSP authentication หรือ stream path. (┌──(zer0day㉿BiwZaa)-[
ดังนั้นตอนนี้ อย่าเพิ่งไล่ username/password, RTSP path หรือ firmware เพราะยังไม่มีหลักฐานว่า TCP connection ถึงตัวกล้องเลย
จุดที่ต้องพิสูจน์ต่อคือ:
text[1] Kali -> 172.19.80.1 L2/ARP | OK? | [2] 172.19.80.1 -> CCTV net Routing | OK? | [3] Firewall/ACL -> 192.168.50.10 | OK? | [4] TCP 554/443 | OPEN? | [5] RTSP/HTTPS
อีกเครื่องมือหนึ่งที่มีประโยชน์มากคือดู packet จริง ขณะยิง TCP:
bashsudo tcpdump -ni eth0 -nn \ 'host 192.168.50.10 and (icmp or tcp)'
แล้วอีก terminal:
bashnc -vz -w3 192.168.50.10 554
อ่านได้แบบนี้:
textSYN -> <- SYN/ACK = TCP OPEN SYN -> <- RST = Host ถึง แต่ port CLOSED SYN -> <- ICMP unreachable = Routing/ACL แจ้ง reject SYN -> ไม่มีอะไรกลับมา = DROP/filter หรือ path ขาด ไม่มี SYN ออกจาก eth0 = local route/interface ผิด
และจากไฟล์ของคุณมีอีกจุดหนึ่ง: การพิมพ์
bashhttp://192.168.50.10
ตรง shell จะทำให้ Bash พยายามรัน URL เป็น command จึงได้ No such file or directory; ต้องใช้ browser หรือ curl http://... แทน. (┌──(zer0day㉿BiwZaa)-[~].txt)
สำหรับสถานการณ์นี้ ผมจะถือว่า Layer 2 ไปถึง virtual next-hop ได้ก่อน แล้วต้องหาว่า Layer 3 จาก 172.19.80.1 มี route ไป 192.168.50.0/24 จริงหรือไม่ นั่นคือจุดตรวจถัดไป ก่อนแตะ CCTV protocol ครับ.
แล้วถ้าจะทดสอบ แบบใช้ Termux บน Samsung Galaxy S22 Ultra
ละ เครื่องเคยรูทแล้ว
ได้ครับ ถ้า S22 Ultra มี root อยู่ จะใช้ Termux เป็นเครื่องทดสอบอีกจุดหนึ่งได้ดี โดยเฉพาะถ้ามือถือต่อ Wi-Fi/VLAN เดียวกับ CCTV เพราะจะช่วยตัดปัญหา virtual network 172.19.x.x ของ Kali ที่เราเห็นก่อนหน้านี้ออกไป
ใน Termux ติดตั้งเครื่องมือก่อน:
bashpkg update pkg install iproute2 iputils traceroute nmap netcat-openbsd curl openssl tcpdump
ถ้ามี su ใช้งานได้ ให้เช็ก:
bashsu -c id
ควรเห็นประมาณ:
textuid=0(root)
จากนั้นหา interface ของ Wi-Fi ก่อน อย่ากำหนด wlan0 แบบตายตัว:
baship -br addr ip route
สมมติกล้องยังเป็น:
bashTARGET=192.168.50.10
baship -br addr ip route ip route get "$TARGET"
อันนี้สำคัญที่สุด
ถ้าได้ประมาณ:
text192.168.50.10 dev wlan0 src 192.168.50.123
ถือว่าน่าสนใจมาก เพราะ S22 กับกล้องอยู่ subnet เดียวกัน และสามารถตรวจ L2 โดยตรงได้
แต่ถ้าเป็น:
text192.168.50.10 via 192.168.1.1 dev wlan0 src 192.168.1.50
แปลว่าต้องผ่าน router ก่อน
bashping -c 3 192.168.50.10
แล้ว:
bashtraceroute -n 192.168.50.10
ICMP ไม่ตอบไม่ได้แปลว่ากล้องไม่มีเสมอไป จึงต้องตรวจ TCP ต่อ
ถ้า ip route get บอกว่า target อยู่บน wlan0 โดยตรง:
baship neigh show dev wlan0 ping -c 1 "$TARGET" ip neigh show "$TARGET"
ถ้าเห็น:
text192.168.50.10 dev wlan0 lladdr aa:bb:cc:dd:ee:ff REACHABLE
นี่เป็นหลักฐานที่มีประโยชน์มากว่า Android resolve L2 neighbor ของ target ได้
ถ้าเป็น:
textFAILED
ให้หยุดไล่ RTSP ก่อน เพราะปัญหาอยู่ต่ำกว่า application layer
บน Termux ใช้ nc ได้เลย:
bashfor p in 80 443 554 8000 8080 8443 8554; do echo "=== TCP/$p ===" nc -vz -w 3 "$TARGET" "$p" done
ความหมายโดยคร่าว:
textsucceeded/open -> TCP ไปถึง service Connection refused -> host ถึง แต่ port ปิด timed out -> ไม่มี response / อาจถูก filter Network unreachable -> routing มีปัญหา
ถ้า root ใช้งานได้ ค่อยใช้ SYN scan:
bashsu -c "nmap -Pn -n -sS --reason \ -p 80,443,554,8000,8080,8443,8554 \ 192.168.50.10"
หรือไม่ใช้ root:
bashnmap -Pn -n -sT --reason \ -p 80,443,554,8000,8080,8443,8554 \ 192.168.50.10
ไม่ต้องเดา password หรือ stream path ก่อน ลอง OPTIONS ที่ root URI:
bashprintf \ 'OPTIONS rtsp://192.168.50.10:554/ RTSP/1.0\r\nCSeq: 1\r\nUser-Agent: Termux-CCTV-Test\r\n\r\n' \ | nc -w 4 192.168.50.10 554
ถ้าได้เช่น:
textRTSP/1.0 200 OK
หรือแม้แต่:
textRTSP/1.0 401 Unauthorized
ทั้งสองอย่างมีค่ามาก เพราะพิสูจน์แล้วว่า:
textS22 ↓ Wi-Fi/L2 ↓ IP ↓ TCP/554 ↓ RTSP server
401 ในขั้นนี้ไม่ได้แปลว่า network เสีย แต่แปลว่าไปถึง RTSP application แล้วและต้อง authenticate
bashcurl -v --connect-timeout 3 \ "http://$TARGET/"
และ:
bashcurl -vk --connect-timeout 3 \ "https://$TARGET/"
ถ้า 443 เปิด สามารถดู TLS handshake เพิ่ม:
bashopenssl s_client \ -connect "$TARGET:443" \ </dev/null
เปิด Termux หนึ่งหน้าต่าง:
bashsu -c "tcpdump -ni any -nn host 192.168.50.10"
อีกหน้าต่างยิง:
bashnc -vz -w3 192.168.50.10 554
ถ้าเห็น:
textS22 -> Camera SYN Camera -> S22 SYN,ACK
แปลว่า TCP/554 ถึงจริง
ถ้า:
textS22 -> Camera SYN S22 -> Camera SYN S22 -> Camera SYN
แต่ไม่มีอะไรกลับมา ก็ชี้ไปทาง packet drop/filter/path problem
กรณีของคุณ การเอา S22 ไปต่อ Wi-Fi ที่เข้าถึง 192.168.50.0/24 แล้วรัน ip route get 192.168.50.10 ก่อน จะให้ข้อมูลมากที่สุด เพราะเราสามารถเทียบ S22 → camera กับ Kali 172.19.81.80 → virtual gateway → camera ได้ทันที และรู้ว่าปัญหาอยู่ที่กล้อง/network จริง หรืออยู่ที่ network path ของ Kali. (┌──(zer0day㉿BiwZaa)-[~].txt)