32100/UDP - Pentesting PPPP (CS2) P2P kamere
Reading time: 8 minutes
tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Pregled
PPPP (a.k.a. “P2P”) je proprietarni stack za povezivanje uređaja koji razvija CS2 Network i koji je široko ugrađen u jeftine IP kamere i druge IoT uređaje. Omogućava rendezvous, NAT traversal (UDP hole punching), aplikacioni “reliable” stream preko UDP-a i adresiranje zasnovano na ID-u, što omogućava mobilnoj/desktop aplikaciji da dođe do uređaja bilo gde na Internetu poznajući samo device ID.
Ključne karakteristike relevantne za napadače:
- Uređaji se registruju na tri servera za rendezvous kojima upravlja vendor po ID prefiksu. Klijenti upituju iste servere da pronađu eksternu/relay adresu uređaja, a zatim pokušavaju UDP hole punching. Postoji fallback na relay.
- Podrazumevani server listener je dostupan preko UDP/32100. Minimalni “hello” probe je dovoljan za fingerprinting servera i nekih uređaja.
- Opcioni blanket cipher i specijalni “CRCEnc” režim postoje, ali su slabi po dizajnu i tipično su onemogućeni u popularnim ekosistemima (npr. LookCam).
- Kontrolna ravnina je obično JSON komande preko PPPP stream-a i često pati od nedostatka autentikacije i grešaka vezanih za memory-safety.
Tipičan format device ID-a (LookCam familija): PREFIX-######-CCCCC, skraćeno u aplikacijama (npr. GHBB-000001-NRLXW → G000001NRLXW). Posmatrani prefiksi: BHCC ("hekai"), FHBB i GHBB ("mykj").
Otkrivanje i enumeracija
- Internet exposure: mnogi PPPP super-nodovi odgovaraju na 32100/UDP probe. Known plaintext i error-string odgovori čine ih lakim za identifikaciju u snimcima saobraćaja i uz Internet skenere.
- LAN discovery: uređaji često odgovaraju na nešifrovanu pretragu na lokalnom broadcast-u. Koristite Paul Marrapese-ov skript za enumeraciju:
- https://github.com/pmarrapese/iot/tree/master/p2p/lansearch
Napomene:
- Aplikacije ugrađuju “init strings” koje sadrže obfuskirane liste IP servera i protocol keys. Ove stringove je trivijalno ekstrahovati iz Android/iOS/Windows klijenata i često se ponovo koriste preko više proizvodnih linija.
NAT Traversal i transport
- Rendezvous servers uče javno mapiranje uređaja putem periodičnih keepalives koje šalje uređaj. Klijenti upituju servere za mapiranje i zatim pokušavaju direktne UDP tokove koristeći hole punching. Ako NAT traversal ne uspe, saobraćaj se relay-uje preko određenih PPPP relay host-ova.
- Aplikacioni “stream” implementira sopstvenu ACK/retx logiku preko UDP-a; retransmission petlje su duplicirane kroz mnogo kodnih putanja i mogu preplaviti linkove sa gubitkom paketa.
Slabo “šifrovanje” i oporavak ključeva
U CS2 stack-u postoje dva neučinkovita mehanizma:
- Blanket cipher (opciono) – P2P_Proprietary_Encrypt
- Obično onemogućen od strane OEM-a koji koriste LookCam.
- App-side “init string” obezbeđuje key material koji je reduciran na efektivan 4-byte ključ (~2^32 prostora).
- Praktičan known-plaintext: prva 4 bajta MSG_HELLO na UDP/32100 su poznata i iznose F1 00 00 00. Posmatranje jedne enkriptovane ruke omogućava brzo oporavak ili validaciju ključa.
- Neke kontrolne poruke (npr. MSG_REPORT_SESSION_READY) su uvek enkriptovane library-hardcoded ključem koji se deli između aplikacija.
- Registration “encryption” – PPPP_CRCEnc
- Uprkos imenu, ovo nije CRC. To je fiksni ponavljajući XOR keystream sa 4-byte padding proverom (nije autentifikovano).
- LookCam mreže tipično koriste CRCEnc samo za device → server registraciju (MSG_DEV_LGN_CRC). Većina ostalog saobraćaja ostaje plaintext.
Jednostavan oporavak keystrema za PPPP_CRCEnc (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)])
Nepodudaranje modela pretnje: CS2 materijali se fokusiraju na sprečavanje DoS putem lažnih registracija uređaja, a ne na poverljivost. To objašnjava selektivno „šifrovanje“ registracije dok video/kontrola ostaju opciono ili nešifrovano. Istorijski PPPP serveri ne primenjuju rate limiting, što omogućava brute-force/abuse u velikom obimu.
Control Plane: JSON Commands and Auth Bypass
Mnogi PPPP firmware-i kamera razmenjuju JSON poruke nakon što je sesija uspostavljena. Primer “login” koji klijent šalje:
{
"cmd": "LoginDev",
"pwd": "123456"
}
Uobičajena ranjivost u uređajima klase LookCam:
- Firmware ignoriše i LoginDev flow i per-request pwd polja (CWE-287, CWE-306). Uređaj prihvata operativne komande bez validacije lozinke.
- Eksploatacija: ne slati LoginDev ili ignorisati njegov rezultat; slati komande direktno.
Korisne komande uočene:
- searchWiFiList – poziva iwlist; ostavlja sirovi izlaz u /tmp/wifi_scan.txt.
- DownloadFile – primitiv za čitanje proizvoljne putanje bez ograničenja.
Tok rada za deanonimizaciju lokacije preko privremenih artefakata:
- Pošaljite {"cmd":"searchWiFiList"}.
- Pročitajte /tmp/wifi_scan.txt pomoću DownloadFile.
- Pošaljite BSSID MAC adrese geolocation API-ju (npr. Google Geolocation API) kako biste lokalizovali kameru s tačnošću od nekoliko desetina metara.
Od problema sa sigurnošću memorije do RCE na ugrađenom firmware-u
Tipičan nesiguran obrazac (pseudokod iz handlers-a):
char buf[256];
char *cmd = cJSON_GetObjectItem(request, "cmd")->valuestring;
memset(buf, 0, sizeof(buf));
memcpy(buf, cmd, strlen(cmd)); // no bound check
- Trigger: bilo koji cmd string > 255 bytes izaziva stack buffer overflow (CWE-120/121).
- Protections: nema stack canary; DEP/NX i ASLR su često onemogućeni na ovim buildovima.
- Impact: straightforward single-stage shellcode or classic ROP/ret2libc na CPU uređaja (npr. ARM) za potpuni kompromis i LAN pivoting.
See also:
Stack Overflow
Cloud Storage Abuse (HTTP, Device-ID only)
Mnogi firmware-i brendirani kao LookCam otpremaju snimke na api.l040z.com (apicn.l040z.com za BHCC) isključivo preko HTTP-a. Zapažanja:
- Nema TLS u firmware-u; transport je nešifrovani HTTP.
- API “authentication” je samo device-ID: bilo ko ko zna ID može preuzeti snimke.
- 5 MiB chunking je hardkodiran.
- Remote enablement: pri bootu uređaj poziva http://api.l040z.com/camera/signurl; odgovor servera odlučuje da li otpremanja počinju. Mobilna aplikacija može prikazivati cloud “disabled” čak i kada se otpremanja dešavaju. Treća strana može kupiti/omogućiti cloud za žrtvin ID i tihi prikupljati snimke.
Ovo je klasično prenošenje osetljivih podataka u čistom tekstu (CWE-319) sa nedostatkom server-side authZ.
Device-ID Enumeration and Guessing
- ID format: PREFIX-######-CCCCC i app-skraćeni oblik (npr. GHBB-000001-NRLXW → G000001NRLXW).
- Prefix families: BHCC (hekai servers), FHBB i GHBB (mykj servers). Svaki prefix mapira na tri rendezvous servera za HA.
- The 5-letter verifier koristi alfabet od 22 velika slova (izuzeti A, I, O, Q) → 22^5 ≈ 5.15M kombinacija po numeričkoj osnovi.
- Ranija istraživanja su primetila da nema server-side rate-limiting-a, što čini distribuirano pogađanje praktičnim. Verifier algoritam je prilagođen i verovatno pogađiv ili se može dobiti reverziranjem aplikacija/firmware-a.
Praktični izvori ID-ova:
- Prikazani širom zvaničnih aplikacija i često procureli u korisničkim screenshotovima/video snimcima.
- AP mode SSID je jednak device ID-u; mnogi uređaji izlažu otvoreni AP tokom onboarding-a.
Forcing Remote Reachability
Neki firmware-i se restartuju u petlji dok rendezvous serveri ne postanu dostupni. Ako je egress blokiran, uređaj će ostati u ciklusu restartovanja, efektivno primoravajući vlasnike da ga ostave dostupnim na Internetu i izloženim PPPP rendezvous.
Practical Exploitation Playbook (for repro/defense testing)
- Obtain device ID
- Iz app UI ili AP SSID; inače numerišite PREFIX+number i bruteforce-ujte 22^5 verifier prostor.
- Establish PPPP session
- Koristite CS2 PPPP client ili custom kod; izvući liste server IP-ova i init ključeve iz app init stringa; pokušajte UDP hole punching; fallback na relay.
- Bypass auth
- Preskočite LoginDev ili ignorišite njegov rezultat; pošaljite operational JSON direktno.
- Exfiltrate files / geo-locate
- Pošaljite {"cmd":"searchWiFiList"}; zatim DownloadFile "/tmp/wifi_scan.txt"; pošaljite BSSIDs geolocation API-ju.
- Achieve RCE
- Pošaljite cmd > 255 bytes da pokrenete stack overflow; napravite ROP/ret2libc ili ubacite shellcode (nema canary/DEP/ASLR).
- Cloud access
- Interagujte sa api.l040z.com endpointima koristeći samo device ID; imajte na umu 5 MiB chunking; cloud enablement kontroliše /camera/signurl bez obzira na stanje app UI-ja.
Related Protocols/Services
554,8554 - Pentesting RTSP
References
- 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
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:
HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
HackTricks