我使用mimikatz提取用于安全审计的NTLM散列。mimikatz的输出大致如下:
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",即,
User : admin
Hash NTLM: f1320e0960da374b88e40cffbec44885 为此,我使用以下正则表达式:
[regex]$regex = '(?m)(User\s:\s\w+\r\n\s*Hash NTLM:\s\w+)'现在,如果我直接在mimikatz输出上使用正则表达式:
$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读取它,那么它工作得很好:
$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在这种情况下,将返回以下行:
User : WDAGUtilityAccount
Hash NTLM: 6373ee9aae046ab1319d89b1cfd36306
User : admin
Hash NTLM: f1320e0960da374b88e40cffbec44885在不将输出存储到文件的情况下,如何进行适当的匹配?我知道\r\n,但它们似乎不起作用。
发布于 2018-04-18 11:49:43
在命令末尾添加Out-String,首先将其转换为文本:
$ntlm = Invoke-Expression -Command "mimikatz.exe "".... exit | Out-String" 否则powershell将威胁它作为对象,而regex只知道文本..。
就像在第二段代码中使用Get-Content -Raw一样。
https://stackoverflow.com/questions/49896827
复制相似问题