WSL(Windows Subsystem for Linux)由微软官方出品,类似虚拟机,能够在 Win 设备中无痛运行多个 Linux 系统。最近在其中安装了 Kali Linux 并进行一些局域网安全测试,比如经典的 ARP 欺骗。记录一下从网络配置到 GUI 安装,再到网络模式选择。
初始化 Kali 与 GPG 密钥问题
在 WSL 中安装完 Kali 后,第一步通常是更新软件源。但马上就遇到了第一个问题:
┌──(root㉿LAPTOP-xxxxxxxx)-[~]
└─# sudo apt update
Get:1 http://kali.download/kali kali-last-snapshot InRelease [41.5 kB]
Err:1 http://kali.download/kali kali-last-snapshot InRelease
Sub-process /usr/bin/sqv returned an error code (1), error message is: Missing key ...
Warning: GPG error: ...
Error: The repository 'http://http.kali.org/kali kali-last-snapshot InRelease' is not signed.
原因:这是因为新安装系统缺少最新的 GPG 公钥,导致apt无法验证软件源的签名。
解决方案:手动下载并安装包含最新密钥的官方包。
# 1. 下载密钥包
wget https://http.kali.org/kali/pool/main/k/kali-archive-keyring/kali-archive-keyring_2022.1_all.deb
# 2. 安装密钥包
sudo apt install ./kali-archive-keyring_2022.1_all.deb
# 3. 清理并再次更新
rm kali-archive-keyring_2022.1_all.deb
sudo apt update
安装 GUI 桌面环境 (Win-Kex)
对一些网络测试工具来说,纯命令行不太方便,需要一个图形界面。Kali官方为 WSL 提供了Win-Kex工具,体验非常好。
# 安装 Win-Kex 及 XFCE 桌面环境
sudo apt install -y kali-win-kex
# 启动GUI(这里使用了窗口模式,带声音)
kex --win -s
安装过程中会遇到一些配置选项,如kismet、wireshark-common、sslh等,对于个人实验环境,基本都可以选择推荐的、更方便的选项(如为wireshark和kismet选择<Yes>,允许非root用户使用,并将当前用户加入对应用户组;为sslh选择standalone模式)。
让 Kali 接入局域网
默认情况下,WSL2 使用 NAT 模式,其 IP 地址(如172.x.x.x)与物理局域网是隔离的,无法直接扫描局域网。我们需要让 Kali 虚拟机桥接到物理网络。
方案一:使用USB无线网卡(失败)
最初尝试使用外置 USB 无线网卡,RTL8188CUS芯片,通过usbipd-win工具将其直通给 WSL2。
- Windows端操作:
# 安装usbipd winget install --interactive --exact "dorssel.usbipd-win" # 附加USB设备到WSL usbipd list usbipd bind --busid <BUSID> usbipd attach --wsl --busid <BUSID> - Kali端问题:虽然设备成功
Attached,lsusb也能看到RTL8188CUS网卡芯片,但ip addr就是不显示wlan0接口。尝试安装firmware-realtek固件包后也无效。这表明 Kali 自带的驱动与该芯片兼容性不佳,需要手动编译社区驱动,过程相当繁琐,后面有空单开一篇文章记录。
方案二:使用桥接模式
这是针对有线网络的最佳方案。
我的电脑是Windows 10 家庭版,默认没有 Hyper-V 管理器。
- 解锁Hyper-V:找了一个
.bat脚本在家庭版中手动安装 Hyper-V 功能。pushd "%~dp0" dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" del hyper-v.txt Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL将以上代码保存为
.bat文件并以管理员身份运行,然后重启电脑。 - 创建外部虚拟交换机:重启后,在“Hyper-V管理器”中,创建一个外部虚拟交换机,并绑定到电脑正在使用的物理网卡( WLAN 或以太网)。
- 报错:点击“确定”创建时,报错“绑定失败:灾难性故障 (0x8000FFFF)”。 解决:这是因为物理网卡的“Internet连接共享(ICS)”功能与Hyper-V的虚拟交换机功能冲突。在物理网卡的“属性”->“共享”中,取消勾选“允许其他网络用户通过此计算机的Internet连接来连接”。禁用ICS后,虚拟交换机成功创建。
- 配置WSL2:在
C:\Users\用户名\.wslconfig文件中添加以下内容:[wsl2] networkingMode=bridged vmSwitch=刚才创建的交换机名称 - 重启WSL并验证:
wsl --shutdown重新打开Kali,运行
ip addr,终于看到了期待已久的局域网IP!┌──(root㉿LAPTOP-6OMG0TIE)-[~] └─# ip addr ... 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... inet 192.168.3.118/24 ...
ARP 欺骗
网络问题解决后,后续就非常简单了。
- 开启IP转发:
sudo sysctl -w net.ipv4.ip_forward=1 - 使用Ettercap:
sudo ettercap -G在Ettercap图形界面中,选择
eth0接口,扫描主机,将网关设为 Target 2,将目标设备IP设为 Target 1,然后开始 ARP Poisoning,即可在 Wireshark 中捕获到流经 Kali 的流量。