我想要对移动应用程序进行渗透测试。为此,我想要拦截所有 WiFi 流量并将其转发到在虚拟机中运行的 Burp。
我在 Macbook 上启用了“Internet 共享”,这样我的手机现在就可以使用 WiFi 连接到笔记本电脑了。然后我想将所有流量转发到 Burp 代理,即 172.16.122.128:8080。
重定向到本地主机有效:
rdr pass on bridge100 inet proto tcp from any to any port {80,443} -> 127.0.0.1 port 8080
我把这条规则放在一个文件中,并用 加载它pfctl -f pf.rules
。之后,我使用 列出端口 8080 nc -l -p 8080
,当我在手机上浏览某个地方时,它确实连接到了 localhost。
但是,当我尝试转发到 172.16.122.128 时,它不起作用:
rdr pass on bridge100 inet proto tcp from any to any port {80,443} -> 172.16.122.128 port 8080
数据包确实进入了虚拟机(使用 Wireshark 测试),但没有建立连接。这可能是因为它们来自 192.168.2.3。我需要在某处使用 NAT 吗?如何正确配置它?
答案1
我猜,问题在于您尚未配置 2 个网络之间的转发,(1) VM 网络 (172.16.122.0/24) 和 (2) 您的 LAN (192.168.2.0/24)。要在 Mac 上配置转发,您可能需要执行以下操作(抱歉,我没有 Mac,因此无法尝试):
1) 详见https://apple.stackexchange.com/a/192183:
sudo sysctl -w net.inet.ip.forwarding=1
sudo sysctl -w net.inet.ip.fw.enable=1
2)如果需要,向两个网络添加静态路由(我想你已经有了,因为你可以通过 nc 从你的 Mac 连接到 VM)
最后,另一个选项(无需将 Mac 配置为路由器)是使用虚拟化软件设置 NAT 并将端口转发到 VM。如果您使用 VMware Fusion,请查看这里或者这里。
然后,不要将流量转发到虚拟机上的端口,而是将其转发到 vmnet8 接口上的转发端口:
rdr pass on bridge100 inet proto tcp from any to any port {80,443} -> 172.16.122.1 port 8080
(VMware Fusion 应将 vmnet8 上的端口 8080 转发到虚拟机上的端口 8080)
答案2
以下 PF 规则有效:
nat on vmnet8 from bridge100:network to any -> (vmnet8)
rdr pass on bridge100 inet proto tcp from any to any -> 172.16.122.128 port 8080
这会将所有请求转发到 172.16.122.128,同时在其间进行 NAT。
需要 NAT 来转换两个网络的地址,即 192.168.2.0/24 和 172.16.122.0/24。转发部分已经工作(如我的问题所述),但数据包被转发时使用了错误的源地址。NAT 将该源地址更改为 172.16.122.1,这样 VM 就知道将数据包发送回我的 MacBook,然后 MacBook 再次将它们转发到手机。
答案3
如果虚拟机是 Linux 虚拟机,则需要对传入流量进行 Nat 和处理。即:
- 来自 192.168.2.3 的传入数据包被接受
- 将数据包的目标地址更改为172.16.122.128(mangle)
- 将数据包提交给linux路由层
防火墙命令
# Enable forward
sudo sysctl -w net.ipv4.ip_forward=1
# FLUSH ALL RULES
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Forward
sudo iptables -A FORWARD -i eth0 -j ACCEPT
# Mangling rule. I think you can add the port right after the dest ip
sudo iptables -t nat -A POSTROUTING -s 192.168.2.3/32 -j SNAT --to 172.16.122.128