如何在Linux下绕过O365双因素认证用Python连接SharePoint传文件
不存在非合规的“绕过双因素认证”漏洞利用方案,以下均为微软官方支持的非交互认证路径,认证流程不会触发交互式MFA校验,可直接在Linux环境部署运行
方案1:Azure AD服务主体认证(生产环境首选,稳定性最高)
- 联系组织的SharePoint/ Azure AD管理员完成前置配置:在Azure AD中注册服务应用,为应用授予目标SharePoint站点的文件读写权限,可选择配置客户端密钥(简单场景用)或客户端证书(生产环境推荐,Linux下证书存储更安全)
- Python端使用
Office365-REST-Python-Client库实现连接,示例代码如下:
from office365.sharepoint.client_context import ClientContext from office365.runtime.auth.client_credential import ClientCredential # 替换为你的实际配置 site_url = "https://<组织域名>.sharepoint.com/sites/<目标站点名称>" client_id = "服务应用的客户端ID" client_secret = "服务应用配置的客户端密钥" # 如果用证书认证替换为证书路径和密码即可 ctx = ClientContext(site_url).with_credentials(ClientCredential(client_id, client_secret)) # Linux本地文件上传示例 local_file = "/opt/data/需要上传的文件.pdf" target_sp_folder = ctx.web.get_folder_by_server_relative_url("/sites/<目标站点名称>/Shared Documents/上传目标文件夹") with open(local_file, "rb") as f: file_content = f.read() target_sp_folder.upload_file("需要上传的文件.pdf", file_content).execute_query()该方案使用应用身份认证,不绑定个人账号,权限可单独配置,适合长期运行的自动化任务。
方案2:个人账号应用密码认证(仅适合临时测试场景,需管理员开启对应功能)
- 确认组织租户开启了应用密码功能(仅混合身份认证租户支持,纯云租户默认关闭),登录O365个人安全设置页生成16位应用专用密码
- 连接时直接使用个人O365账号+应用密码作为凭据,不会触发MFA校验,示例代码如下:
from office365.sharepoint.client_context import ClientContext from office365.runtime.auth.user_credential import UserCredential site_url = "https://<组织域名>.sharepoint.com/sites/<目标站点名称>" account = "你的O365账号邮箱" app_pwd = "生成的16位应用密码" ctx = ClientContext(site_url).with_credentials(UserCredential(account, app_pwd)) # 后续上传逻辑和方案1一致该方案凭据绑定个人账号,权限和你个人账号的SharePoint权限完全一致,账号密码变更、权限调整都会导致连接失效,不建议生产环境使用。
注意:所有配置操作必须提前获得组织IT/安全团队的正式授权,不要尝试使用模拟浏览器交互、抓包篡改认证流程等方式强行绕过MFA,这类方式稳定性极差,还会触发租户安全风控,甚至违反数据合规要求。
内容的提问来源于stack exchange,提问作者Ajith
相关产品推荐
相关产品推荐

