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

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:

  1. 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.
  1. 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):

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:

json
{
"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:

  1. Pošaljite {"cmd":"searchWiFiList"}.
  2. Pročitajte /tmp/wifi_scan.txt pomoću DownloadFile.
  3. 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):

c
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

Ret2lib

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)

  1. Obtain device ID
  • Iz app UI ili AP SSID; inače numerišite PREFIX+number i bruteforce-ujte 22^5 verifier prostor.
  1. 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.
  1. Bypass auth
  • Preskočite LoginDev ili ignorišite njegov rezultat; pošaljite operational JSON direktno.
  1. Exfiltrate files / geo-locate
  • Pošaljite {"cmd":"searchWiFiList"}; zatim DownloadFile "/tmp/wifi_scan.txt"; pošaljite BSSIDs geolocation API-ju.
  1. Achieve RCE
  • Pošaljite cmd > 255 bytes da pokrenete stack overflow; napravite ROP/ret2libc ili ubacite shellcode (nema canary/DEP/ASLR).
  1. 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.

554,8554 - Pentesting RTSP

Pentesting Wifi

References

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