【THM】Windows Command Line(Windows命令行)-学习
本文相关的TryHackMe实验房间链接:https://tryhackme.com/r/room/windowscommandline
本文相关内容:学习基本的 Windows 命令。

介绍
在掌握命令行界面 (CLI-command-line interface) 之前,每个人都更加喜欢使用图形用户界面 (GUI-graphical user interface)。其中的原因有很多,一个很重要的原因就是 GUI 界面通常会很直观。如果有人为你提供了你不熟悉的GUI界面,你仍然可以快速浏览并发现重要的部分。接下来,我们会将此与使用CLI (即命令提示符界面)进行比较。

CLI界面通常有一个学习曲线;但是,当你掌握命令行时,你会发现它更快、更高效。思考一个简单的例子:你需要点击多少次才能使用图形界面找到你的IP地址?而如果选择使用命令行界面来解决这个问题,你甚至不需要将手从键盘上移开。假设你想重新检查你的 IP 地址,你只需要发出相同的命令,而不是将鼠标指针移动到屏幕的每个角落。
除了速度和效率之外,使用CLI还有许多其他优点,我们将在下面提及一些:
- 更低的资源使用量:CLI 比图形密集型的 GUI 需要更少的系统资源。换句话说,你可以在较旧的硬件或内存有限的系统上运行你的CLI系统。如果你正在使用云计算,你的系统将需要更少的资源,这反过来又会降低你的费用。
- 自动化:虽然你也可以自动化执行GUI任务,但在你需要使用重复的命令时,选择创建批处理文件或脚本来实现自动化要更加容易得多。
- 远程管理:CLI 让使用SSH管理 远程系统(例如服务器、路由器或IoT设备)变得非常方便,这种方法适用于网络速度慢和资源有限的系统。
学习目标
本文的主要目的是教会你如何使用 MS Windows 命令提示符cmd.exe ,它是 Windows 环境中的默认命令行解释器,我们将学习如何使用命令行来:
- 显示系统基本信息;
- 检查网络配置并排除故障;
- 管理文件和文件夹;
- 检查正在运行的进程。
前置学习基础
在开始学习本文内容之前,你应该已经完成了TryHackMe提供的 Windows 和AD基础知识模块。
部署实验机器
在与本文相关的TryHackMe实验房间页面中,点击如下所示的Start Machine-启动机器按钮。

点击与本文相关的TryHackMe实验房间页面顶部的Start AttackBox按钮启动AttackBox,AttackBox机器将以分屏视图启动,如果相关的分屏页面不可见,请点击实验房间页面顶部的蓝色“Show Split View-显示拆分视图”按钮。

你可以使用 AttackBox 上的SSH客户端通过以下凭据连接到MACHINE_IP (此ip代表的是目标机器):
- Username:
user - Password:
Tryhackme123!
从AttackBox终端开始建立SSH连接
如果这是你第一次发起从 AttackBox 到目标系统的SSH连接,请参考如下所示的操作步骤:
- 单击标有记号 1 的终端图标启动 AttackBox 的终端。
- 要连接到目标VM ,请发出命令
ssh user@MACHINE_IP,user是本例中的用户名。 - 由于这是你第一次连接到目标虚拟机,因此系统会要求你信任此连接。回答“是”即可,如 3 所示。
- 输入已知的密码
Tryhackme123!,请注意,此密码在你输入时不会明文显现。

答题
Windows环境下默认的命令行解释器是什么?
cmd.exe

基本系统信息

在发出命令之前,我们应该注意我们只能在 Windows 路径中发出命令。你可以发出命令set来从命令行检查你的路径,此命令的终端输出显示了 MS Windows 将执行命令的路径,正如下面以Path=开头的行所示。
C:\>set
ALLUSERSPROFILE=C:\ProgramData
[...]
LOGNAME=strategos
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps;C:\Users\strategos\AppData\Local\Microsoft\WindowsApps;
[...]
让我们使用ver命令来确定操作系统 ( OS ) 版本。下面的终端显示了一个示例输出。
C:\>ver
Microsoft Windows [Version 10.0.17763.1821]
好了,我们已经完成了足够的热身。接下来让我们发现有关该系统的更深入的信息。我们可以运行systeminfo命令来列出关于当前系统的各种信息,例如操作系统信息、系统详细信息、处理器和内存等。下面显示了执行该命令所输出的内容片段。
C:\>systeminfo
Host Name: WIN-SRV-2019
OS Name: Microsoft Windows Server 2019 Datacenter
OS Version: 10.0.17763 N/A Build 17763
OS Manufacturer: Microsoft Corporation
OS Configuration: Standalone Server
OS Build Type: Multiprocessor Free
[...]
在继续学习之前,最好先了解下面这些技巧。
首先,如果输出结果太长,你可以通过管道符号将其传递给more命令,然后,你可以通过按空格键按钮一页一页地查看输出结果的具体内容。为了演示这一点,你可以尝试单独运行driverquery命令并将其输出结果与运行driverquery | more命令的结果进行比较。你会发现,在 driverquery | more命令的执行结果中 ,你可以逐页显示输出内容,并且可以使用CTRL + C来退出浏览。
还有两个可能常用的命令:
help- 提供特定命令的帮助信息;cls- 清除命令提示符屏幕。
答题
先部署好实验环境并使用Attackbox通过ssh连接到实验虚拟机(目标机器):
ssh user@MACHINE_IP
#10.10.145.163
#Tryhackme123!

实验Windows虚拟机的操作系统版本是什么?
tips:在终端中输入ver命令。

10.0.20348.2655
实验Windows VM 的主机名(hostname )是什么?
tips:在终端中输入systeminfo命令。

WINSRV2022-CORE

网络故障排除
我们大多数人都习惯从GUI界面查找 MS Windows 网络配置,但是命令行界面也提供了许多与网络相关的命令来查找当前配置、检查正在进行的连接以及解决一些网络问题。
网络配置
你可以使用ipconfig检查你的网络信息。下面的终端输出显示了我们所使用的计算机系统的 IP 地址、子网掩码和默认网关。
C:\>ipconfig
Windows IP Configuration
Ethernet adapter Ethernet:
Connection-specific DNS Suffix . : eu-west-1.compute.internal
Link-local IPv6 Address . . . . . : fe80::90df:4861:ba40:f2a8%4
IPv4 Address. . . . . . . . . . . : 10.10.230.237
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Default Gateway . . . . . . . . . : 10.10.0.1
你还可以使用ipconfig /all获取有关网络配置的更多信息。如下面的终端输出所示,我们可以查看我们的DNS服务器并确认DHCP已启用。
C:\>ipconfig /all
Ethernet adapter Ethernet 3:
Connection-specific DNS Suffix . : eu-west-1.compute.internal
Description . . . . . . . . . . . : Amazon Elastic Network Adapter
Physical Address. . . . . . . . . : 02-B7-DF-1D-0D-99
DHCP Enabled. . . . . . . . . . . : Yes
Autoconfiguration Enabled . . . . : Yes
Link-local IPv6 Address . . . . . : fe80::90df:4861:ba40:f2a8%4(Preferred)
IPv4 Address. . . . . . . . . . . : 10.10.230.237(Preferred)
Subnet Mask . . . . . . . . . . . : 255.255.0.0
Lease Obtained. . . . . . . . . . : Wednesday, May 1, 2024 2:38:05 PM
Lease Expires . . . . . . . . . . : Wednesday, May 1, 2024 4:08:07 PM
Default Gateway . . . . . . . . . : 10.10.0.1
DHCP Server . . . . . . . . . . . : 10.10.0.1
DHCPv6 IAID . . . . . . . . . . . : 134353458
DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-27-E3-D1-2B-0E-F8-30-D0-72-3F
DNS Servers . . . . . . . . . . . : 10.0.0.2
NetBIOS over Tcpip. . . . . . . . : Enabled
网络故障排除
一项常见的故障排除任务是检查服务器是否可以访问 Internet 上的特定服务器。相关的命令语法为ping target_name 。受到乒乓球运动的启发,我们可以尝试发送特定的 ICMP 数据包并侦听响应。如果成功收到响应,我们就知道我们可以到达目标,并且目标也可以到达我们。
让我们看看我们是否到达了example.com 。在下面的终端输出中,我们可以看到我们已成功收到四个回复;此外,我们还得到了一些统计数据,例如,平均往返时间为 78 毫秒。
C:\>ping example.com
Pinging example.com [93.184.215.14] with 32 bytes of data:
Reply from 93.184.215.14: bytes=32 time=78ms TTL=52
Reply from 93.184.215.14: bytes=32 time=78ms TTL=52
Reply from 93.184.215.14: bytes=32 time=78ms TTL=52
Reply from 93.184.215.14: bytes=32 time=78ms TTL=52
Ping statistics for 93.184.215.14:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 78ms, Maximum = 78ms, Average = 78ms
另一个有价值的故障排除工具是tracert ,它代表跟踪路由(trace route)。命令tracert target_name将跟踪到达目标所经过的网络路由,我们无需了解更多细节,只需要知道此命令希望路径上的路由器在丢弃数据包时通知我们,因为数据包的生存时间 ( TTL-time-to-live ) 达到零。下面的终端输出显示我们在到达目标之前经过了 15 个路由器。
C:\>tracert example.com
Tracing route to example.com [93.184.215.14]
over a maximum of 30 hops:
1 59 ms 32 ms 42 ms ec2-3-248-240-3.eu-west-1.compute.amazonaws.com [3.248.240.3]
2 * * * Request timed out.
3 * * * Request timed out.
4 * * * Request timed out.
5 * * * Request timed out.
6 * * * Request timed out.
7 * * * Request timed out.
8 * * * Request timed out.
9 <1 ms 13 ms <1 ms 100.100.2.56
10 15 ms 11 ms 11 ms ae-42.a03.londen12.uk.bb.gin.ntt.net [131.103.117.104]
11 17 ms 11 ms 12 ms ae-14.r20.londen12.uk.bb.gin.ntt.net [129.250.3.248]
12 81 ms 80 ms 80 ms ae-7.r20.nwrknj03.us.bb.gin.ntt.net [129.250.6.147]
13 83 ms 83 ms 86 ms ae-0.a02.nycmny17.us.bb.gin.ntt.net [129.250.3.9]
14 79 ms 79 ms 96 ms ce-0-3-0.a02.nycmny17.us.ce.gin.ntt.net [128.241.1.14]
15 81 ms 86 ms 79 ms ae-67.core1.nyd.edgecastcdn.net [152.195.68.135]
16 78 ms 78 ms 78 ms 93.184.215.14
Trace complete.
更多的网络命令
一个值得了解的网络命令是nslookup,它将查找主机或域并返回其IP地址。nslookup example.com将使用默认名称服务器查找example.com ,而nslookup example.com 1.1.1.1命令将使用名称服务器one.one.one.one进行查询 。下面的终端显示了这两个命令的输出,虽然结果是相同的,但是,你可以看到答案是从不同的名称服务器检索到的。
C:\>nslookup example.com
Server: ip-10-0-0-2.eu-west-1.compute.internal
Address: 10.0.0.2
Non-authoritative answer:
Name: example.com
Addresses: 2606:2800:21f:cb07:6820:80da:af6b:8b2c
93.184.215.14
C:>nslookup example.com 1.1.1.1
Server: one.one.one.one
Address: 1.1.1.1
Non-authoritative answer:
Name: example.com
Addresses: 2606:2800:21f:cb07:6820:80da:af6b:8b2c
93.184.215.14
我们将介绍的最后一个网络命令是netstat 。此命令会显示当前的网络连接和正在侦听的端口。不带参数的基础netstat命令将会为我们显示已建立的连接(如下所示)。在本例中,我们只有一个SSH连接,我们之所以发现它是SSH连接,是因为它绑定的端口是 22。
C:\>netstat
Active Connections
Proto Local Address Foreign Address State
TCP 10.10.230.237:22 ip-10-11-81-126:53486 ESTABLISHED
如果你对netstat其他参数选项感到好奇,你可以运行netstat -h 命令,其中的-h参数表示显示帮助页面。我们通常可以选择以下参数选项:
-a显示所有已建立的连接和正在监听的端口-b显示与每个正在监听的端口关联的程序和已建立的连接-o显示与连接关联的进程 ID ( PID )-n使用数字形式表示地址和端口号
我们可以结合上面这四个选项以尝试执行netstat -abon命令,最终得到的结果会很长,我们仅在下面的输出结果中显示了前几行内容。现在我们很清楚,可执行文件sshd.exe负责监听端口 22 上的传入连接,如下面内容中的第一行所示;此外,我们还可以看到与每个连接关联的进程 ID ( PID )。
C:\>netstat -abon
Active Connections
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:22 0.0.0.0:0 LISTENING 2116
[sshd.exe]
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 820
RpcSs
[svchost.exe]
[...]
TCP 0.0.0.0:49669 0.0.0.0:0 LISTENING 2036
[spoolsv.exe]
TCP 0.0.0.0:49670 0.0.0.0:0 LISTENING 584
Can not obtain ownership information
TCP 0.0.0.0:49686 0.0.0.0:0 LISTENING 592
[lsass.exe]
TCP 10.10.230.237:22 10.11.81.126:53486 ESTABLISHED 2116
[sshd.exe]
[...]
答题
我们可以使用哪个命令来查找服务器的物理地址(MAC地址)?

ipconfig /all
正在侦听端口 3389 的进程的名称是什么?
tips:使用命令netstat -abon

TermService
当前计算机的子网掩码是什么?
tips:查看命令ipconfig /all执行后的输出结果(见上文)。
255.255.0.0

文件和磁盘管理
你已经学会了如何查找基本的系统信息并检查相关的网络配置。现在,让我们继续了解如何浏览目录和移动文件。
查看目录
你可以使用不带参数的cd命令来显示当前驱动器和目录。这相当于问系统:我在哪里? 你还可以使用dir继续查看子目录。
C:\Users\strategos>cd
C:\Users\strategos
C:\Users\strategos>dir
Volume in drive C has no label.
Volume Serial Number is A8A4-C362
Directory of C:\Users\strategos
05/01/2024 02:40 PM <DIR> .
05/01/2024 02:40 PM <DIR> ..
11/14/2018 06:56 AM <DIR> Desktop
05/01/2024 02:40 PM <DIR> Documents
09/15/2018 07:19 AM <DIR> Downloads
09/15/2018 07:19 AM <DIR> Favorites
09/15/2018 07:19 AM <DIR> Links
09/15/2018 07:19 AM <DIR> Music
09/15/2018 07:19 AM <DIR> Pictures
09/15/2018 07:19 AM <DIR> Saved Games
09/15/2018 07:19 AM <DIR> Videos
0 File(s) 0 bytes
11 Dir(s) 14,984,953,856 bytes free
请注意,你可以将以下选项与dir一起结合使用:
dir /a- 显示隐藏的文件和系统文件。dir /s- 显示在当前目录和所有子目录中的文件。
你还可以键入tree命令 以直观地展示目录和子目录。
C:\Users\strategos>tree
Folder PATH listing
Volume serial number is A8A4-C362
C:.
├───Desktop
├───Documents
├───Downloads
├───Favorites
├───Links
├───Music
├───Pictures
├───Saved Games
└───Videos
你可以使用cd target_directory命令切换到任何目录,这相当于双击桌面上的target_directory 。此外,你可以使用cd ..将目录上升一级。下面的终端输出显示了一个相关示例。
C:\>cd
C:\
C:\>cd Users
C:\Users>cd
C:\Users
C:\Users>cd ..
C:\>cd
C:\
如果想要创建一个目录,我们可以使用mkdir directory_name命令 ,其中mkdir代表make 目录;如果想要删除一个目录,我们可以使用rmdir directory_name命令,其中 rmdir代表remove 目录。下面的终端输出显示了如何创建和删除一个目录。
C:\example>mkdir backup_files
strategos@WIN-SRV-2019 C:\example>dir
Directory of C:\example
05/02/2024 07:36 AM <DIR> .
05/02/2024 07:36 AM <DIR> ..
05/02/2024 07:36 AM <DIR> backup_files
0 File(s) 0 bytes
3 Dir(s) 14,984,724,480 bytes free
C:\example>rmdir backup_files
C:\example>dir
Directory of C:\example
05/02/2024 07:36 AM <DIR> .
05/02/2024 07:36 AM <DIR> ..
0 File(s) 0 bytes
2 Dir(s) 14,984,724,480 bytes free
查看文件内容
假如你正在使用命令行,并且你对特定文本文件的内容感到好奇,那么你可以使用type命令来轻松地查看指定文本文件的内容。此命令会将文本文件的内容转储到终端屏幕上,这对于适合使用终端窗口显示内容的文件来说很方便,而对于具备较长内容的文本文件,你可能需要考虑使用more命令,该命令将会显示足够多的文本文件内容来填充你的终端窗口。对于长内容的文本文件, more命令会显示单页内容,并且会等待你按下Spacebar键来移动到下一页(翻页)或者按下Enter键来移动到下一行。
copy命令允许你将文件从一个位置复制到另一个位置。以下终端输出提供了相关示例。
C:\example>dir
Directory of C:\example
05/02/2024 08:12 AM <DIR> .
05/02/2024 08:12 AM <DIR> ..
05/02/2024 07:57 AM 17 test.txt
1 File(s) 17 bytes
2 Dir(s) 14,983,409,664 bytes free
C:\example>copy test.txt test2.txt
1 file(s) copied.
C:\example>dir
Directory of C:\example
05/02/2024 08:12 AM <DIR> .
05/02/2024 08:12 AM <DIR> ..
05/02/2024 07:57 AM 17 test.txt
05/02/2024 07:57 AM 17 test2.txt
2 File(s) 34 bytes
2 Dir(s) 14,983,409,664 bytes free
同样,你还可以使用move命令来移动文件的位置。下面的终端输出显示了一个相关示例。
C:\example>dir
Directory of C:\example
05/02/2024 08:12 AM <DIR> .
05/02/2024 08:12 AM <DIR> ..
05/02/2024 07:57 AM 17 test.txt
05/02/2024 07:57 AM 17 test2.txt
2 File(s) 34 bytes
2 Dir(s) 14,983,409,664 bytes free
C:\example>move test2.txt ..
1 file(s) moved.
C:\example>dir
Directory of C:\example
05/02/2024 08:13 AM <DIR> .
05/02/2024 08:13 AM <DIR> ..
05/02/2024 07:57 AM 17 test.txt
1 File(s) 17 bytes
2 Dir(s) 14,983,409,664 bytes free
最后,我们还可以使用del或erase命令来删除一个文件。
C:\example>dir
Directory of C:\example
05/02/2024 08:16 AM <DIR> .
05/02/2024 08:16 AM <DIR> ..
05/02/2024 07:57 AM 17 test.txt
05/02/2024 07:57 AM 17 test2.txt
2 File(s) 34 bytes
2 Dir(s) 14,983,409,664 bytes free
C:\example>erase test2.txt
C:\example>dir
Directory of C:\example
05/02/2024 08:16 AM <DIR> .
05/02/2024 08:16 AM <DIR> ..
05/02/2024 07:57 AM 17 test.txt
1 File(s) 17 bytes
2 Dir(s) 14,983,409,664 bytes free
我们可以使用通配符*来引用多个文件,例如使用copy *.md C:\Markdown命令可以将所有扩展名为.md的文件复制到目录C:\Markdown下面 。
答题
在目标计算机上,C:\Treasure\Hunt 目录中的文件的内容是什么?
cd C:\Treasure\Hunt
dir
type flag.txt

THM{CLI_POWER} 。

任务和进程管理
你必须熟悉 MS Windows 任务管理器,并且熟悉如何终止无响应进程。让我们了解如何使用命令行来实现类似的功能。
我们可以使用tasklist列出正在运行的进程。
C:\>tasklist
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
System Idle Process 0 Services 0 8 K
System 4 Services 0 88 K
Registry 84 Services 0 50,700 K
smss.exe 276 Services 0 1,132 K
csrss.exe 372 Services 0 5,264 K
wininit.exe 448 Services 0 6,892 K
csrss.exe 456 Console 1 5,028 K
winlogon.exe 516 Console 1 11,144 K
services.exe 584 Services 0 7,492 K
lsass.exe 592 Services 0 16,108 K
svchost.exe 704 Services 0 23,432 K
fontdrvhost.exe 736 Console 1 4,256 K
[...]
一些过滤很有帮助,因为输出预计会很长,你可以通过使用tasklist /?来显示帮助页面以检查所有可用的过滤器。假如我们想要搜索与sshd.exe相关的任务,我们可以使用tasklist /FI "imagename eq sshd.exe"命令 。注意, /FI用于设置过滤器(filter)——映像名称等于sshd.exe 。
C:\>tasklist /FI "imagename eq sshd.exe"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
sshd.exe 2116 Services 0 6,992 K
sshd.exe 2712 Services 0 7,668 K
sshd.exe 4752 Services 0 7,372 K
在知道了进程 ID ( PID ) 之后,我们就可以使用taskkill / PID target_pid命令来终止任何任务。例如,如果我们想要终止PID为4567的进程,我们可以发出命令taskkill / PID 4567 。
答题
你将使用什么命令来查找与 notepad.exe 相关的正在运行的进程?
tasklist /FI "imagename eq notepad.exe"
你可以使用什么命令来杀死 PID 为 1516 的进程?
taskkill / PID 1516

本文小结
在本文中,我们专注于通过命令行访问网络化系统的最实用命令。
我们故意省略了一些常用命令,因为我们认为在这里包含它们并没有实际价值;我们将在下面提到它们,以便你知道这些命令行可以用于其他任务。
chkdsk: 检查文件系统和磁盘卷是否有错误和坏扇区。driverquery: 显示已安装的设备驱动程序的列表。sfc /scannow: 扫描系统文件是否存在损坏,并在可能的情况下修复它们。
修复Windows映像-相关命令:DISM /Online /Cleanup-Image /RestoreHealth
记住上文内容中所涵盖的命令很重要;此外,了解/?同样也很重要,因为它可以与大多数命令一起使用来显示一个帮助页面。
在本文中,我们可以通过两种方式来使用more命令:
- 显示文本文件:
more file.txt - 通过管道 传输 长输出结果以便进行逐页查看:
some_command | more
具备这些知识后,我们现在就知道了如何显示新命令的帮助页面以及如何分页显示(执行命令后的)长输出结果。
现在你已经大概了解了 Windows 命令行,是时候转到学习Windows PowerShell相关知识点了。
答题
已知shutdown /s命令可以关闭系统,那么我们可以使用什么命令来重新启动系统?
在cmd中输入:shutdown /? | more

shutdown /r
你可以使用什么命令来取消计划中的系统关闭任务?
参考上面的截图(关于shutdown /? | more的执行结果)。
shutdown /a


学习基本的 Windows 命令。
浙公网安备 33010602011771号