[#389] first discovery scan COMPLETE: 21 findings on sectestbed 5104 — GMP scan pipeline committed
ci / audit (push) Successful in 24s
ci / audit (push) Successful in 24s
GLPI target → Discovery config → OpenVAS scanner → report c3294575-3db4-4ad1-8e50-3ca6d23fb137 (18 info, 1 low ICMP-timestamp, 2 unscored). VM shut back down. Pipeline scripts in openvas/scan-pipeline/. https://projects.knownelement.com/issues/389
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
# scan-pipeline/ — GMP scripts for the GLPI→GVM→findings pipeline
|
||||
|
||||
Used in order (see #389): create_scan (Discovery config + glpi-* target +
|
||||
OpenVAS scanner) → check/poll (status/progress) → scan_results (report
|
||||
summary). Run via:
|
||||
|
||||
docker compose -f ../../docker/gvm-test/compose.yaml run --rm \
|
||||
-v $PWD/<script>:/tmp/<script>:ro gvm-tools sh -c \
|
||||
"gvm-script --gmp-username admin --gmp-password \$PW \
|
||||
socket --socketpath /run/gvmd/gvmd.sock /tmp/<script>"
|
||||
|
||||
Creds: ~/.creds/gvm-test.env. First verified run: 2026-09-05,
|
||||
task fa43a011-077e-489b-bf9f-b7173cc555b6, report
|
||||
c3294575-3db4-4ad1-8e50-3ca6d23fb137 — 21 findings on
|
||||
100.127.238.29 (sectestbed-proxmox-pbs, 5104).
|
||||
@@ -0,0 +1,7 @@
|
||||
from lxml import etree
|
||||
t = etree.fromstring(gmp.send_command('<get_tasks filter="rows=-1"/>').encode())
|
||||
for task in t.findall('.//task'):
|
||||
if 'first-discovery' in (task.findtext('name') or ''):
|
||||
print('id=' + task.get('id'))
|
||||
print('status=' + (task.findtext('status') or '?'))
|
||||
print('progress=' + (task.findtext('progress') or '?'))
|
||||
@@ -0,0 +1,42 @@
|
||||
from lxml import etree
|
||||
|
||||
# find Discovery scan config
|
||||
cfg = etree.fromstring(gmp.send_command('<get_configs details="0"/>').encode())
|
||||
config_id = None
|
||||
for c in cfg.findall('.//config'):
|
||||
if (c.findtext('name') or '').strip() == 'Discovery':
|
||||
config_id = c.get('id')
|
||||
break
|
||||
print('config=' + str(config_id))
|
||||
|
||||
# find the target for the pbs (glpi-*)
|
||||
tg = etree.fromstring(gmp.send_command('<get_targets filter="rows=-1"/>').encode())
|
||||
target_id = None
|
||||
for t in tg.findall('.//target'):
|
||||
if 'proxmox-pbs' in (t.findtext('name') or '') or '100.127.238.29' in (t.findtext('hosts') or ''):
|
||||
target_id = t.get('id')
|
||||
print('target=' + (t.findtext('name') or ''))
|
||||
break
|
||||
print('target_id=' + str(target_id))
|
||||
|
||||
# find the openvas scanner
|
||||
sc = etree.fromstring(gmp.send_command('<get_scanners/>').encode())
|
||||
scanner_id = None
|
||||
for s in sc.findall('.//scanner'):
|
||||
if 'openvas' in (s.findtext('name') or '').lower() or 'OSP' in (s.findtext('type') or ''):
|
||||
scanner_id = s.get('id')
|
||||
break
|
||||
print('scanner=' + str(scanner_id))
|
||||
|
||||
if config_id and target_id and scanner_id:
|
||||
r = etree.fromstring(gmp.send_command(
|
||||
f'<create_task><name>first-discovery-sectestbed-pbs [#389]</name>'
|
||||
f'<comment>OAM lane first scan; sectestbed target, GLPI-fed</comment>'
|
||||
f'<config id="{config_id}"/><target id="{target_id}"/><scanner id="{scanner_id}"/></create_task>').encode())
|
||||
task_id = r.findtext('.//task') if r.find('.//task') is not None else None
|
||||
print('create_status=' + str(r.get('status')))
|
||||
if task_id is not None:
|
||||
tid = task_id.get('id') if hasattr(task_id, 'get') else task_id.text
|
||||
s = etree.fromstring(gmp.send_command(f'<start_task task_id="{tid}"/>').encode())
|
||||
print('start_status=' + str(s.get('status')))
|
||||
print('task_id=' + str(tid))
|
||||
@@ -0,0 +1,6 @@
|
||||
from lxml import etree
|
||||
t = etree.fromstring(gmp.send_command('<get_tasks task_id="fa43a011-077e-489b-bf9f-b7173cc555b6"/>').encode())
|
||||
task = t.find('.//task')
|
||||
print('status=' + (task.findtext('status') or '?'))
|
||||
print('progress=' + (task.findtext('progress') or '?'))
|
||||
print('report_count=' + str(len(task.findall('.//report'))))
|
||||
@@ -0,0 +1,23 @@
|
||||
from lxml import etree
|
||||
t = etree.fromstring(gmp.send_command('<get_tasks task_id="fa43a011-077e-489b-bf9f-b7173cc555b6"/>').encode())
|
||||
task = t.find('.//task')
|
||||
rep = task.find('.//report')
|
||||
rid = rep.get('id') if rep is not None else None
|
||||
print('report_id=' + str(rid))
|
||||
if rid:
|
||||
r = etree.fromstring(gmp.send_command(f'<get_results filter="report_id={rid} rows=200"/>').encode())
|
||||
total = len(r.findall('.//result'))
|
||||
hosts = set()
|
||||
sev = {}
|
||||
ports = set()
|
||||
for res in r.findall('.//result'):
|
||||
h = res.findtext('host')
|
||||
if h: hosts.add(h)
|
||||
s = res.findtext('severity')
|
||||
sev[s] = sev.get(s, 0) + 1
|
||||
nvt = res.findtext('nvt') or ''
|
||||
print('results=' + str(total))
|
||||
print('hosts_seen=' + ','.join(sorted(hosts)))
|
||||
print('severity_histogram=' + str(sev))
|
||||
for res in r.findall('.//result')[:8]:
|
||||
print('- ' + (res.findtext('nvt/name') or '?')[:70] + ' | sev=' + (res.findtext('severity') or '?'))
|
||||
Reference in New Issue
Block a user