[ 当自律变成本能的习惯,你就会享受到它的快乐。 ]
大家好,我是【WeiyiGeek/唯一极客】一个正在向全栈工程师(SecDevOps)前进的技术爱好者
作者微信:WeiyiGeeker
公众号/知识星球:全栈工程师修炼指南
主页博客: 【 https://weiyigeek.top 】- 为者常成,行者常至。
wevtutil 命令 - 检索与设置Windows事件日志元数据
Windows 事件日志是记录系统事件和错误信息的宝库。可以帮助你识别和解决各种问题,例如应用程序崩溃、系统错误和安全审核等。
这些日志文件位于C:\windows\system32\config
路径下,但不支持使用文本编辑器打开。为了方便查看,Windows 提供了多个实用工具,最常用的就是事件查看器Eventvwr.msc
(界面模式)、和 wevtutil
命令(命令行模式)此文介绍。
描述: wevtutil
命令主要用于在计算机上注册提供程序的命令行实用工具, 还可以使用它来获取有关提供程序、其事件及其记录事件的通道的元数据信息,以及从通道或日志文件查询事件。
温馨提示:WevtUtil.exe
工具包含在 %windir%\System32
中, 并且 此命令仅限于 Administrators 组的成员,必须使用提升的权限运行。
温馨提示:作者最近开通的知识星球,全栈系列从门到实践教程将会逐步同步到星球内(实时更新),加入星球将获得作者在安全、运维、开发(Sec、Ops、Dev)中的所有学习实践笔记,和问题答疑以及远程技术支持,希望大家多多支持!
语法参数:
# 语法
wevtutil COMMAND [ARGUMENT [ARGUMENT] ...] [/OPTION:VALUE [/OPT]
wevtutil COMMAND /? #二级命令帮助
# 参数
el | enum-logs 列出日志名称。
gl | get-log 获取日志配置信息。
sl | set-log 修改日志配置,即为应用程序日志设置保留、自动备份和日志大小上限。
gli | get-log-info 获取日志状态信息。
epl | export-log 导出日志。
al | archive-log 存档导出的日志。
cl | clear-log 清除日志。
ep | enum-publishers 列出事件发布者。
gp | get-publisher 获取发布者配置信息。
/{ge | getevents}:[true|false] #获取此发布者可能引发的事件的元数据信息。
/{gm | getmessage}:[true|false] #显示实际消息,而不是数字消息 ID。
/{f | format}:[XML|Text] #指定日志文件格式。默认值为 Text。如果指定 XML,则使用 XML 格式打印输出。如果指定 Text,则不使用 XML 标记打印输出。
um | uninstall-manifest 从清单中卸载事件发布者和日志。
im | install-manifest 从清单中安装事件发布者和日志。
/resourceFilePath)形式的选项名称。 #选项及其值不区分大小写。
/{rf | resourceFilePath}:VALUE #要替换的清单中的提供程序元素的 ResourceFileName 属性。 #VALUE 应该是资源文件的完整路径。
/{mf | messageFilePath}:VALUE #要替换的清单中的提供程序元素的 MessageFileName 属性。VALUE 应该是消息文件的完整路径。
/{pf | parameterFilePath}:VALUE #要替换的清单中的提供程序元素的 ParameterFileName 属性。VALUE 应该是参数文件的完整路径。
qe | query-events 从日志或日志文件中查询事件。
* /{rd | reversedirection}:[true|false] #事件读取方向,如果为 true,即返回最近时间节点的事件。
* /{lf | logfile}:[true|false] #如果为 true,则 <PATH> 是日志文件的完整路径。
* /{sq | structuredquery}:[true|false] # 如果为 true,则 <PATH> 是包含结构化查询的文件的完整路径。
* /{q | query}:VALUE # VALUE 是用于筛选读取的事件的 XPath 查询。如果未指定,则返回所有事件。如果 /sq 为 true,则不能使用此选项。
* /{bm | bookmark}:VALUE # VALUE 是包含上一查询的书签的文件的完整路径。
* /{sbm | savebookmark}:VALUE #VALUE 是用于保存此查询的书签的文件的完整路径。文件扩展名应为 .xml。
* /{f | format}:[XML|Text|RenderedXml] #默认值为 XML。如果指定 Text,则使用易于读取的文本格式打印事件,而不是使用 XML 格式。
* #如果指定 RenderedXml,则使用 XML 格式打印事件并包含呈现信息,使用 Text 或 RenderedXml 格式打印事件,比使用 XML 格式打印慢。
* /{l | locale}:VALUE # VALUE 是以特定区域设置打印事件文本的区域设置字符串。只有在使用 /f 选项以文本格式打印事件时,才能使用该字符串。
* /{c | count}:<n> # 要读取的最大事件数。
* /{e | element}:VALUE #在输出事件 XML 时,包含一个根元素以生成正确格式的 XML。VALUE 是要包含在根元素中的字符串。例如指定 /e:root 将导致使用根元素对 <root></root> 输出 XML。
# 选项
/im 和 /um # 注意,此选项是不支持远程操作。
/{r | remote}:VALUE # 如果指定,则在远程计算机上运行该命令。VALUE 是远程计算机名称。
/{u | username}:VALUE # 指定一个不同的用户以登录到远程计算机。VALUE 是 domain\user 或 user 形式的用户名。只有在指定 /r 选项时
/{p | password}:VALUE # 指定的用户密码。如果未指定,或者 VALUE 为 "*",则会提示用户输入密码。只有在指定 /u 选项时才适用。
/{a | authentication}:[Default|Negotiate|Kerberos|NTLM] # 用于连接到远程计算机的身份验证类型。默认值为 Negotiate。
/{uni | unicode}:[true|false] # 使用 Unicode 显示输出。如果为 true,则使用 Unicode 显示输出。
使用示例:
1.列出日志名称,以及查看事件对象与自定日志对象信息。
wevtutil el # 列出日志名称 Application / System / Secuirty
wevtutil ep # 列出当前计算机上的事件发布者(即谁发出的)
C:\Users\Administrator>wevtutil gl System # 获取System日志配置信息。
# name: System
# enabled: true
# type: Admin
# owningPublisher:
# isolation: System
# channelAccess: O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x3;;;BO)(A;;0x5;;;SO)(A;;0x1;;;IU)(A;;0x3;;;SU)(A;;0x1;;;S-1-5-3)(A;;0x2;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)
# logging:
# logFileName: %SystemRoot%\System32\Winevt\Logs\System.evtx
# retention: false
# autoBackup: false
# maxSize: 20971520
# publishing:
# fileMax: 1
# 使用 XML 或 Text 格式显示有关本地系统日志的配置信息。
wevtutil gl System /f:xml
wevtutil gl System /f:Text

2.查询所有认证登录ID=4624
、特殊登录 4672
、注销 4634
、开机 12
、关机 13
相关的日志语法:(需查看Windows常见安全事件日志ID汇总,后续作者会在后续详细介绍Windows日志)
# 使用文本格式显示应用程序日志中的三个最近的事件。
wevtutil qe Application /c:3 /rd:true /f:text
# 查看系统关闭和开启时间日志(注意与真实时间相差+8小时),只显示前三条
wevtutil qe System /c:3 /rd:true /f:text /q:"*[System[(EventID=12 or EventID=13)]]"
# 查看远程主机日志信息
wevtutil qe security /rd:true /f:text /q:"*[System[(EventID=4624 or EventID=4634)]" /r:192.168.1.10 /u:weiyigeek /p:weiyigeek
# 查看本地主机日志信息
wevtutil qe Security /q:"*[System[(EventID=4624 or EventID=4634)]]" /rd:true /f:text
wevtutil qe Security /q:"*[System[(EventID=4672)]]" /rd:true /f:RenderedXml
# 查询将查找最近24小时内的登录事件(EventID=4624),并将结果以文本格式显示出来,其中timediff(@SystemTime) <= 86400000表示时间差小于等于24小时(以毫秒为单位)
wevtutil qe Security /q:"*[System[(EventID=4624) and TimeCreated[timediff(@SystemTime) <= 86400000]]]" /rd:true /f:text
知识扩展:Windows 事件日志条目的示例说明
<!-- 根元素 <Event>: 指定XML文档遵循的架构或规范。-->
<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'>
<!-- <System> 元素: 提供了事件的元数据。-->
<System>
<!-- 事件的提供者 -->
<Provider Name='Microsoft-Windows-Security-Auditing' Guid='{54849625-5478-4994-a5ba-3e3b0328c30d}'/>
<!-- 事件的唯一标识符,例如此处是注销 -->
<EventID>4634</EventID>
<Version>0</Version>
<!-- 重要性或严重性级别 -->
<Level>0</Level>
<!-- 事件相关的任务或操作的标识符 -->
<Task>12545</Task>
<!-- 操作代码,表示事件的特定类型或子类型 -->
<Opcode>0</Opcode>
<!-- 与事件相关的关键字,用于过滤或搜索事件 -->
<Keywords>0x8020000000000000</Keywords>
<!-- 事件创建的时间 -->
<TimeCreated SystemTime='2020-08-24T18:45:50.181682600Z'/>
<!-- 事件的记录ID,确保事件在日志中的唯一性 -->
<EventRecordID>138280</EventRecordID>
<Correlation/>
<Execution ProcessID='668' ThreadID='11916'/>
<!-- 事件所属的主机 -->
<Computer>WEIYIGEEK.TOP</Computer>
<!-- 事件所属的通道 -->
<Channel>Security</Channel>
<!-- 通常是一个空元素,也表示事件所属的通道。 -->
<Security/>
</System>
<!-- <EventData> 元素:包含事件的具体数据 -->
<EventData>
<!-- 如目标用户的SID、用户名、域名、登录ID和登录类型 -->
<Data Name='TargetUserSid'>S-1-5-21-3059585724-171103038-3195841082-500</Data>
<Data Name='TargetUserName'>weiyigeek</Data>
<Data Name='TargetDomainName'>WEIYIGEEK.TOP</Data>
<Data Name='TargetLogonId'>0xec6d372</Data>
<Data Name='LogonType'>7</Data>
</EventData>
<!-- <RenderingInfo> 元素: 显示为人类可读的形式提供了事件的描述 -->
<RenderingInfo Culture='zh-CN'>
<Message>已注销帐户.....登录 ID 是唯一的。</Message>
<Level>信息(Info)</Level>
<!-- 表示关机任务 -->
<Task>Logoff</Task>
<Opcode>信息</Opcode>
<Channel>Security</Channel>
<Provider>Microsoft Windows security auditing.</Provider>
<Keywords>
<Keyword>审核成功</Keyword>
</Keywords>
</RenderingInfo>
</Event>
3.清空指定日志对象的日志,例如,下面清空 SECURITY、SYSTEM、APPLICATION 等日志。
wevtutil cl security
wevtutil cl system
wevtutil cl application
wevtutil cl setup
4.设置日志记录策略以及大小。
# 例如,启用日志记录,事件日志文件的最大数为16,日志轮转覆盖旧记录,日志大小上限默认为1024KB,到达上限是否自动备份
wevtutil sl Application /e:true /filemax:10 /retention:false /maxsize:"1048576" /autobackup: true
# 使用 /c 指定xml配置文件,为应用程序日志设置保留、自动备份和日志大小(单位字节)上限
tee config.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<channel name="Application" isolation="Application"
xmlns="http://schemas.microsoft.com/win/2004/08/events">
<logging>
<retention>true</retention>
<autoBackup>true</autoBackup>
<maxSize>9000000</maxSize>
</logging>
<publishing>
</publishing>
</channel>
EOF
wevtutil sl /c:config.xml
5.显示信息发布者配置信息
wevtutil gp Application /ge:true /gm:true
wevtutil gp Microsoft-Windows-Eventlog /ge:true /gm:true
#8.以下示例从 myManifest.man 清单文件中安装发布者和日志。
wevtutil im myManifest.man /rf:^%systemroot^%/System32/wevtutil.exe
6.查看日志的大小及其建立状态信息
C:\Windows\system32>wevtutil gli System
# creationTime: 2020-11-04T15:43:48.004Z
# lastAccessTime: 2024-04-11T09:35:19.453Z
# lastWriteTime: 2024-04-11T09:35:19.453Z
# fileSize: 2101248
# attributes: 2080
# numberOfLogRecords: 5587
# oldestRecordNumber: 133763
7.导出日志对象到指定日志文件
# 日志导出以下示例将系统日志中的事件导出到 C:\backup\ 目录中
wevtutil epl system /overwrite:true C:\backup\system-0506.evtx
# 要存档的日志文件
wevtutil al %SystemRoot%\System32\Winevt\Logs\System.evtx
亲,文章就要看完了,不关注一下【全栈工程师修炼指南】吗?
至此完毕,更多技术文章,请关注我获取及时文章推送!
原文地址: https://blog.weiyigeek.top
如果此篇文章对你有帮助,请你将它分享给更多的人!
长按(扫描)二维码 ,【全栈工程师修炼指南】等你一起学习哟
作者微信【`echo "d2VpeWlnZWVrZXI=" | base64 -d`】,一起学习交流进步吧!