理由
VPS到期了,想要让自己的wsl成为真正的攻击机(可以实现反弹shell等等操作如同是win物理机一般),以及可以让靶机不再因为win和wsl不同配置文件而隔离,于是打算采取桥接网络取代wsl2的默认nat模式,but,(现在 bridged`已经被微软明确标记为 deprecated,自 WSL 2.4.5 起就是弃用模式)采取了如文章标题所言的:镜像网络模式(当然internet题目依旧是vps最好)

nat模式为什么让我抓狂?
ip嵌套分配:当采取nat模式时,kali会被分配一个
172.x.x.x
尽管此时确实可以正常进行nmap和下载/上传数据包
but当我遇到一个靶机:
1.反弹shell会失败(NAT 模式下 WSL 位于独立的虚拟私有网段,远端靶机通常无法直接路由到 WSL 的 172.x.x.x 地址,因此直接将该地址作为 reverse shell 的回连地址时可能失败)
2.当这台靶机的某个服务绑定了域名解析,写入/etc/hosts后只能在kex中看到这个服务的真面目,win上依旧无法访问
这些问题当然都可以解决,但是如何一劳永逸呢?
配置
首先看最初我的%UserProfile%.wslconfig
[wsl2]
memory=8GB
swap=4GB
localhostForwarding=true
效果大致是:

此时的win和wsl是两个网络空间
而mirror做的事情:
把 Windows 主机的网络接口镜像进 WSL 的网络环境

为了达到这种效果:
首先是:
1.开启镜像模式
networkingMode=mirrored
优化
2.DNS Tunnelin
dnsTunneling=true
对于传统wsl-dns,总是类似于:
Linux
│
▼
/etc/resolv.conf
│
▼
某个虚拟 DNS
│
▼
Windows / VPN / LAN DNS
此时可能会发生win能正常解析,wsl不能的情况
而此时的dnsTunneling可以实现
WSL DNS Query
│
│ virtualization channel
▼
Windows DNS Client
│
├── Windows DNS
├── VPN DNS
├── DNS suffix
├── NRPT
└── hosts policy
并且针对于域名绑定规则:DNS tunneling 启用后,generateHosts甚至会被忽略;Windows hosts 没有被物理复制到 /etc/hosts,相关策略会应用于 Linux DNS 查询,最后实现只改一端,应用两端
(因此可以将 Windows hosts 作为主要的域名映射配置源:Windows 自身可以读取,WSL 中通过正常 DNS/NSS 解析发起的查询也能够应用这些规则。需要注意,这并不是 Windows 与 Linux 双向同步 hosts;Linux /etc/hosts 中单独添加的内容不会反向同步给 Windows)
3.autoProxy
autoProxy=true //(默认开启)
我的win长期开启代理
于是这个autoProxy=true会让 WSL 使用 Windows HTTP Proxy 信息
4.hostAddressLoopback
hostAddressLoopback=true
当开启后:
允许 Windows / WSL 使用分配给 Windows 主机的 IPv4 地址相互访问
于是可以同时使用:
localhost
真实 LAN 地址
5.firewall
firewall=true //默认值
最后的配置:
[wsl2]
memory=8GB
swap=4GB
networkingMode=mirrored
dnsTunneling=true
autoProxy=true
[experimental]
hostAddressLoopback=true
然后
wsl --shutdown
最后:
kali
补:
防火墙规则设置
开启
(实测影响不大)
Get-NetFirewallHyperVVMSetting `
-PolicyStore ActiveStore `
-Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}'
会返回:
Name : {40E0AC32-46A5-438A-A0B2-2B479E8F2E90}
Enabled : True
DefaultInboundAction : Block //问题所在
DefaultOutboundAction : Allow //WSL 主动访问外部没问题
LoopbackEnabled : True //Windows ↔ WSL loopback 正常
AllowHostPolicyMerge : True
开启
PS C:\Users\lilyzero207> Set-NetFirewallHyperVVMSetting `
>> -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' `
>> -DefaultInboundAction Allow
PS C:\Users\lilyzero207> Get-NetFirewallHyperVVMSetting `
>> -PolicyStore ActiveStore `
>> -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}'
Name : {40E0AC32-46A5-438A-A0B2-2B479E8F2E90}
Enabled : True
DefaultInboundAction : Allow
DefaultOutboundAction : Allow
LoopbackEnabled : True
AllowHostPolicyMerge : True
测试环节
1.localhost 通道打通
kali
python3 -m http.server 8000 --bind 0.0.0.0 //0.0.0.0 是服务端的监听地址,表示监听全部 IPv4 接口
win
curl.exe http://localhost:8000/
or
curl.exe http://127.0.0.1:8000/
or
curl.exe http://192.168.31.85:8000/
结果完全一致
2.同一局域网下另一设备的连接测试
手机/电脑等设备直接访问:
http://192.168.31.85:8000/
若结果一致,成功
关闭
Set-NetFirewallHyperVVMSetting `
-Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' `
-DefaultInboundAction Block