Windows隐藏命令行工具:红蓝队必备的实用技巧

本文深入探讨了Windows内置的多个实用命令行工具,包括certutil、clip、cmdkey等,展示了它们在渗透测试和防御中的巧妙应用,帮助安全研究人员更好地利用系统自带工具进行工作。

Rainy Day Windows Command Research Results

Sally Vandeven //

我们都听过人们谈论Linux比Windows更酷、更容易使用等等。嗯,他们不一定错……但我们发现微软有一些非常有趣的宝藏就藏在眼前。

说真的,微软似乎在努力添加一些类似Linux的功能。事实上,他们在2016年就在Windows 10中引入了Linux作为子系统。你可以使用PowerShell启用该功能,然后访问Microsoft Store选择你喜欢的发行版进行安装。但离题了……这篇博客文章不是关于Linux的,而是关于一些内置在Windows中的巧妙实用程序……其中一些实际上非常类似Linux,一些是Windows独有的,但对渗透测试人员仍然很有趣。我们将在下面展示一些有趣的发现。

请注意,许多工具的帮助文档可以在Windows命令参考文档中找到。

Certutil

内置的certutil命令可以用作快速的base64编码器/解码器。它本意是编码和解码SSL证书,但也可以用于其他用途。例如,假设你需要将一个可执行文件放到目标系统上,但网络控制检测/阻止了EXE文件的传输。那么,在这种情况下,你可以在发送之前对其进行base64编码,然后在目标系统上使用certutil进行base64解码。很好。

以下是一个使用文本字符串的示例,但它对二进制可执行文件同样有效。

默认情况下,certutil解码和编码base64数据。但另一个有趣的事实是,它也可以解码十六进制:

虽然帮助文本没有显示十六进制编码的选项,但我们尝试了,它实际上确实有效……看看吧。

如果你正在寻找二进制文件中的字符串,这可能会非常方便。下面是一个显示notepad.exe的十六进制转储的示例。

Clip

微软开发了“Clippy”角色来协助用户使用Office产品。他自1997年以来断断续续地出现在工资单上,并且(可以理解)目前似乎在休假。

与“Clippy”完全无关的是clip实用程序。 这个实用程序将输出重定向到剪贴板。例如,如果你想捕获运行中的服务并将列表插入剪贴板: 你可以将命令的输出定向到剪贴板,以便轻松复制/粘贴,或者将整个文件的内容塞进剪贴板。

1
2
3
net1 start | clip
PS C:\> net1 user /domain | clip
clip < myTextFile.txt

在所有三种情况下,你已经将某些内容加载到剪贴板中,你可以通过右键单击“粘贴”或Control-V来检索并粘贴到需要的地方。 我也经常与WSL(Windows Subsystem for Linux)一起使用clip.exe,像这样:

1
$ cat file.csv | cut -f2 -d"," | sort | uniq | clip.exe

这是一种非常方便的方式来切片和切分数据以用于报告。 默认情况下,多个项目的剪贴板保存是关闭的,但如果你打开它……

……你可以使用Windows + V访问剪贴板中的所有“剪辑”。

要粘贴剪贴板中的其中一个项目,只需单击你想要的项。 你甚至可以固定一个剪辑,即使你清空剪贴板,它也会被保存(直到重启)。这是一个存储密码的好地方。

Cmdkey

Cmdkey是Windows凭据管理器的命令版本。等效的GUI版本可以通过“control keymgr.dll”启动,或从控制面板选择“凭据管理器”。使用命令显示任何保存的凭据

1
cmdkey /list

但如果存在特权存储凭据呢?攻击者如何使用它们? 根据这篇博客文章,这很容易,尽管当我设置Cobalt Strike并尝试时,它没有工作,但你的情况可能不同。

Curl

Curl是一个命令行浏览器,类似于wget,从Web服务器拉取内容,默认在大多数Linux系统上找到,并且最近被添加到Windows中! 对于渗透测试人员,也许代理配置阻止你使用浏览器下载文件。如果是这样,尝试curl,也许这样的下载不会被注意到。 以下是一个你可以用curl做的非常有用的示例:

Curl还有一个深入的帮助页面。使用“curl –help”查看所有选项。

Net1

“net1”几乎与“net”相同,但大约20年前,当我们接近Y2K时,“net”命令有一个问题。“net1”命令是该问题的补救措施,并且一直存在至今。为什么现在这很重要?在大多数情况下可能不重要,但如果你是一名渗透测试人员,你可能会发现“net”命令被蓝队注意到,而“net1”命令则不会。 示例命令:

1
2
3
net1 localgroup administrators - 枚举本地管理员账户
net1 start - 查看运行中的服务列表
net1 start | find /v “” /c - 显示运行中的服务计数

Tar

Tar是一个古老的Unix实用程序,最初创建用于从一个或多个文件制作磁带存档。这是作为备份解决方案开发的。今天,tar的使用类似于zip——从多个文件制作单个存档,以便备份、存档、传输等。2018年4月,tar被包含在Windows 10构建中。 使用标准的Windows帮助“/?”,Windows的tar似乎选项很少。

然而,当请求“–help”选项时,你可以看到实际上有更多的功能,包括像其Linux表亲一样的压缩选项。

我们通过使用tar在Windows系统上归档和压缩几个文件来测试了这一点。

然后我们将文件移动到Debian Linux机器上,发现它们实际上是有效的tarball,一个没有压缩,一个有压缩。

Where

“Where”类似于Linux的“locate”命令。它为你查找文件,非常方便。 示例:

1
where /R c:\ /F *.conf  *.xml

这将递归搜索C盘寻找conf和xml文件。如果找到,“/F”表示显示完整路径。

Whoami

Whoami命令显示关于当前账户的信息。不带参数使用时,它显示账户名称。

它可以分别使用“/priv”和“/groups”选项显示与当前账户关联的权限或组成员身份。 它还可以显示账户的FQDN和UPN:

Wslconfig

这个内置命令显示当前的Windows Subsystem for Linux安装。它还允许你执行与Linux发行版相关的其他管理任务,前提是你有管理员级别的访问权限。

知道你正在测试或已转向的系统上是否启用了WSL绝对是有趣的。如果你看到此消息,那么系统上未启用WSL:

另一方面,这表示系统上已安装了Kali Linux:

如果未启用并且你有管理员权限,务必启用它! 所以,对于红队人员,将这些添加到你的“靠山吃山”工具库中。而蓝队人员可能需要注意这些工具的使用。普通用户不太可能使用curl、certutil和tar,因此监控它们的使用应该生成可操作的警报而不是噪音。 目前就这些了……

……但我们会继续挖掘,如果我们找到更多有趣的Windows命令,我们会编写续集。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计