前言
logparser的语法其实挺简单,但是重点在于要获取什么信息?获取的信息代表什么含义?故此文重点在于日志字段代表含义。
基本介绍
Log Parser(微软网站下载)是微软公司出品的日志分析工具,它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory。它可以像使用 SQL 语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。

常见的事件ID(系统日志及安全日志)
Event ID(2000/XP/2003) | Event ID(Vista/7/8/2008/2012) | 描述 | 日志名称 |
517 | 1102 | 日志清除 | 安全 |
528 | 4624 | 用户成功登录,比如用户输错密码 | 安全 |
529 | 4625 | 用户失败登录 | 安全 |
552 | 4648 | 试图使用显式凭据登录 ,我用账户密码使用远程桌面登陆的时候就会出现这个日志 | 安全 |
576 | 4672 | 给新登录分配特权,例如管理员登录会被分配特权 | 安全 |
592 | 4688 | 进程创建 | 安全 |
624 | 4720 | 已创建用户帐户,当创建一个用户账户的时候就会记录这个日志 | 安全 |
626 | 4722 | 已启用用户帐户,当创建一个用户的时候,就会记录这个日志,因为创建用户后默认都是启用,不会有人勾选不启用吧…… | 安全 |
628 | 4724 | 试图重置帐户密码,比如在域控中重置账户密码 | 安全 |
632 | 4728 | 成员已添加至全局组。 | 安全 |
636 | 4732 | 成员已添加至本地组。 | 安全 |
642 | 4738 | 已更改用户帐户,具体更改了用户的哪些信息,比如重置密码,用户登录名 | 安全 |
672 | 4768 | 请求了Kerberos身份验证票证(TGT)[备注:已成功颁发和验证身份验证服务 (AS) 票证。] | 安全 |
673 | 4769 | 请求了Kerberos服务票证 [备注:授权票证服务 (TGS) 票证已授权。TGS 是由 Kerberos v5 票证授权服务 (TGS) 颁发的票证,允许用户对域中的特定服务进行身份验证。] | 安全 |
680 | 4776 | 验证帐户的凭据,比如登陆用户账户的时候就会有4776 | 安全 |
无 | 5140 | 网络共享对象被访问 | 安全 |
无 | 5145 | 具体访问了哪些文件 | 安全 |
无 | 104 | 日志清除 | 系统 |
无 | 6005 | EventLog事件日志服务已启动。(当事件日志服务正常启动的时候电脑肯定开机) | 系统 |
无 | 6006 | EventLog事件日志服务已停止。(当事件日志服务正常停止的时候电脑肯定关机) | 系统 |
无 | 6009 | 懒得找了,意会吧,当电脑非正常关机,比如直接拔电源,就会出现6009 | 系统 |
基本使用
注:以下操作是针对以下操作是针对Windows server 2019 datacenter,不同系统的日志字段内容值会有所不同
1、logparser的参数
![: \Progra111 Files (x86) \Log Parser 2. 2>LogParser. exe —h
i crosoft (R) Log Parser Version 2. 2. 10
pyright (C) 2004 Microsoft Corporation. All rights reserved.
sage: LogParser (SQL query>
file :
C<input format_options>] C<output_format options>]
c-qC:0NTOFF]] C-iwC:ONTOFF]]
C—saveDefaults] C—querylnfo]
LogParser —c —i —o: <from_entity>
<into_entity> C<input_format_options>]
C<output_format_options>] C
c-qC:0N10FF]] C-iwC:ONiOFF]]
C —stats C:ON'OFF]] C —query Info]
—i : <input_format>
—o : <output_format>
-qC:ONLOFF]
—e: (max errors>
-iwC:ON'OFF]
—stats C: ON 'OFF]
—multiSiteC:0N'0FF]
—saveDefaults
—restoreDefau1ts
—querylnfo
xamples :
one of IISW3C, NCSA, IIS, IISODBC, BIN, IISMSID,
HTTPERR, URLSCAN, CSV, Tsv, W3C, XML, EVT, ETW,
NETMON, REG, ADS, TEXTLINE, TEXTWORD, FS, COM (if
omitted, will guess from the FROM clause)
one of CSV, Tsv, XML, DATAGRID, CHART, SYSLOG,
NEUROVIEW, NAT, wgc, IIS, SQL, TPL, NULL (if omitted,
will guess from the INTO clause)
quiet mode; default is OFF
max # of parse errors before aborting; default is —l
(ignore all)
ignore warnings; default is OFF
display statistics after executing query; default is
ON
use built—in conversion query
send BIN conversion output to multiple files
depending on the SiteID value; default is OFF
save specified options as default values
restore factory defaults
display query processing information (does not
execute the query)
LogParser "SELECT date, REVERSEDNS(c-ip) AS Client, FROM file. log
WHERE sc—status<>200 GROUP BY date, Client"
-e: 10
LogParser file:myquery. sq1?myInput=C: log+my0utput=resu1ts. csv
LogParser —c —i :BIN —o:W3C filel. log file2. log "ComputerName IS NOT NULL"
elp:
-h GRAWAR
FUNCTIONS C <function> I
-h
-h EXAMPLES
-h
—h
—o : <output_format>
-h
SQL Language Grammar
: Functions Syntax
Example queries and commands
. Help on <input_format>
. Help on <output_format>
. Conversion help](http://162.14.111.237/wp-content/uploads/2022/01/image-2-826x1024.png)
logparser的使用过程简单,总结就是一个公式:
logparser -i:输入文件的格式 -o:输出文件的格式 “SQL语句”
譬如:查询4624登录成功的安全日志,并且输出为网格模式:
LogParser.exe -i:evt -o:datagrid "select * from C:\Security.evtx where eventid=4624"

总体来说就是通过控制sql语句来查询我们想要的信息,在security.evtx日志中,总共包含的字段有:eventlog、recordNumber、timegenerated、timewritten、eventid、enenttype、eventtypename、eventcategory、eventcategoryname、sourcename、strings、computername、id、message、data。不过平常应急分析的时候所用的信息就是timegenerated、strings、message。其中strings和message又比较特殊,需要从中筛选部分信息,下面详细分析这两个字段的内容。
2、Strings字段分析
在上述查询中,系统安全日志有两个参数比较特殊,“strings” 和“message”,这两个列中包含有很多的信息,如源IP、登录用户名、登录类型、登录进程名、登录进程名、登录进程id、网络空间等。
strings的值表现形式如下,在查询过程中,我们可以使用extract_token(索引从0开始)函数,以‘|’符号作为分割符。考虑到通用性问题,因为不同事件ID的日志中strings内容顺序是不一样的,所以整理了4624和4625事件id中strings中每个字段中含义,我们可以根据索引获取我们下那个要的值。
注:strings的值和日志中XML视图的是Event Data一一对应。
(1)4624事件日志
string字段值内容及含义如下:
0 | S-1-0-1 | 用户id |
1 | – | 账户名称 |
2 | – | 账户域 |
3 | 0x0 | 登录ID(使用者) |
4 | S-1-5-21-3860493963-3742860931-3732056798-1009 | 安全ID(新登录) |
5 | xxxx | 账户名称 |
6 | 172_16_32_16 | 账户域 |
7 | 0x4f41a6cd | 登录ID(新登录) |
8 | 3 | 登录类型 |
9 | NtLmSsp | 登录进程 |
10 | NTLM | 身份验证数据包 |
11 | xxxx | 工作站名称 |
12 | {00000000-0000-0000-0000-000000000000} | 登录GUID |
13 | – | 传输的服务 |
14 | NTLM V2 | 数据包名(仅限NTLM) |
15 | 128 | 密钥长度 |
16 | 0x0 | 进程ID |
17 | – | 进程名称 |
18 | xx.xx.xx.xx | 源网络地址 |
19 | 0 | 源端口 |
20 | %%1833 | 模拟级别 |
21 | – | 受限制的管理员模式 |
22 | – | 网络账户名称 |
23 | – | 网络账号域 |
24 | %%1843 | 虚拟账户 |
25 | 0x0 | 链接的登录ID |
26 | %%1843 | 提升的令牌 |
对应的XML视图如下:

(2)4625事件日志
string字段值内容及含义如下:
0 | S-1-0-0 | 用户id |
1 | – | 账户名称 |
2 | – | 账户域 |
3 | 0x0 | 登录ID(使用者) |
4 | S-1-0-0 | 安全ID(新登录) |
5 | ADMINISTRATOR | 账户名称 |
6 | 账户域 | |
7 | 0xc000006d | 状态(失败信息) |
8 | %%2313 | 失败原因(失败信息) |
9 | 0xc000006a | 子状态(失败信息) |
10 | 3 | 登录类型 |
11 | NtLmSsp | 登录进程名 |
12 | NTLM | 身份验证数据包 |
13 | – | 工作站名称 |
14 | – | 传输的服务 |
15 | – | 数据包名(仅限NTLM) |
16 | 0 | 密钥长度 |
17 | 0x0 | 进程ID |
18 | – | 进程名称 |
19 | 18.119.138.40 | 源网络地址 |
20 | 0 | 源网络端口 |
XML对应视图如下:

3、SQL语句实现提取日志信息
有了上述信息,我们可以通过logparser查询我们需要的信息了。
关于其中exracct_token函数用法:extract_token(字段名,索引,分隔符)
LogParser -i:EVT -o:DATAGRID "select TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as username, EXTRACT_TOKEN(Strings, 13, '|') as Workstation, EXTRACT_TOKEN(Strings,10,'|') as LogonType, EXTRACT_TOKEN(Strings, 19, '|') as SourceIP, EXTRACT_TOKEN(Strings, 20, '|') as SourcePort,EXTRACT_TOKEN(Strings, 12, '|') as AuthenticationMethod,EXTRACT_TOKEN(Strings, 17, '|') as ProcessRequestID,EXTRACT_TOKEN(Strings, 18, '|') as ProcessRequestName from yours.evtx where eventid=4625 and username not like '%$'"