Custom UDP RPC Enumeration & File-Transfer Abuse
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.
Mapiranje vlasničkih RPC objekata pomoću Frida
Stariji multiplayer naslovi često ugrađuju home-grown RPC stacks preko UDP-a. U Anno 1404: Venice ovo je implementirano unutar NetComEngine3.dll preko RMC_CallMessage dispatcher-a, koji parsira 5 polja iz svakog datagrama:
| Polje | Svrha |
|---|---|
ID | RPC verb (16-bit) |
Flags | Modifikatori transporta (reliability, ordering) |
Source | ID objekta pozivaoca |
TargetObject | Instanca udaljenog objekta |
Method | Indeks metode unutar ciljne klase |
Dve pomoćne funkcije – ClassToMethodName() i TargetName() – prevode sirove ID-e u čitljive nizove za logovanje. By brute-forcing 24‑bit object IDs and 16‑bit method IDs and calling those helpers we can enumerate the entire remotely reachable surface without traffic captures or symbol leaks.
Frida surface enumerator (trimmed)
```javascript 'use strict';const classToMethod = Module.getExportByName(‘NetComEngine3.dll’, ‘ClassToMethodName’); const targetName = Module.getExportByName(‘NetComEngine3.dll’, ‘TargetName’);
function tryID(objID, methodID) { const method = new NativeFunction(classToMethod, ‘pointer’, [‘pointer’, ‘uint’]); const target = new NativeFunction(targetName, ‘pointer’, [‘pointer’]); const buf = Memory.alloc(Process.pointerSize); buf.writeU32(objID); const m = method(buf, methodID); if (!m.isNull()) { const t = target(buf); console.log(objID.toString(16), ‘=’, t.readUtf16String()); console.log(’ -’, methodID, ‘=’, m.readUtf16String()); } }
for (let obj = 0; obj < 0x9000000; obj += 0x400000) { for (let meth = 0; meth < 0x40; meth++) { tryID(obj, meth); } }
</details>
Pokretanje `frida -l explore-surface.js Addon.exe` ispisalo je kompletnu RPC mapu, uključujući objekat `Player` (`0x7400000`) i njegove file-transfer verbe `OnSendFileInit`, `OnSendFileData`, `OnReceivedFileData` i `OnCancelSendFile`. Isti radni tok važi za bilo koji binarni protokol koji izlaže interne reflection helpere: presretnite dispatcher, brute-force ID-jeve i zabeležite šta engine već zna o svakoj pozivnoj metodi.
### Saveti
- Koristite engine-ove sopstvene logging buffere (`WString::Format` u ovom slučaju) da izbegnete reimplementaciju nedokumentovanih kodiranja stringova.
- Dump `Flags` da identifikujete karakteristike pouzdanosti (ACK, resend requests) pre nego što pokušate fuzzing; custom UDP stackovi često tiho odbacuju malformirane pakete.
- Sačuvajte enumerisanu mapu – služi kao fuzzing corpus i jasno pokazuje koji objekti manipulišu fajl sistemom, world state-om ili in-game scriptingom.
## Zloupotreba RPC-ova za prenos fajlova
Sinhronizacija multiplayer sačuvanih stanja koristila je dvopaketni handshake:
1. `OnSendFileInit` — prenosi UTF‑16 naziv fajla koji klijent treba da koristi prilikom čuvanja pristiglog payload-a.
2. `OnSendFileData` — šalje sirove sadržaje fajla u chunk-ovima fiksne veličine.
Pošto server serializuje naziv fajla kroz `ByteStreamWriteString()` neposredno pre slanja, Frida hook može da zameni pokazivač ka traversal payload-u dok se veličine paketa održavaju nepromenjene.
<details>
<summary>Zamena imena fajla</summary>
```javascript
const writeStr = ptr('0x1003A250');
const ByteStreamWriteString = new NativeFunction(writeStr, 'pointer', ['pointer', 'pointer']);
const evil = Memory.allocUtf16String('..\\..\\..\\..\\Sauvegarde.sww');
Interceptor.attach(writeStr, {
onEnter(args) {
const src = args[1].readPointer();
const value = src.readUtf16String();
if (value && value.indexOf('Sauvegarde.sww') !== -1) {
args[1].writePointer(evil);
}
}
});
Korisnički klijenti žrtve nisu izvršili nikakvu sanitizaciju i upisali su primljeni save na bilo koju putanju koju je zlonamerni host dostavio, npr. ubacivanje u C:\User\user umesto u predviđeno drvo ...\Savegames\MPShare. Na Windows instalacijama Anno 1404 direktorijum igre je world-writable, pa traversal odmah postaje primitiv za arbitrarno pisanje fajla:
- Ubacite DLL-ove za classic search-order hijacking pri narednom pokretanju, ili
- Prepišite asset archives (RDA files) tako da weaponized modeli, teksture ili skripte budu učitani uživo tokom iste sesije.
Odbrana / napad na druge ciljeve
- Potražite RPC funkcije nazvane
SendFile,Upload,ShareSaveitd., zatim presretnite helper za serializaciju koji je odgovoran za imena fajlova ili ciljane direktorijume. - Čak i ako su imena fajlova proveravana po dužini, mnogi stack-ovi zaborave da kanonizuju
..\ili mešane/vs\sekvence; brute-force-ujte sve separatore. - Kada prijemnik skladišti fajlove u okviru putanje instalacije igre, proverite ACL-ove preko
icaclsda potvrdite da li neprivilegovani korisnik može tamo ubaciti kod.
Pretvaranje path traversal u izvršavanje asset-a uživo
Kada možete otpremiti proizvoljne bajtove, zamenite bilo koji često učitavan asset:
- Unpack the archive. RDA archives su DEFLATE-based kontejneri čija je metadata opcionalno XOR-obfuskovana sa
srand(0xA2C2A)seeded stream-ovima. Alati kao što je RDAExplorer ponovo pakuju arhive nakon izmena. - Inject a malicious
.gr2. Trojanizovani Granny 3D fajl nosi relocation exploit koji prepisujeSectionContentArrayi, kroz dvostepenu relocation sekvencu, dobija arbitrarno 4-bajtno pisanje unutargranny2.dll. - Hijack allocator callbacks. Sa ASLR onemogućenim i DEP isključenim, zamena pokazivača na funkcije
malloc/freeugranny2.dllpreusmerava sledeću alokaciju na vaš shellcode, dajući trenutni RCE bez čekanja da žrtva restartuje igru.
Ovaj obrazac se generalizuje na bilo koji naslov koji strimuje strukturirane asset-e iz binarnih arhiva: kombinujte RPC-level traversal za dostavljanje i nesigurnu obradu relocation-a radi izvršenja koda.
Referencije
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.


