Windows1学习笔记
声明
学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章
笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负
微软windows操作系统,是由美国Microsoft公司开放的一系列的操作系统
Windows操作系统在个人电脑中以及无处不在,并且通常作为个人电脑和服务端操作系统在企业中部署。
了解Windows的内部工作原理对于任何安全人员都非常重要,这涉及到之后的内网,域渗透等等
作为攻击者,通常只需要获取低权限访问,有时可能需要提权以获得更高权限或者进一步渗透网络,这是为什么需要理解Windows操作系统基础知识的重要原因之一
文件系统
Linux :FHS目录结构,块设备挂载到目录(一切都是文件)
Linux FHS(文件系统层次结构标准)定义了文件和目录在操作系统中的布局,以确保不同发行版之间的兼容性和一致性。
根目录(/)
根目录是Linux系统中最顶层的目录,所有的其他目录都从这里衍生出来。它包含了开机软件、核心文件、开机所需程序、函数库、修复系统程序等文件。根目录下的重要子目录包括:
- /bin:存放系统命令,普通用户和root都可以执行。这些命令在单用户模式下也可以执行。
- /dev:设备文件保存位置。
- /etc:配置文件保存位置。系统内所有采用默认安装方式的服务配置文件全部保存在此目录中。
- /home:普通用户的主目录(也称为家目录)。
- /lib:系统调用的函数库保存位置。
- /media:挂载目录。系统建议用来挂载媒体设备,如软盘和光盘。
- /mnt:挂载目录。早期Linux中只有这一个挂载目录,并没有细分。
- /opt:第三方安装的软件保存位置。
- /root:root的主目录。
- /sbin:保存与系统环境设置相关的命令,只有root可以使用这些命令进行系统环境设置。
- /tmp:临时目录。建议此目录中不能保存重要数据,最好每次开机都把该目录清空。
- /proc:虚拟文件系统。主要保存系统的内核、进程、外部设备状态和网络状态等。
- /sys:虚拟文件系统。和/proc目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息1。
/usr目录
/usr目录用于存储系统软件资源。FHS建议所有开发者,应把软件产品的数据合理的放置在/usr目录下的各子目录中,而不是为他们的产品创建单独的目录。/usr目录下的重要子目录包括:
- /usr/bin:存放系统命令,普通用户和超级用户都可以执行。这些命令和系统启动无关,在单用户模式下不能执行。
- /usr/lib:存放库文件,供/usr/bin下的命令使用。
- /usr/share:存放共享数据,如文档、图标、模板等1。
/var目录
/var目录用于存储经常变化的文件,如日志文件、缓存数据、打印队列等。/var目录下的重要子目录包括:
- /var/log:存放系统日志文件。
- /var/spool:存放打印队列和其他spooler数据。
- /var/tmp:临时文件目录,不同于/tmp,这里的文件不会在重启后被清除1。
winodws:以驱动器盘符起始,或通过目录挂载分区
系统关键目录
Windows系统中有几个关键目录,它们各自承担着不同的角色:
- C:\Windows\System32:这是Windows系统的核心目录,包含了系统的配置文件和服务可执行文件。这个目录对于系统的正常运行至关重要1。
- C:\Program Files:这是软件安装的默认目录,大多数应用程序都会安装在这个目录下1。
- C:\Users:这个目录包含了所有用户账户的个人文件和设置。每个用户的文件夹都在这个目录下1。
- C:\Windows\perflogs:这个目录包含了Windows系统的性能日志信息,如磁盘扫描错误信息等。虽然可以删除,但不建议这样做,因为这可能会降低系统速度1。
服务和端口
服务是Windows系统中的一种应用程序类型,它们在后台运行并为用户提供功能。例如,Web服务、DHCP服务、邮件服务等。可以通过运行窗口输入services.msc 来查看和管理这些服务1。
端口是计算机与外界通讯交流的出口,通过IP地址加上特定的端口号,可以区分不同的服务。例如,HTTP协议常用的端口是80,FTP协议常用的端口是21等1。
注册表
注册表是Windows操作系统中的一个核心数据库,它包含了各种参数,直接控制着Windows的启动、硬件驱动程序的装载以及一些Windows应用程序的运行。注册表的结构包括多个根键,如HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE等,每个根键下又有多个子键和值,共同构成了注册表的数据结构1
路径格式
linux:/开始,区分大小写(左斜线)
windows:\分隔路径,不区分大小写(右斜线)
系统配置:
linux:/etc和/proc(存储信息)
windows:注册表(存储信息在注册表里)
Windows 的Shell 接口
在 Windows 操作系统中,Shell 是用户与操作系统交互的界面,它负责解释用户的输入并处理操作系统的输出结果。
- GUI:图形化用户接口,操作简单方便
- 命令提示符 (Command Prompt):这是 Windows 中最基本的 Shell 接口,通常被称为 cmd。它是一个基于文本的命令行界面,用户可以通过输入命令来执行各种操作。cmd 提供了大量的内置命令,如 dir、cd、copy 等,用于文件和目录的操作。
- Powershell:Powershell 是 Microsoft 开发的一个强大的 Shell 和脚本语言环境。它提供了比 cmd 更丰富的功能和更强大的脚本能力。Powershell 基于 .NET Framework,可以利用其丰富的类库来进行复杂的系统管理和自动化任务。
- Windows 资源管理器 (File Explorer):这是 Windows 中的图形化 Shell 接口,用于浏览和管理文件、文件夹和网络资源。用户可以通过点击、拖放等方式来操作文件和文件夹,也可以通过搜索框来查找文件。
- PowerToys Run:PowerToys 是一组由 Microsoft 开发的工具集合,其中 PowerToys Run 提供了一个快速启动菜单,类似于 macOS 的 Spotlight。用户可以通过输入关键词来快速找到并启动应用程序、文件或设置。
- WMIC(Windows Management Instrumentation Command-line):是微软提供的一个命令行工具,用于执行系统管理任务。它为WMI(Windows Management Instrumentation)提供了一个强大的命令行接口,使得用户可以通过简单的命令来管理和监控系统资源。
wsl在windows上运行的子系统
WSL(Windows Subsystem for Linux)是一个在 Windows 10 上能够运行原生 Linux 二进制可执行文件(ELF 格式)的兼容层。它是由微软与 Canonical 公司合作开发,其目标是使纯正的 Ubuntu 14.04 Trusty Tahr 映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行2。
WSL 的工作原理
WSL 提供了一个微软开发的 Linux 兼容内核接口(不包含 Linux 代码),来自 Ubuntu 的用户模式二进制文件在其上运行。此子系统起源于命运多舛的 Astoria 项目,其目的是允许 Android 应用运行在 Windows 10 Mobile 上2。
在设计之初,微软就允许类似于 Win32 这种子系统运行于 windows NT 内核之上,它可以为上层应用提供编程接口,同时避免应用去实现内核里的一些调用细节。早先的子系统是用户态模块的实现,它封装了 NT 系统的系统调用为应用程序提供编程接口。所有的应用程序都是 PE/COFF(一些为子系统封装 NT 系统调用的库和服务)可执行的。后来版本的子系统替换掉了 POSIX 层,由用户态组件提供了 Subsystem for Unix-based Applications (SUA),满足:
- 终端管理
- 系统服务请求和进程间通信
SUA 的主要目的是为了鼓励应用程序移植到 Windows 上能尽量少的重写。这已经通过实现 POSIX 用户态 API 达到了。考虑到这些组件是用户态实现,很难跟内核态的系统调用(比如 fork())在语义上和效率上完全相对应。因为这种模式需要程序重新编译,它需要持续的功能移植,维护也是负担2。
WSL 的优势
与虚拟机相比,WSL 没有虚拟硬件的过程,而是直接在 Windows 上虚拟一个 Linux 内核,模拟 Linux 系统调用,以运行 Linux 执行文件。因此效率要比虚拟机高,但是它使用的是自己实现的 init 进程而不是发行版的 init 进程,并且几乎没有实现任何系统服务,因此只适用于软件的开发,而不是作为桌面环境或生产性的服务器。并且 WSL 的目的也是如此,可以简单的将它理解为可以运行 Linux 可执行文件的、类似于 powershell 的 shell,具有互操作性(在 Linux 中执行 Windows 命令,在 Windows 中执行 Linux 命令)1。
windows的cmd帮助命令
- ASSOC 显示或修改文件扩展名关联。
- ATTRIB 显示或更改文件属性。
- BREAK 设置或清除扩展式 CTRL+C 检查。
- BCDEDIT 设置启动数据库中的属性以控制启动加载。
- CACLS 显示或修改文件的访问控制列表(ACL)。
- CALL 从另一个批处理程序调用这一个。
- CD 显示当前目录的名称或将其更改。
- CHCP 显示或设置活动代码页数。
- CHDIR 显示当前目录的名称或将其更改。
- CHKDSK 检查磁盘并显示状态报告。
- CHKNTFS 显示或修改启动时间磁盘检查。
- CLS 清除屏幕。
- CMD 打开另一个 Windows 命令解释程序窗口。
- COLOR 设置默认控制台前景和背景颜色。
- COMP 比较两个或两套文件的内容。
- COMPACT 显示或更改 NTFS 分区上文件的压缩。
- CONVERT 将 FAT 卷转换成 NTFS。你不能转换当前驱动器。
- COPY 将至少一个文件复制到另一个位置。
- DATE 显示或设置日期。
- DEL 删除至少一个文件。
- DIR 显示一个目录中的文件和子目录。
- DISKPART 显示或配置磁盘分区属性。
- DOSKEY 编辑命令行、撤回 Windows 命令并创建宏。
- DRIVERQUERY 显示当前设备驱动程序状态和属性。
- ECHO 显示消息,或将命令回显打开或关闭。
- ENDLOCAL 结束批文件中环境更改的本地化。
- ERASE 删除一个或多个文件。
- EXIT 退出 CMD.EXE 程序(命令解释程序)。
- FC 比较两个文件或两个文件集并显示它们之间的不同。
- FIND 在一个或多个文件中搜索一个文本字符串。
- FINDSTR 在多个文件中搜索字符串。
- FOR 为一组文件中的每个文件运行一个指定的命令。
- FORMAT 格式化磁盘,以便用于 Windows。
- FSUTIL 显示或配置文件系统属性。
- FTYPE 显示或修改在文件扩展名关联中使用的文件类型。
- GOTO 将 Windows 命令解释程序定向到批处理程序中某个带标签的行。
- GPRESULT 显示计算机或用户的组策略信息。
- GRAFTABL 使 Windows 在图形模式下显示扩展字符集。
- HELP 提供 Windows 命令的帮助信息。
- ICACLS 显示、修改、备份或还原文件和目录的 ACL。
- IF 在批处理程序中执行有条件的处理操作。
- LABEL 创建、更改或删除磁盘的卷标。
- MD 创建一个目录。
- MKDIR 创建一个目录。
- MKLINK 创建符号链接和硬链接
- MODE 配置系统设备。
- MORE 逐屏显示输出。
- MOVE 将一个或多个文件从一个目录移动到另一个目录。
- OPENFILES 显示远程用户为了文件共享而打开的文件。
- PATH 为可执行文件显示或设置搜索路径。
- PAUSE 暂停批处理文件的处理并显示消息。
- POPD 还原通过 PUSHD 保存的当前目录的上一个值。
- PRINT 打印一个文本文件。
- PROMPT 更改 Windows 命令提示。
- PUSHD 保存当前目录,然后对其进行更改。
- RD 删除目录。
- RECOVER 从损坏的或有缺陷的磁盘中恢复可读信息。
- REM 记录批处理文件或 CONFIG.SYS 中的注释(批注)。
- REN 重命名文件。
- RENAME 重命名文件。
- REPLACE 替换文件。
- RMDIR 删除目录。
- ROBOCOPY 复制文件和目录树的高级实用工具
- SET 显示、设置或删除 Windows 环境变量。
- SETLOCAL 开始本地化批处理文件中的环境更改。
- SC 显示或配置服务(后台进程)。
- SCHTASKS 安排在一台计算机上运行命令和程序。
- SHIFT 调整批处理文件中可替换参数的位置。
- SHUTDOWN 允许通过本地或远程方式正确关闭计算机。
- SORT 对输入排序。
- START 启动单独的窗口以运行指定的程序或命令。
- SUBST 将路径与驱动器号关联。
- SYSTEMINFO 显示计算机的特定属性和配置。
- TASKLIST 显示包括服务在内的所有当前运行的任务。
- TASKKILL 中止或停止正在运行的进程或应用程序。
- TIME 显示或设置系统时间。
- TITLE 设置 CMD.EXE 会话的窗口标题。
- TREE 以图形方式显示驱动程序或路径的目录结构。
- TYPE 显示文本文件的内容。
- VER 显示 Windows 的版本。
- VERIFY 告诉 Windows 是否进行验证,以确保文件正确写入磁盘。
- VOL 显示磁盘卷标和序列号。
- XCOPY 复制文件和目录树。
- WMIC 在交互式命令 shell 中显示 WMI 信息。
find命令的基本格式是:
find ["options"] "string" ["file"]
- "options":可选参数,用于修改搜索行为。
- "string":要搜索的字符串。
- "file":要搜索的文件。如果不指定文件,则从标准输入读取数据。
文件导航系统
返回驱动根目录
c:\windows\web>cd\
c:windows\>cd..
大小写不敏感
c:\>type"spaces in title.txt"
查看系统隐藏文件
c:lusers>dir/A
搜索文件名
c:\>dir/s flag.txt
最近编辑的文件名
c:\>dir/tw/od
系统标准目录
- .perflogs 储存Windows性能日志
- program files 32位系统,储存32位程序,64位 储存64位程序。
- program files 64位系统,储存32位版本程序
- programdata隐藏目录,包含全局程序数据,所有登录用户都访问这些数据
- users包含用户主目录(登录过的用户)
- users\public用户间共享文件,所有用户都有权访问
- users\[username]\appdata 隐藏子目录,存储用户应用程序数据和设置
- Windows \system, system32, syswow64
- 存储动态链接库文件,Windows和api的核心文件
- xp,Windows server 2003
- c:\documents and setting 早期一些xp系统的Windows主目录
在Windows操作系统中,系统标准目录是指那些由操作系统本身定义并用于特定目的的目录。这些目录通常位于系统盘(通常是C盘)的根目录下,或者在用户个人文件夹中。以下是一些常见的Windows系统标准目录及其用途:
Windows目录
在Windows 9x/ME系统中,系统文件通常位于Windows目录下;而在Windows 2000/xp系统中,则位于Windows NT目录下。这些目录包含了操作系统的内核文件、动态链接库和其他必要的系统文件1。
Documents and Settings
在Windows 2000/xp系统中,用户个人信息和文件存储在Documents and Settings目录下。每个用户都有一个对应的子目录,其中包含了用户的桌面、收藏夹、我的文档等内容1。
Application Data
这个目录用于存储应用程序的数据文件。不同的应用程序会在这个目录下创建自己的子目录,并存储相关的配置文件和数据1。
Fonts
Fonts目录用于存储系统中可用的字体文件。用户可以在这个目录中添加或删除字体,以改变系统的字体显示效果1。
System Volume Information
这个目录是系统卷信息目录,包含了系统备份和恢复的相关信息。用户通常不需要直接访问这个目录1。
Program Files
Program Files目录是默认的程序安装目录,大多数应用程序都会安装在这个目录下。这个目录通常分为两个版本,一个是英文版的Program Files,另一个是针对非英文操作系统的Program Files (x86)1。
Temp
Temp目录用于存储临时文件。系统和应用程序会在这里创建临时文件,并在不再需要时自动删除它们1。
系统及环境
系统信息查询可视化
systeminfo
systeminfo 是一个命令行工具,它可以显示有关计算机配置的详细信息。当你在命令提示符中输入 systeminfo 并按回车键后,系统会显示一系列信息,包括操作系统版本、安装日期、物理内存等6。
msinfo32
msinfo32 是另一个命令行工具,它可以显示有关计算机配置的详细信息。与 systeminfo 不同的是,msinfo32 提供的信息更加详细,包括硬件资源、组件、软件环境等系统信息3。
Windows操作系统环境变量
在Windows操作系统中,环境变量是一个重要的概念,它用于指定操作系统运行环境的一些参数。以下是关于环境变量的一些详细信息:
环境变量的定义
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如临时文件夹位置和系统文件夹位置等。这些参数可以影响程序的运行方式和结果2。
环境变量的分类
环境变量主要分为两类:用户变量和系统变量。用户变量只适用于当前用户使用,换了用户就不管用了,每个用户拥有不同的用户变量,不同用户的用户变量之间是并列的,也是互不干扰的。而系统变量则是任何用户都可以使用,系统变量就是系统级别的变量,系统变量被修改了,每个系统用户都将受到影响1。
环境变量的配置
在Windows10中,环境变量的设置位于系统属性的高级选项卡内。用户可以通过修改环境变量来改变程序的搜索路径,从而简化启动程序的流程。例如,如果你安装了某个软件,并且希望能够在任何地方运行这个软件,你可以在环境变量中添加软件的安装路径1。
环境变量的应用
环境变量在很多情况下都会被使用到。例如,在学习一门编程语言时,可能需要配置环境变量。以Java为例,下载安装完JDK后的第一件事就是配置环境变量。这样做的目的是为了让系统知道在哪里可以找到Java编译器和运行时环境1。
c:\>echo %username%
c:\>echo %path%
c:\>echo %username%
c:\>echo %temp%
c:\>echo %userprofile%
c:\>set当前命令行下的环境变量列出
使用echo命令显示特定环境变量
echo命令用于显示文本或环境变量的值。以下是一些常用的环境变量及其含义:
- %username%: 当前登录用户的用户名。
- %path%: 系统路径变量,包含可执行文件的搜索路径。
- %temp%: 临时文件夹的路径。
- %userprofile%: 当前用户的配置文件路径。
使用set命令列出所有环境变量
set命令可以列出当前命令行会话中的所有环境变量及其值。执行set命令后,系统会输出所有已定义的环境变量及其对应的值。
查看名称以p开头的变量
set p
永久修改环境变量
- 通过注册表修改(永久修改):
- 例如,修改MAVEN_HOME环境变量,可以使用setx命令,如setx MAVEN_HOME F:\person program Files\apache - maven - 3.3.9\apache - maven - 3.3.9。对于path环境变量,如setx path %path%;%MAVEN_HOME%\bin(针对当前用户,即admin的path)或者setx path %path%;%MAVEN_HOME%\bin /m(针对系统变量,但可能存在path设置过长以及安全软件提示等问题,并且要注意修改path可能因敲错命令导致覆盖,最好预先备份path)3。
- 通过系统属性 - 高级 - 环境变量设置(永久修改):
- 这是大家比较熟悉的图形界面操作方式,可直接在系统环境变量设置中进行添加、修改等操作3。
- 使用wmic命令(在cmd命令行下,永久修改):
- 例如在为了让某些软件(如JavaJDK或Git等)正常执行,需要添加相关环境变量值时,可以使用wmic命令。不过在使用wmic命令时可能需要以管理员权限启动脚本,并且需要先获取PATH环境变量的用户和变量值(使用wmic ENVIRONMENT where name = PATH get UserName,VariableValue)4。
变量位于
hkey_current_user\environment