Skip to content
Snippets Groups Projects
Commit 02e27eab authored by qweqweasdasd's avatar qweqweasdasd
Browse files

Minor Bug fixes

parent ea8c6816
No related branches found
No related tags found
No related merge requests found
...@@ -2,17 +2,16 @@ ...@@ -2,17 +2,16 @@
#auth_name = 'backbone' #auth_name = 'backbone'
#auth_passwd = 'krowfodwas3olrab' #auth_passwd = 'krowfodwas3olrab'
from hashlib import new
from gvm.connections import TLSConnection from gvm.connections import TLSConnection
from gvm.protocols.gmpv208 import Gmp, AliveTest from gvm.protocols.gmpv208 import Gmp, AliveTest
from gvm.transforms import EtreeTransform from gvm.transforms import EtreeTransform
from gvm.xml import pretty_print from gvm.xml import pretty_print
from time import time, sleep from time import time, sleep
import logging import logging
from datetime import datetime
import json import json
import base64 import base64
from sys import argv, exit from sys import argv, exit
import socket
def get_version(): def get_version():
with Gmp(connection, transform=transform) as gmp: with Gmp(connection, transform=transform) as gmp:
...@@ -71,7 +70,7 @@ def get_or_create_port_list(port_list_name, ports): ...@@ -71,7 +70,7 @@ def get_or_create_port_list(port_list_name, ports):
############## TARGET ################################## ############## TARGET ##################################
def create_target(name,ip,port_list,ovs_ssh_credential_id): def create_target(name,ip,port_list,ovs_ssh_credential):
o = dict() o = dict()
with Gmp(connection, transform=transform) as gmp: with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd) gmp.authenticate(auth_name, auth_passwd)
...@@ -80,7 +79,7 @@ def create_target(name,ip,port_list,ovs_ssh_credential_id): ...@@ -80,7 +79,7 @@ def create_target(name,ip,port_list,ovs_ssh_credential_id):
comment = "", comment = "",
hosts=[ip], hosts=[ip],
port_list_id = port_list['id'], port_list_id = port_list['id'],
ssh_credential_id = ovs_ssh_credential_id, ssh_credential_id = ovs_ssh_credential['id'],
alive_test=AliveTest('Consider Alive')) alive_test=AliveTest('Consider Alive'))
status = res.xpath('@status')[0] status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0] status_text = res.xpath('@status_text')[0]
...@@ -116,10 +115,10 @@ def delete_target(target): ...@@ -116,10 +115,10 @@ def delete_target(target):
else: else:
print(f"ERROR {status}: {status_text}") print(f"ERROR {status}: {status_text}")
def get_or_create_target(target_name,ip,port_list,ovs_ssh_credential_id): def get_or_create_target(target_name,ip,port_list,ovs_ssh_credential):
res = get_targets(target_name) res = get_targets(target_name)
if len(res) == 0: if len(res) == 0:
t = create_target(target_name,ip,port_list,ovs_ssh_credential_id) t = create_target(target_name,ip,port_list,ovs_ssh_credential)
return get_targets(t['id'])[0] return get_targets(t['id'])[0]
elif len(res) == 1: elif len(res) == 1:
return res[0] return res[0]
...@@ -141,15 +140,15 @@ def search_and_delete_all_targets(target_name): ...@@ -141,15 +140,15 @@ def search_and_delete_all_targets(target_name):
############## TASK ################################## ############## TASK ##################################
def create_task(name, config_id, target_id, scanner_id): def create_task(name, config, target, scanner):
o = dict() o = dict()
with Gmp(connection, transform=transform) as gmp: with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd) gmp.authenticate(auth_name, auth_passwd)
res = gmp.create_task( res = gmp.create_task(
name=name, name=name,
config_id=config_id, config_id=config['id'],
target_id=target_id, target_id=target['id'],
scanner_id=scanner_id) scanner_id=scanner['id'])
status = res.xpath('@status')[0] status = res.xpath('@status')[0]
status_text = res.xpath('@status_text')[0] status_text = res.xpath('@status_text')[0]
if status == "201": if status == "201":
...@@ -179,10 +178,10 @@ def get_tasks(filter_str): ...@@ -179,10 +178,10 @@ def get_tasks(filter_str):
res.append(o) res.append(o)
return res return res
def get_or_create_task(task_name, config_id, target_id, scanner_id): def get_or_create_task(task_name, config, target, scanner):
res = get_tasks(task_name) res = get_tasks(task_name)
if len(res) == 0: if len(res) == 0:
t = create_task(task_name, config_id, target_id, scanner_id) t = create_task(task_name, config, target, scanner)
return get_tasks(t['id'])[0] return get_tasks(t['id'])[0]
elif len(res) == 1: elif len(res) == 1:
return res[0] return res[0]
...@@ -240,6 +239,14 @@ def delete_task(task): ...@@ -240,6 +239,14 @@ def delete_task(task):
############## REPORTS #####################################3 ############## REPORTS #####################################3
class report_formats:
anonymous_xml = "5057e5cc-b825-11e4-9d0e-28d24461215b"
csv_results = "c1645568-627a-11e3-a660-406186ea4fc5"
itg = "77bd6c4a-1f62-11e1-abf0-406186ea4fc5"
pdf = "c402cc3e-b531-11e1-9163-406186ea4fc5"
txt = "a3810a62-1f62-11e1-9219-406186ea4fc5"
xml = "a994b278-1f62-11e1-96ac-406186ea4fc5"
def get_report_formats(): def get_report_formats():
# |------------- ID -----------------| |--- NAME ---| # |------------- ID -----------------| |--- NAME ---|
# 5057e5cc-b825-11e4-9d0e-28d24461215b Anonymous XML # 5057e5cc-b825-11e4-9d0e-28d24461215b Anonymous XML
...@@ -297,7 +304,7 @@ def save_severity_report(task, severity_filename): ...@@ -297,7 +304,7 @@ def save_severity_report(task, severity_filename):
with Gmp(connection, transform=transform) as gmp: with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd) gmp.authenticate(auth_name, auth_passwd)
res = gmp.get_report(task['report_id'], res = gmp.get_report(task['report_id'],
report_format_id="5057e5cc-b825-11e4-9d0e-28d24461215b", report_format_id=report_formats.anonymous_xml,
ignore_pagination=True, ignore_pagination=True,
details="1") details="1")
severities = res.xpath('report/report/ports/port/threat/text()') severities = res.xpath('report/report/ports/port/threat/text()')
...@@ -315,7 +322,7 @@ def get_severity(task): ...@@ -315,7 +322,7 @@ def get_severity(task):
with Gmp(connection, transform=transform) as gmp: with Gmp(connection, transform=transform) as gmp:
gmp.authenticate(auth_name, auth_passwd) gmp.authenticate(auth_name, auth_passwd)
res = gmp.get_report(task['report_id'], res = gmp.get_report(task['report_id'],
report_format_id="5057e5cc-b825-11e4-9d0e-28d24461215b", report_format_id=report_formats.anonymous_xml,
ignore_pagination=True, ignore_pagination=True,
details="1") details="1")
severities = res.xpath('report/report/ports/port/threat/text()') severities = res.xpath('report/report/ports/port/threat/text()')
...@@ -339,8 +346,7 @@ def get_reports(filter_str="rows=-1"): ...@@ -339,8 +346,7 @@ def get_reports(filter_str="rows=-1"):
lo.append(o) lo.append(o)
return lo return lo
def print_pretty_json(j):
print(json.dumps(j,sort_keys=True,indent=4))
def get_numeric_severity(severity): def get_numeric_severity(severity):
if severity == "Log": if severity == "Log":
...@@ -378,50 +384,55 @@ def process_global_severity(severities): ...@@ -378,50 +384,55 @@ def process_global_severity(severities):
else: else:
severities['global'] = "NOK" severities['global'] = "NOK"
return severities return severities
def print_pretty_json(j):
print(json.dumps(j,sort_keys=True,indent=4))
def import_dep_info(file_path, endpoints_to_scan):
with open(file_path) as f:
data = json.load(f)
endpoints = dict()
for key in data['outputs'].keys():
if key in endpoints_to_scan:
endpoint = str(data['outputs'][key]).split("/")[2]
print("endpoint",endpoint)
host,port = endpoint.split(':')
if host not in endpoints:
endpoints[host] = {"22"}
endpoints[host].add(port)
return endpoints
################ MAIN ####################################### ################ MAIN #######################################
auth_name = "jenkins" auth_name = "jenkins"
auth_passwd = "bleyrauvHecsUbDy" auth_passwd = "bleyrauvHecsUbDy"
logging.basicConfig(filename='debug.log', level=logging.DEBUG) logging.basicConfig(filename='debug.log', level=logging.DEBUG)
connection = TLSConnection(hostname='172.17.0.2') local_ip = socket.gethostbyname(socket.gethostname())
connection = TLSConnection(hostname=local_ip)
transform = EtreeTransform() transform = EtreeTransform()
config_id = "9866edc1-8869-4e80-acac-d15d5647b4d9" config = {'id':"9866edc1-8869-4e80-acac-d15d5647b4d9"}
scanner_id = "08b69003-5fc2-4037-a479-93b440211c73" scanner = {'id': "08b69003-5fc2-4037-a479-93b440211c73"}
ovs_ssh_credential_id = "a89d5ebf-01bf-4836-ae72-a65bc633219a" ovs_ssh_credential = {'id': "a89d5ebf-01bf-4836-ae72-a65bc633219a"}
txt_report_format_id = "a3810a62-1f62-11e1-9219-406186ea4fc5"
csv_report_format_id = "c1645568-627a-11e3-a660-406186ea4fc5"
xml_report_format_id = "5057e5cc-b825-11e4-9d0e-28d24461215b"
wait_timeout = 3600 #1h wait_timeout = 3600 #1h
print("len_argv:",len(argv))
for i in range(len(argv)): if len(argv) != 4:
print(i,argv[i]) print("Please pass three parameters:")
print("- endpoints to scans [endpoints1,endpoint2,endpoint3,...]")
endpoints = argv[1].split(',') print("- dep.json path [/home/gmp/workspace/dep.json]")
print("- output directory [/home/gmp/workspace]")
exit(1)
endpoints_to_scan = argv[1].split(',')
dep_json = argv[2] dep_json = argv[2]
output_dir = argv[3] output_dir = argv[3]
print("endpoints_to_scan", endpoints_to_scan)
print("endpoints", endpoints)
print("dep_json", dep_json) print("dep_json", dep_json)
print("output_dir", output_dir) print("output_dir", output_dir)
with open(dep_json) as f: endpoints = import_dep_info(dep_json, endpoints_to_scan)
data = json.load(f) print_pretty_json(endpoints)
endpoints = dict()
for key in data['outputs'].keys():
if "endpoint" in key:
endpoint = str(data['outputs'][key]).split("://")[1]
print("endpoint",endpoint)
host,port = endpoint.split(':')
if host not in endpoints:
endpoints[host] = ["22"]
endpoints[host].append(port)
print(json.dumps(endpoints,sort_keys=True,indent=4))
severities = dict() severities = dict()
for host,ports in endpoints.items(): for host,ports in endpoints.items():
print(host,ports) print(host,ports)
...@@ -431,16 +442,16 @@ for host,ports in endpoints.items(): ...@@ -431,16 +442,16 @@ for host,ports in endpoints.items():
report_filename = f"{output_dir}/{host}-report.txt" report_filename = f"{output_dir}/{host}-report.txt"
severity_filename = f"{output_dir}/severity.json" severity_filename = f"{output_dir}/severity.json"
pl = get_or_create_port_list(port_list_name,ports) port_list = get_or_create_port_list(port_list_name,ports)
print_pretty_json(pl) print_pretty_json(port_list)
target = get_or_create_target(target_name,host,pl,ovs_ssh_credential_id) target = get_or_create_target(target_name,host,port_list,ovs_ssh_credential)
print_pretty_json(target) print_pretty_json(target)
task = get_or_create_task(task_name, config_id, target['id'],scanner_id) task = get_or_create_task(task_name, config, target,scanner)
print_pretty_json(task) print_pretty_json(task)
if task['status'] == 'New': if task['status'] == 'New':
task = start_task(task) task = start_task(task)
if wait_for_task_completition(task,wait_timeout): if wait_for_task_completition(task,wait_timeout):
save_report(task,txt_report_format_id, report_filename) save_report(task,report_formats.txt, report_filename)
severities[host] = get_severity(task) severities[host] = get_severity(task)
else: else:
severities[host] = f"ERROR Task: {task['id']}" severities[host] = f"ERROR Task: {task['id']}"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment