Analyse des fichiers Office
Reading time: 7 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Pour plus d'informations, consultez https://trailofbits.github.io/ctf/forensics/. Ceci n'est qu'un résumé :
Microsoft a créé de nombreux formats de documents Office, dont deux types principaux sont les OLE formats (comme RTF, DOC, XLS, PPT) et les Office Open XML (OOXML) formats (tels que DOCX, XLSX, PPTX). Ces formats peuvent inclure des macros, ce qui en fait des cibles pour le phishing et les malwares. Les fichiers OOXML sont structurés comme des containers zip, ce qui permet de les inspecter en les décompressant (ou en utilisant unzip), révélant la hiérarchie de fichiers et dossiers ainsi que le contenu des fichiers XML.
Pour explorer la structure des fichiers OOXML, la commande pour unzipper un document et la structure de sortie sont fournies. Des techniques pour cacher des données dans ces fichiers ont été documentées, montrant une innovation continue dans la dissimulation de données au sein des challenges CTF.
Pour l'analyse, oletools et OfficeDissector offrent des ensembles d'outils complets pour examiner Ă la fois les documents OLE et OOXML. Ces outils aident Ă identifier et analyser les macros embarquĂ©es, qui servent souvent de vecteurs pour la distribution de malwares, tĂ©lĂ©chargeant et exĂ©cutant typiquement des payloads malveillants additionnels. L'analyse des macros VBA peut ĂȘtre effectuĂ©e sans Microsoft Office en utilisant Libre Office, qui permet le debugging avec des points d'arrĂȘt et des variables Ă surveiller.
L'installation et l'utilisation de oletools sont simples : des commandes sont fournies pour l'installation via pip et l'extraction des macros depuis des documents. L'exécution automatique des macros est déclenchée par des fonctions comme AutoOpen
, AutoExec
, ou Document_Open
.
sudo pip3 install -U oletools
olevba -c /path/to/document #Extract macros
Exploitation OLE Compound File : Autodesk Revit RFA â recalcul ECC et gzip contrĂŽlĂ©
Les modÚles Revit RFA sont stockés en tant que OLE Compound File (aka CFBF). Le modÚle sérialisé se trouve sous storage/stream :
- Storage:
Global
- Stream:
Latest
âGlobal\Latest
Disposition clé de Global\Latest
(observée sur Revit 2025) :
- Header
- GZIP-compressed payload (le graphe d'objets sérialisé réel)
- Zero padding
- Suffixe Error-Correcting Code (ECC)
Revit répare automatiquement de petites perturbations du flux en utilisant le suffixe ECC et rejettera les flux qui ne correspondent pas à l'ECC. Par conséquent, éditer naïvement les octets compressés ne persistera pas : vos modifications sont soit annulées, soit le fichier est rejeté. Pour assurer un contrÎle octet-par-octet de ce que le désérialiseur voit, vous devez :
- Recompress with a Revit-compatible gzip implementation (so the compressed bytes Revit produces/accepts match what it expects).
- Recompute the ECC trailer over the padded stream so Revit will accept the modified stream without auto-repairing it.
Flux de travail pratique pour patching/fuzzing des contenus RFA :
- Extraire le document OLE Compound
# Expand RFA into a folder tree (storages â folders, streams â files)
CompoundFileTool /e model.rfa /o rfa_out
# rfa_out/Global/Latest is the serialized stream of interest
- Modifier Global\Latest selon la discipline gzip/ECC
- Déconstruire
Global/Latest
: garder l'en-tĂȘte, gunzip le payload, modifier des bytes, puis gzip Ă nouveau en utilisant des paramĂštres deflate compatibles avec Revit. - PrĂ©server le zero-padding et recalculer le trailer ECC afin que les nouveaux bytes soient acceptĂ©s par Revit.
- Si vous avez besoin d'une reproduction déterministe octet par octet, construisez un wrapper minimal autour des DLLs de Revit pour invoquer ses chemins gzip/gunzip et le calcul ECC (comme démontré dans la recherche), ou réutilisez tout helper disponible qui reproduit ces sémantiques.
- Reconstruire le OLE compound document
# Repack the folder tree back into an OLE file
CompoundFileTool /c rfa_out /o model_patched.rfa
Remarques:
- CompoundFileTool écrit les storages/streams sur le systÚme de fichiers en échappant les caractÚres invalides dans les noms NTFS ; le chemin de flux recherché est exactement
Global/Latest
dans l'arborescence de sortie. - Lors de livraisons d'attaques massives via des plugins d'écosystÚme qui récupÚrent des RFAs depuis cloud storage, assurez-vous que votre RFA patché passe d'abord les vérifications d'intégrité de Revit en local (gzip/ECC corrects) avant toute injection réseau.
Exploitation insight (pour guider quels octets placer dans la payload gzip) :
- Le dĂ©sĂ©rialiseur de Revit lit un index de classe sur 16 bits et construit un objet. Certains types sont nonâpolymorphes et n'ont pas de vtables ; l'abus du mĂ©canisme de destructeur conduit Ă une confusion de type oĂč le moteur exĂ©cute un appel indirect via un pointeur contrĂŽlĂ© par l'attaquant.
- Choisir
AString
(index de classe0x1F
) place un pointeur heap contrÎlé par l'attaquant à l'offset 0 de l'objet. Pendant la boucle de destructeur, Revit exécute effectivement :
rcx = [rbx] ; object pointer (e.g., AString*)
rax = [rcx] ; attacker-controlled pointer to AString buffer
call qword ptr [rax] ; one attacker-chosen gadget per object
- Placez plusieurs de ces objets dans le graphe sĂ©rialisĂ© afin que chaque itĂ©ration de la boucle du destructeur exĂ©cute un gadget (âweird machineâ), et organisez un stack pivot vers une ROP chain x64 conventionnelle.
See Windows x64 pivot/gadget building details here:
Stack Pivoting - EBP2Ret - EBP chaining
and general ROP guidance here:
Tooling:
- CompoundFileTool (OSS) to expand/rebuild OLE compound files: https://github.com/thezdi/CompoundFileTool
- IDA Pro + WinDBG TTD for reverse/taint; désactivez page heap avec TTD pour garder les traces compactes.
- Un proxy local (p.ex., Fiddler) peut simuler la delivery supply-chain en échangeant des RFAs dans le trafic plugin pour les tests.
Références
- Crafting a Full Exploit RCE from a Crash in Autodesk Revit RFA File Parsing (ZDI blog)
- CompoundFileTool (GitHub)
- OLE Compound File (CFBF) docs
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.