我使用了python库Nvdlib,它的目的是从Nist中提取信息。在这些信息中,我对CPE特别是api输出感兴趣。下面是我的代码:
import nvdlib
r = nvdlib.searchCVE(cveId='CVE-2019-19781')[0]
conf = r.configurations #list in ouput
for x in conf:
txt = ', '.join(str(x) for x in x.nodes) #transforme list to string
print(x)
输出:
{'operator': 'AND', 'negate': False, 'nodes': [{'operator': 'OR', 'negate': False, 'cpeMatch': [{'vulnerable': True, 'criteria': 'cpe:2.3:o:citrix:application_delivery_controller_firmware:10.5:*:*:*:*:*:*:*', 'matchCriteriaId': 'D56F2AAF-4658-484C-9A3A-D8A52BA5B10C'}, {'vulnerable': True, 'criteria': 'cpe:2.3:o:citrix:application_delivery_controller_firmware:11.1:*:*:*:*:*:*:*', 'matchCriteriaId': '8CE9E655-0D97-4DCF-AC2F-79DCD12770E5'}, {'vulnerable': True, 'criteria': 'cpe:2.3:o:citrix:application_delivery_controller_firmware:12.0:*:*:*:*:*:*:*', 'matchCriteriaId': '49454F7D-77B5-46DF-B95C-312AF2E68EAD'}, {'vulnerable': True, 'criteria': 'cpe:2.3:o:citrix:application_delivery_controller_firmware:12.1:*:*:*:*:*:*:*', 'matchCriteriaId': '201246D4-1E22-4F28-9683-D6A9FD0F7A6B'}, {'vulnerable': True, 'criteria': 'cpe:2.3:o:citrix:application_delivery_controller_firmware:13.0:*:*:*:*:*:*:*', 'matchCriteriaId': 'A3A50966-5554-4919-B6CE-BD8F6FF991D8'}]}, {'operator': 'OR', 'negate': False, 'cpeMatch': [{'vulnerable': False, 'criteria': 'cpe:2.3:h:citrix:application_delivery_controller:-:*:*:*:*:*:*:*', 'matchCriteriaId': '80E69E10-6F40-4FE4-9D84-F6C25EAB79D8'}]}]}
{'operator': 'AND', 'negate': False, 'nodes': [{'operator': 'OR', 'negate': False, 'cpeMatch': [{'vulnerable': True, 'criteria': 'cpe:2.3:o:citrix:netscaler_gateway_firmware:10.5:*:*:*:*:*:*:*', 'matchCriteriaId': '7E0FA8E2-3E8F-481E-8C39-FB00A9739DFC'}, {'vulnerable': True, 'criteria': 'cpe:2.3:o:citrix:netscaler_gateway_firmware:11.1:*:*:*:*:*:*:*', 'matchCriteriaId': 'A5D73B9A-59AA-4A38-AEAF-7EAB0965CD7E'}, {'vulnerable': True, 'criteria': 'cpe:2.3:o:citrix:netscaler_gateway_firmware:12.0:*:*:*:*:*:*:*', 'matchCriteriaId': 'B9F3ED0E-7F3D-477B-B645-77DA5FC7F502'}, {'vulnerable': True, 'criteria': 'cpe:2.3:o:citrix:netscaler_gateway_firmware:12.1:*:*:*:*:*:*:*', 'matchCriteriaId': '58349F8E-3177-413A-9CBE-BB454DCD31E4'}]}, {'operator': 'OR', 'negate': False, 'cpeMatch': [{'vulnerable': False, 'criteria': 'cpe:2.3:h:citrix:netscaler_gateway:-:*:*:*:*:*:*:*', 'matchCriteriaId': 'DEBB9B6A-1CAD-4D82-9B1E-939921986053'}]}]}
{'operator': 'AND', 'negate': False, 'nodes': [{'operator': 'OR', 'negate': False, 'cpeMatch': [{'vulnerable': True, 'criteria': 'cpe:2.3:o:citrix:gateway_firmware:13.0:*:*:*:*:*:*:*', 'matchCriteriaId': 'A80EAFB1-82DA-49BE-815D-D248624B442C'}]}, {'operator': 'OR', 'negate': False, 'cpeMatch': [{'vulnerable': False, 'criteria': 'cpe:2.3:h:citrix:gateway:-:*:*:*:*:*:*:*', 'matchCriteriaId': '3EF98B43-71DB-4230-B7AC-76EC2B1F0533'}]}]}
我的手术:我得到了信息,用上面的代码将输出从“list”转换为string(我不知道这是不是最好的方法)。
然后我用变量“to_delet_char = [”'",“"”',“{”,"}",““vulnerable”,“删除无用的元素:真,“准则”:“,““,:“,”“,““]",“,”",“OR求反:“,“运算符:“,“False”,“cpeMatch:“,“[",“]",]
我的目标是删除输出中除“cpe”以外的所有信息,以得到“list”或“dictionary”形式的结果,其中我将只找到以下类型的元素:
“cpe:2.3:o:Citrix:网络定标器网关固件:12.0::::::”
我管理没有困难删除一切,但匹配序列号是不同的,每次我不能瞄准它。
是否有解决方案通过另一个库或不“只恢复”cpe或删除除“cpe”之外的所有内容,然后将它们转换为列表或字典,用于数据库条目
3条答案
按热度按时间6vl6ewon1#
由于这种结构是词典列表的交替,逐渐投入其中,你可以得到必要的元素。
yqyhoc1h2#
感谢大家的回答,我设法把你发给我的所有东西混合在一起,这里是最后的代码,允许我列出所有的CPE
输出量:
enter image description here
因此,一切工作,我会找到一个解决方案,输入每个元素在一个列表或字典最后什么将是最简单的未来处理
c90pui9n3#
我认为删除字符串中的所有内容是很困难的,因为你不能预见字符串中将来会有什么,但是你可以找到cpe子串的模式。
简单地添加这个,对于每个循环,你寻找子字符串,然后做一些切片,分割和修剪,以获得最终的输出。
这只是一个只有一行的例子,它会给予你下面的输出,
上面我所展示的只是一次迭代中的一个cpe子字符串。可能你需要在那个迭代中找到几个。你可以参考这个很好的例子来了解如何检索多个索引〉https://stackoverflow.com/a/3873422/12128167
对于数据的存储,最简单的方法是使用一个列表,只需声明一个空的
list=[]
,然后将其追加到list.append("your output")
的末尾。如果你打算使用其他python集合,你可以探索它们〉https://www.w3schools.com/python/python_dictionaries.asp