1
我目前正在使用PowerShell中的項目。該項目下載NVD數據庫XML,通過單獨的CSV掃描Nexpose掃描結果,並針對每個使用CVE編號標識的漏洞獲取CVSS評分。從XML失敗的字符串比較
看來,將表單(字符串)中的CVE編號與XML(也是一個字符串)中的CVE編號進行匹配,完全失敗。我使用的代碼如下:
clear
[xml]$nvdxml = (New-Object system.Net.WebClient).DownloadString("http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-recent.xml")
$nsmgr = New-Object System.XML.XmlNamespaceManager($nvdxml.NameTable)
$nsmgr.AddNamespace('xsi','http://www.w3.org/2001/XMLSchema-instance')
$nsmgr.AddNamespace('vuln','http://scap.nist.gov/schema/vulnerability/0.4')
$nsmgr.AddNamespace('cvss','http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-recent.xml')
$nsmgr.AddNamespace('df','http://scap.nist.gov/schema/feed/vulnerability/2.0')
$nvdxml.SelectNodes('//vuln:product',$nsmgr) | out-null
$nvdxml.SelectNodes('//vuln:vulnerable-configuration',$nsmgr) | out-null
$nvdxml.SelectNodes('//vuln:vulnerable-software-list',$nsmgr) | out-null
$nvdxml.SelectNodes('//default:nvd',$nsmgr) | out-null
$nvdxml.SelectNodes('//default:entry',$nsmgr) | out-null
$x = import-csv "test-report.csv"
$items = @()
$x | where {$_."Vulnerability Test Result Code" -like "v*"} | %{
$item = @{}
$vid = $_."Vulnerability CVE IDs"
$entry = ""
$item["Vname"] = $_."Vulnerability Title"
$item["VNode"] = $_."Asset IP Address"
$item['VID'] = $vid
$entry = $nvdxml.nvd.entry | where { $_."cve-id" -eq $vid }
$item['Score'] = $entry.cvss.base_metrics.score
$items += $item
}
$items
的$ items數組包含具有CVE ID漏洞,但字符串比較徹底失敗。當我查詢對象的類型,我得到
You cannot call a method on a null-valued expression.
At line:25 char:19
+ $entry.GetType <<<<()
+ CategoryInfo : InvalidOperation: (GetType:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
當我分配一個ID CVE爲一個字符串,並試圖從XML該字符串相關的漏洞,比較不返回任何結果;但是,當我用相同ID的帶引號的字符串替換變量時,查詢返回正確的結果。因此,這將失敗
$cveID = "CVE-2003-1567"
$nvdxml.nvd.entry | where { $_."cve-id" -eq $cveID }
然而,這工作正常
$nvdxml.nvd.entry | where { $_."cve-id" -eq "CVE-2003-1567" }
任何想法?我已經明確嘗試將$ _。「cve-id」和$ cveID作爲字符串進行轉換,結果相同。
要麼使用ISE調試和精細什麼$ cveID的價值在於前行,或者乾脆把$ cveID腳本就行了上述$ nvdxml.nvd.entry | ? ...聽起來像$ cveID沒有你期望的價值。 –
我正在使用ISE進行調試,並驗證了$ cveID具有正確的值。我甚至嘗試在即時窗口中設置$ cveID,然後正常執行對XML的查詢並仍然失敗。 – user1639232
沒有CSV文件就很難說出發生了什麼,所以我在這裏猜測一下。看起來您正在比較CSV文件的兩個屬性(即'$ _。「cve-id」'和'$ vid')。你不想比較一個來自CSV和另一個來自XML?此外,基於名稱,它看起來像'$ vid'可能是一個數組('$ vid = $ _。「漏洞CVE ID」')。如果這是真的,那麼它看起來像你試圖比較一個值到一個數組(即'$ _。「cve-id」-eq $ vid')。 – David