2017-11-15 19 views
0

現在、CSVファイルを受け取り、CVEを抽出し、影響を受けるホストをリストに格納する影響を受ける小さなPython 3.6スクリプトを以下のように作成しています。 見出しとデータを含むリストをCSVに書き込む

CVE-2009-1234 
10.11.1.1:80 
10.11.1.3:80 
10.11.1.4:80 
10.11.1.2:80 
10.11.1.22:80 
10.11.1.2:80 
10.11.1.27:80 
10.11.1.23:80 
10.11.1.29:80 
10.11.1.228:80 
CVE-2015-1234 
10.11.1.224:443 
10.11.1.224:80 
10.11.1.74:8080 
CVE-2015-1235 
10.11.1.22 
CVE-2017-1234 
10.11.1.22:443 
10.11.1.22:80 
10.11.1.73:8080 
CVE-2009-1235 
10.11.1.22:443 
10.11.1.22:80 

は、しかし、私は悩みので、各CVEをCSVファイルには、このデータの書き込みを持っていますし、ホストが例えば別々の列にある影響を受けています:

CVE-2009-1234 | CVE-2015-1234  | ... | 
-----------------+--------------------+-----+ 
10.11.1.1:80  | 10.11.1.224:443 |  | 
10.11.1.3:80  | 10.11.1.224:80  |  | 
10.11.1.4:80  | 10.11.1.74:8080 |  | 
10.11.1.2:80  |     |  | 
10.11.1.22:80 |     |  | 
10.11.1.2:80  |     |  | 
10.11.1.22:80 |     |  | 
10.11.1.23:80 |     |  | 
10.11.1.29:80 |     |  | 
10.11.1.228:80 |     |  | 

私が当初考えていたこと、私はリスト初期化場合CVEの数と同じサイズで、CVE番号のインデックス検索を行いました。新しいホストの対応するインデックスに各ホストを置くことができました。しかし、新しい行を初期化しようとすると難しくなりました。満たされました。

私はまた、CSVライブラリが明らかに正当な理由のためではないんです、列の機能を(挿入している天気を覗き込むか

次のように私の作業コードは次のとおりです。

import csv 

filename = 'report.csv' 
cve = set() 

data = [] 

with open(filename) as csvfile: 
    reader = csv.reader(csvfile, delimiter=',') 

    for row in reader: 
     if ',' in row[11]: 
      multi_cve = row[11].split(', ') 
      for entry in multi_cve: 
       cve.add(entry) 
     else: 
      cve.add(row[11]) 

    csvfile.seek(0) 

    for uniq_cve in cve: 
     data.append(uniq_cve) 
     for row in reader: 
      if row[2] == '': 
       full_address = row[0] 
      else: 
       full_address = row[0] + ':' + row[2] 

      if ',' in row[11]: 
       multi_cve = row[11].split(', ') 
       for entry in multi_cve: 
        if uniq_cve == entry: 
         data.append(full_address) 
      else: 
       if uniq_cve == row[11]: 
        data.append(full_address) 
     csvfile.seek(0) 

for entry in data: 
    print(entry) 

は、追加するのを忘れCSVの例:。

IP,Hostname,Port,Port Protocol,CVSS,Severity,Solution Type,NVT Name,Summary,Specific Result,NVT OID,CVEs,Task ID,Task Name,Timestamp,Result ID,Impact,Solution,Affected Software/OS,Vulnerability Insight,Vulnerability Detection Method,Product Detection Result,BIDs,CERTs,Other References 
10.11.1.1,,80,tcp,5,Medium,VendorFix,IIS Service Pack - 404,Ensure that the server is running the latest stable Service Pack,The remote IIS server *seems* to be Microsoft IIS 6.0 - w2k3 build 3790,1.3.6.1.4.1.25623.1.0.11874,NOCVE,80e72026-6304-4d23-8cdf-e4789507d231,Scan of all pinged hosts,2017-11-14T05:19:39Z,8a3d71d2-6fa4-4f06-ab7f-b8965667c56b,,"The Patch level (Service Pack) of the remote IIS server appears to be lower 
    than the current IIS service pack level. As each service pack typically 
    contains many security patches, the server may be at risk. 

    Caveat: This test makes assumptions of the remote patch level based on static 
    return values (Content-Length) within the IIS Servers 404 error message. 
    As such, the test can not be totally reliable and should be manually confirmed.",,," 
Details: 
IIS Service Pack - 404 
(OID: 1.3.6.1.4.1.25623.1.0.11874) 
Version used: $Revision: 4703 $ 
",,,, 
10.11.1.1,,80,tcp,5,Medium,VendorFix,IIS Service Pack - 404,Ensure that the server is running the latest stable Service Pack,The remote IIS server *seems* to be Microsoft IIS 6.0 - w2k3 build 3790,1.3.6.1.4.1.25623.1.0.11874,NOCVE,80e72026-6304-4d23-8cdf-e4789507d231,Scan of all pinged hosts,2017-11-14T05:19:39Z,2ba7442c-5a46-4628-95d3-a2decae3a57a,,"The Patch level (Service Pack) of the remote IIS server appears to be lower 
    than the current IIS service pack level. As each service pack typically 
    contains many security patches, the server may be at risk. 

    Caveat: This test makes assumptions of the remote patch level based on static 
    return values (Content-Length) within the IIS Servers 404 error message. 
    As such, the test can not be totally reliable and should be manually confirmed.",,," 
Details: 
IIS Service Pack - 404 
(OID: 1.3.6.1.4.1.25623.1.0.11874) 
Version used: $Revision: 4703 $ 
",,,, 
10.11.1.1,,80,tcp,4.3,Medium,VendorFix,Adobe BlazeDS XML and XML External Entity Injection Vulnerabilities,Adobe BlazeDS is prone to an XML-injection vulnerability and an XML External Entity injection vulnerability.,Vulnerable url: http://10.11.1.10/flex2gateway/http,1.3.6.1.4.1.25623.1.0.105211,CVE-2009-3960,80e72026-6304-4d23-8cdf-e4789507d231,Scan of all pinged hosts,2017-11-14T05:19:39Z,0a09cb06-7ae6-4234-90f3-bb61f10da46a,Attackers can exploit these issues to obtain sensitive information and carry out other attacks.,"Updates are available, please refer to the linked advisory.","The following applications are affected: 

BlazeDS 3.2 and earlier versions 
LiveCycle 9.0, 8.2.1, and 8.0.1 
LiveCycle Data Services 3.0, 2.6.1, and 2.5.1 
Flex Data Services 2.0.1 
ColdFusion 9.0, 8.0.1, 8.0, and 7.0.2",,"Send an modificated GET request and check the response 
Details: 
Adobe BlazeDS XML and XML External Entity Injection Vulnerabilities 
(OID: 1.3.6.1.4.1.25623.1.0.105211) 
Version used: $Revision: 7293 $ 
",,38197,,"http://www.securityfocus.com/bid/38197, http://www.adobe.com/support/security/bulletins/apsb10-05.html" 
+0

kは好きですか? –

+0

質問をCSV –

+0

の例で更新しました。このファイルの他のランダムな場所にカンマがあるようです。 「ColdFusion 9.0、8.0.1、8.0、および7.0.2」。ファイルの区切り文字に選択肢があるのか​​、それともあなたのものなのでしょうか? –

答えて

0

は、私はそれが最善の解決策ではないかもしれない最終的には解決策になってしまったが、それは私の目的のために働く私がやったこと:

  • の代わりに、私はその後、cve_listsで最長のリストを見つける私は リストcve_lists
  • のリストを作成した1つのリストにすべてのものを挿入する - 私たちは最低でも必要な行数を教えてくれる

コードは次のとおりです。

CSVファイルのトイレを何
longest_list = len(max(cve_lists,key=len)) 

rows = [] 
row = [] 

# works out the maximum number of iterations we need to get all entries 
for count in range(0, (len(cve) * longest_list)): 
    for entry in cve_lists: 
     try: 
      row.append(entry[0]) 
      entry.pop(0) 
     except IndexError: 
      # if there is no index, we know there is no data and 
      # append a blank entry 
      row.append('') 

    rows.append(row) 
    row = [] 

with open(args.file , 'w') as resultFile: 
    wr = csv.writer(resultFile, dialect='excel') 
    wr.writerows(rows) 
関連する問題