32100/UDP - Pentesting PPPP (CS2) P2P Kameralar
Reading time: 8 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Genel Bakış
PPPP (a.k.a. “P2P”) düşük maliyetli IP kameralar ve diğer IoT cihazlarında yaygın olarak gömülü olan CS2 Network tarafından geliştirilen tescilli bir cihaz bağlantı yığınıdır. Rendezvous, NAT traversal (UDP hole punching), UDP üzerinde uygulama katmanında bir “güvenilir” akış ve yalnızca bir cihaz ID’sini bilerek mobil/masaüstü bir uygulamanın cihazlara Internet üzerinden erişmesine izin veren ID tabanlı bir adresleme şeması sağlar.
Saldırganlar için önemli özellikler:
- Cihazlar her ID ön eki için üç satıcı tarafından işletilen rendezvous sunucusuna kaydolur. İstemciler aynı sunucuları cihazın dış/relay adresini bulmak için sorgular, ardından UDP hole punching denemesi yapar. Relay fallback mevcuttur.
- Varsayılan sunucu listener'ı UDP/32100 üzerinden erişilebilirdir. Minimal bir “hello” probe sunucuları ve bazı cihazları fingerprint etmek için yeterlidir.
- Opsiyonel blanket cipher ve özel bir “CRCEnc” modu vardır fakat tasarım itibarıyla zayıftır ve popüler ekosistemlerde (ör. LookCam) genellikle devre dışı bırakılmıştır.
- Kontrol düzlemi genellikle PPPP stream üzerinde JSON komutlarıdır ve yaygın olarak eksik auth ve bellek-güvenliği hatalarından muzdariptir.
Tipik cihaz ID formatı (LookCam ailesi): PREFIX-######-CCCCC, uygulamalarda kısaltılır (ör. GHBB-000001-NRLXW → G000001NRLXW). Gözlemlenen ön ekler: BHCC ("hekai"), FHBB ve GHBB ("mykj").
Keşif ve Enumarasyon
- Internet maruziyeti: birçok PPPP süper-düğümü 32100/UDP probe'una cevap verir. Bilinen plaintext ve hata-dize cevapları, trafik yakalamalarında ve Internet tarayıcılarıyla bunları tanımlamayı kolaylaştırır.
- LAN keşfi: cihazlar genellikle yerel broadcast üzerinde şifrelenmemiş bir aramaya yanıt verir. Listelemek için Paul Marrapese’nin script'ini kullanın:
- https://github.com/pmarrapese/iot/tree/master/p2p/lansearch
Notlar:
- Uygulamalar, obfuskelenmiş sunucu IP listelerini ve protokol anahtarlarını içeren “init string”leri gömer. Bu string'ler Android/iOS/Windows client'lardan rahatlıkla çıkarılabilir ve sık sık birçok ürün hattında yeniden kullanılır.
NAT Geçişi ve Taşıma
- Rendezvous sunucuları, cihazdan gelen periyodik keepalive'lerle cihazın public eşlemesini öğrenir. İstemciler eşlemeyi sunuculardan sorgular ve ardından hole punching kullanarak doğrudan UDP akışları denemeye çalışır. NAT traversal başarısız olursa trafik belirtilen PPPP relay host'lar tarafından iletilir.
- Uygulama “stream”i UDP üzerinde kendi ACK/retx mantığını uygular; retransmission döngüleri birçok kod yolunda çoğaltılmıştır ve kayıplı bağlantıları selleyebilir.
Zayıf "Şifreleme" ve Anahtar Kurtarma
CS2 yığını içinde iki etkisiz mekanizma vardır:
- Blanket cipher (opsiyonel) – P2P_Proprietary_Encrypt
- Genellikle LookCam kullanan OEM'ler tarafından devre dışı bırakılır.
- Uygulama tarafındaki “init string” anahtar malzemesini sağlar ve bu malzeme etkin 4-baytlık bir anahtara indirgenir (~2^32 uzayı).
- Pratik bilinen-plaintext: UDP/32100'e giden MSG_HELLO'nun ilk 4 baytı F1 00 00 00 olarak bilinir. Tek bir şifreli el sıkışmasının gözlemlenmesi hızlı anahtar kurtarma veya doğrulama sağlar.
- Bazı kontrol mesajları (örn. MSG_REPORT_SESSION_READY) uygulamalar arasında paylaşılan kütüphane-sert kodlanmış bir anahtar ile her zaman şifrelenir.
- Kayıt “şifrelemesi” – PPPP_CRCEnc
- İsimdeki CRC'ye rağmen, bu CRC değildir. 4-baytlık bir padding kontrolü (doğrulanmamış) ile sabit tekrarlayan XOR keystream'idir.
- LookCam ağları tipik olarak CRCEnc'i yalnızca cihaz → sunucu kayıt için (MSG_DEV_LGN_CRC) kullanır. Diğer çoğu trafik düz metin olarak kalır.
PPPP_CRCEnc için basit keystream kurtarma (Python):
# ciphertext: captured bytes of an encrypted registration message
# known: guessed/known plaintext region (e.g., JSON or constant header)
keystream = bytes([c ^ p for c, p in zip(ciphertext[:len(known)], known)])
# Decrypt more bytes by XORing with the repeating keystream
pt = bytes([c ^ keystream[i % len(keystream)] for i, c in enumerate(ciphertext)])
Tehdit modeli uyumsuzluğu: CS2 materyalleri, gizliliğe değil, sahte cihaz kayıtları yoluyla DoS'u önlemeye odaklanıyor. Bu, kayıt işleminin seçici “şifrelenmesini” açıklıyor; video/kontrol ise isteğe bağlı veya cleartext olarak kalıyor. Tarihsel PPPP sunucuları hız sınırlaması göstermiyor, bu da brute-force/abuse ölçeğinde kötüye kullanımı mümkün kılıyor.
Kontrol Düzlemi: JSON Commands and Auth Bypass
Pek çok PPPP kamera firmware'i, oturum kurulduktan sonra JSON mesajları değiş tokuş eder. İstemcinin gönderdiği örnek “login” şöyle:
{
"cmd": "LoginDev",
"pwd": "123456"
}
Common vulnerability in LookCam-class devices:
- Firmware ignores both the LoginDev flow and per-request pwd fields (CWE-287, CWE-306). The device accepts operational commands without validating a password.
- Exploitation: do not send LoginDev or ignore its result; send commands directly.
Useful commands observed:
- searchWiFiList – shells out to iwlist; leaves raw output in /tmp/wifi_scan.txt.
- DownloadFile – arbitrary path read primitive without path restrictions.
Workflow to deanonymize location via transient artifacts:
- Send {"cmd":"searchWiFiList"}.
- Read /tmp/wifi_scan.txt via DownloadFile.
- Submit BSSID MACs to a geolocation API (e.g., Google Geolocation API) to localize the camera to tens of meters.
Memory-Safety to RCE on Embedded Firmware
Tipik güvensiz desen (pseudocode from handlers):
char buf[256];
char *cmd = cJSON_GetObjectItem(request, "cmd")->valuestring;
memset(buf, 0, sizeof(buf));
memcpy(buf, cmd, strlen(cmd)); // no bound check
- Tetikleyici: herhangi bir cmd string > 255 bytes stack buffer overflow (CWE-120/121) oluşturur.
- Koruma: no stack canary; DEP/NX ve ASLR bu build'lerde genellikle devre dışı.
- Etki: straightforward single-stage shellcode veya classic ROP/ret2libc cihazın CPU'sunda (örn., ARM) tam ele geçirme ve LAN pivoting için.
See also:
Stack Overflow
Bulut Depolama Kötüye Kullanımı (HTTP, Device-ID only)
Birçok LookCam markalı firmware sadece HTTP üzerinden kayıtları api.l040z.com'a (BHCC için apicn.l040z.com) yükler. Gözlemler:
- Firmware'de TLS yok; taşıma açık metin HTTP.
- API “authentication” yalnızca device-ID: ID'yi bilen herkes kayıtları çekebilir.
- 5 MiB chunking sabit kodlanmış.
- Remote enablement: boot sırasında cihaz http://api.l040z.com/camera/signurl çağrısı yapar; sunucunun cevabı yüklemelerin başlayıp başlamayacağını belirler. Mobil uygulama yüklemeler olurken cloud “disabled” gösterebilir. Üçüncü bir taraf, bir hedef ID için cloud satın/enable edebilir ve görüntüleri sessizce toplayabilir.
Bu, eksik server-side authZ ile klasik cleartext sensitive transmission (CWE-319) örneğidir.
Device-ID Enumeration and Guessing
- ID formatı: PREFIX-######-CCCCC ve app-shortened formu (örn., GHBB-000001-NRLXW → G000001NRLXW).
- Prefix aileleri: BHCC (hekai servers), FHBB ve GHBB (mykj servers). Her prefix HA için üç rendezvous servers'a eşlenir.
- 5-harf verifier büyük harflerden oluşan 22 harflik bir alfabe kullanır (A, I, O, Q çıkarılmış) → 22^5 ≈ 5.15M kombinasyon her sayısal taban için.
- Önceki çalışmalar server-side rate-limiting olmadığını gözlemledi; bu da dağıtık tahminlemeyi pratik yapar. Verifier algoritması özel yapım olup muhtemelen tahmin edilebilir veya app/firmware reverse ederek elde edilebilir.
Pratik ID kaynakları:
- Resmi uygulamalarda her yerde gösterilir ve sık sık kullanıcı ekran görüntülerinde/videolarında leaked olur.
- AP mode SSID device ID'ye eşittir; birçok cihaz onboarding sırasında açık bir AP sunar.
Uzaktan Erişilebilirliği Zorlamak
Bazı firmware'ler rendezvous servers ulaşılabilir olana kadar döngü halinde reboot yapar. Eğer egress engellenmişse, cihaz reboot döngüsünde kalır; bu da sahiplerini cihazı Internet-reachable bırakmaya ve PPPP rendezvous'a maruz bırakmaya zorlar.
Pratik Exploitation Playbook (for repro/defense testing)
- Cihaz ID'si edin
- App UI'dan veya AP SSID'den; aksi takdirde PREFIX+numara enumerate edip 22^5 verifier alanını brute'la.
- PPPP oturumu kur
- CS2 PPPP client veya custom code kullan; app init string'ten server IP listelerini ve init key'leri çıkar; UDP hole punching dene; relay'e geri dön.
- Auth'ı atla
- LoginDev'i atla veya sonucunu görmezden gel; operational JSON'u doğrudan gönder.
- Dosyaları exfiltrate et / geo-locate yap
- Gönder {"cmd":"searchWiFiList"}; sonra DownloadFile "/tmp/wifi_scan.txt"; BSSIDs'i bir geolocation API'ye gönder.
- RCE elde et
- Stack overflow'u tetiklemek için cmd > 255 byte gönder; ROP/ret2libc inşa et veya shellcode yerleştir (no canary/DEP/ASLR).
- Cloud erişimi
- Yalnızca device ID kullanarak api.l040z.com uç noktaları ile etkileşime geç; 5 MiB chunking'e dikkat et; cloud enablement /camera/signurl tarafından kontrol edilir, app UI durumundan bağımsız.
İlgili Protokoller/Hizmetler
554,8554 - Pentesting RTSP
Referanslar
- A look at a P2P camera (LookCam app) – Almost Secure
- PPPP device discovery on LAN (Paul Marrapese)
- LookCam analysis (Warwick University, 2023)
- General PPPP analysis – Elastic Security Labs (2024)
- CS2 Network sales deck (2016) – PPPP/threat model
- Anyka hardened community firmware
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking'i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.