我正在尝试解析来自国家漏洞数据库(NVD)的xml数据,以便隔离可远程执行的漏洞(Access Vector = Network)。
我在这里已经按照其他问题来解析xml并在csv中附加我需要的数据。我没有收到任何错误消息,但我的cvs没有附加任何数据。 这是因为我的'findall'方法找不到任何东西?我没有收到任何错误消息。非常感谢任何帮助!
我需要的树中的信息是1)条目ID属性和2)cvss:access-vector元素中的文本:
<nvd>
<entry id="CVE-2018-0001">
<vuln:cvss>
<cvss:base_metrics>
<cvss:access-vector>NETWORK</cvss:access-vector>
</cvss:base_metrics>
</vuln:cvss>
</entry>
</nvd>
我的xml数据片段(包含根,一个孩子以及该孩子的所有后代):
<?xml version='1.0' encoding='UTF-8'?>
<nvd xmlns:vuln="http://scap.nist.gov/schema/vulnerability/0.4" xmlns:patch="http://scap.nist.gov/schema/patch/0.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cpe-lang="http://cpe.mitre.org/language/2.0" xmlns="http://scap.nist.gov/schema/feed/vulnerability/2.0" xmlns:scap-core="http://scap.nist.gov/schema/scap-core/0.1" xmlns:cvss="http://scap.nist.gov/schema/cvss-v2/0.2" nvd_xml_version="2.0" pub_date="2018-03-07T03:00:00" xsi:schemaLocation="http://scap.nist.gov/schema/patch/0.1 https://scap.nist.gov/schema/nvd/patch_0.1.xsd http://scap.nist.gov/schema/feed/vulnerability/2.0 https://scap.nist.gov/schema/nvd/nvd-cve-feed_2.0.xsd http://scap.nist.gov/schema/scap-core/0.1 https://scap.nist.gov/schema/nvd/scap-core_0.1.xsd">
<entry id="CVE-2018-0001">
<vuln:vulnerable-configuration id="http://nvd.nist.gov/">
<cpe-lang:logical-test operator="OR" negate="false">
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d10"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d15"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d20"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d25"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d30"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d35"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d40"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d45"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d50"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d55"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d60"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.1x46:d65"/>
</cpe-lang:logical-test>
</vuln:vulnerable-configuration>
<vuln:vulnerable-configuration id="http://nvd.nist.gov/">
<cpe-lang:logical-test operator="OR" negate="false">
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3x48:d10"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3x48:d15"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3x48:d20"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3x48:d25"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3x48:d30"/>
</cpe-lang:logical-test>
</vuln:vulnerable-configuration>
<vuln:vulnerable-configuration id="http://nvd.nist.gov/">
<cpe-lang:logical-test operator="OR" negate="false">
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x49:d10"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x49:d20"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x49:d30"/>
</cpe-lang:logical-test>
</vuln:vulnerable-configuration>
<vuln:vulnerable-configuration id="http://nvd.nist.gov/">
<cpe-lang:logical-test operator="OR" negate="false">
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d20"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d21"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d25"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d30"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d32"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d33"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d34"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d60"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d61"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d62"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1x53:d63"/>
</cpe-lang:logical-test>
</vuln:vulnerable-configuration>
<vuln:vulnerable-configuration id="http://nvd.nist.gov/">
<cpe-lang:logical-test operator="OR" negate="false">
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r1"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r2"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r3"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r4"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r8"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1:r9"/>
</cpe-lang:logical-test>
</vuln:vulnerable-configuration>
<vuln:vulnerable-configuration id="http://nvd.nist.gov/">
<cpe-lang:logical-test operator="OR" negate="false">
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r1"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r2"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r3"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r4"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r5"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r7"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.2:r8"/>
</cpe-lang:logical-test>
</vuln:vulnerable-configuration>
<vuln:vulnerable-configuration id="http://nvd.nist.gov/">
<cpe-lang:logical-test operator="OR" negate="false">
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1:r1"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:15.1:r2"/>
</cpe-lang:logical-test>
</vuln:vulnerable-configuration>
<vuln:vulnerable-configuration id="http://nvd.nist.gov/">
<cpe-lang:logical-test operator="OR" negate="false">
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r1"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r10"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r2"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r3"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r4"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r5"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r6"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r7"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r8"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:12.3:r9"/>
</cpe-lang:logical-test>
</vuln:vulnerable-configuration>
<vuln:vulnerable-configuration id="http://nvd.nist.gov/">
<cpe-lang:logical-test operator="OR" negate="false">
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d10"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d15"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d16"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d25"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d26"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d27"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d35"/>
<cpe-lang:fact-ref name="cpe:/o:juniper:junos:14.1x53:d50"/>
</cpe-lang:logical-test>
</vuln:vulnerable-configuration>
<vuln:vulnerable-software-list>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d10</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d15</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d20</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d25</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d30</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d35</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d40</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d45</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d50</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d55</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d60</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.1x46:d65</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3:r1</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3:r10</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3:r2</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3:r3</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3:r4</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3:r5</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3:r6</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3:r7</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3:r8</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3:r9</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3x48:d10</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3x48:d15</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3x48:d20</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3x48:d25</vuln:product>
<vuln:product>cpe:/o:juniper:junos:12.3x48:d30</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1:r1</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1:r2</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1:r3</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1:r4</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1:r8</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1:r9</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1x53</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1x53:d10</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1x53:d15</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1x53:d16</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1x53:d25</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1x53:d26</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1x53:d27</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1x53:d35</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.1x53:d50</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.2:r1</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.2:r2</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.2:r3</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.2:r4</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.2:r5</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.2:r7</vuln:product>
<vuln:product>cpe:/o:juniper:junos:14.2:r8</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1:r1</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1:r2</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x49:d10</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x49:d20</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x49:d30</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x53:d20</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x53:d21</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x53:d25</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x53:d30</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x53:d32</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x53:d33</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x53:d34</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x53:d60</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x53:d61</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x53:d62</vuln:product>
<vuln:product>cpe:/o:juniper:junos:15.1x53:d63</vuln:product>
</vuln:vulnerable-software-list>
<vuln:cve-id>CVE-2018-0001</vuln:cve-id>
<vuln:published-datetime>2018-01-10T17:29:00.930-05:00</vuln:published-datetime>
<vuln:last-modified-datetime>2018-02-22T21:29:02.140-05:00</vuln:last-modified-datetime>
<vuln:cvss>
<cvss:base_metrics>
<cvss:score>7.5</cvss:score>
<cvss:access-vector>NETWORK</cvss:access-vector>
<cvss:access-complexity>LOW</cvss:access-complexity>
<cvss:authentication>NONE</cvss:authentication>
<cvss:confidentiality-impact>PARTIAL</cvss:confidentiality-impact>
<cvss:integrity-impact>PARTIAL</cvss:integrity-impact>
<cvss:availability-impact>PARTIAL</cvss:availability-impact>
<cvss:source>http://nvd.nist.gov</cvss:source>
<cvss:generated-on-datetime>2018-01-30T17:21:59.327-05:00</cvss:generated-on-datetime>
</cvss:base_metrics>
</vuln:cvss>
<vuln:cwe id="CWE-416"/>
<vuln:references xml:lang="en" reference_type="UNKNOWN">
<vuln:source>BID</vuln:source>
<vuln:reference href="http://www.securityfocus.com/bid/103092" xml:lang="en">103092</vuln:reference>
</vuln:references>
<vuln:references xml:lang="en" reference_type="VENDOR_ADVISORY">
<vuln:source>SECTRACK</vuln:source>
<vuln:reference href="http://www.securitytracker.com/id/1040180" xml:lang="en">1040180</vuln:reference>
</vuln:references>
<vuln:references xml:lang="en" reference_type="VENDOR_ADVISORY">
<vuln:source>CONFIRM</vuln:source>
<vuln:reference href="https://kb.juniper.net/JSA10828" xml:lang="en">https://kb.juniper.net/JSA10828</vuln:reference>
</vuln:references>
<vuln:summary>A remote, unauthenticated attacker may be able to execute code by exploiting a use-after-free defect found in older versions of PHP through injection of crafted data via specific PHP URLs within the context of the J-Web process. Affected releases are Juniper Networks Junos OS: 12.1X46 versions prior to 12.1X46-D67; 12.3 versions prior to 12.3R12-S5; 12.3X48 versions prior to 12.3X48-D35; 14.1 versions prior to 14.1R8-S5, 14.1R9; 14.1X53 versions prior to 14.1X53-D44, 14.1X53-D50; 14.2 versions prior to 14.2R7-S7, 14.2R8; 15.1 versions prior to 15.1R3; 15.1X49 versions prior to 15.1X49-D30; 15.1X53 versions prior to 15.1X53-D70.</vuln:summary>
</entry>
</nvd>
的Python:
#Some sources I'm trying to follow
#https://www.youtube.com/watch?v=OdQ7xdXxeUA
#http://blog.appliedinformaticsinc.com/how-to-parse-and-convert-xml-to-csv-using-python/
#Step1: import lib
import csv
import xml.etree.cElementTree as ET
#Step 2: Parse xml document and get root
tree = ET.parse('nvdcve-2.0-2018.xml')
root = tree.getroot()
#Step 3: Create and open csv file
xml_data_to_csv = open('Out1.csv','w')
#Step 4: Create a list for the column headers
list_head=[]
#Step 5: Create variable to write to csv
Csv_writer=csv.writer(xml_data_to_csv)
#Step 6: Loop for each node
count=0
for element in root.findall('entry'):
List_nodes=[]
#Get head by tag
if count == 0:
av = element.findall('.//access-vector').tag
list_head.append(av)
count=+1
#Write List_nodes to csv
Csv_writer.writerow(List_nodes)
#Close csv file
xml_data_to_csv.close()
答案 0 :(得分:0)
这确实有点令人困惑,但有可能,下面的代码可以为您提供所需的项目(删除csv相关代码)。
import xml.etree.ElementTree as ET
root = ET.parse('nvdcve-2.0-2018.xml').getroot()
cvss = {'cvss':'http://scap.nist.gov/schema/cvss-v2/0.2'}
namespace = {"namespace":"http://scap.nist.gov/schema/feed/vulnerability/2.0"}
for entry in root.findall('.//namespace:entry',namespace):
entry_id = entry.get('id')
print(entry_id)
for access_vector in entry.findall('.//cvss:access-vector', cvss):
value = access_vector.text
print(value)
打印
CVE-2018-0001
NETWORK
答案 1 :(得分:0)
你是对的,它是你的findall()命令。我相信你的问题是xml文档有许多名称空间前缀:vuln,patch,cpe,scap,cvss。
xmlns:vuln="http://scap.nist.gov/schema/vulnerability/0.4"
xmlns:patch="http://scap.nist.gov/schema/patch/0.1"
xmlns:cpe-lang="http://cpe.mitre.org/language/2.0"
xmlns:scap-core="http://scap.nist.gov/schema/scap-core/0.1"
xmlns:cvss="http://scap.nist.gov/schema/cvss-v2/0.2"
要使搜索表达式正常工作,您需要判断是否在搜索中使用命名空间。 This question详细介绍了这一点。你想修改你的代码。
for element in root.findall('entry'):
List_nodes=[]
#Get head by tag
if count == 0:
namespaces = {'cvss':"http://scap.nist.gov/schema/cvss-v2/0.2"}
# add more as needed
av = element.findall('.//cvss:access-vector',namespaces).tag
list_head.append(av)