我正在尝试使用VBscript。 (我对VBScript并不擅长,实际上并没有使用它几年,但它是我在目前工作的环境中工作的少数工具之一,我至少之前使用过它.Powershell是另一种可以使用的工具,但我在Powershell中的经验甚至更少,而且只用于几点任务。)
关于这个问题: 我有两个输入文件:TEXT和XML 将有一个新的输出文件:XML 文本文件中的数据将用于更新XML文件。
文件1:文字
! uninteresting text
! uninteresting text
! uninteresting text
! V-1: This text discusses this vulnerability number.
All of this text is important, but it only applies to #1.
It does not apply to #2, or #3.
!
! V-2: This text discusses vulnerability #2.
It should be noted that it is multiple lines.
! V-3: This text discusses the 3rd vulnerability.
!
!
! __ ???
! V-4: This text discusses the 4th vulnerability
There is other text here, that goes on and on,
talking about this 4th vulnerability.
It may or may not be important to you.
EOF
文件2:XMl文件
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LIST>
<ASSET>
<ASSET_TYPE></ASSET_TYPE>
<HOST_NAME></HOST_NAME>
<HOST_IP></HOST_IP>
</ASSET>
<AUDIT>
<iAUDIT>
<AUDIT_INFO></AUDIT_INFO>
<VULN>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>V-1</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA></ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>false</ATTRIBUTE_DATA>
</AUDIT_DATA>
<FINDING_DETAILS />
<COMMENT />
</VULN>
<VULN>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>V-2</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA></ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>false</ATTRIBUTE_DATA>
</AUDIT_DATA>
<FINDING_DETAILS />
<COMMENT />
</VULN>
<VULN>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>V-3</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA></ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>false</ATTRIBUTE_DATA>
</AUDIT_DATA>
<FINDING_DETAILS />
<COMMENT />
</VULN>
<VULN>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>V-4</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA></ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>false</ATTRIBUTE_DATA>
</AUDIT_DATA>
<FINDING_DETAILS />
<COMMENT />
</VULN>
</iAUDIT>
</AUDIT>
</LIST>
我想制作这个输出文件:
file3:XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<LIST>
<ASSET>
<ASSET_TYPE></ASSET_TYPE>
<HOST_NAME></HOST_NAME>
<HOST_IP></HOST_IP>
</ASSET>
<AUDIT>
<iAUDIT>
<AUDIT_INFO></AUDIT_INFO>
<VULN>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>V-1</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA></ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>false</ATTRIBUTE_DATA>
</AUDIT_DATA>
<FINDING_DETAILS>: This text discusses this vulnerability number.
All of this text is important, but it only applies to #1.
It does not apply to #2, or #3.
!
! </FINDING_DETAILS>
<COMMENT />
</VULN>
<VULN>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>V-2</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA></ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>false</ATTRIBUTE_DATA>
</AUDIT_DATA>
<FINDING_DETAILS>: This text discusses vulnerability #2.
It should be noted that it is multiple lines.
! </FINDING_DETAILS>
<COMMENT />
</VULN>
<VULN>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>V-3</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA></ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>false</ATTRIBUTE_DATA>
</AUDIT_DATA>
<FINDING_DETAILS>: This text discusses the 3rd vulnerability.
!
!
! __ ???
! </FINDING_DETAILS>
<COMMENT />
</VULN>
<VULN>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Num</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>V-4</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Severity</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA></ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Vuln_Explanation</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>This is a vulnerability.</ATTRIBUTE_DATA>
</AUDIT_DATA>
<AUDIT_DATA>
<VULN_ATTRIBUTE>Documentable</VULN_ATTRIBUTE>
<ATTRIBUTE_DATA>false</ATTRIBUTE_DATA>
</AUDIT_DATA>
<FINDING_DETAILS>: This text discusses the 4th vulnerability
There is other text here, that goes on and on,
talking about this 4th vulnerability.
It may or may not be important to you.</FINDING_DETAILS>
<COMMENT />
</VULN>
</iAUDIT>
</AUDIT>
</LIST>
如何在VBScript中完成?
我找到了几个引用,但是如何在XML中获取V-1,V-2,V-3,V-4。 AUDIT_DATA被多次使用,我无法弄清楚如何抓住我想要的那个。没有抓住正确的,我就无法更新FINDING_DETAIL。
我不想抓住漏洞号码的第一个或第n个出现,我希望能够专门找到V号码。在这种特殊情况下,它是文件中AUDIT_DATA的第一个实例,如果有任何帮助,则V-数字在XML文件中是有序的。
我希望其他人之前有类似的问题,并且可以提供帮助。
我找到了这些特定的参考链接,但对VBScript的经验不足以将其吸收到可行的解决方案中。
Microsoft文档出于某些原因喜欢提供Visual Basic示例,但我不确定如果没有Visual Studio(我不会这样做),我可以运行它。
这些是类似的,但与我的问题不同:
VBScript to modify an Element (of many, with same Element names but with different Attributes)?
Locate XML node with specific attribute and change it
reading xml file with vbscript
这非常相似,但是是VB.net,而不是VBScript:
Parsing XML file with nodes of same name with VB.NET
这是我目前的代码,但它远不是一个解决方案,所以我不确定它除了表明我距离解决方案还有几英里之外还做了什么。
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = "False"
xmlDoc.Load("C:\scripts\audit\original.xml")
WScript.echo "ShowAllVULN_ATTRIBUTENodes"
set colVuln_Attribute = xmlDoc.selectNodes ("/LIST/AUDIT/iAUDIT/VULN/AUDIT_DATA/VULN_ATTRIBUTE")
For Each objNode in colVuln_Attribute
WScript.Echo objNode.Text
Next
WScript.echo "Show All Attribute Data"
set colAttribute_Data= xmlDoc.selectNodes ("/LIST/AUDIT/iAUDIT/VULN/AUDIT_DATA/ATTRIBUTE_DATA")
For Each objNode in colAttribute_Data
WScript.Echo objNode.Text
Next
&#39;这就是我可以用XML做的程度。
&#39;也许它会帮助我重新思考我想要解决这个问题的原始想法,当我认为这是微不足道的时候,但我觉得琐碎取决于你的经验和技能水平。 &#39;我想要的最终结果是: &#39;对于XML中的每个V-number,将FINDING_DETAILS替换为匹配V-number的多行文本。 &#39; &#39;我想引用这个XML数据:
' V-1, FINDING_DETAILS
' V-2, FINDING_DETAILS
' V-3, FINDING_DETAILS
' V-4, FINDING_DETAILS
&#39;我想构建一个这样的表来表示文本文件输入: &#39; (我甚至没有开始这一部分。)
' V-1, multi-line text
' V-2, multi-line text
' V-3, multi-line text
' V-4, multi-line text
然后,想法是使用V值作为主键,并更新FINDING_DETAILS。
请注意: 我修复了XML中导致无法加载的两个拼写错误: 独立= YES
XML VBScript重复节点名称XPath
答案 0 :(得分:0)
我建议只将文本文档和XML文档作为文本文件处理,而不是使用vbscript提供的XML节点细分。
这是一个脚本,它分割你的文本文件,搜索V- *并收集字符串,然后收集下一个字符串,直到你的End Of Statement触发器得到处理。此触发器将在每个漏洞描述的末尾。
Dim a, text, Vulnerabilities(), eos: a = "C:\testenv\text.txt" : eos = false
Redim Vulnerabilities(0)
text = split(CreateObject("Scripting.FileSystemObject").OpenTextFile(a, 1).ReadAll, vbcrlf)
for i=0 to ubound(text)
if instr(text(i), "V-") then
eos = false
Vulnerabilities(ubound(Vulnerabilities)) = text(i)
redim preserve Vulnerabilities(ubound(Vulnerabilities) + 1)
elseif not eos then
if instr(text(i), "END OF STATEMENT CHECK" then
eos = true
Vulnerabilities(ubound(Vulnerabilities)) = Vulnerabilities(ubound(Vulnerabilities)) & "ENDSTATEMENT"
else
Vulnerabilities(ubound(Vulnerabilities)) = text(i)
redim preserve Vulnerabilities(ubound(Vulnerabilities) + 1)
end if
end if
next
redim preserve Vulnerabilities(ubound(Vulnerabilities) - 1) 'trim off extra dynamic entry
现在您已经隐藏了所有漏洞数据,您可以一次更换一行特定的XML段并并行浏览漏洞数据,一次填充一行XML文件。有点像查看两个文档并从第二个文档中删除数据,然后将其粘贴到第一个文档上的标记上。
Dim b, xml, counter : b = "C:\testenv\xml.xml" : counter = 0
xml = split(CreateObject("Scripting.FileSystemObject").OpenTextFile(a, 1).ReadAll, vbcrlf)
for i=0 to ubound(xml)
if instr(xml(i), "Vuln_Num") then
for j=counter to ubound(Vulnerabilities)
if instr(Vulnerabilities(j), "V-") then
replace(xml(i), "VulnNum", Vulnerabilities(j)
exit for
end if
'additional conditional statements can be placed here.
'such as detecting when the "ENDSTATEMENT" is in
'the vulnerability string and ending the string replacements.
next
end if
next
我已经使用XML方法和原始数据文件读取方法处理了vbscript中的XML,我更喜欢以编程方式将其作为文本数据读取,而不是使用XML节点方法。它更简单。祝你好运。