Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
SharePointDumper — Outil d'extraction et d'audit PowerShell pour SharePoint, destiné aux équipes rouges, bleues et violettes. Énumère tous les sites/dossiers SharePoint qu'un utilisateur peut atteindre via Microsoft Graph, télécharge récursivement les fichiers, et enregistre chaque requête HTTP Graph et SharePoint pour la corrélation SIEM, l'ingénierie de détection et les tests de réponse aux incidents. | Kitploit
Outils/GitHubGitHub/zh54321/sharepointdumper
Outils DéfensifsOSINT (Renseignement de Sources Ouvertes)Exfiltration de DonnéesCollecte d'InformationsTests d'IntrusionSécurité CloudAuthentificationRed TeamingRéponse aux Incidents
Analyse de Journaux
GitHubzh54321/sharepointdumper

SharePointDumper

Voir le dépôt
167192il y a 7 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →

À propos

Outil d'extraction et d'audit PowerShell pour SharePoint, destiné aux équipes rouges, bleues et violettes. Énumère tous les sites/dossiers SharePoint qu'un utilisateur peut atteindre via Microsoft Graph, télécharge récursivement les fichiers, et enregistre chaque requête HTTP Graph et SharePoint pour la corrélation SIEM, l'ingénierie de détection et les tests de réponse aux incidents.

Partager

SharePointDumper

SharePointDumper est un utilitaire d'extraction et d'audit basé sur PowerShell qui énumère les sites SharePoint auxquels un utilisateur peut accéder via Microsoft Graph et télécharge des fichiers via SharePoint.

Il est conçu pour les tests SOC / DLP, le purple teaming et les évaluations de red team non sophistiquées, et produit donc des rapports détaillés comprenant les fichiers téléchargés et chaque requête HTTP (Graph + SharePoint) pour une corrélation avec les SIEM.

L'outil n'effectue pas d'authentification. Il nécessite un jeton d'accès OAuth2 déjà obtenu avec les autorisations Microsoft Graph appropriées (Sites.Read.All ou Sites.ReadWrite.All).
Si vous avez besoin d'aide pour obtenir un tel jeton, vous pouvez utiliser EntraTokenAid (des exemples sont inclus ci-dessous), qui simplifie la génération de jetons d'accès utilisables.


✨ Fonctionnalités

  • Énumère les sites, lecteurs, dossiers et fichiers SharePoint via Microsoft Graph
  • Vide récursivement les lecteurs et dossiers (en utilisant les URL de pré-authentification SharePoint)
  • Aucune dépendance externe obligatoire (pas de modules Microsoft Graph PowerShell, etc.)
  • Personnalisation du User-Agent
  • Limites globales de téléchargement : nombre maximum de fichiers et taille totale maximum
  • Filtrage d'inclusion/exclusion pour les sites et les extensions de fichiers
  • Réglage de la limitation des requêtes avec gigue aléatoire
  • Recherche facultative d'adresse IP publique
  • Rapport structuré comprenant :
  • Résumé (durée, limites, filtres, IP publique)
  • Sites SharePoint consultés
  • Journaux complets des requêtes HTTP (CSV ou JSON)
  • Masquage des jetons de téléchargement SharePoint, avec option de journalisation non masquée
  • Gestion gracieuse de Ctrl+C qui s'arrête après le fichier en cours et écrit le rapport complet et le journal HTTP avant de quitter
  • Mode reprise, qui ré-énumère mais ignore les fichiers déjà téléchargés
  • Rafraîchissement automatique facultatif du jeton d'accès (nécessite EntraTokenAid https://github.com/zh54321/EntraTokenAid.git)

  • 📦 Images

    Exécution :
    alt text

    Exemple de journal d'API CSV (peut être CSV ou JSON) : alt text

    Exemple de journal de téléchargement de fichier (peut être CSV ou JSON) alt text


    📦 Installation

    Cloner le dépôt

    root@kitploit:~
    git clone https://github.com/zh54321/SharePointDumper.git
    cd SharePointDumper
    

    🔑 Prérequis

    SharePointDumper nécessite un jeton d'accès Microsoft Graph valide avec des autorisations déléguées pour énumérer les sites et les fichiers :

    • Sites.Read.All ou
    • Sites.ReadWrite.All

    De plus, le client OAuth doit être autorisé à appeler l'API SharePoint.

    Plus de 23 applications Microsoft first-party ont déjà des autorisations Sites.Read… pré-consenties. Elles peuvent télécharger des fichiers depuis SharePoint et peuvent être utilisées pour obtenir un jeton valide sans configuration supplémentaire du locataire.

    Clients first-party utilisables
    Nom de l'applicationID clientFOCICommande d'authentification EntraTokenAid
    Microsoft Teams1fec8e78-bce4-4aaf-ab1b-5451cc387264TRUE$tokens = Invoke-Auth -ClientID '1fec8e78-bce4-4aaf-ab1b-5451cc387264' -RedirectUrl 'https://login.microsoftonline.com/common/oauth2/nativeclient'
    Outlook Mobile27922004-5251-4030-b22d-91ecd9a37ea4TRUE$tokens = Invoke-Auth -ClientID '27922004-5251-4030-b22d-91ecd9a37ea4' -RedirectUrl 'x-msauth-outlook-prod://com.microsoft.Office.Outlook'
    OneDrive SyncEngineab9b8c07-8f02-4f72-87fa-80105867a763TRUE$tokens = Invoke-Auth -ClientID 'ab9b8c07-8f02-4f72-87fa-80105867a763' -RedirectUrl 'https://login.microsoftonline.com/common/oauth2/nativeclient'
    OneDrive iOS Appaf124e86-4e96-495a-b70a-90f90ab96707TRUE$tokens = Invoke-Auth -ClientID 'af124e86-4e96-495a-b70a-90f90ab96707' -RedirectUrl 'ms-onedrive-auth://com.microsoft.skydrive.shareextension'
    Microsoft Bing Searchcf36b471-5b44-428c-9ce7-313bf84528deTRUE$tokens = Invoke-Auth -ClientID 'cf36b471-5b44-428c-9ce7-313bf84528de' -RedirectUrl 'msauth.com.microsoft.bing://auth'
    OneDriveb26aadf8-566f-4478-926f-589f601d9c74TRUE$tokens = Invoke-Auth -ClientID 'b26aadf8-566f-4478-926f-589f601d9c74' -RedirectUrl 'urn:ietf:wg:oauth:2.0:oob'
    SharePointd326c1ce-6cc6-4de2-bebc-4591e5e13ef0TRUE$tokens = Invoke-Auth -ClientID 'd326c1ce-6cc6-4de2-bebc-4591e5e13ef0' -RedirectUrl 'msauth://code/ms-sharepoint-auth%3A%2F%2Fcom.microsoft.sharepoint'
    SharePoint Androidf05ff7c9-f75a-4acd-a3b5-f4b6a870245dTRUE$tokens = Invoke-Auth -ClientID 'f05ff7c9-f75a-4acd-a3b5-f4b6a870245d' -RedirectUrl 'msauth://com.microsoft.sharepoint/gSoqzhbCjkyvI%2Fl7kC7IdG7KbPU%3D'
    OfficeHome4765445b-32c6-49b0-83e6-1d93765276caFALSE$tokens = Invoke-Auth -ClientID '4765445b-32c6-49b0-83e6-1d93765276ca' -RedirectUrl 'https://scuprodprv.www.microsoft365.com/spalanding' -Origin 'https://doesnotmatter'
    SharePoint Online Web Client Extensibility08e18876-6177-487e-b8b5-cf950c1e598cFALSE$tokens = Invoke-Auth -ClientID '08e18876-6177-487e-b8b5-cf950c1e598c' -RedirectUrl 'https://onedrive.cloud.microsoft/_forms/spfxsinglesignon.aspx' -Origin 'https://doesnotmatter'

    Recommandation de durée de vie du jeton

    Si possible, utilisez un jeton d'accès compatible CAE, qui reste valide jusqu'à 24 heures et réduit les interruptions lors de vidages de longue durée.

    Obtenir un jeton avec EntraTokenAid

    Vous pouvez utiliser EntraTokenAid pour obtenir un jeton d'accès approprié via PowerShell
    (les jetons CAE sont demandés par défaut) :

    root@kitploit:~
    # Cloner le module
    git clone https://github.com/zh54321/EntraTokenAid.git
    Import-Module EntraTokenAid/EntraTokenAid.psm1
    
    # Obtenir les jetons
    $tokens = Invoke-Auth -ClientID 'b26aadf8-566f-4478-926f-589f601d9c74' -RedirectUrl 'urn:ietf:wg:oauth:2.0:oob'
    
    # Facultatif : stocker dans une variable compatible avec les exemples ci-dessous
    $AccessToken = $tokens.access_token
    

    🚀 Utilisation

    Utilisation de base

    root@kitploit:~
    .\Invoke-SharePointDumper.ps1 -AccessToken $accesstoken -UserAgent "Not SharePointDumper"
    

    Filtrer les sites

    root@kitploit:~
    .\Invoke-SharePointDumper.ps1 -AccessToken $accesstoken -IncludeSites "Finance","Projects"
    
    root@kitploit:~
    .\Invoke-SharePointDumper.ps1 -AccessToken $accesstoken -ExcludeSites "HR","Legal"
    

    Filtrer les extensions de fichier

    root@kitploit:~
    .\Invoke-SharePointDumper.ps1 -AccessToken $accesstoken -IncludeExtensions pdf,docx
    
    root@kitploit:~
    .\Invoke-SharePointDumper.ps1 -AccessToken $accesstoken -ExcludeExtensions jpg,bmp
    

    Limiter les téléchargements

    root@kitploit:~
    .\Invoke-SharePointDumper.ps1 -AccessToken $accesstoken -MaxFiles 500
    
    root@kitploit:~
    .\Invoke-SharePointDumper.ps1 -AccessToken $accesstoken -MaxTotalSizeMB 100
    

    Ralentir les requêtes

    root@kitploit:~
    .\Invoke-SharePointDumper.ps1 -AccessToken $accesstoken -RequestDelaySeconds 2
    

    Avec gigue :

    root@kitploit:~
    .\Invoke-SharePointDumper.ps1 -AccessToken $accesstoken -RequestDelaySeconds 2 -Variation 3
    

    Reprise (exemple après expiration du jeton)

    root@kitploit:~
    .\Invoke-SharePointDumper.ps1 -AccessToken $accesstoken -Resume -OutputFolder .\20251121_1551_MyTenant
    

    En mode reprise, -OutputFolder doit pointer vers le dossier de l'exécution précédente.

    Utilisation du rafraîchissement automatique du jeton

    SharePointDumper peut automatiquement rafraîchir un jeton d'accès expiré (HTTP 401) à l'aide d'un jeton de rafraîchissement et d'EntraTokenAid.

    root@kitploit:~
    # Obligatoire : le module doit être importé pour que l'outil puisse utiliser la commande Invoke-Refresh
    Import-Module .\EntraTokenAid\EntraTokenAid.psm1
    
    # Facultatif : obtenir les jetons avec EntraTokenAid (d'autres méthodes sont également possibles)
    $tokens = Invoke-Auth -ClientId 'b26aadf8-566f-4478-926f-589f601d9c74' -RedirectUrl 'urn:ietf:wg:oauth:2.0:oob'
    
    # Exécuter SharePointDumper avec prise en charge du rafraîchissement
    .\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -RefreshToken $tokens.refresh_token -RefreshClientId 'b26aadf8-566f-4478-926f-589f601d9c74'
    

    Remarque : les tentatives de rafraîchissement du jeton ne sont PAS consignées dans le journal d'API.


    Paramètres

    ParamètreRequisTypeDescription
    AccessTokenOuiChaîneJeton d'accès OAuth2. Aucune authentification effectuée dans l'outil.
    OutputFolderNonChaîneRépertoire pour le vidage. Par défaut : ".". En mode -Resume, doit pointer vers un dossier de vidage existant.
    UserAgentNonChaîneUserAgent personnalisé pour toutes les requêtes HTTP. Par défaut : SharePointDumper
    ProxyNonChaîneProxy HTTP facultatif (ex. http://127.0.0.1:8080).
    IncludeExtensionsNonString[]Télécharger uniquement ces extensions.
    ExcludeExtensionsNonString[]Ignorer ces extensions (ignoré si IncludeExtensions est utilisé).
    IncludeSitesNonString[]Traiter uniquement les sites correspondant à l'une de ces valeurs.
    ExcludeSitesNonString[]Ignorer les sites correspondant à l'une de ces valeurs.
    DisableIpLookupNonSwitchNe pas interroger ifconfig.me pour l'IP publique.
    RequestDelaySecondsNonDoubleDélai de base avant chaque requête HTTP.
    VariationNonDoubleGigue aléatoire ajoutée au délai de base.
    MaxFilesNonIntNombre maximum de fichiers à télécharger. Par défaut : aucune limite.
    MaxTotalSizeMBNonDoubleTaille totale de téléchargement maximale. Par défaut : aucune limite.
    ResumeNonSwitchIgnore les fichiers déjà téléchargés. Nécessite .

    🧾 Structure de sortie

    Structure des répertoires

    root@kitploit:~
    20261115_MySecureTenant/
     ├── SharePointDumper_Report_20261115_080333.txt
     ├── SharePointDumper_ApiLog_20261115_080333.csv
     ├── SharePointDumper_FileLog_20261115_080333.csv
     ├── Site A/
     │    └── Documents/
     │         ├── file1.docx
     │         └── file2.pdf
     └── Site B/
          └── Site Assets/
    

    Journaux

    • Rapport : résumé de haut niveau (Report_*.txt)
    • Journal d'API : chaque requête HTTP Graph + SharePoint
      (ApiLog_*.csv ou .json)
    • Exécutions de reprise génèrent :
      • SharePointDumper_ReportResume_*
      • SharePointDumper_ApiLogResume_*

    ⚠️ Erreurs d'authentification

    401 – Non autorisé

    Le jeton d'accès est invalide ou a expiré.

    403 – Interdit

    Le jeton d'accès est valide, mais les autorisations Microsoft Graph ou SharePoint requises sont manquantes.


    🔍 Détection

    Les activités de SharePointDumper sont enregistrées dans :

    • Journal d'audit unifié (UAL) : enregistre l'activité de recherche et de téléchargement SharePoint.
    • Journaux d'activité Graph : enregistrent toutes les requêtes d'énumération de sites et de lecteurs (/organization, /sites, /drives).

    Exemple UAL :
    asd

    Exemple de journal d'activité Graph :
    asd


    📝 Licence

    Publié sous la licence MIT.


    Télécharger l’outil
    Microsoft Teams Web Client5e3ce6c0-2b1f-4285-8d4b-75ee78787346FALSE$tokens = Invoke-Auth -ClientID '5e3ce6c0-2b1f-4285-8d4b-75ee78787346' -RedirectUrl 'https://teams.cloud.microsoft/convene/townhall' -Origin 'https://doesnotmatter'
    Portfoliosf53895d3-095d-408f-8e93-8f94b391404eFALSE$tokens = Invoke-Auth -ClientID 'f53895d3-095d-408f-8e93-8f94b391404e' -RedirectUrl 'https://project.microsoft.com/msal-redirect2' -Origin 'https://doesnotmatter'
    Microsoft Remote Assistfca5a20d-55aa-4395-9c2f-c6147f3c9ffaFALSE$tokens = Invoke-Auth -ClientID 'fca5a20d-55aa-4395-9c2f-c6147f3c9ffa' -RedirectUrl 'http://localhost:13824'
    ProcessSimpleGCC38a893b6-d74c-4786-8fe7-bc3b4318e881FALSE$tokens = Invoke-Auth -ClientID '38a893b6-d74c-4786-8fe7-bc3b4318e881' -RedirectUrl 'https://make.gov.powerautomate.us/auth-redirect.html' -Origin 'https://doesnotmatter'
    WindowsShareExperienceProda8759234-4b8b-4d94-8c0a-ee1ab73af270FALSE$tokens = Invoke-Auth -ClientID 'a8759234-4b8b-4d94-8c0a-ee1ab73af270' -RedirectUrl 'ms-appx-web://Microsoft.AAD.BrokerPlugin/a8759234-4b8b-4d94-8c0a-ee1ab73af270'
    Office voice transcript generator AADd2eb9fef-f34c-40ec-b6a3-4bf524065158FALSE$tokens = Invoke-Auth -ClientID 'd2eb9fef-f34c-40ec-b6a3-4bf524065158' -RedirectUrl 'msauth.com.microsoft.Office.TestVoice.TestVoice2://auth'
    Azure OpenAI Studiodc807dec-d211-4b3f-bc8a-43b3443c4874FALSE$tokens = Invoke-Auth -ClientID 'dc807dec-d211-4b3f-bc8a-43b3443c4874' -RedirectUrl 'https://dev.oai.azure.com' -Origin 'https://doesnotmatter'
    Azure AI Studio Appcb2ff863-7f30-4ced-ab89-a00194bcf6d9FALSE$tokens = Invoke-Auth -ClientID 'cb2ff863-7f30-4ced-ab89-a00194bcf6d9' -RedirectUrl 'https://int.ai.azure.com/agents' -Origin 'https://doesnotmatter'
    Azure Machine Learning Workbench Web Appd7304df8-741f-47d3-9bc2-df0e24e2071fFALSE$tokens = Invoke-Auth -ClientID 'd7304df8-741f-47d3-9bc2-df0e24e2071f' -RedirectUrl 'https://dev.ml.azure.com/redirect' -Origin 'https://doesnotmatter'
    M365ChatClientc0ab8ce9-e9a0-42e7-b064-33d422df41f1FALSE$tokens = Invoke-Auth -ClientID 'c0ab8ce9-e9a0-42e7-b064-33d422df41f1' -RedirectUrl 'https://fa000000128.resources.office.net/f7024bdc-7caf-4ca8-807d-2908f09640d6/1.0.2412.19011/en-us_web/login.html' -Origin 'https://doesnotmatter'
    Microsoft Loop Appa187e399-0c36-4b98-8f04-1edc167a0996FALSE$tokens = Invoke-Auth -ClientID 'a187e399-0c36-4b98-8f04-1edc167a0996' -RedirectUrl 'https://hosted.loop.cloud.dev.microsoft/authLanding.html' -Origin 'https://doesnotmatter'
    Viva Goalsc8423563-e8f6-49f2-924b-90d9f664378aFALSE$tokens = Invoke-Auth -ClientID 'c8423563-e8f6-49f2-924b-90d9f664378a' -RedirectUrl 'https://goals-ppe.microsoft.com/aad/consume' -Origin 'https://doesnotmatter'
    Microsoft Mesheea619ad-603a-4b03-a386-860fcc7410d1FALSE$tokens = Invoke-Auth -ClientID 'eea619ad-603a-4b03-a386-860fcc7410d1' -RedirectUrl 'http://localhost:13824'
    -OutputFolder
    ApiLogFormatNonChaîneCsv (par défaut), Json, ou None.
    ApiLogPathNonChaîneChemin de sortie personnalisé pour le fichier journal d'API.
    FileLogFormatNonChaîneCsv (par défaut), Json, ou None.
    FileLogPathNonChaîneChemin de sortie personnalisé pour le fichier journal de fichiers.
    LogDownloadTokensNonSwitchJournaliser les URL de téléchargement SharePoint complètes, y compris les jetons tempauth (non sécurisé). Par défaut : les jetons sont masqués.
    RefreshTokenNonChaîneJeton de rafraîchissement OAuth2 utilisé pour le renouvellement automatique du jeton d'accès en cas de HTTP 401.
    RefreshClientIdNonChaîneID client utilisé avec -RefreshToken.
    RefreshTenantNonChaîneAutorité du locataire pour le point de terminaison de rafraîchissement (par défaut : common).