【THM】Windows Command Line(Windows命令行)-学习

本文相关的TryHackMe实验房间链接:https://tryhackme.com/r/room/windowscommandline

本文相关内容:学习基本的 Windows 命令。

image-20250107185433029

介绍

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

image-20250107190142871

CLI界面通常有一个学习曲线;但是,当你掌握命令行时,你会发现它更快、更高效。思考一个简单的例子:你需要点击多少次才能使用图形界面找到你的IP地址?而如果选择使用命令行界面来解决这个问题,你甚至不需要将手从键盘上移开。假设你想重新检查你的 IP 地址,你只需要发出相同的命令,而不是将鼠标指针移动到屏幕的每个角落。

除了速度和效率之外,使用CLI还有许多其他优点,我们将在下面提及一些:

  • 更低的资源使用量:CLI 比图形密集型的 GUI 需要更少的系统资源。换句话说,你可以在较旧的硬件或内存有限的系统上运行你的CLI系统。如果你正在使用云计算,你的系统将需要更少的资源,这反过来又会降低你的费用。
  • 自动化:虽然你也可以自动化执行GUI任务,但在你需要使用重复的命令时,选择创建批处理文件或脚本来实现自动化要更加容易得多。
  • 远程管理:CLI 让使用SSH管理 远程系统(例如服务器、路由器或IoT设备)变得非常方便,这种方法适用于网络速度慢和资源有限的系统。

学习目标

本文的主要目的是教会你如何使用 MS Windows 命令提示符cmd.exe ,它是 Windows 环境中的默认命令行解释器,我们将学习如何使用命令行来:

  • 显示系统基本信息;
  • 检查网络配置并排除故障;
  • 管理文件和文件夹;
  • 检查正在运行的进程。

前置学习基础

在开始学习本文内容之前,你应该已经完成了TryHackMe提供的​​ Windows 和AD基础知识模块。

部署实验机器

在与本文相关的TryHackMe实验房间页面中,点击如下所示的Start Machine-启动机器按钮。

image-20250107190244656

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

image-20250107190301772

你可以使用 AttackBox 上的SSH客户端通过以下凭据连接到MACHINE_IP (此ip代表的是目标机器):

  • Username: user
  • Password: Tryhackme123!

从AttackBox终端开始建立SSH连接

如果这是你第一次发起从 AttackBox 到目标系统的SSH连接,请参考如下所示的操作步骤:

  1. 单击标有记号 1 的终端图标启动 AttackBox 的终端。
  2. 要连接到目标VM ,请发出命令ssh user@MACHINE_IPuser是本例中的用户名。
  3. 由于这是你第一次连接到目标虚拟机,因此系统会要求你信任此连接。回答“是”即可,如 3 所示。
  4. 输入已知的密码Tryhackme123! ,请注意,此密码在你输入时不会明文显现。

image-20250107190340645

答题

Windows环境下默认的命令行解释器是什么?

cmd.exe

image-20250107190416972

基本系统信息

image-20250107190446518

在发出命令之前,我们应该注意我们只能在 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!

image-20250412215946459

实验Windows虚拟机的操作系统版本是什么?

tips:在终端中输入ver命令。

image-20250412220025397

10.0.20348.2655

实验Windows VM 的主机名(hostname )是什么?

tips:在终端中输入systeminfo命令。

image-20250412220214507

WINSRV2022-CORE

image-20250412220233820

网络故障排除

我们大多数人都习惯从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地址)?

image-20250412220333211

ipconfig /all

正在侦听端口 3389 的进程的名称是什么?

tips:使用命令netstat -abon

image-20250412220650617

TermService

当前计算机的子网掩码是什么?

tips:查看命令ipconfig /all执行后的输出结果(见上文)。

255.255.0.0

image-20250412220824073

文件和磁盘管理

你已经学会了如何查找基本的系统信息并检查相关的网络配置。现在,让我们继续了解如何浏览目录和移动文件。

查看目录

你可以使用不带参数的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

最后,我们还可以使用delerase命令来删除一个文件。

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

image-20250412221245707

THM{CLI_POWER} 。

image-20250412221315022

任务和进程管理

你必须熟悉 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

image-20250107192158850

本文小结

在本文中,我们专注于通过命令行访问网络化系统的最实用命令。

我们故意省略了一些常用命令,因为我们认为在这里包含它们并没有实际价值;我们将在下面提到它们,以便你知道这些命令行可以用于其他任务。

  • 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

image-20250107185849446

shutdown /r

你可以使用什么命令来取消计划中的系统关闭任务?

参考上面的截图(关于shutdown /? | more的执行结果)。

shutdown /a

image-20250107190041747

posted @ 2025-04-26 00:26  Hekeatsll  阅读(277)  评论(0)    收藏  举报