首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell -比较两种漏洞扫描,并将重复和差异输出到新的csv中。

Powershell -比较两种漏洞扫描,并将重复和差异输出到新的csv中。
EN

Stack Overflow用户
提问于 2020-01-23 10:03:04
回答 1查看 72关注 0票数 0

到目前为止,我已经有了一个工作脚本来比较两个csvs并输出副本。但是,我希望将old.csv与new.csv进行比较,并输出来自new.csv的所有内容,并在“注释”列中注明是否存在重复的漏洞。

以下是示例CSV:

old.csv:

代码语言:javascript
复制
First_Seen,Occurences,Scan Date / Last Seen,Vendor_Severity,Vulnerability Signature,Vulnerability_ID,Vulnerability_Description,Remediation,Comments
10/14/19,1,12/9/19,5,This is an old vulnerability #1,fixthis#1,this is bad,developers to implement patch,
10/13/19,4,12/9/19,5,This is also an old vuln.,fixthis#2,this will melt your computer,False-positive,False-Positive
10/13/19,4,12/9/19,5,This vulnerability was fixed later,fixthis#3,don't even…,Exception filed,Exception filed

new.csv

代码语言:javascript
复制
First_Seen,Occurences,Scan Date / Last Seen,Vendor_Severity,Vulnerability Signature,Vulnerability_ID,Vulnerability_Description,Remediation,Comments
10/14/20,1,12/9/19,5,This is an old vulnerability #1,fixthis#1,this is bad,,
10/13/19,4,12/9/19,5,This is also an old vuln.,fixthis#2,this will melt your computer,,
10/13/19,4,12/9/19,5,This is a new vulnerability!,never seen before vuln,wow!,,

如果格式很难查看,下面是new.csv在excel中的样子:

new.csv

预期:

预期结果

“补救”和“注释”列在old.csv中手动填写。我希望脚本将这两个字段从old.csv传递到new.csv,以获得任何副本。

问:如何确定副本?

答:我的脚本匹配两个csv的"First_Seen“(A列)和”漏洞签名“(E列)。如果在这两个字段中都有重复对象的任何行,则认为这是重复的漏洞。

任何在new.csv中没有出现在old.csv中的新漏洞,我希望它在注释字段中指明“这是一个新的秃鹫”。这是一个简化的示例,我删除了许多不必要的列,每个文件通常包含数百行。

到目前为止,这是我的剧本:

代码语言:javascript
复制
$oldfile = import-csv -Path "/Users/Larbear/Documents/Test/old.csv" 
$newfile = import-csv -Path "/Users/Larbear/Documents/Test/new.csv"
Compare-Object -ReferenceObject $oldfile -DifferenceObject $newfile -Property 'Vulnerability Signature',First_Seen -PassThru -includeequal | Where SideIndicator -EQ "==" | Select * -ExcludeProperty SideIndicator |
Export-Csv -Path .\comparison.csv -NoTypeInformation

这只会起到以下作用:

  1. 从这两个文件输出重复项
  2. 从old.csv继承“注释”和“补救”对象

我仍然需要的是:

  1. 从new.csv输出所有行
  2. 将old.csv中的“注释”和“补救”对象转到任何重复的
  3. 对于在old.csv/ new.csv唯一中找不到的任何行,请在“注释”字段中指示:‘这是一个新的外阴“

谢谢大家的帮助!

EN

回答 1

Stack Overflow用户

发布于 2020-01-23 14:34:53

首先,将$oldfile数据转换为一个哈希表,其中包含有"First_Seen“和”漏洞签名“的键。

然后,用相应的$newFile数据更新每一行$oldfile

代码语言:javascript
复制
$h = $oldfile | Group-Object First_Seen,"Vulnerability Signature" -AsHashTable -AsString

$newfile | foreach {
    $oldData = $h[$_.First_Seen,$_."Vulnerability Signature" -join ", "]
    $_.Remediation = $oldData.Remediation
    $_.Comments = if ($oldData) { $oldData.Comments } else { "This is a new vuln" }
}

$newfile | Export-Csv .\comparison.csv -NoTypeInformation

假设有一个“严重性”栏,其值为“高”、“中”或“低”,则添加“到期日”的方式如下:

代码语言:javascript
复制
$h = $oldfile | Group-Object First_Seen,"Vulnerability Signature" -AsHashTable -AsString
$limit = @{ High = 60; Medium = 90; Low = 180 }

$newfile | foreach {
    $oldData = $h[$_.First_Seen,$_."Vulnerability Signature" -join ", "]
    $_.Remediation = $oldData.Remediation
    $_.Comments = if ($oldData) { $oldData.Comments } else { "This is a new vuln" }
    $_ | Add-Member "Due Date" ([datetime]$_.First_Seen).AddDays($limit[$_.Severity]).ToString("MM/dd/yy")
}

$newfile | Export-Csv .\comparison.csv -NoTypeInformation
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59875851

复制
相关文章

相似问题

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