摘要:记录一下Log Parser 2.2的用法,其实没必要,直接使用Event Log Explorer会好很多。

LogParser安装

从网上自行百度下载,运行的时候注意使用管理员权限运行。

LogParser简介

LogParser.exe  –o:DATAGRID -msgErrorMode:MSG -i:EVT "SELECT * FROM Security where EventID=4625"

运行之后,会在弹出一个弹窗,图中红线标出的就相当于数据库中表的字段,我们要做的就是利用sql语法筛选这些字段得到相应的结果。如果不以管理员权限运行,可能会造成LogParser对某些字段的解析出错。

LogParser用法1.png

LogParser语法

Strings和Message字段

Strings字段和Message字段是两个很重要的字段,所需要的大部分信息都可以从这两个字段提取出来,需要注意的是这两个字段的格式在不同的windows版本上是不同的,所以同一个sql语句在分析不同版本的windows的日志可能得到不一样的结果。

  1. Message字段

    帐户登录失败。 使用者: 安全 ID: S-1-5-18 帐户名: DESKTOP-JJMAUCM$ 帐户域: WORKGROUP 登录 ID: 0x3e7 登录类型: 2 登录失败的帐户: 安全 ID: S-1-0-0 帐户名: - 帐户域: - 失败信息: 失败原因: %%2304 状态: 0xc000006d 子状态: 0xc0000380 进程信息: 调用方进程 ID: 0x6f4 调用方进程名: C:\Windows\System32\svchost.exe 网络信息: 工作站名: - 源网络地址: 127.0.0.1 源端口: 0 详细身份验证信息: 登录进程: User32 身份验证数据包: Negotiate 传递服务: - 数 据包名(仅限 NTLM): - 密钥长度: 0 登录请求失败时在尝试访问的计算机上生成此事件。 “使用者”字段指明本地系统上请求登录的帐户。这通常是一个服务(例如 Server 服务)或本地进程(例如 Winlogon.exe 或 Services.exe)。 “登录类型 ”字段指明发生的登录的种类。最常见的类型是 2 (交互式)和 3 (网络)。 “进程信息”字段表明系统上的哪个帐户和进程请求了登录。 “网络信息”字段指明远程登录请求来自哪里。“工作站名”并非总是可用,而且在某些情况下可能会留为 空白。 “身份验证信息”字段提供关于此特定登录请求的详细信息。 -“传递服务”指明哪些直接服务参与了此登录请求。 -“数据包名”指明在 NTLM 协议之间使用了哪些子协议。 -“密钥长度”指明生成的会话密钥的长度。如果没有请求会话密钥,则此字段为 0。

    查看Message字段的内容:

    //Security表示本机上的Windows日志中的安全类型的日志
    LogParser.exe -i:EVT "SELECT Message FROM Security where EventID=4624"
    等价于
    LogParser.exe -i:EVT "SELECT Message FROM C:\Windows\System32\winevt\Logs\Security.evtx
  2. Strings字段

    S-1-5-18|DESKTOP-JJMAUCM$|WORKGROUP|0x3e7|S-1-0-0|-|-|0xc000006d|%%2304|0xc0000380|2|User32 |Negotiate|-|-|-|0|0x6f4|C:\Windows\System32\svchost.exe|127.0.0.1|0

    查看Strings字段的内容:

    //Security表示本机上的Windows日志中的安全类型的日志
    LogParser.exe -i:EVT "SELECT Strings FROM Security where EventID=4624"
    等价于
    LogParser.exe -i:EVT "SELECT Strings FROM C:\Windows\System32\winevt\Logs\Security.evtx

常见语法

EXTRACT_TOKEN语法

EXTRACT_TOKEN(Message,24,' ')表示将Message以空格为分割符,从0开始,然后取第24个。
EXTRACT_TOKEN(Strings,5,'|') 表示将Strings以“|”为分割符,从0开始,然后取第5个。

所以以下两个语句等价

//输出登录成功的用户名,4624表示登录成功事件
LogParser.exe -i:EVT "SELECT  EXTRACT_TOKEN(Message,24,' ') as username FROM Security where EventID=4624"
LogParser.exe -i:EVT "SELECT  EXTRACT_TOKEN(Strings,5,'|') as username FROM Security where EventID=4624"

-i 选项用法

LogParser.exe -i:EVT "SELECT Strings FROM C:\Windows\System32\winevt\Logs\Security.evtx

-i:EVT表示Security.evtx是evt标准格式,通常不用指定,因为LogParser会自动识别,因此也可以写成

LogParser.exe "SELECT Strings FROM C:\Windows\System32\winevt\Logs\Security.evtx

-o 选项用法

//以弹窗的形式输出登录成功的用户名,
LogParser.exe -i:EVT –o:DATAGRID "SELECT  EXTRACT_TOKEN(Strings,5,'|') as username FROM Security where EventID=4624"

–o:DATAGRID表示将结果以弹窗的形式显示,默认为以–o:CSV的形式输入结果。

-stats用法

LogParser.exe -i:EVT –o:DATAGRID -stats:OFF "SELECT  EXTRACT_TOKEN(Strings,5,'|') as username FROM Security where EventID=4624"

-stats:OFF的作用不显示下面 :

Statistics:
-----------
Elements processed: 101
Elements output:    10
Execution time:     10.16 seconds

-tabs用法

自己比较,大概就是使用-tabs:ON后,outputon.csv比outputoff.csv更容易阅读。

LogParser -i:EVT  -o:CSV -tabs:OFF "SELECT * INTO outputoff.csv FROM SYSTEM"
LogParser -i:EVT  -o:CSV -tabs:ON "SELECT * INTO outputon.csv FROM SYSTEM"

-fullText用法

LogParser.exe  -fullText:OFF –o:DATAGRID -i:EVT "SELECT * FROM Security where EventID=4625"
LogParser.exe  -fullText:On –o:DATAGRID -i:EVT "SELECT * FROM Security where EventID=4625"

大概就是-fullText:OFF的时候Message字段显示为空,-fullText:On的时候显示Message字段。

LogParser用法2.png

-msgErrorMode用法

LogParser.exe  –o:DATAGRID -msgErrorMode:NULL -i:EVT "SELECT * FROM Security where EventID=4625"
LogParser.exe  –o:DATAGRID -msgErrorMode:MSG -i:EVT "SELECT * FROM Security where EventID=4625"

注意使用非管理员权限,对比不同。当某些字段解析出错的时候,-msgErrorMode:NULL会在出错的位置显示NULL,-msgErrorMode:MSG会提示具体的出错信息。

-rdp

LogParser.exe -i:EVT -o:DATAGRID "select * from Security and timestamp('2021-04-18', 'yyyy-MM-dd')" -rtp:-1

-rtp:-1很鸡肋,-o:DATAGRID默认一次显示10条日志,-rtp:-1会一次显示所有日志,极易造成卡死......

sql语法

1. 统计登录失败的用户的登录次数,并按降序排列

//统计的登陆失败的用户
LogParser.exe  -i:EVT "SELECT EXTRACT_TOKEN(Message,19,' ') as user,count(user) as count INTO output.csv FROM Security where EventID=4625 and user not like '%$' GROUP BY user ORDER BY count(user) desc"

从Security中筛选并且用户名中不含“$”的用户,并且按照登录失败的次数降序排列,并将结果输出到output.csv文件中。

EventID=4625 表示登录失败事件,user not like '%$'表示user中不含“$”的用户,GROUP BY user 表示按照user分组,ORDER BY count(user) desc表示按照用户登陆失败的次数降序排列,INTO output.csv表示将结果输出到output.csv文件中。

2. 查看前一千条日志

//显示前一千条日志
LogParser.exe -i:EVT "SELECT top 1000 Strings FROM C:\Windows\System32\winevt\Logs\Security.evtx

top 1000表示只显示前一千条。

3. 查看某些时间段内的日志

//查看从2021-04-01到2021-04-08登录成功的用户名
LogParser -i:EVT -o:DATAGRID "select TimeGenerated as LoginTime,EXTRACT_TOKEN(Strings,5,'|') as username from Security  where eventid=4624 and username not like '%$' and TimeGenerated between timestamp('2021-04-01','yyyy-MM-dd') and timestamp('2021-04-18', 'yyyy-MM-dd') "

TimeGenerated between timestamp('2021-04-01','yyyy-MM-dd') and timestamp('2021-04-18', 'yyyy-MM-dd') 表示指定从2021-04-01到2021-04-08。

文章目录