Skip to content

Commit fb41eea

Browse files
committed
Add vuln reporting to external module API
1 parent 9527c6f commit fb41eea

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

lib/msf/core/module/external.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,20 @@ def process_report(m)
6969
service[:name] = data['name'] if data['name']
7070

7171
report_service(service)
72+
when 'vuln'
73+
# Required
74+
vuln = {host: data['host'], name: data['name']}
75+
76+
# Optional
77+
vuln[:info] = data['info'] if data['info']
78+
vuln[:refs] = data['refs'] if data['refs']
79+
vuln[:port] = data['port'] if data['port']
80+
vuln[:proto] = data['port'] if data['port']
81+
82+
# Metasploit magic
83+
vuln[:refs] = self.references
84+
85+
report_vuln(vuln)
7286
else
7387
print_warning "Skipping unrecognized report type #{m.params['type']}"
7488
end

lib/msf/core/modules/external/python/metasploit/module.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,37 @@
11
import sys, os, json
22

3+
34
def log(message, level='info'):
45
rpc_send({'jsonrpc': '2.0', 'method': 'message', 'params': {
56
'level': level,
67
'message': message
78
}})
89

9-
def report_host(ip, opts={}):
10+
11+
def report_host(ip, **opts):
1012
host = opts.copy()
1113
host.update({'host': ip})
1214
rpc_send({'jsonrpc': '2.0', 'method': 'report', 'params': {
1315
'type': 'host', 'data': host
1416
}})
1517

16-
def report_service(ip, opts={}):
18+
19+
def report_service(ip, **opts):
1720
service = opts.copy()
1821
service.update({'host': ip})
1922
rpc_send({'jsonrpc': '2.0', 'method': 'report', 'params': {
2023
'type': 'service', 'data': service
2124
}})
2225

2326

27+
def report_vuln(ip, name, **opts):
28+
vuln = opts.copy()
29+
vuln.update({'host': ip, 'name': name})
30+
rpc_send({'jsonrpc': '2.0', 'method': 'report', 'params': {
31+
'type': 'vuln', 'data': vuln
32+
}})
33+
34+
2435
def run(metadata, module_callback):
2536
req = json.loads(os.read(0, 10000))
2637
if req['method'] == 'describe':
@@ -32,6 +43,7 @@ def run(metadata, module_callback):
3243
'message': 'Module completed'
3344
}})
3445

46+
3547
def rpc_send(req):
3648
print(json.dumps(req))
3749
sys.stdout.flush()

0 commit comments

Comments
 (0)