声明:该公众号大部分文章来自作者日常学习笔记,也有部分文章是经过作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。 |
---|
0x00 前言
这篇记录的是我在执行“获取所有连接过的Wi-Fi密码”命令时发现的一个问题,搜了半天没找到解决方法,虽然有其他可替代工具,但还是想自己研究下。
强迫症犯了,不解决难受!!!
0x01 代码理解
获取所有连接过的Wi-Fi密码命令如下,其作用是列举并显示所有Wi-Fi配置文件的名称和密码,下图为该命令的详细解释(来自AI解答),说的已经很清楚了。
代码语言:javascript复制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只找到配置文件,但是并没有获取到密码,提示:系统上没有此类无线接口。
代码语言:javascript复制“Administrator”的 iPhone
就这个Wi-Fi不行,猜测大概率是因为这个Wi-Fi的SSID名称中存在空格或大写双引号的问题,在Windows命令行下只要有空格都得放“双引号”里才行。 注:这里说的命令行有空格主要指的是执行命令中的路径和要提取的某些字符中存在空格等情况,而不是所有带空格命令,如:net user、qery user等。
不加双引号失败:
代码语言:javascript复制netsh wlan show profiles “Administrator”的 iPhone
加了双引号成功:
代码语言:javascript复制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
引起来即可。
最终测试的命令如下:
代码语言:javascript复制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
代码语言:javascript复制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就不能直接用网上这条命令获取密码,这时可以用我们修改好的这条命令来获取密码,也可以用其他工具。
代码语言:javascript复制https://github.com/r3nhat/SharpWifiGrabber