前言 当前是我全新状态下的Windows11,在此之前我已经受够了之前那个破预览版体验计划了,我先吐槽一下这个b预览版了,某次在弹出系统更新的提示下误打误撞加入了Windows预览版体验计划
,优点是我可以更早的体验更新的功能,当时推出的多标签页资源管理器,改了UI的任务管理器,我觉得资源管理器是挺好的可以提高效率,但随之而来的就是每隔一段时间我的电脑就会有各种各样的小毛病,包括绿屏,是的你没有听错,在Windows11下的蓝屏就是绿屏,亦或者是预览版特有的,每每更新提示都会让我觉得心烦,所以从22年国庆过后我就停止在Preview 23650
版本,就是这个版本有几个bug会导致无法正常安装WSL
,而且这个玩意他竟然还有效期的,在今年的11月份左右就过期了,过期了就导致我Virtual Box
的靶机开不起来,方法也是有的,只需将时间调回未过期的时间前即可,太鸡儿麻烦了
我是已经受不了之前哪个破环境了,直接重新安装了Windows 11 24H2
版本,还我一个清爽的系统,后面我又花了两天的时间配置环境,应用等
遂记录一下安装Windows For Linux 子系统
,在此之前我的打靶流程是利用VMware Workstation
和Orcle Virtual Box
来联合搭配使用的
使用了WSL
即可只用开Virtual Box
靶机即可,方便了自己,提高了效率,但网络部分是重中之重,网络配置不好第一步都没法办法开展
在这里踩了很多的坑,请不要使用Mirror
模式,虽然可以使你的宿主机与虚拟机共享同一个IP地址,也可以共享代理,但你ping
靶机(仅主机模式)的时候会导致TTL超时,我猜测可能时环回地址导致一直循环转发数据包
也请不要使用NAT
模式,在此模式下可以ping通靶机,但当通过靶机反弹Shell
的时候会弹不上,因为套了一层NAT
,当你没有做NAT
穿透时,是没办法从外部访问内部NAT
网络的
可以采用Bridged
模式,直接桥接物理网卡,最省心省力了,但还是有个问题,我目前的网络环境是在校园网下,校园大内网,学校的上网认证系统只允许了每个用户只能进行三台终端认证登入,虽然可以通过DHCP
服务器获取IP,但你在未认证之前是没有办法ping通任何一个在线的IP(包括网关),而且每次认证后会随机给你分配IP地址,地址不固定,你靶机也配置桥接的话也可以,但校园网的内网掩码为18,这么说有64个子网,你说扫靶机要扫到猴年马月啊,当然了这是基于我目前的网络环境
所以我采用的是WSL
桥接Bridged
VMware Wokrstation
的VMnet8
网卡,总所周知VM8
网卡是在VM
下的一个NAT
网卡,然后靶机桥接WSL
桥接VM8
生成的网卡vEthernet(LAN)
,有点套娃的感觉了🤣
在此环境下完美解决了前两者的问题,还可以连接互联网
先决条件 这里你完全可以参照巨硬官方给的文档来操作,非常详细
先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux ,可以在控制面板-程序-启用或关闭Widows功能中找到,顺便勾选“Hyper-V”功能
安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能 才能使用此功能。
或者以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell” >单击右键 >“以管理员身份运行”),然后输入以下命令:
1 2 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart <--WSL 开启 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart <-- 虚拟化开启
重新启动 计算机,以完成 WSL 安装并更新到 WSL 2。
安装WSL 现在,可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符,方法是右键单击并选择“以管理员身份运行”,输入 wsl –install 命令,然后重启计算机。
此命令将启用运行 WSL 并安装 Linux 的 Ubuntu 发行版所需的功能。 (可以更改此默认发行版 )。
我还需要安装 Kali 所以再执行一下
1 wsl --install kali-linux
其实上面的步骤你也可以不用通过命令行方式安装
直接在Microsoft Store
搜索Linux发行版直接下载安装即可
我直接跳过设置Linux用户信息等阶段了,直接从最小化的Kali开始
WSL配置桥接网络 截至目前我的宿主机环境
1 2 3 4 5 6 7 8 9 10 11 12 ⚡maple ❯❯ wsl -v WSL 版本: 2.3 .26.0 内核版本: 5.15 .167.4 -1 WSLg 版本: 1.0 .65 MSRDC 版本: 1.2 .5620 Direct3D 版本: 1.611 .1 -81528511 DXCore 版本: 10.0 .26100.1 -240331-1435 .ge-release Windows 版本: 10.0 .26100.2605 ⚡maple ❯❯ wsl -l -v NAME STATE VERSION * kali-linux Stopped 2 Ubuntu-20 .04 Stopped 2
你需要创建一个外部虚拟交换机,命名为“LAN”备用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 if ((Get-VMSwitch -SwitchType "External" ).Count -eq 0 ) { New-VMSwitch -Name "LAN" ` -AllowManagementOS $true ` -EnableIov $false ` -EnableEmbeddedTeaming $false ` -EnablePacketDirect $true ` -NetAdapterInterfaceDescription (Get-NetAdapter )[0 ].InterfaceDescription } Get-NetIPInterface | Where-Object {$_ .InterfaceAlias -match "^vEthernet\s.*(Default Switch|WSL|WSLCore|LAN).*$ " } | Set-NetIPInterface -Forwarding Enabled -ErrorAction SilentlyContinue
这部分我是参考其他博主的设置,但是我只是做了创建了虚拟网卡这一步,路由转发这一步我并未操作,也可以正常运行
在(Get-NetAdapter)[0]
你可以替换为其他的网卡,你可以通过命令查询网卡,以供你选择序号
1 2 3 4 5 6 7 8 9 10 11 12 13 ⚡maple ❯❯ Get-NetAdapter Name InterfaceDescription ifIndex Status MacAddress LinkSpeed ---- -------------------- ------- ------ ---------- --------- vEthernet (Default Swi... Hyper-V Virtual Ethernet Adapter 5 Up 00 -15-5D-A5-0D-C8 10 Gbps vEthernet (WSL (Hyper-... Hyper-V Virtual Ethernet Adapter vEthernet (LAN) Hyper-V Virtual Ethernet Adapter 以太网 Realtek Gaming 2.5 GbE Family Controller 21 Up 90 -6F-18-03-9D-14 1 Gbps 蓝牙网络连接 Bluetooth Device (Personal Area Netw... 17 Not Present 08 -9D-F4-02-8C-48 0 bps 以太网 2 VirtualBox Host-Only Ethernet Adapter 16 Up 0 A-00-27-00-00-10 1 Gbps VMware Network Adapte...1 VMware Virtual Ethernet Adapter for ... 27 Up 00 -50-56-C0-00-01 100 Mbps WLAN Intel(R ) Wi-Fi 6 E AX211 160 MHz 11 Disabled 08 -9D-F4-02-8C-44 0 bps VMware Network Adapte...8 VMware Virtual Ethernet Adapter for ... 47 Up 00 -50-56-C0-00-08 100 Mbps
由于我的VM8网卡在最后一个,所以我直接填-1,如果有报错那你就将报错行的ture改为flase即可
由于我的网卡不支持数据包的透传特性,这里我将EnablePacketDirect
改为flase就可以创建了
这里你也可以使用GUI界面来创建
代理配置 不过在NAT环境下是无法代理宿主机的网络的,我尝试过设置环境变量来进行代理貌似是不行,ping不通宿主机上VM8的IP地址一般来说是192.168.xx.1
所以我利用了Clash中的TUN功能,所以流量经过Clash这个虚拟网卡可以成功实现代理
在开启TUN模式之前,您需要在Serveice Mode中安装一下,重启软件后等待地球变绿即可打开TUN模式
在WSL中的流量都是由C:\Windows\SysWOW64\vmnat.exe
这个VM8虚拟网卡发出的,如果ping不通google.com之类的地址,谨防DNS劫持
可以使用1.1.1.1
或8.8.8.8
不过有个缺点就是需要将VMware NAT Service
这个服务开机自启
Config文件配置 配置%USERPROFILE%/.wslconfig
文件,位于宿主机
以下是我的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [wsl2] <-- 主要 WSL 设置 processors=4 <-- 分配给 WSL 2 VM 的逻辑处理器数量 memory=8GB <--分配给 WSL 2 VM 的内存量 swap=4GB <-- 向 WSL 2 VM 添加的交换空间量 #localhostForwarding=true <-- 指定绑定到 WSL 2 VM 中的通配符或 localhost 的端口是否应可通过 localhost:port 从主机连接。 #dnsTunneling = true <-- 更改将 DNS 请求从 WSL 代理到 Windows 的方式 firewall = false <-- Windows 防火墙规则以及特定于 Hyper-V 流量的规则可以筛选 WSL 网络流量。 vmSwitch=LAN <-- 桥接时的虚拟交换机名称 autoProxy=true <-- 强制 WSL 使用 Windows 的 HTTP 代理信息 dnsProxy=false <-- 仅适用于 networkingMode = NAT,通知 WSL 将 Linux 中的 DNS 服务器配置为主机上的 NAT networkingMode=bridged <-- 默认或无法识别的字符串会生成 NAT 网络 [experimental] <-- 实验性设置 autoMemoryReclaim=disabled <-- 检测空闲 CPU 使用率后,自动释放缓存的内存。 sparseVhd = true <-- 如果设置为 true,则任何新创建的 VHD 将自动设置为稀疏。 #hostAddressLoopback=true <-- 仅当 wsl2.networkingMode 设置为 mirrored 时才适用如果设置为 True,将会允许容器通过分配给主机的 IP 地址连接到主机,或允许主机通过此方式连接到容器。 始终可以使用 127.0.0.1 环回地址,此选项也允许使用所有额外分配的本地 IP 地址。 仅支持分配给主机的 IPv4 地址。
关键的字段就只有两个networkingMode
和vmSwitch
,设为你自己命名的虚拟交换机
微软官方原有配置文档可以参考,特别详细
配置/etc/wsl.conf
文件,位于虚拟机
以下是我的个人配置,我选择不添加$PATH变量,我只需要一个explorer.exe
直接指定路径即可,不需要windows的环境变量了
不然污染了WSL的环境
1 2 3 4 5 6 7 8 9 ❯ sudo vim /etc/wsl.conf [boot] systemd=true <-- 启用 systemd [network] generateResolvConf = false <-- 将 WSL 设置为生成 /etc/resolv.conf generateHosts = true <-- 将 WSL 设置为生成 /etc/hosts [interop] enabled=true <-- 设置此键可确定 WSL 是否支持启动 Windows 进程。 appendWindowsPath=false <-- 设置此键可确定 WSL 是否会将 Windows 路径元素添加到 $PATH 环境变量。
其他配置均可在官方文档中得知
配置更改的 8 秒规则 必须等到运行你的 Linux 发行版的子系统完全停止运行并重启,配置设置更新才会显示。
Kali配置 配置静态IP、DNS解析、apt源等
这里我就配置了中科大的源,我个人认为中科大的源速度比较快,你可以选择其他的源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ❯ sudo vim /etc/network/interfaces <-- 配置网络 auto lo iface lo inet loopback auto eth0 allow-hotplug eth0 iface eth0 inet static address 192.168.xx.xx netmask 255.255.255.0 gateway 192.168.xx.2 ❯ sudo vim /etc/resolv.conf domain localdomain search localdomain nameserver 192.168.xx.2 ❯ sudo vim /etc/apt/sources.list <-- 配置apt源 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib ❯ sudo apt clean all && sudo apt update <-- apt更新源 ❯ sudo apt upgrade <-- 更新最新软件(可选)
目前WSL中的Kali是最小化版本的,很多组件都没有比如burpsuite,nmap之类的
你可以选择安装以下包,最常用的就是kali-linux-default
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ❯sudo apt install kali-linux-top10 <-- 装前 10 名最受欢迎的 Kali 工具 ❯sudo apt install kali-linux-default <-- 安装标准 Kali 安装附带的默认工具集 ❯sudo apt install kali-linux-all <-- 安装 Kali Linux 中可用的所有工具,这是最全面的软件包 ❯sudo apt install kali-linux-large <-- 安装大量工具,但不如kali-linux-all ❯sudo apt install kali-linux-everything <-- 安装 Kali Linux 提供的每个软件包。 它类似但可能包含更多的附加实用程序 ❯sudo apt install kali-linux-web <-- 安装专门用于 Web 应用测试的工具 ❯sudo apt install kali-linux-forensic <-- 安装用于取证分析的工具 ❯sudo apt install kali-linux-passwords <-- 安装与密码破解相关的工具 ❯sudo apt install kali-linux-rfid <-- 安装与 RFID 分析和攻击相关的工具 ❯sudo apt install kali-linux-gpu <-- 安装针对基于 GPU 的攻击进行优化的工具 ❯sudo apt install kali-linux-sdr <-- 装用于软件定义无线电(SDR)分析的工具 ❯sudo apt install kali-linux-voip <-- 安装用于语音传输(IP 电话)分析的工具 ❯sudo apt install kali-linux-wireless <-- 安装用于无线网络分析的工具 ❯sudo apt install kali-linux-nethunter <-- 安装针对 Kali Nethunter(用于移动渗透测试)的特定工具 ❯sudo apt install kali-linux-exploit <-- 安装专注于利用开发和漏洞利用的工具
如果你需要GUI图形界面可以安装kex
,在此之前你需要设置普通用户并设置密码
通过mstsc.exe
远程连接
1 2 3 4 5 6 7 ❯ sudo apt install kali-win-kex ❯ kex --esm --ip --sound Starting Win-KeX server (ESM) Win-KeX server (ESM) is stopped Starting Win-KeX client (ESM) /usr/bin/kex: line 389: cmdkey.exe: command not found Please enter Win-KeX server (ESM) password for user 你的用户名密码:
如果报错可以尝试修改/usr/bin/kex
文件第409行中的路径
1 2 ❯ sudo vim /usr/bin/kex /mnt/c/Windows/System32/mstsc.exe .win-kex.rdp /v:${HOST} :3390 &
相关参数贴在下面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 模式: [none] : Window Mode (default) <-- 默认是窗口模式 --esm : Enhanced Session Mode - 在使用 Windows 本地 RDP 的专用窗口中启动 Win-KeX 桌面 --sl : 无缝模式 - 无缝集成 Win-KeX 到 Windows 桌面 --win : 在窗口模式下启动 Win-KeX 桌面,放在一个独立窗口中 ----------------------------------------- 命令: --start : 启动 Win-KeX 服务器 --start-client : 启动 Win-KeX 客户端 --wtstart:在 Windows Terminal 会话中启动 Win-KeX 服务器并启动 Win-KeX 客户端 --stop : 停止 Win-KeX 服务器 --status : 显示 Win-KeX 服务器状态 --kill : 停止 Win-KeX 服务器并结束所有相关进程 --passwd : 设置 Win-KeX 服务器密码 --start-sound : 启动 Windows 音频服务器 停止声音服务器 --wslg-restore : 恢复 WSLg unix 套接字 --wslg-remove : 移除 WSLg unix 套接字 --wslg-status : 显示 WSLg unix socket 的状态 --version: 显示 Win-KeX 版本 ------------------------------------------ (可选)参数: --ip -i : 使用容器 IP 地址,而不是 "localhost" --multiscreen -m:针对多屏进行优化 --sound -s : 声音支持 --nowgl -n : 禁用 Windows OpenGL --norc -r:禁用 Win-KeX 客户端重新连接 - 一次就足够了! --wait -w : 在 SL 模式下等待更长时间启动桌面 --verbose : 详细输出 Examples: kex -s : Start Win-KeX server in window mode and launch Win-KeX client with sound support kex --sl -s : Start Win-KeX in seamless mode and launch Win-KeX client with sound support kex --esm -i -s : Start Win-KeX in Enhanced Session Mode with ARM workaround and launch Win-KeX client with sound support sudo kex : Start Win-KeX server as root in window mode and launch Win-KeX client
基本到这就结束了
后续可以安装zsh
可以参考安装Ubuntu
那篇文章
故障排除 WSLg无法打开GUI故障 因为安装WSL2的时候会顺带安装WSLg(Windows Subsystem for Linux GUI )该项目的目的是支持在 Windows 上运行 Linux GUI 应用程序(X11 和 Wayland),并提供完全集成的桌面体验
但是有时候会遇到无法打开GUI界面的情况,例如我打开firefox,会显示Error找不到display
1 2 3 ❯ firefox [863] Wayland Proxy [0x7f402464dce0] Error: CheckWaylandDisplay(): Failed to connect to Wayland display '/run/user/1000//wayland-0' error: No such file or directory Error: we don't have any display, WAYLAND_DISPLAY=' wayland-0' DISPLAY=' :0'
这时候可以看一下官方Wiki贴在文末了
你可以echo一下display这个变量,但是/tmp/.X11-unix这个目录并没有链接WSLg
1 2 3 4 5 6 ❯ echo $DISPLAY :0 ❯ ls -al /tmp/.X11-unix/ total 0 drwxrwxrwt 2 root root 40 Jan 7 21:00 . drwxrwxrwt 9 root root 180 Jan 7 21:00 ..
你可以在mnt目录下找到X0
1 2 3 4 5 ❯ ls -al /mnt/wslg/.X11-unix/ total 0 drwxrwxrwx 2 root root 60 Jan 7 21:00 . drwxrwxrwt 7 root root 300 Jan 7 21:00 .. srwxrwxrwx 1 Pepster Pepster 0 Jan 7 21:00 X0
可以先取消挂载然后删除文件夹再进行手工创建链接
1 2 3 ❯ sudo umount /tmp/.X11-unix ❯ sudo rm -rf /tmp/.X11-unix ❯ sudo ln -s /mnt/wslg/.X11-unix /tmp/.X11-unix
但是每次WSL开机都要这么操作太麻烦了
你可以将命令写入.bashrc
或者.zshrc
1 sudo rm -r /tmp/.X11-unix&&ln -s /mnt/wslg/.X11-unix /tmp/.X11-unix
但我更推荐下面的做法
你可以将命令写入systemd
配置自动化运行文件
写入/etc/tmpfiles.d/wslg.conf
1 2 3 4 5 6 7 8 9 10 11 L+ /tmp/.X11-unix - - - - /mnt/wslg/.X11-unix
这样你就可以自动创建Socket文件链接了,但是基于这种情况下WSLg的界面是有点难看的,我也不知道为什么有这个又粗又丑的大白框
这是以前的未出故障的GUI,很显然是原生kali的窗口
这样你也可以直接在windows的开始菜单中启动
说白了就是使用wslg后台运行kali-linux切到家目录运行firefox,道理是一样的
1 "C:\Program Files\WSL\wslg.exe" -d kali-linux --cd "~" -- /usr/lib/firefox-esr/firefox-esr
Win-Kex故障 当你以普通用户的身份打开kex会发现无法正常运行
设置密码后会报错,打开password文件失败
我们可以在/usr/bin/kex
的bash脚本中找到相关代码
以win模式启动kex,会检查家目录下的.config/tigervnc/passwd
文件是否存在
那么我们就手动cp就行了,将.vnc
下生成的passwd
复制到tigervnc
目录下
1 2 3 4 5 6 7 8 9 ❯ cd .vnc ❯ ls -al total 104 drwxr-xr-x 2 Pepster Pepster 4096 Jan 7 21:40 . drwx------ 49 Pepster Pepster 4096 Jan 7 21:44 .. -rw------- 1 Pepster Pepster 8 Jan 7 21:39 passwd -rw-r--r-- 1 Pepster Pepster 84149 Jan 7 21:40 primary.:1.log -rw-r--r-- 1 Pepster Pepster 5 Jan 7 21:40 primary.:1.pid ❯ cp passwd ../.config/tigervnc
即可不输入密码,直接以普通用户打开kex win模式
参考文章
WSLg/WSL2 通过网桥实现局域网同网域(网段)互通 - STARGAZER
安装 WSL | Microsoft Learn
WSL 中的高级设置配置 | Microsoft Learn
dantmnf/WSLAttachSwitch at latest
WSL2改为桥接 | Zzz记忆
最详细的WSL安装kali教程 + 图形化界面(踩完了所有的坑)_哔哩哔哩_bilibili
桥接网络模式的 WSL2 的安装与配置 - 哔哩哔哩
Diagnosing “cannot open display” type issues with WSLg · microsoft/wslg Wiki
无法使用 2.0.12 启动 GUI 应用程序 ·问题 #1156 ·微软/WSLG
Init /tmp/.X11-unix is overwritten by mounts · Issue #43 · microsoft/wslg
/tmp/ 中。X11-unix 以只读方式挂载 ·问题 #9303 ·微软/WSL