本帖最后由 ivi 于 2023-10-13 19:32 编辑
3had0w 潇湘信安 2023-10-12 08:30 发表于湖南
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只找到配置文件,但是并没有获取到密码,提示:系统上没有此类无线接口。
就这个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
复制代码
|