tryhackme-网络安全基础-命令行- windows命令行-21
tryhackme-Cyber Security 101-Command Line-Windows Command Line
房间地址:https://tryhackme.com/room/windowscommandline
这是网络安全入门的基础模块的计算机科学基础知识:Windows Command Line( windows命令行 ),序号 01 表示第一篇文章,当你不知道从哪里开始的时候,你可以按照数字顺序来进行参考即可。
Windows Command Line
Task 1 Introduction
在掌握命令行界面 (CLI) 之前,每个人都更喜欢图形用户界面 (GUI)。原因有很多。其中一个原因是 GUI 通常更直观。如果有人给你一个你不熟悉的 GUI 界面,你可以快速浏览并发现一些重要的部分。这与使用 CLI(即提示符)相比,效果更佳。
CLI 界面通常有一个学习曲线;但是,随着你掌握命令行,你会发现它更快、更高效。考虑这个简单的例子:使用图形桌面查找 IP 地址需要点击多少次?使用命令行界面,你甚至不需要将手从键盘上抬起来。假设你想重新检查你的 IP 地址。你只需输入相同的命令,而不是将鼠标指针移动到屏幕的每个角落。
除了速度和效率之外,使用 CLI 还有许多其他优势。我们将列举其中几点:
更低的资源占用:CLI 比图形密集型的 GUI 需要更少的系统资源。换句话说,您可以在较旧的硬件或内存有限的系统上运行 CLI 系统。如果您使用云计算,您的系统所需的资源将更少,从而降低您的费用。
自动化:虽然您可以自动执行 GUI 任务,但创建包含需要重复的命令的批处理文件或脚本要容易得多。
远程管理:CLI 可以非常方便地使用 SSH 管理远程系统,例如服务器、路由器或物联网设备。这种方法在网速较慢和资源有限的系统上效果很好。
- 学习目标
本课程旨在教您如何使用 Windows 命令提示符 cmd.exe(Windows 环境中的默认命令行解释器)。我们将学习如何使用命令行执行以下操作:
显示基本系统信息
检查和排除网络配置故障
管理文件和文件夹
检查正在运行的进程
基于以上学习目标,你可以举一反三,比如powershell,已“功能点或特性”大法来速成:http://www.yinwang.org/posts/master-pl
除此之外我们应该直捣黄龙,而不是他从其他地方“借鉴”一点东西变成自己的课件,没对比你就永远不好判定那些“培训班”的课程到底好不好,毕竟法律都没法下定论这个培训班是骗子判决退钱给你:http://www.yinwang.org/posts/learning-philosophy
房间先决条件
在开始此房间之前,您应该已完成“Windows 和 AD 基础知识”模块。
https://tryhackme.com/module/windows-and-active-directory-fundamentals
按下下方的“启动机器”按钮。
按下此页面顶部的“启动 AttackBox”按钮即可启动 AttackBox。AttackBox 主机将以分屏视图启动。如果未显示,请使用页面顶部的蓝色“显示分屏视图”按钮。
您可以使用 AttackBox 上的 SSH 客户端,使用以下凭证连接到 MACHINE_IP:
用户名:user
密码:Tryhackme123!
- 从 AttackBox 建立 SSH 连接
如果这是您首次从 AttackBox 发起到目标系统的 SSH 连接,请按照以下屏幕截图中的步骤操作:
点击标有 1 的终端图标,启动 AttackBox 的终端。
要连接到目标虚拟机,请运行命令 ssh user@MACHINE_IP,在本例中,user 为用户名。
由于这是您首次连接到此目标虚拟机,因此系统会要求您信任此连接。请回答“是”,如标有 3 的答案所示。
输入您的密码 Tryhackme123!。请注意,输入密码时不会显示密码。

Task 2 Basic System Information
一把梭:执行的命令系统如何知道它?存在“环境变量”或“命名空间”,在 Path= 中。可以用set来查看。
在执行命令之前,需要注意的是,我们只能在 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 进行比较。在后者中,您可以逐页显示输出,并可以使用 CTRL + C 退出。
help - 提供特定命令的帮助信息
cls - 清除命令提示符屏幕。
Task 3 Network Troubleshooting
我们大多数人习惯于从 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
网络故障排除
一项常见的故障排除任务是检查服务器是否可以访问互联网上的特定服务器。命令语法是 ping 目标名称。受乒乓球的启发,我们发送一个特定的 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,它代表跟踪路由。tracert target_name 命令用于跟踪到达目标所经过的网络路由。无需赘述,它假设路径上的路由器会在数据包因生存时间 (TTL) 已达零而丢弃时通知我们。下面的终端输出显示,我们在到达目标之前经过了 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 example.com 1.1.1.1 它直接对NS服务器1.1.1.1发起DNS查询,即刻知道example.com是否被劫持。当然对于国内DNS服务器有国内的IP,你可以搜索国内公共DNS服务器,对比它们的解析来确认。
nslookup 是一个值得了解的网络命令。它查找主机或域并返回其 IP 地址。语法 nslookup example.com 将使用默认域名服务器查找 example.com;然而,nslookup example.com 1.1.1.1 将使用域名服务器(ns服务器) 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 -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]
[...]
Task 4 File and Disk Management
你已经学会了查找基本系统信息和检查网络配置。现在,让我们来学习如何浏览目录和移动文件。
使用目录
您可以使用不带参数的 cd 命令来显示当前驱动器和目录。这相当于询问系统“我在哪里?”
您可以使用 dir 命令查看子目录。
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 目录名;mkdir 代表“创建目录”。要删除目录,请使用 rmdir 目录名;rmdir 代表“删除目录”。以下终端输出显示了目录的创建和删除过程。
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 命令将显示一页,并等待您按空格键移动一页(翻页)或按 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。
Task 5 Task and Process Management
您一定熟悉 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
[...]
image name(图像名称或进程图像名称)与Process(进程):可执行文件在硬盘上,要运行起来需要一个格式加载到内存中(一把梭:通过PE头或elf头在内存中创建了image name图像名称或进程图像名称),运行后就叫Process(进程)了。
参考:https://tldp.org/LDP/LG/issue23/flower/psimage.html
由于输出内容预计会很长,因此进行一些过滤会很有帮助。您可以使用 tasklist /? 显示帮助页面来查看所有可用的过滤器。假设我们要搜索与 sshd.exe 相关的任务,可以使用命令 tasklist /FI "imagename eq sshd.exe"。请注意,/FI 用于将过滤器映像名称(image name)设置为 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。
Task 6 Conclusion
在本讨论室中,我们重点介绍了通过命令行访问联网系统的最实用命令。
我们特意省略了一些常用命令,因为我们认为将它们放在初学者讨论室中并没有什么实际价值。我们在下面提到这些命令,是为了让您了解命令行还可以用于其他任务。
chkdsk:检查文件系统和磁盘卷中的错误和坏扇区。
driverquery:显示已安装设备驱动程序的列表。
sfc /scannow:扫描系统文件是否存在损坏,并在可能的情况下进行修复。
记住前面任务中涵盖的所有命令非常重要;此外,知道 /? 可与大多数命令一起使用以显示帮助页面也同样重要。
在本课中,我们通过两种方式使用了 more 命令:
显示文本文件:more file.txt
通过管道逐页查看长输出:some_command | more
掌握了这些知识后,我们现在知道如何显示新命令的帮助页面,以及如何逐页显示长输出。
现在您已经了解了 Windows 命令行,是时候转到 Windows PowerShell 课室了。
https://tryhackme.com/r/room/windowspowershell

浙公网安备 33010602011771号