首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Powershell regex匹配多行

用Powershell regex匹配多行
EN

Stack Overflow用户
提问于 2018-04-18 10:02:51
回答 1查看 1.3K关注 0票数 0

我使用mimikatz提取用于安全审计的NTLM散列。mimikatz的输出大致如下:

代码语言:javascript
复制
RID  : 000001f4 (500)
User : Administrator

RID  : 000001f5 (501)
User : Guest

RID  : 000001f7 (503)
User : DefaultAccount

RID  : 000001f8 (504)
User : WDAGUtilityAccount
Hash NTLM: 6373ee9aae046ab1319d89b1cfd36306

RID  : 000003e9 (1001)
User : admin
Hash NTLM: f1320e0960da374b88e40cffbec44885

我想抓住"User“和"Hash NTLM",即,

代码语言:javascript
复制
User : admin
Hash NTLM: f1320e0960da374b88e40cffbec44885 

为此,我使用以下正则表达式:

代码语言:javascript
复制
[regex]$regex = '(?m)(User\s:\s\w+\r\n\s*Hash NTLM:\s\w+)'

现在,如果我直接在mimikatz输出上使用正则表达式:

代码语言:javascript
复制
$ntlm = Invoke-Expression -Command "mimikatz.exe ""lsadump::sam /sam:C:\sam /system:C:\system"" exit"  
[regex]$regex = '(?m)(User\s:\s\w+\r\n\s*Hash NTLM:\s\w+)'
$regex.Matches($ntlm).value

什么都不回。

但是,如果我首先将输出存储到一个文件中,然后使用-Raw读取它,那么它工作得很好:

代码语言:javascript
复制
$ntlm = Invoke-Expression -Command "mimikatz.exe ""lsadump::sam /sam:C:\sam /system:C:\system"" exit" 
$ntlm | Out-File -FilePath "C:\Users\nlykkei\Desktop\mimikatz.txt"
$Text = Get-Content "C:\Users\nlykkei\Desktop\mimikatz.txt" -Raw
$regex.Matches($Text).value

在这种情况下,将返回以下行:

代码语言:javascript
复制
User : WDAGUtilityAccount
  Hash NTLM: 6373ee9aae046ab1319d89b1cfd36306
User : admin
  Hash NTLM: f1320e0960da374b88e40cffbec44885

在不将输出存储到文件的情况下,如何进行适当的匹配?我知道\r\n,但它们似乎不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-18 11:49:43

在命令末尾添加Out-String,首先将其转换为文本:

代码语言:javascript
复制
$ntlm = Invoke-Expression -Command "mimikatz.exe "".... exit | Out-String"  

否则powershell将威胁它作为对象,而regex只知道文本..。

就像在第二段代码中使用Get-Content -Raw一样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49896827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档