在 WSL 中配置 Kali 并进行 ARP 攻击

C. Qiu 于 2022-04-06 发布

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

安装过程中会遇到一些配置选项,如kismetwireshark-commonsslh等,对于个人实验环境,基本都可以选择推荐的、更方便的选项(如为wiresharkkismet选择<Yes>,允许非root用户使用,并将当前用户加入对应用户组;为sslh选择standalone模式)。

让 Kali 接入局域网

默认情况下,WSL2 使用 NAT 模式,其 IP 地址(如172.x.x.x)与物理局域网是隔离的,无法直接扫描局域网。我们需要让 Kali 虚拟机桥接到物理网络。

方案一:使用USB无线网卡(失败)

最初尝试使用外置 USB 无线网卡,RTL8188CUS芯片,通过usbipd-win工具将其直通给 WSL2。

  1. Windows端操作
    # 安装usbipd
    winget install --interactive --exact "dorssel.usbipd-win"
    # 附加USB设备到WSL
    usbipd list
    usbipd bind --busid <BUSID>
    usbipd attach --wsl --busid <BUSID>
    
  2. Kali端问题:虽然设备成功Attachedlsusb也能看到RTL8188CUS网卡芯片,但ip addr就是不显示wlan0接口。尝试安装firmware-realtek固件包后也无效。这表明 Kali 自带的驱动与该芯片兼容性不佳,需要手动编译社区驱动,过程相当繁琐,后面有空单开一篇文章记录。

方案二:使用桥接模式

这是针对有线网络的最佳方案。

我的电脑是Windows 10 家庭版,默认没有 Hyper-V 管理器。

  1. 解锁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文件并以管理员身份运行,然后重启电脑。

  2. 创建外部虚拟交换机:重启后,在“Hyper-V管理器”中,创建一个外部虚拟交换机,并绑定到电脑正在使用的物理网卡( WLAN 或以太网)。
  3. 报错:点击“确定”创建时,报错“绑定失败:灾难性故障 (0x8000FFFF)”。 解决:这是因为物理网卡的“Internet连接共享(ICS)”功能与Hyper-V的虚拟交换机功能冲突。在物理网卡的“属性”->“共享”中,取消勾选“允许其他网络用户通过此计算机的Internet连接来连接”。禁用ICS后,虚拟交换机成功创建。
  4. 配置WSL2:在C:\Users\用户名\.wslconfig文件中添加以下内容:
    [wsl2]
    networkingMode=bridged
    vmSwitch=刚才创建的交换机名称
    
  5. 重启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 欺骗

网络问题解决后,后续就非常简单了。

  1. 开启IP转发
    sudo sysctl -w net.ipv4.ip_forward=1
    
  2. 使用Ettercap
    sudo ettercap -G
    

    在Ettercap图形界面中,选择eth0接口,扫描主机,将网关设为 Target 2,将目标设备IP设为 Target 1,然后开始 ARP Poisoning,即可在 Wireshark 中捕获到流经 Kali 的流量。