Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
SharePointDumper — Herramienta de extracción y auditoría de SharePoint en PowerShell para equipos rojos/azules/morados. Enumera todos los sitios/unidades de SharePoint a los que un usuario puede acceder a través de Microsoft Graph, descarga archivos de forma recursiva y registra cada solicitud HTTP de Graph + SharePoint para correlación SIEM, ingeniería de detección y pruebas de IR. | Kitploit
Herramientas/GitHubGitHub/zh54321/sharepointdumper
Herramientas DefensivasOSINT (Inteligencia de Fuentes Abiertas)Exfiltración de DatosRecopilación de InformaciónPruebas de PenetraciónSeguridad en la NubeAutenticaciónRed TeamingRespuesta a Incidentes

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Análisis de Registros
GitHubzh54321/sharepointdumper

SharePointDumper

Ver Repositorio
167193hace 7 mesesRevisado por Kitploit

Acerca de

Herramienta de extracción y auditoría de SharePoint en PowerShell para equipos rojos/azules/morados. Enumera todos los sitios/unidades de SharePoint a los que un usuario puede acceder a través de Microsoft Graph, descarga archivos de forma recursiva y registra cada solicitud HTTP de Graph + SharePoint para correlación SIEM, ingeniería de detección y pruebas de IR.

Compartir

SharePointDumper

SharePointDumper es una utilidad de extracción y auditoría basada en PowerShell que enumera los sitios de SharePoint a los que un usuario puede acceder a través de Microsoft Graph y descarga archivos a través de SharePoint.

Está diseñado para pruebas de SOC / DLP, purple teaming y evaluaciones de red-team no sofisticadas, y por lo tanto genera informes detallados que incluyen los archivos descargados y cada solicitud HTTP (Graph + SharePoint) para la correlación con SIEM.

La herramienta no realiza autenticación. En su lugar, requiere un token de acceso OAuth2 ya obtenido con los permisos adecuados de Microsoft Graph (Sites.Read.All o Sites.ReadWrite.All).
Si necesita ayuda para obtener dicho token, puede usar EntraTokenAid (ejemplos incluidos más abajo), que simplifica la generación de tokens de acceso utilizables.


✨ Características

  • Enumera sitios, unidades, carpetas y archivos de SharePoint a través de Microsoft Graph
  • Vuelca recursivamente unidades y carpetas (usando URLs de preautenticación de SharePoint)
  • Sin dependencias externas obligatorias (sin módulos de Microsoft Graph PowerShell, etc.)
  • Personalizar el User-Agent
  • Límites globales de descarga: máximo de archivos y tamaño total máximo
  • Filtrado de inclusión/exclusión para sitios y extensiones de archivo
  • Regulación ajustable de solicitudes con jitter aleatorio
  • Consulta opcional de IP pública
  • Informe estructurado que incluye:
    • Resumen (duración, límites, filtros, IP pública)
  • Sitios de SharePoint accedidos
  • Registros completos de solicitudes HTTP (CSV o JSON)
  • Redacción de tokens de descarga de SharePoint, con opción de registrarlos sin redactar
  • Manejo elegante de Ctrl+C que se detiene después del archivo actual y aún así escribe el informe completo y el registro HTTP antes de salir
  • Modo de reanudación, que re-enumera pero omite los archivos ya descargados
  • Actualización automática opcional del token de acceso (requiere EntraTokenAid https://github.com/zh54321/EntraTokenAid.git)

  • 📦 Imágenes

    Ejecución:
    alt text

    Ejemplo de registro CSV de API (puede ser CSV o JSON): alt text

    Ejemplo de registro de descarga de archivos (puede ser CSV o JSON) alt text


    📦 Instalación

    Clonar el repositorio

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

    🔑 Requisitos

    SharePointDumper requiere un token de acceso válido de Microsoft Graph con permisos delegados para enumerar sitios y archivos:

    • Sites.Read.All o
    • Sites.ReadWrite.All

    Además, el cliente OAuth debe tener permiso para llamar a la API de SharePoint.

    Más de 23 aplicaciones propias de Microsoft ya tienen los permisos Sites.Read… pre-consentidos. Pueden descargar archivos de SharePoint y se pueden usar para obtener un token válido sin configuración adicional del inquilino.

    Clientes propios utilizables
    Nombre de la aplicaciónID de clienteFOCIComando de autenticación de 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'

    Recomendación de vida útil del token

    Si es posible, use un token de acceso habilitado para CAE, que sigue siendo válido hasta 24 horas y reduce las interrupciones durante volcados de larga duración.

    Obtención de un token con EntraTokenAid

    Puede usar EntraTokenAid para obtener un token de acceso adecuado a través de PowerShell
    (Los tokens CAE se solicitan por defecto):

    root@kitploit:~
    # Clone el módulo
    git clone https://github.com/zh54321/EntraTokenAid.git
    Import-Module EntraTokenAid/EntraTokenAid.psm1
    
    # Obtenga los tokens
    $tokens = Invoke-Auth -ClientID 'b26aadf8-566f-4478-926f-589f601d9c74' -RedirectUrl 'urn:ietf:wg:oauth:2.0:oob'
    
    # Opcional: Almacene en una variable compatible con los ejemplos siguientes
    $AccessToken = $tokens.access_token
    

    🚀 Uso

    Uso básico

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

    Filtrar sitios

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

    Filtrar extensiones de archivo

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

    Limitar descargas

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

    Ralentizar solicitudes

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

    Con jitter:

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

    Reanudar (ejemplo después de la expiración del token)

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

    En modo de reanudación, -OutputFolder debe apuntar a la carpeta de su ejecución anterior.

    Usar actualización automática de token

    SharePointDumper puede actualizar automáticamente un token de acceso expirado (HTTP 401) usando un token de actualización y EntraTokenAid.

    root@kitploit:~
    # Obligatorio: El módulo debe estar importado para que la herramienta pueda usar el comando Invoke-Refresh
    Import-Module .\EntraTokenAid\EntraTokenAid.psm1
    
    # Opcional: Obtener tokens usando EntraTokenAid (otros métodos también son posibles)
    $tokens = Invoke-Auth -ClientId 'b26aadf8-566f-4478-926f-589f601d9c74' -RedirectUrl 'urn:ietf:wg:oauth:2.0:oob'
    
    # Ejecutar SharePointDumper con soporte de actualización
    .\Invoke-SharePointDumper.ps1 -AccessToken $tokens.access_token -RefreshToken $tokens.refresh_token -RefreshClientId 'b26aadf8-566f-4478-926f-589f601d9c74'
    

    Nota: Los intentos de actualización de token NO se registran en el registro de API.


    Parámetros

    ParámetroObligatorioTipoDescripción
    AccessTokenSíStringToken de acceso OAuth2. No se realiza autenticación dentro de la herramienta.
    OutputFolderNoStringDirectorio para el volcado. Valor predeterminado: ".". En modo -Resume, debe apuntar a una carpeta de volcado anterior existente.
    UserAgentNoStringUserAgent personalizado para todas las solicitudes HTTP. Valor predeterminado: SharePointDumper
    ProxyNoStringProxy HTTP opcional (ej., http://127.0.0.1:8080).
    IncludeExtensionsNoString[]Descargar solo estas extensiones.
    ExcludeExtensionsNoString[]Omitir estas extensiones (se ignora si se usa IncludeExtensions).
    IncludeSitesNoString[]Procesar solo sitios que coincidan con cualquiera de estos valores.
    ExcludeSitesNoString[]Omitir sitios que coincidan con cualquiera de estos valores.
    DisableIpLookupNoSwitchNo consultar ifconfig.me para IP pública.
    RequestDelaySecondsNoDoubleRetraso base antes de cada solicitud HTTP.
    VariationNoDoubleJitter aleatorio añadido al retraso base.
    MaxFilesNoIntNúmero máximo de archivos a descargar. Valor predeterminado: sin límite.
    MaxTotalSizeMBNoDoubleTamaño total máximo de descarga. Valor predeterminado: sin límite.
    ResumeNoSwitchOmite archivos ya descargados. Requiere .

    🧾 Estructura de salida

    Estructura de directorios

    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/
    

    Registros

    • Informe: resumen de alto nivel (Report_*.txt)
    • Registro de API: cada solicitud HTTP de Graph + SharePoint
      (ApiLog_*.csv o .json)
    • Ejecuciones de reanudación generan:
      • SharePointDumper_ReportResume_*
      • SharePointDumper_ApiLogResume_*

    ⚠️ Errores de autenticación

    401 – No autorizado

    El token de acceso no es válido o ha expirado.

    403 – Prohibido

    El token de acceso es válido, pero faltan los permisos requeridos de Microsoft Graph o SharePoint.


    🔍 Detección

    Las actividades de SharePointDumper se registran en:

    • Registro de auditoría unificado (UAL): registra la actividad de búsqueda y descarga de SharePoint.
    • Registros de actividad de Graph: registran todas las solicitudes de enumeración de sitios y unidades (/organization, /sites, /drives).

    Ejemplo de UAL:
    asd

    Ejemplo de registro de actividad de Graph:
    asd


    📝 Licencia

    Publicado bajo la Licencia MIT.


    Descargar herramienta
    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
    ApiLogFormatNoStringCsv (predeterminado), Json o None.
    ApiLogPathNoStringRuta de salida personalizada para el archivo de registro de API.
    FileLogFormatNoStringCsv (predeterminado), Json o None.
    FileLogPathNoStringRuta de salida personalizada para el archivo de registro de archivos.
    LogDownloadTokensNoSwitchRegistrar URLs completas de descarga de SharePoint incluyendo tokens tempauth (no seguro). Valor predeterminado: los tokens están redactados.
    RefreshTokenNoStringToken de actualización OAuth2 utilizado para la renovación automática del token de acceso en HTTP 401.
    RefreshClientIdNoStringID de cliente utilizado junto con -RefreshToken.
    RefreshTenantNoStringAutoridad del inquilino para el endpoint de actualización (predeterminado: common).