New upstream version 1.4.4
Sophie Brun
3 years ago
0 | Mar 10th, 2021 |
0 | Fix bug with sslyze output file |
0 | FIX change id sslyze for JSON/XML |
0 | Mar 17th, 2021 |
0 | Add Ignore information vulnerabilities option |
0 | Faraday CSV Plugin do not consider ignore_info |
0 | Mar 30th, 2021 |
0 | 1.4.1 [Feb 26th, 2021]: | |
1 | --- | |
2 | * ADD microsoft baseline security analyzer plugin | |
3 | * ADD nextnet plugin | |
4 | * ADD openscap plugin | |
5 | * FIX old versions of Nessus plugins bugs | |
6 | ||
7 | 1.4.0 [Dec 23rd, 2020]: | |
8 | --- | |
9 | * Update the fields of the nuclei output used to create a vuln | |
10 | ||
11 | 1.4.0b2 [Dec 15th, 2020]: | |
12 | --- | |
13 | * Fix nuclei plugin bug when url is None | |
14 | ||
15 | 1.4.0b1 [Dec 14th, 2020]: | |
16 | --- | |
17 | * Add new plugin base class, for multi line json | |
18 | * New ncrack plugin | |
19 | * New nuclei plugin | |
20 | * New sslyze json plugin | |
21 | * New WhatWeb plugin | |
22 | * Fix missing ip in some arachni reports | |
23 | * Fix change name vuln in Netsparker plugin | |
24 | * Fix whois plugin, command whois IP not parse data | |
25 | * Change the way we detect json reports when they are lists of dictionaries | |
26 | ||
27 | 1.3.0 [Sep 2nd, 2020]: | |
28 | --- | |
29 | * ADD plugin AppSpider | |
30 | * Add tests to faraday-plugins cli | |
31 | * add a default value to plugin_version | |
32 | * Add --output-file parameter to faraday-plugins process command | |
33 | * Add plugins prowler | |
34 | * Add plugins ssl labs | |
35 | * Add support for tenable io | |
36 | * delete old deprecated methods | |
37 | * Bug fix: Arachni Plugin 'NoneType' object has no attribute 'find' | |
38 | * Bug fix: Openvas Plugin - Import xml from OpenVas doesnt work | |
39 | * Bug fix: QualysWebApp Plugin, error in get info OPERATING_SYSTEM | |
40 | * Fix Hydra plugin to resolve ip address | |
41 | * Fix Nessus mod severity HIGH for Low | |
42 | * Bug Fix: Detect plugins AWS Prowler | |
43 | * Fix broken xml on nmap plugin | |
44 | * Add new rdpscan plugin | |
45 | * UPDATE xml report to appscan | |
46 | * Update Readme | |
47 | * Fix how ZAP genereate vulns | |
48 |
0 | 1.4.4 [Mar 30th, 2021]: | |
1 | --- | |
2 | * Faraday CSV Plugin do not consider ignore_info option | |
3 | ||
4 | 1.4.3 [Mar 17th, 2021]: | |
5 | --- | |
6 | * Add Ignore information vulnerabilities option | |
7 | ||
8 | 1.4.2 [Mar 10th, 2021]: | |
9 | --- | |
10 | * Fix bug with sslyze output file | |
11 | * FIX change id sslyze for JSON/XML | |
12 | ||
0 | 13 | 1.4.1 [Feb 26th, 2021]: |
1 | 14 | --- |
2 | 15 | * ADD microsoft baseline security analyzer plugin |
51 | 51 | @click.option('-cpf', '--custom-plugins-folder', type=str) |
52 | 52 | @click.option('--summary', is_flag=True) |
53 | 53 | @click.option('-o', '--output-file', type=click.Path(exists=False)) |
54 | def process_report(report_file, plugin_id, custom_plugins_folder, summary, output_file): | |
54 | @click.option('--ignore-info', is_flag=True, help="Ignore information vulnerabilities") | |
55 | def process_report(report_file, plugin_id, custom_plugins_folder, summary, output_file, ignore_info): | |
55 | 56 | if not os.path.isfile(report_file): |
56 | 57 | click.echo(click.style(f"File {report_file} Don't Exists", fg="red"), err=True) |
57 | 58 | else: |
58 | plugins_manager = PluginsManager(custom_plugins_folder) | |
59 | plugins_manager = PluginsManager(custom_plugins_folder, ignore_info=ignore_info) | |
59 | 60 | analyzer = ReportAnalyzer(plugins_manager) |
60 | 61 | if plugin_id: |
61 | 62 | plugin = plugins_manager.get_plugin(plugin_id) |
86 | 87 | @click.option('--summary', is_flag=True) |
87 | 88 | @click.option('-o', '--output-file', type=click.Path(exists=False)) |
88 | 89 | @click.option('-sh', '--show-output', is_flag=True) |
89 | def process_command(command, plugin_id, custom_plugins_folder, dont_run, summary, output_file, show_output): | |
90 | plugins_manager = PluginsManager(custom_plugins_folder) | |
90 | @click.option('--ignore-info', is_flag=True, help="Ignore information vulnerabilities") | |
91 | def process_command(command, plugin_id, custom_plugins_folder, dont_run, summary, output_file, show_output, | |
92 | ignore_info): | |
93 | plugins_manager = PluginsManager(custom_plugins_folder, ignore_info=ignore_info) | |
91 | 94 | analyzer = CommandAnalyzer(plugins_manager) |
92 | 95 | if plugin_id: |
93 | 96 | plugin = plugins_manager.get_plugin(plugin_id) |
150 | 150 | |
151 | 151 | class PluginsManager: |
152 | 152 | |
153 | def __init__(self, custom_plugins_folder=None): | |
153 | def __init__(self, custom_plugins_folder=None, ignore_info = False): | |
154 | self.ignore_info = ignore_info | |
154 | 155 | self.plugins = {} |
155 | 156 | self.plugin_modules = {} |
156 | 157 | self._load_plugins(custom_plugins_folder) |
213 | 214 | plugin = None |
214 | 215 | plugin_id = plugin_id.lower() |
215 | 216 | if plugin_id in self.plugin_modules: |
216 | plugin = self.plugin_modules[plugin_id].createPlugin() | |
217 | plugin = self.plugin_modules[plugin_id].createPlugin(self.ignore_info) | |
217 | 218 | else: |
218 | 219 | logger.debug("Unknown Plugin: %s", plugin_id) |
219 | 220 | return plugin |
221 | 222 | def get_plugins(self): |
222 | 223 | for plugin_id, plugin_module in self.plugin_modules.items(): |
223 | 224 | logger.debug("Instance Plugin: %s", plugin_id) |
224 | yield plugin_id, plugin_module.createPlugin() | |
225 | yield plugin_id, plugin_module.createPlugin(self.ignore_info) |
28 | 28 | # TODO: Add class generic identifier |
29 | 29 | class_signature = "PluginBase" |
30 | 30 | |
31 | def __init__(self): | |
31 | def __init__(self, ignore_info=False): | |
32 | 32 | # Must be unique. Check that there is not |
33 | 33 | # an existant plugin with the same id. |
34 | 34 | # TODO: Make script that list current ids. |
35 | self.ignore_info = ignore_info | |
35 | 36 | self.id = None |
36 | 37 | self.auto_load = True |
37 | 38 | self._rid = id(self) |
137 | 138 | return obj_uuid |
138 | 139 | |
139 | 140 | def save_service_vuln_cache(self, host_id, service_id, vuln): |
140 | cache_id = self.get_service_vuln_cache_id(host_id, service_id, vuln) | |
141 | if cache_id not in self._vulns_cache: | |
142 | obj_uuid = self.save_cache(vuln) | |
143 | service = self.get_from_cache(service_id) | |
144 | service["vulnerabilities"].append(vuln) | |
145 | self._vulns_cache[cache_id] = obj_uuid | |
146 | else: | |
147 | obj_uuid = self._vulns_cache[cache_id] | |
148 | return obj_uuid | |
141 | if self.ignore_info and vuln['severity'] == 'info': | |
142 | return None | |
143 | else: | |
144 | cache_id = self.get_service_vuln_cache_id(host_id, service_id, vuln) | |
145 | if cache_id not in self._vulns_cache: | |
146 | obj_uuid = self.save_cache(vuln) | |
147 | service = self.get_from_cache(service_id) | |
148 | service["vulnerabilities"].append(vuln) | |
149 | self._vulns_cache[cache_id] = obj_uuid | |
150 | else: | |
151 | obj_uuid = self._vulns_cache[cache_id] | |
152 | return obj_uuid | |
149 | 153 | |
150 | 154 | def save_host_vuln_cache(self, host_id, vuln): |
151 | cache_id = self.get_host_vuln_cache_id(host_id, vuln) | |
152 | if cache_id not in self._vulns_cache: | |
153 | obj_uuid = self.save_cache(vuln) | |
154 | host = self.get_from_cache(host_id) | |
155 | host["vulnerabilities"].append(vuln) | |
156 | self._vulns_cache[cache_id] = obj_uuid | |
157 | else: | |
158 | obj_uuid = self._vulns_cache[cache_id] | |
159 | return obj_uuid | |
155 | if self.ignore_info and vuln['severity'] == 'info': | |
156 | return None | |
157 | else: | |
158 | cache_id = self.get_host_vuln_cache_id(host_id, vuln) | |
159 | if cache_id not in self._vulns_cache: | |
160 | obj_uuid = self.save_cache(vuln) | |
161 | host = self.get_from_cache(host_id) | |
162 | host["vulnerabilities"].append(vuln) | |
163 | self._vulns_cache[cache_id] = obj_uuid | |
164 | else: | |
165 | obj_uuid = self._vulns_cache[cache_id] | |
166 | return obj_uuid | |
160 | 167 | |
161 | 168 | @staticmethod |
162 | 169 | def _get_dict_hash(d, keys): |
295 | 302 | |
296 | 303 | def processReport(self, filepath, user="faraday"): |
297 | 304 | if os.path.isfile(filepath): |
298 | self.vulns_data["command"]["params"] = filepath | |
305 | self.vulns_data["command"]["params"] = filepath if not self.ignore_info else f"{filepath} (Info ignored)" | |
299 | 306 | self.vulns_data["command"]["user"] = user |
300 | 307 | self.vulns_data["command"]["import_source"] = "report" |
301 | 308 | self._parse_filename(filepath) |
544 | 551 | |
545 | 552 | |
546 | 553 | class PluginByExtension(PluginBase): |
547 | def __init__(self): | |
548 | super().__init__() | |
554 | def __init__(self, ignore_info=False): | |
555 | super().__init__(ignore_info) | |
549 | 556 | self.extension = [] |
550 | 557 | |
551 | 558 | def report_belongs_to(self, extension="", **kwargs): |
560 | 567 | |
561 | 568 | class PluginXMLFormat(PluginByExtension): |
562 | 569 | |
563 | def __init__(self): | |
564 | super().__init__() | |
570 | def __init__(self, ignore_info=False): | |
571 | super().__init__(ignore_info) | |
565 | 572 | self.identifier_tag = [] |
566 | 573 | self.extension = ".xml" |
567 | 574 | self.open_options = {"mode": "rb"} |
579 | 586 | |
580 | 587 | class PluginJsonFormat(PluginByExtension): |
581 | 588 | |
582 | def __init__(self): | |
583 | super().__init__() | |
589 | def __init__(self, ignore_info=False): | |
590 | super().__init__(ignore_info) | |
584 | 591 | self.json_keys = set() |
585 | 592 | self.extension = ".json" |
586 | 593 | |
596 | 603 | |
597 | 604 | class PluginMultiLineJsonFormat(PluginByExtension): |
598 | 605 | |
599 | def __init__(self): | |
600 | super().__init__() | |
606 | def __init__(self, ignore_info=False): | |
607 | super().__init__(ignore_info) | |
601 | 608 | self.json_keys = set() |
602 | 609 | self.extension = ".json" |
603 | 610 | |
621 | 628 | |
622 | 629 | class PluginCSVFormat(PluginByExtension): |
623 | 630 | |
624 | def __init__(self): | |
625 | super().__init__() | |
631 | def __init__(self, ignore_info=False): | |
632 | super().__init__(ignore_info) | |
626 | 633 | self.extension = ".csv" |
627 | 634 | self.csv_headers = set() |
628 | 635 | |
641 | 648 | |
642 | 649 | class PluginZipFormat(PluginByExtension): |
643 | 650 | |
644 | def __init__(self): | |
645 | super().__init__() | |
651 | def __init__(self, ignore_info=False): | |
652 | super().__init__(ignore_info) | |
646 | 653 | self.extension = ".zip" |
647 | 654 | self.files_list = set() |
648 | 655 |
216 | 216 | Example plugin to parse acunetix output. |
217 | 217 | """ |
218 | 218 | |
219 | def __init__(self): | |
220 | super().__init__() | |
219 | def __init__(self, *arg, **kwargs): | |
220 | super().__init__(*arg, **kwargs) | |
221 | 221 | self.identifier_tag = "ScanGroup" |
222 | 222 | self.id = "Acunetix" |
223 | 223 | self.name = "Acunetix XML Output Plugin" |
290 | 290 | pass |
291 | 291 | |
292 | 292 | |
293 | def createPlugin(): | |
294 | return AcunetixPlugin()⏎ | |
293 | def createPlugin(ignore_info=False): | |
294 | return AcunetixPlugin(ignore_info=ignore_info)⏎ |
19 | 19 | class AmapPlugin(PluginBase): |
20 | 20 | """ Example plugin to parse amap output.""" |
21 | 21 | |
22 | def __init__(self): | |
23 | super().__init__() | |
22 | def __init__(self, *arg, **kwargs): | |
23 | super().__init__(*arg, **kwargs) | |
24 | 24 | self.id = "Amap" |
25 | 25 | self.name = "Amap Output Plugin" |
26 | 26 | self.plugin_version = "0.0.3" |
146 | 146 | return final |
147 | 147 | |
148 | 148 | |
149 | def createPlugin(): | |
150 | return AmapPlugin() | |
149 | def createPlugin(ignore_info=False): | |
150 | return AmapPlugin(ignore_info=ignore_info) | |
151 | 151 | |
152 | # I'm Py3 | |
152 |
261 | 261 | |
262 | 262 | |
263 | 263 | class AppScanPlugin(PluginXMLFormat): |
264 | def __init__(self): | |
265 | super().__init__() | |
264 | ||
265 | def __init__(self, *arg, **kwargs): | |
266 | super().__init__(*arg, **kwargs) | |
266 | 267 | self.identifier_tag = "xml-report" |
267 | 268 | self.id = 'Appscan' |
268 | 269 | self.name = 'Appscan XML Plugin' |
381 | 382 | data=f'xfix: {vulnserv["xfid"]} cme: {vulnserv["cwe"]}', run_date=None) |
382 | 383 | |
383 | 384 | |
384 | def createPlugin(): | |
385 | return AppScanPlugin() | |
385 | def createPlugin(ignore_info=False): | |
386 | return AppScanPlugin(ignore_info=ignore_info) |
38 | 38 | |
39 | 39 | |
40 | 40 | class AppSpiderPlugin(PluginXMLFormat): |
41 | def __init__(self): | |
42 | super().__init__() | |
41 | ||
42 | def __init__(self, *arg, **kwargs): | |
43 | super().__init__(*arg, **kwargs) | |
43 | 44 | self.identifier_tag = ["VulnSummary"] |
44 | 45 | self.id = 'AppSpider' |
45 | 46 | self.name = 'AppSpider XML Output Plugin' |
112 | 113 | external_id=vuln_external_id, data=str_data) |
113 | 114 | |
114 | 115 | |
115 | def createPlugin(): | |
116 | return AppSpiderPlugin() | |
116 | def createPlugin(ignore_info=False): | |
117 | return AppSpiderPlugin(ignore_info=ignore_info) |
334 | 334 | |
335 | 335 | # Plugin that parses Arachni's XML report files. |
336 | 336 | |
337 | def __init__(self): | |
338 | super().__init__() | |
337 | def __init__(self, *arg, **kwargs): | |
338 | super().__init__(*arg, **kwargs) | |
339 | 339 | self.identifier_tag = ["report", "arachni_report"] |
340 | 340 | self.id = 'Arachni' |
341 | 341 | self.name = 'Arachni XML Output Plugin' |
490 | 490 | return self.hostname |
491 | 491 | |
492 | 492 | |
493 | def createPlugin(): | |
494 | return ArachniPlugin() | |
495 | ||
496 | # I'm Py3 | |
493 | def createPlugin(ignore_info=False): | |
494 | return ArachniPlugin(ignore_info=ignore_info) | |
495 | ||
496 |
21 | 21 | Basically inserts into the tree the ouput of this tool |
22 | 22 | """ |
23 | 23 | |
24 | def __init__(self): | |
25 | super().__init__() | |
24 | def __init__(self, *arg, **kwargs): | |
25 | super().__init__(*arg, **kwargs) | |
26 | 26 | self.id = "arp-scan" |
27 | 27 | self.name = "arp-scan network scanner" |
28 | 28 | self.plugin_version = "0.0.2" |
59 | 59 | |
60 | 60 | |
61 | 61 | |
62 | def createPlugin(): | |
63 | return CmdArpScanPlugin() | |
62 | def createPlugin(ignore_info=False): | |
63 | return CmdArpScanPlugin(ignore_info=ignore_info) | |
64 | 64 |
32 | 32 | and adds the information to Faraday. |
33 | 33 | """ |
34 | 34 | |
35 | def __init__(self): | |
36 | super().__init__() | |
35 | def __init__(self, *arg, **kwargs): | |
36 | super().__init__(*arg, **kwargs) | |
37 | 37 | self.id = "awsprowler" |
38 | 38 | self.name = "AWS Prowler" |
39 | 39 | self.plugin_version = "0.1" |
66 | 66 | external_id=vuln_external_id, policyviolations=[vuln_policy]) |
67 | 67 | |
68 | 68 | |
69 | def createPlugin(): | |
70 | return AwsProwlerPlugin() | |
69 | def createPlugin(ignore_info=False): | |
70 | return AwsProwlerPlugin(ignore_info=ignore_info) |
22 | 22 | Example plugin to parse beef output. |
23 | 23 | """ |
24 | 24 | |
25 | def __init__(self): | |
26 | super().__init__() | |
25 | def __init__(self, *arg, **kwargs): | |
26 | super().__init__(*arg, **kwargs) | |
27 | 27 | self.id = "Beef" |
28 | 28 | self.name = "BeEF Online Service Plugin" |
29 | 29 | self.plugin_version = "0.0.1" |
98 | 98 | pass |
99 | 99 | |
100 | 100 | |
101 | def createPlugin(): | |
102 | return BeefPlugin() | |
101 | def createPlugin(ignore_info=False): | |
102 | return BeefPlugin(ignore_info=ignore_info) | |
103 | 103 |
2 | 2 | Copyright (C) 2018 Infobyte LLC (http://www.infobytesec.com/) |
3 | 3 | See the file 'doc/LICENSE' for the license information |
4 | 4 | """ |
5 | # I'm Py3⏎ | |
5 |
16 | 16 | |
17 | 17 | class brutexss (PluginBase): |
18 | 18 | |
19 | def __init__(self): | |
20 | super().__init__() | |
19 | def __init__(self, *arg, **kwargs): | |
20 | super().__init__(*arg, **kwargs) | |
21 | 21 | self.id = "brutexss" |
22 | 22 | self.name = "brutexss" |
23 | 23 | self.plugin_version = "0.0.2" |
56 | 56 | |
57 | 57 | |
58 | 58 | |
59 | def createPlugin(): | |
60 | return brutexss() | |
59 | def createPlugin(ignore_info=False): | |
60 | return brutexss(ignore_info=ignore_info) | |
61 | 61 | |
62 | # I'm Py3 | |
62 |
209 | 209 | Example plugin to parse burp output. |
210 | 210 | """ |
211 | 211 | |
212 | def __init__(self): | |
213 | super().__init__() | |
212 | def __init__(self, *arg, **kwargs): | |
213 | super().__init__(*arg, **kwargs) | |
214 | 214 | self.identifier_tag = "issues" |
215 | 215 | self.id = "Burp" |
216 | 216 | self.name = "Burp XML Output Plugin" |
288 | 288 | pass |
289 | 289 | |
290 | 290 | |
291 | def createPlugin(): | |
292 | return BurpPlugin() | |
293 | ||
294 | # I'm Py3 | |
291 | def createPlugin(ignore_info=False): | |
292 | return BurpPlugin(ignore_info=ignore_info) | |
293 | ||
294 |
78 | 78 | |
79 | 79 | |
80 | 80 | class CheckmarxPlugin(PluginXMLFormat): |
81 | def __init__(self): | |
82 | super().__init__() | |
81 | ||
82 | def __init__(self, *arg, **kwargs): | |
83 | super().__init__(*arg, **kwargs) | |
83 | 84 | self.identifier_tag = ["CxXMLResults"] |
84 | 85 | self.id = 'Checkmarx' |
85 | 86 | self.name = 'Checkmarx XML Output Plugin' |
136 | 137 | resolution=data, ref=refs) |
137 | 138 | |
138 | 139 | |
139 | def createPlugin(): | |
140 | return CheckmarxPlugin() | |
140 | def createPlugin(ignore_info=False): | |
141 | return CheckmarxPlugin(ignore_info=ignore_info) | |
141 | 142 |
50 | 50 | Example plugin to parse Cobalt output. |
51 | 51 | """ |
52 | 52 | |
53 | def __init__(self): | |
54 | super().__init__() | |
53 | def __init__(self, *arg, **kwargs): | |
54 | super().__init__(*arg, **kwargs) | |
55 | 55 | self.csv_headers = [{'Token'}, {'Tag'}] |
56 | 56 | self.id = "Cobalt" |
57 | 57 | self.name = "Cobalt CSV Output Plugin" |
101 | 101 | data=row['StepsToReproduce'], external_id=row['Tag'], run_date=run_date) |
102 | 102 | |
103 | 103 | |
104 | def createPlugin(): | |
105 | return CobaltPlugin() | |
104 | def createPlugin(ignore_info=False): | |
105 | return CobaltPlugin(ignore_info=ignore_info) |
2 | 2 | Copyright (C) 2013 Infobyte LLC (http://www.infobytesec.com/) |
3 | 3 | See the file 'doc/LICENSE' for the license information |
4 | 4 | """ |
5 | # I'm Py3⏎ | |
5 |
24 | 24 | Handle DiG (http://linux.die.net/man/1/dig) output |
25 | 25 | """ |
26 | 26 | |
27 | def __init__(self): | |
28 | super().__init__() | |
29 | self.id = u"dig" | |
30 | self.name = u"DiG" | |
31 | self.plugin_version = u"0.0.1" | |
32 | self.version = u"9.9.5-3" | |
27 | def __init__(self, *arg, **kwargs): | |
28 | super().__init__(*arg, **kwargs) | |
29 | self.id = "dig" | |
30 | self.name = "DiG" | |
31 | self.plugin_version = "0.0.1" | |
32 | self.version = "9.9.5-3" | |
33 | 33 | self._command_regex = re.compile(r'^(dig)\s+.*?') |
34 | 34 | |
35 | 35 | def parseOutputString(self, output): |
140 | 140 | return True |
141 | 141 | |
142 | 142 | |
143 | def createPlugin(): | |
144 | return DigPlugin() | |
143 | def createPlugin(ignore_info=False): | |
144 | return DigPlugin(ignore_info=ignore_info) | |
145 | 145 | |
146 | # I'm Py3 | |
146 |
2 | 2 | Copyright (C) 2016 Infobyte LLC (http://www.infobytesec.com/) |
3 | 3 | See the file 'doc/LICENSE' for the license information |
4 | 4 | """ |
5 | # I'm Py3⏎ | |
5 |
18 | 18 | |
19 | 19 | class dirbPlugin(PluginBase): |
20 | 20 | |
21 | def __init__(self): | |
22 | super().__init__() | |
21 | def __init__(self, *arg, **kwargs): | |
22 | super().__init__(*arg, **kwargs) | |
23 | 23 | self.id = "dirb" |
24 | 24 | self.name = "Dirb" |
25 | 25 | self.plugin_version = "0.0.1" |
115 | 115 | return "%s%s" % (command_string, extra_arg) |
116 | 116 | |
117 | 117 | |
118 | def createPlugin(): | |
119 | return dirbPlugin() | |
118 | def createPlugin(ignore_info=False): | |
119 | return dirbPlugin(ignore_info=ignore_info) | |
120 | 120 | |
121 | # I'm Py3 | |
121 |
51 | 51 | |
52 | 52 | |
53 | 53 | class DirsearchPlugin(PluginBase): |
54 | def __init__(self): | |
55 | super().__init__() | |
54 | ||
55 | def __init__(self, *arg, **kwargs): | |
56 | super().__init__(*arg, **kwargs) | |
56 | 57 | self.id = "dirsearch" |
57 | 58 | self.name = "dirsearch" |
58 | 59 | self.plugin_version = "0.0.1" |
131 | 132 | return '{} --json-report {}'.format(command_string, self._output_file_path) |
132 | 133 | |
133 | 134 | |
134 | def createPlugin(): | |
135 | return DirsearchPlugin() | |
135 | def createPlugin(ignore_info=False): | |
136 | return DirsearchPlugin(ignore_info=ignore_info) | |
136 | 137 | |
137 | # I'm Py3 |
149 | 149 | Example plugin to parse dnsenum output. |
150 | 150 | """ |
151 | 151 | |
152 | def __init__(self): | |
153 | super().__init__() | |
152 | def __init__(self, *arg, **kwargs): | |
153 | super().__init__(*arg, **kwargs) | |
154 | 154 | self.id = "Dnsenum" |
155 | 155 | self.name = "Dnsenum XML Output Plugin" |
156 | 156 | self.plugin_version = "0.0.1" |
196 | 196 | pass |
197 | 197 | |
198 | 198 | |
199 | def createPlugin(): | |
200 | return DnsenumPlugin() | |
201 | ||
202 | # I'm Py3 | |
199 | def createPlugin(ignore_info=False): | |
200 | return DnsenumPlugin(ignore_info=ignore_info) | |
201 | ||
202 |
90 | 90 | class DnsmapPlugin(PluginBase): |
91 | 91 | """Example plugin to parse dnsmap output.""" |
92 | 92 | |
93 | def __init__(self): | |
94 | super().__init__() | |
93 | def __init__(self, *arg, **kwargs): | |
94 | super().__init__(*arg, **kwargs) | |
95 | 95 | self.id = "Dnsmap" |
96 | 96 | self.name = "Dnsmap Output Plugin" |
97 | 97 | self.plugin_version = "0.3" |
136 | 136 | command_string) |
137 | 137 | |
138 | 138 | |
139 | def createPlugin(): | |
140 | return DnsmapPlugin() | |
139 | def createPlugin(ignore_info=False): | |
140 | return DnsmapPlugin(ignore_info=ignore_info) | |
141 | 141 | |
142 | # I'm Py3 | |
142 |
155 | 155 | Example plugin to parse dnsrecon output. |
156 | 156 | """ |
157 | 157 | |
158 | def __init__(self): | |
159 | super().__init__() | |
158 | def __init__(self, *arg, **kwargs): | |
159 | super().__init__(*arg, **kwargs) | |
160 | 160 | self.id = "Dnsrecon" |
161 | 161 | self.name = "Dnsrecon XML Output Plugin" |
162 | 162 | self.plugin_version = "0.0.2" |
242 | 242 | pass |
243 | 243 | |
244 | 244 | |
245 | def createPlugin(): | |
246 | return DnsreconPlugin() | |
247 | ||
248 | # I'm Py3 | |
245 | def createPlugin(ignore_info=False): | |
246 | return DnsreconPlugin(ignore_info=ignore_info) | |
247 | ||
248 |
68 | 68 | Example plugin to parse dnswalk output. |
69 | 69 | """ |
70 | 70 | |
71 | def __init__(self): | |
72 | super().__init__() | |
71 | def __init__(self, *arg, **kwargs): | |
72 | super().__init__(*arg, **kwargs) | |
73 | 73 | self.id = "Dnswalk" |
74 | 74 | self.name = "Dnswalk XML Output Plugin" |
75 | 75 | self.plugin_version = "0.0.1" |
112 | 112 | return True |
113 | 113 | |
114 | 114 | |
115 | def createPlugin(): | |
116 | return DnswalkPlugin() | |
115 | def createPlugin(ignore_info=False): | |
116 | return DnswalkPlugin(ignore_info=ignore_info) | |
117 | 117 | |
118 | # I'm Py3 | |
118 |
2 | 2 | Copyright (C) 2013 Infobyte LLC (http://www.infobytesec.com/) |
3 | 3 | See the file 'doc/LICENSE' for the license information |
4 | 4 | """ |
5 | # I'm Py3⏎ | |
5 |
247 | 247 | |
248 | 248 | |
249 | 249 | class FaradayCSVPlugin(PluginCSVFormat): |
250 | def __init__(self): | |
251 | super().__init__() | |
250 | ||
251 | def __init__(self, *arg, **kwargs): | |
252 | super().__init__(*arg, **kwargs) | |
252 | 253 | self.id = "faraday_csv" |
253 | 254 | self.name = "Faraday CSV Plugin" |
254 | 255 | self.plugin_version = "1.0" |
350 | 351 | ) |
351 | 352 | |
352 | 353 | |
353 | def createPlugin(): | |
354 | return FaradayCSVPlugin() | |
354 | def createPlugin(ignore_info=False): | |
355 | return FaradayCSVPlugin(ignore_info=False) |
100 | 100 | Example plugin to parse fierce output. |
101 | 101 | """ |
102 | 102 | |
103 | def __init__(self): | |
104 | super().__init__() | |
103 | def __init__(self, *arg, **kwargs): | |
104 | super().__init__(*arg, **kwargs) | |
105 | 105 | self.id = "Fierce" |
106 | 106 | self.name = "Fierce Output Plugin" |
107 | 107 | self.plugin_version = "0.0.1" |
175 | 175 | |
176 | 176 | |
177 | 177 | |
178 | def createPlugin(): | |
179 | return FiercePlugin() | |
178 | def createPlugin(ignore_info=False): | |
179 | return FiercePlugin(ignore_info=ignore_info) | |
180 | 180 | |
181 | # I'm Py3 | |
181 |
13 | 13 | Example plugin to parse nmap output. |
14 | 14 | """ |
15 | 15 | |
16 | def __init__(self): | |
17 | super().__init__() | |
16 | def __init__(self, *arg, **kwargs): | |
17 | super().__init__(*arg, **kwargs) | |
18 | 18 | self.id = "Fortify" |
19 | 19 | self.name = "Fortify XML Output Plugin" |
20 | 20 | self.plugin_version = "0.0.1" |
391 | 391 | return text |
392 | 392 | |
393 | 393 | |
394 | def createPlugin(): | |
395 | return FortifyPlugin() | |
396 | ||
394 | def createPlugin(ignore_info=False): | |
395 | return FortifyPlugin(ignore_info=ignore_info) | |
396 |
23 | 23 | This plugin handles FruityWiFi clients. |
24 | 24 | """ |
25 | 25 | |
26 | def __init__(self): | |
27 | super().__init__() | |
26 | def __init__(self, *arg, **kwargs): | |
27 | super().__init__(*arg, **kwargs) | |
28 | 28 | self.id = "fruitywifi" |
29 | 29 | self.name = "FruityWiFi" |
30 | 30 | self.plugin_version = "0.0.1" |
126 | 126 | |
127 | 127 | |
128 | 128 | |
129 | def createPlugin(): | |
130 | return FruityWiFiPlugin() | |
129 | def createPlugin(ignore_info=False): | |
130 | return FruityWiFiPlugin(ignore_info=ignore_info) | |
131 | 131 | |
132 | # I'm Py3 | |
132 |
26 | 26 | Basically detects if user was able to connect to a device |
27 | 27 | """ |
28 | 28 | |
29 | def __init__(self): | |
30 | super().__init__() | |
29 | def __init__(self, *arg, **kwargs): | |
30 | super().__init__(*arg, **kwargs) | |
31 | 31 | self.id = "ftp" |
32 | 32 | self.name = "Ftp" |
33 | 33 | self.plugin_version = "0.0.1" |
71 | 71 | self._port = count_args[c - 1] |
72 | 72 | |
73 | 73 | |
74 | def createPlugin(): | |
75 | return CmdFtpPlugin() | |
74 | def createPlugin(ignore_info=False): | |
75 | return CmdFtpPlugin(ignore_info=ignore_info) | |
76 | 76 | |
77 | # I'm Py3 | |
77 |
64 | 64 | Example plugin to parse goohost output. |
65 | 65 | """ |
66 | 66 | |
67 | def __init__(self): | |
68 | super().__init__() | |
67 | def __init__(self, *arg, **kwargs): | |
68 | super().__init__(*arg, **kwargs) | |
69 | 69 | self.id = "Goohost" |
70 | 70 | self.name = "Goohost XML Output Plugin" |
71 | 71 | self.plugin_version = "0.0.1" |
128 | 128 | self.parseOutputString(command_output) |
129 | 129 | |
130 | 130 | |
131 | def createPlugin(): | |
132 | return GoohostPlugin() | |
131 | def createPlugin(ignore_info=False): | |
132 | return GoohostPlugin(ignore_info=ignore_info) | |
133 | 133 |
13 | 13 | |
14 | 14 | class hping3(PluginBase): |
15 | 15 | |
16 | def __init__(self): | |
17 | super().__init__() | |
16 | def __init__(self, *arg, **kwargs): | |
17 | super().__init__(*arg, **kwargs) | |
18 | 18 | self.id = "Hping3" |
19 | 19 | self.name = "hping3" |
20 | 20 | self.plugin_version = "0.0.1" |
67 | 67 | host_id, service, protocol="tcp", ports=port, status="open") |
68 | 68 | |
69 | 69 | |
70 | def createPlugin(): | |
71 | return hping3() | |
70 | def createPlugin(ignore_info=False): | |
71 | return hping3(ignore_info=ignore_info) | |
72 | 72 | |
73 | # I'm Py3 | |
73 |
49 | 49 | Example plugin to parse hydra output. |
50 | 50 | """ |
51 | 51 | |
52 | def __init__(self): | |
53 | super().__init__() | |
52 | def __init__(self, *arg, **kwargs): | |
53 | super().__init__(*arg, **kwargs) | |
54 | 54 | self.id = "Hydra" |
55 | 55 | self.name = "Hydra XML Output Plugin" |
56 | 56 | self.plugin_version = "0.0.1" |
130 | 130 | pass |
131 | 131 | |
132 | 132 | |
133 | def createPlugin(): | |
134 | return HydraPlugin() | |
133 | def createPlugin(ignore_info=False): | |
134 | return HydraPlugin(ignore_info=ignore_info) | |
135 | 135 | |
136 | # I'm Py3 | |
136 |
212 | 212 | Example plugin to parse impact output. |
213 | 213 | """ |
214 | 214 | |
215 | def __init__(self): | |
216 | super().__init__() | |
215 | def __init__(self, *arg, **kwargs): | |
216 | super().__init__(*arg, **kwargs) | |
217 | 217 | self.identifier_tag = "entities" |
218 | 218 | self.id = "CoreImpact" |
219 | 219 | self.name = "Core Impact XML Output Plugin" |
285 | 285 | pass |
286 | 286 | |
287 | 287 | |
288 | def createPlugin(): | |
289 | return ImpactPlugin() | |
290 | ||
291 | ||
288 | def createPlugin(ignore_info=False): | |
289 | return ImpactPlugin(ignore_info=ignore_info) | |
290 | ||
291 |
2 | 2 | Copyright (C) 2018 Infobyte LLC (http://www.infobytesec.com/) |
3 | 3 | See the file 'doc/LICENSE' for the license information |
4 | 4 | """ |
5 | # I'm Py3⏎ | |
5 |
67 | 67 | Example plugin to parse Ip360 output. |
68 | 68 | """ |
69 | 69 | |
70 | def __init__(self): | |
71 | super().__init__() | |
70 | def __init__(self, *arg, **kwargs): | |
71 | super().__init__(*arg, **kwargs) | |
72 | 72 | self.id = "Ip360" |
73 | 73 | self.name = "Ip360 CSV Output Plugin" |
74 | 74 | self.plugin_version = "0.0.1" |
102 | 102 | ref=vulnerability.get("ref")) |
103 | 103 | |
104 | 104 | |
105 | def createPlugin(): | |
106 | return Ip360Plugin() | |
105 | def createPlugin(ignore_info=False): | |
106 | return Ip360Plugin(ignore_info=ignore_info) | |
107 | 107 | |
108 | # I'm Py3 | |
108 |
121 | 121 | Example plugin to parse junit output. |
122 | 122 | """ |
123 | 123 | |
124 | def __init__(self): | |
125 | super().__init__() | |
124 | def __init__(self, *arg, **kwargs): | |
125 | super().__init__(*arg, **kwargs) | |
126 | 126 | self.id = "Junit" |
127 | 127 | self.name = "Junit XML Output Plugin" |
128 | 128 | self.plugin_version = "0.0.1" |
140 | 140 | del parser |
141 | 141 | |
142 | 142 | |
143 | def createPlugin(): | |
144 | return JunitPlugin() | |
143 | def createPlugin(ignore_info=False): | |
144 | return JunitPlugin(ignore_info=ignore_info) |
220 | 220 | class LynisPlugin(PluginByExtension): |
221 | 221 | """ Simple example plugin to parse lynis' lynis-report.dat file.""" |
222 | 222 | |
223 | def __init__(self): | |
224 | super().__init__() | |
223 | def __init__(self, *arg, **kwargs): | |
224 | super().__init__(*arg, **kwargs) | |
225 | 225 | self.id = "Lynis" |
226 | 226 | self.name = "Lynis DAT Output Plugin" |
227 | 227 | self.plugin_version = "0.4" |
323 | 323 | self._parse_filename(file_path) |
324 | 324 | |
325 | 325 | |
326 | def createPlugin(): | |
327 | return LynisPlugin() | |
328 | ||
329 | ||
326 | def createPlugin(ignore_info=False): | |
327 | return LynisPlugin(ignore_info=ignore_info) | |
328 | ||
329 |
369 | 369 | |
370 | 370 | class MaltegoPlugin(PluginZipFormat): |
371 | 371 | |
372 | def __init__(self): | |
373 | super().__init__() | |
372 | def __init__(self, *arg, **kwargs): | |
373 | super().__init__(*arg, **kwargs) | |
374 | 374 | self.identifier_tag = "maltego" |
375 | 375 | self.id = "Maltego" |
376 | 376 | self.name = "Maltego MTGX & MTGL Output Plugin" |
511 | 511 | |
512 | 512 | |
513 | 513 | |
514 | def createPlugin(): | |
515 | return MaltegoPlugin() | |
514 | def createPlugin(ignore_info=False): | |
515 | return MaltegoPlugin(ignore_info=ignore_info) |
26 | 26 | |
27 | 27 | |
28 | 28 | class MbsaPlugin(PluginByExtension): |
29 | def __init__(self): | |
30 | super().__init__() | |
29 | ||
30 | def __init__(self, *arg, **kwargs): | |
31 | super().__init__(*arg, **kwargs) | |
31 | 32 | self.id = "MBSA" |
32 | 33 | self.name = "Microsoft Baseline Security Analyzer" |
33 | 34 | self.plugin_version = "1.0.1" |
112 | 113 | i += 1 |
113 | 114 | |
114 | 115 | |
115 | def createPlugin(): | |
116 | return MbsaPlugin() | |
116 | def createPlugin(ignore_info=False): | |
117 | return MbsaPlugin(ignore_info=ignore_info) |
58 | 58 | Example plugin to parse medusa output. |
59 | 59 | """ |
60 | 60 | |
61 | def __init__(self): | |
62 | super().__init__() | |
61 | def __init__(self, *arg, **kwargs): | |
62 | super().__init__(*arg, **kwargs) | |
63 | 63 | self.id = "Medusa" |
64 | 64 | self.name = "Medusa Output Plugin" |
65 | 65 | self.plugin_version = "0.0.1" |
133 | 133 | pass |
134 | 134 | |
135 | 135 | |
136 | def createPlugin(): | |
137 | return MedusaPlugin() | |
136 | def createPlugin(ignore_info=False): | |
137 | return MedusaPlugin(ignore_info=ignore_info) |
324 | 324 | Example plugin to parse metasploit output. |
325 | 325 | """ |
326 | 326 | |
327 | def __init__(self): | |
328 | super().__init__() | |
327 | def __init__(self, *arg, **kwargs): | |
328 | super().__init__(*arg, **kwargs) | |
329 | 329 | self.identifier_tag = ["MetasploitV4", "MetasploitV5"] |
330 | 330 | self.id = "Metasploit" |
331 | 331 | self.name = "Metasploit XML Output Plugin" |
402 | 402 | pass |
403 | 403 | |
404 | 404 | |
405 | def createPlugin(): | |
406 | return MetasploitPlugin() | |
407 | ||
408 | # I'm Py3 | |
405 | def createPlugin(ignore_info=False): | |
406 | return MetasploitPlugin(ignore_info=ignore_info) | |
407 | ||
408 |
91 | 91 | |
92 | 92 | |
93 | 93 | class NcrackPlugin(PluginXMLFormat): |
94 | def __init__(self): | |
95 | super().__init__() | |
94 | ||
95 | def __init__(self, *arg, **kwargs): | |
96 | super().__init__(*arg, **kwargs) | |
96 | 97 | self.identifier_tag = "ncrackrun" |
97 | 98 | self.id = 'ncrack' |
98 | 99 | self.name = 'ncrack XML Plugin' |
120 | 121 | password=service_vuln['passw']) |
121 | 122 | |
122 | 123 | |
123 | def createPlugin(): | |
124 | return NcrackPlugin() | |
124 | def createPlugin(ignore_info=False): | |
125 | return NcrackPlugin(ignore_info=ignore_info) |
108 | 108 | Add a new vuln INFO if detect a new host or a new port .. |
109 | 109 | """ |
110 | 110 | |
111 | def __init__(self): | |
112 | super().__init__() | |
111 | def __init__(self, *arg, **kwargs): | |
112 | super().__init__(*arg, **kwargs) | |
113 | 113 | self.id = "Ndiff" |
114 | 114 | self.name = "ndiff" |
115 | 115 | self.plugin_version = "0.0.1" |
155 | 155 | return f"{command_string} --xml " |
156 | 156 | |
157 | 157 | |
158 | def createPlugin(): | |
159 | return CmdNdiffPlugin() | |
158 | def createPlugin(ignore_info=False): | |
159 | return CmdNdiffPlugin(ignore_info=ignore_info) | |
160 | 160 | |
161 | # I'm Py3 | |
161 |
179 | 179 | Example plugin to parse nessus output. |
180 | 180 | """ |
181 | 181 | |
182 | def __init__(self): | |
183 | super().__init__() | |
182 | def __init__(self, *arg, **kwargs): | |
183 | super().__init__(*arg, **kwargs) | |
184 | 184 | self.extension = ".nessus" |
185 | 185 | self.identifier_tag = "NessusClientData_v2" |
186 | 186 | self.id = "Nessus" |
324 | 324 | run_date=run_date) |
325 | 325 | |
326 | 326 | |
327 | def createPlugin(): | |
328 | return NessusPlugin() | |
327 | def createPlugin(ignore_info=False): | |
328 | return NessusPlugin(ignore_info=ignore_info) |
2 | 2 | Copyright (C) 2016 Infobyte LLC (http://www.infobytesec.com/) |
3 | 3 | See the file 'doc/LICENSE' for the license information |
4 | 4 | """ |
5 | # I'm Py3⏎ | |
5 |
15 | 15 | |
16 | 16 | class NetdiscoverPlugin(PluginBase): |
17 | 17 | |
18 | def __init__(self): | |
19 | super().__init__() | |
18 | def __init__(self, *arg, **kwargs): | |
19 | super().__init__(*arg, **kwargs) | |
20 | 20 | self.id = "Netdiscover" |
21 | 21 | self.name = "netdiscover" |
22 | 22 | self.plugin_version = "0.0.1" |
38 | 38 | |
39 | 39 | |
40 | 40 | |
41 | def createPlugin(): | |
42 | return NetdiscoverPlugin() | |
41 | def createPlugin(ignore_info=False): | |
42 | return NetdiscoverPlugin(ignore_info=ignore_info) | |
43 | 43 | |
44 | # I'm Py3 | |
44 |
184 | 184 | Example plugin to parse netsparker output. |
185 | 185 | """ |
186 | 186 | |
187 | def __init__(self): | |
188 | super().__init__() | |
187 | def __init__(self, *arg, **kwargs): | |
188 | super().__init__(*arg, **kwargs) | |
189 | 189 | self.identifier_tag = "netsparker" |
190 | 190 | self.id = "Netsparker" |
191 | 191 | self.name = "Netsparker XML Output Plugin" |
228 | 228 | del parser |
229 | 229 | |
230 | 230 | |
231 | def createPlugin(): | |
232 | return NetsparkerPlugin() | |
233 | ||
234 | # I'm Py3 | |
231 | def createPlugin(ignore_info=False): | |
232 | return NetsparkerPlugin(ignore_info=ignore_info) | |
233 | ||
234 |
179 | 179 | Example plugin to parse netsparkercloud output. |
180 | 180 | """ |
181 | 181 | |
182 | def __init__(self): | |
183 | super().__init__() | |
182 | def __init__(self, *arg, **kwargs): | |
183 | super().__init__(*arg, **kwargs) | |
184 | 184 | self.identifier_tag = "netsparker-cloud" |
185 | 185 | self.id = "NetsparkerCloud" |
186 | 186 | self.name = "NetsparkerCloud XML Output Plugin" |
209 | 209 | pass |
210 | 210 | |
211 | 211 | |
212 | def createPlugin(): | |
213 | return NetsparkerCloudPlugin() | |
212 | def createPlugin(ignore_info=False): | |
213 | return NetsparkerCloudPlugin(ignore_info=ignore_info) |
248 | 248 | Example plugin to parse nexpose output. |
249 | 249 | """ |
250 | 250 | |
251 | def __init__(self): | |
252 | super().__init__() | |
251 | def __init__(self, *arg, **kwargs): | |
252 | super().__init__(*arg, **kwargs) | |
253 | 253 | self.identifier_tag = "NexposeReport" |
254 | 254 | self.id = "NexposeFull" |
255 | 255 | self.name = "Nexpose XML 2.0 Report Plugin" |
324 | 324 | pass |
325 | 325 | |
326 | 326 | |
327 | def createPlugin(): | |
328 | return NexposeFullPlugin() | |
329 | ||
330 | # I'm Py3 | |
327 | def createPlugin(ignore_info=False): | |
328 | return NexposeFullPlugin(ignore_info=ignore_info) | |
329 | ||
330 |
21 | 21 | |
22 | 22 | |
23 | 23 | class CmdNextNetin(PluginBase): |
24 | def __init__(self): | |
25 | super().__init__() | |
24 | ||
25 | def __init__(self, *arg, **kwargs): | |
26 | super().__init__(*arg, **kwargs) | |
26 | 27 | self.id = "nextnet" |
27 | 28 | self.name = "nextnet" |
28 | 29 | self.plugin_version = "0.0.1" |
63 | 64 | return True |
64 | 65 | |
65 | 66 | |
66 | def createPlugin(): | |
67 | return CmdNextNetin() | |
67 | def createPlugin(ignore_info=False): | |
68 | return CmdNextNetin(ignore_info=ignore_info) |
246 | 246 | Example plugin to parse nikto output. |
247 | 247 | """ |
248 | 248 | |
249 | def __init__(self): | |
250 | super().__init__() | |
249 | def __init__(self, *arg, **kwargs): | |
250 | super().__init__(*arg, **kwargs) | |
251 | 251 | self.identifier_tag = "niktoscan" |
252 | 252 | self.id = "Nikto" |
253 | 253 | self.name = "Nikto XML Output Plugin" |
257 | 257 | self.parent = None |
258 | 258 | self._use_temp_file = True |
259 | 259 | self._temp_file_extension = "xml" |
260 | self.xml_arg_re = re.compile(r"^.*(-output\s*[^\s]+).*$") | |
260 | self.xml_alrg_re = re.compile(r"^.*(-output\s*[^\s]+).*$") | |
261 | 261 | self._command_regex = re.compile( |
262 | 262 | r'^(sudo nikto|nikto|sudo nikto\.pl|nikto\.pl|perl nikto\.pl|\.\/nikto\.pl|\.\/nikto)\s+.*?') |
263 | 263 | self._completition = { |
363 | 363 | pass |
364 | 364 | |
365 | 365 | |
366 | def createPlugin(): | |
367 | return NiktoPlugin() | |
368 | ||
369 | # I'm Py3 | |
366 | def createPlugin(ignore_info=False): | |
367 | return NiktoPlugin(ignore_info=ignore_info) | |
368 | ||
369 |
430 | 430 | Example plugin to parse nmap output. |
431 | 431 | """ |
432 | 432 | |
433 | def __init__(self): | |
434 | super().__init__() | |
433 | def __init__(self, *arg, **kwargs): | |
434 | super().__init__(*arg, **kwargs) | |
435 | 435 | self.identifier_tag = "nmaprun" |
436 | 436 | self.id = "Nmap" |
437 | 437 | self.name = "Nmap XML Output Plugin" |
549 | 549 | r"-oX %s" % self._output_file_path, |
550 | 550 | command_string) |
551 | 551 | |
552 | def createPlugin(): | |
553 | return NmapPlugin() | |
554 | ||
555 | # I'm Py3 | |
552 | def createPlugin(ignore_info=False): | |
553 | return NmapPlugin(ignore_info=ignore_info) | |
554 | ||
555 |
30 | 30 | and adds the information to Faraday. |
31 | 31 | """ |
32 | 32 | |
33 | def __init__(self): | |
34 | super().__init__() | |
33 | def __init__(self, *arg, **kwargs): | |
34 | super().__init__(*arg, **kwargs) | |
35 | 35 | self.id = "nuclei" |
36 | 36 | self.name = "Nuclei" |
37 | 37 | self.plugin_version = "0.1" |
99 | 99 | external_id=info_vuln.get('template', "")) |
100 | 100 | |
101 | 101 | |
102 | def createPlugin(): | |
103 | return NucleiPlugin() | |
102 | def createPlugin(ignore_info=False): | |
103 | return NucleiPlugin(ignore_info=ignore_info) | |
104 | 104 | |
105 | 105 |
125 | 125 | |
126 | 126 | |
127 | 127 | class OpenScapPlugin(PluginXMLFormat): |
128 | def __init__(self): | |
129 | super().__init__() | |
128 | ||
129 | def __init__(self, *arg, **kwargs): | |
130 | super().__init__(*arg, **kwargs) | |
130 | 131 | self.identifier_tag = "Benchmark" |
131 | 132 | self.id = 'OpenScap' |
132 | 133 | self.name = 'OpenScap XML Output Plugin' |
209 | 210 | run_date=vuln_run_date) |
210 | 211 | |
211 | 212 | |
212 | def createPlugin(): | |
213 | return OpenScapPlugin() | |
213 | def createPlugin(ignore_info=False): | |
214 | return OpenScapPlugin(ignore_info=ignore_info) |
319 | 319 | Example plugin to parse openvas output. |
320 | 320 | """ |
321 | 321 | |
322 | def __init__(self): | |
323 | super().__init__() | |
322 | def __init__(self, *arg, **kwargs): | |
323 | super().__init__(*arg, **kwargs) | |
324 | 324 | self.identifier_tag = ["report", "get_results_response"] |
325 | 325 | self.id = "Openvas" |
326 | 326 | self.name = "Openvas XML Output Plugin" |
446 | 446 | pass |
447 | 447 | |
448 | 448 | |
449 | def createPlugin(): | |
450 | return OpenvasPlugin() | |
451 | ||
452 | # I'm Py3 | |
449 | def createPlugin(ignore_info=False): | |
450 | return OpenvasPlugin(ignore_info=ignore_info) | |
451 | ||
452 |
20 | 20 | |
21 | 21 | class pasteAnalyzerPlugin(PluginBase): |
22 | 22 | |
23 | def __init__(self): | |
24 | super().__init__() | |
23 | def __init__(self, *arg, **kwargs): | |
24 | super().__init__(*arg, **kwargs) | |
25 | 25 | self.id = "pasteAnalyzer" |
26 | 26 | self.name = "pasteAnalyzer JSON Output Plugin" |
27 | 27 | self.plugin_version = "1.0.0" |
85 | 85 | return command_string |
86 | 86 | |
87 | 87 | |
88 | def createPlugin(): | |
89 | return pasteAnalyzerPlugin() | |
88 | def createPlugin(ignore_info=False): | |
89 | return pasteAnalyzerPlugin(ignore_info=ignore_info) | |
90 | 90 | |
91 | # I'm Py3 | |
91 |
24 | 24 | Handle PeepingTom (https://bitbucket.org/LaNMaSteR53/peepingtom) output |
25 | 25 | """ |
26 | 26 | |
27 | def __init__(self): | |
28 | super().__init__() | |
27 | def __init__(self, *arg, **kwargs): | |
28 | super().__init__(*arg, **kwargs) | |
29 | 29 | self.id = "peepingtom" |
30 | 30 | self.name = "PeepingTom" |
31 | 31 | self.plugin_version = "0.0.1" |
70 | 70 | self._path = current_path |
71 | 71 | |
72 | 72 | |
73 | def createPlugin(): | |
74 | return PeepingTomPlugin() | |
73 | def createPlugin(ignore_info=False): | |
74 | return PeepingTomPlugin(ignore_info=ignore_info) | |
75 | 75 | |
76 | # I'm Py3 | |
76 |
22 | 22 | Basically detects if user was able to connect to a device |
23 | 23 | """ |
24 | 24 | |
25 | def __init__(self): | |
26 | super().__init__() | |
25 | def __init__(self, *arg, **kwargs): | |
26 | super().__init__(*arg, **kwargs) | |
27 | 27 | self.id = "ping" |
28 | 28 | self.name = "Ping" |
29 | 29 | self.plugin_version = "0.0.1" |
48 | 48 | |
49 | 49 | |
50 | 50 | |
51 | def createPlugin(): | |
52 | return CmdPingPlugin() | |
51 | def createPlugin(ignore_info=False): | |
52 | return CmdPingPlugin(ignore_info=ignore_info) | |
53 | 53 | |
54 | 54 | |
55 | # I'm Py3 | |
55 |
23 | 23 | Basically inserts into the tree the ouput of this tool |
24 | 24 | """ |
25 | 25 | |
26 | def __init__(self): | |
27 | super().__init__() | |
26 | def __init__(self, *arg, **kwargs): | |
27 | super().__init__(*arg, **kwargs) | |
28 | 28 | self.id = "propecia" |
29 | 29 | self.name = "propecia port scanner" |
30 | 30 | self.plugin_version = "0.0.1" |
60 | 60 | self._port = count_args[2] |
61 | 61 | |
62 | 62 | |
63 | def createPlugin(): | |
64 | return CmdPropeciaPlugin() | |
63 | def createPlugin(ignore_info=False): | |
64 | return CmdPropeciaPlugin(ignore_info=ignore_info) | |
65 | 65 | |
66 | # I'm Py3 | |
66 |
334 | 334 | Example plugin to parse qualysguard output. |
335 | 335 | """ |
336 | 336 | |
337 | def __init__(self): | |
338 | super().__init__() | |
337 | def __init__(self, *arg, **kwargs): | |
338 | super().__init__(*arg, **kwargs) | |
339 | 339 | self.identifier_tag = ["ASSET_DATA_REPORT", "SCAN"] |
340 | 340 | self.id = 'Qualysguard' |
341 | 341 | self.name = 'Qualysguard XML Output Plugin' |
418 | 418 | pass |
419 | 419 | |
420 | 420 | |
421 | def createPlugin(): | |
422 | return QualysguardPlugin() | |
423 | ||
424 | ||
421 | def createPlugin(ignore_info=False): | |
422 | return QualysguardPlugin(ignore_info=ignore_info) | |
423 | ||
424 |
100 | 100 | |
101 | 101 | |
102 | 102 | class QualysWebappPlugin(PluginXMLFormat): |
103 | def __init__(self): | |
104 | super().__init__() | |
103 | ||
104 | def __init__(self, *arg, **kwargs): | |
105 | super().__init__(*arg, **kwargs) | |
105 | 106 | self.identifier_tag = ["WAS_SCAN_REPORT"] |
106 | 107 | self.id = 'QualysWebapp' |
107 | 108 | self.name = 'QualysWebapp XML Output Plugin' |
174 | 175 | external_id=vuln_scan_id, data=vuln_data_add) |
175 | 176 | |
176 | 177 | |
177 | def createPlugin(): | |
178 | return QualysWebappPlugin() | |
178 | def createPlugin(ignore_info=False): | |
179 | return QualysWebappPlugin(ignore_info=ignore_info) |
6 | 6 | |
7 | 7 | class RDPScanPlugin(PluginBase): |
8 | 8 | |
9 | def __init__(self): | |
10 | super().__init__() | |
9 | def __init__(self, *arg, **kwargs): | |
10 | super().__init__(*arg, **kwargs) | |
11 | 11 | self.identifier_tag = "rdpscan" |
12 | 12 | self.id = "rdpscan" |
13 | 13 | self.name = "rdpscan" |
42 | 42 | ) |
43 | 43 | |
44 | 44 | |
45 | def createPlugin(): | |
46 | return RDPScanPlugin() | |
45 | def createPlugin(ignore_info=False): | |
46 | return RDPScanPlugin(ignore_info=ignore_info) |
127 | 127 | Example plugin to parse qualysguard output. |
128 | 128 | """ |
129 | 129 | |
130 | def __init__(self): | |
131 | super().__init__() | |
130 | def __init__(self, *arg, **kwargs): | |
131 | super().__init__(*arg, **kwargs) | |
132 | 132 | self.identifier_tag = "reconng" |
133 | 133 | self.id = 'Reconng' |
134 | 134 | self.name = 'Reconng XML Output Plugin' |
170 | 170 | |
171 | 171 | |
172 | 172 | |
173 | def createPlugin(): | |
174 | return ReconngPlugin() | |
173 | def createPlugin(ignore_info=False): | |
174 | return ReconngPlugin(ignore_info=ignore_info) | |
175 | 175 | |
176 | # I'm Py3 | |
176 |
171 | 171 | Example plugin to parse retina output. |
172 | 172 | """ |
173 | 173 | |
174 | def __init__(self): | |
175 | super().__init__() | |
174 | def __init__(self, *arg, **kwargs): | |
175 | super().__init__(*arg, **kwargs) | |
176 | 176 | self.identifier_tag = "scanJob" |
177 | 177 | self.id = "Retina" |
178 | 178 | self.name = "Retina XML Output Plugin" |
226 | 226 | pass |
227 | 227 | |
228 | 228 | |
229 | def createPlugin(): | |
230 | return RetinaPlugin() | |
231 | ||
232 | # I'm Py3 | |
229 | def createPlugin(ignore_info=False): | |
230 | return RetinaPlugin(ignore_info=ignore_info) | |
231 | ||
232 |
48 | 48 | Example plugin to parse reverseraider output. |
49 | 49 | """ |
50 | 50 | |
51 | def __init__(self): | |
52 | super().__init__() | |
51 | def __init__(self, *arg, **kwargs): | |
52 | super().__init__(*arg, **kwargs) | |
53 | 53 | self.id = "Reverseraider" |
54 | 54 | self.name = "Reverseraider XML Output Plugin" |
55 | 55 | self.plugin_version = "0.0.1" |
77 | 77 | |
78 | 78 | |
79 | 79 | |
80 | def createPlugin(): | |
81 | return ReverseraiderPlugin() | |
80 | def createPlugin(ignore_info=False): | |
81 | return ReverseraiderPlugin(ignore_info=ignore_info) | |
82 | 82 | |
83 | # I'm Py3 | |
83 |
110 | 110 | Example plugin to parse skipfish output. |
111 | 111 | """ |
112 | 112 | |
113 | def __init__(self): | |
114 | super().__init__() | |
113 | def __init__(self, *arg, **kwargs): | |
114 | super().__init__(*arg, **kwargs) | |
115 | 115 | self.id = "Skipfish" |
116 | 116 | self.name = "Skipfish Output Plugin" |
117 | 117 | self.plugin_version = "0.0.2" |
217 | 217 | pass |
218 | 218 | |
219 | 219 | |
220 | def createPlugin(): | |
221 | return SkipfishPlugin() | |
222 | ||
223 | # I'm Py3 | |
220 | def createPlugin(ignore_info=False): | |
221 | return SkipfishPlugin(ignore_info=ignore_info) | |
222 | ||
223 |
44 | 44 | and adds the information to Faraday. |
45 | 45 | """ |
46 | 46 | |
47 | def __init__(self): | |
48 | super().__init__() | |
47 | def __init__(self, *arg, **kwargs): | |
48 | super().__init__(*arg, **kwargs) | |
49 | 49 | self.id = "sourceclear" |
50 | 50 | self.name = "Sourceclear" |
51 | 51 | self.plugin_version = "0.1" |
81 | 81 | website=v_website) |
82 | 82 | |
83 | 83 | |
84 | def createPlugin(): | |
85 | return SourceclearPlugin() | |
84 | def createPlugin(ignore_info=False): | |
85 | return SourceclearPlugin(ignore_info=ignore_info) |
21 | 21 | using --batch and --batch-template; supports --username and --password |
22 | 22 | """ |
23 | 23 | |
24 | def __init__(self): | |
25 | super().__init__() | |
24 | def __init__(self, *arg, **kwargs): | |
25 | super().__init__(*arg, **kwargs) | |
26 | 26 | self.id = "sshdefaultscan" |
27 | 27 | self.name = "sshdefaultscan" |
28 | 28 | self.plugin_version = "0.0.1" |
65 | 65 | return None |
66 | 66 | |
67 | 67 | |
68 | def createPlugin(): | |
69 | return SSHDefaultScanPlugin() | |
68 | def createPlugin(ignore_info=False): | |
69 | return SSHDefaultScanPlugin(ignore_info=ignore_info) | |
70 | 70 | |
71 | # I'm Py3 | |
71 |
66 | 66 | and adds the information to Faraday. |
67 | 67 | """ |
68 | 68 | |
69 | def __init__(self): | |
70 | super().__init__() | |
69 | def __init__(self, *arg, **kwargs): | |
70 | super().__init__(*arg, **kwargs) | |
71 | 71 | self.id = "ssllabs" |
72 | 72 | self.name = "SSL Labs" |
73 | 73 | self.plugin_version = "0.1" |
109 | 109 | data=vuln['data']) |
110 | 110 | |
111 | 111 | |
112 | def createPlugin(): | |
113 | return SslLabsPlugin() | |
112 | def createPlugin(ignore_info=False): | |
113 | return SslLabsPlugin(ignore_info=ignore_info) |
83 | 83 | |
84 | 84 | class SslyzePlugin(PluginXMLFormat): |
85 | 85 | |
86 | def __init__(self): | |
87 | super().__init__() | |
86 | def __init__(self, *arg, **kwargs): | |
87 | super().__init__(*arg, **kwargs) | |
88 | 88 | self.identifier_tag = "document" |
89 | self.id = "Sslyze XML" | |
89 | self.id = "Sslyze_XML" | |
90 | 90 | self.name = "Sslyze Plugin" |
91 | 91 | self.plugin_version = "0.0.1" |
92 | 92 | self.version = "2.0.6" |
167 | 167 | severity="medium") |
168 | 168 | |
169 | 169 | |
170 | def createPlugin(): | |
171 | return SslyzePlugin() | |
170 | def createPlugin(ignore_info=False): | |
171 | return SslyzePlugin(ignore_info=ignore_info) |
161 | 161 | |
162 | 162 | class SslyzePlugin(PluginJsonFormat): |
163 | 163 | |
164 | def __init__(self): | |
165 | super().__init__() | |
166 | self.id = "Sslyze JSON" | |
164 | def __init__(self, *arg, **kwargs): | |
165 | super().__init__(*arg, **kwargs) | |
166 | self.id = "Sslyze_JSON" | |
167 | 167 | self.name = "Sslyze Json" |
168 | 168 | self.plugin_version = "0.1" |
169 | 169 | self.version = "3.4.5" |
170 | 170 | self.json_keys = {'server_scan_results', 'sslyze_url'} |
171 | 171 | self._command_regex = re.compile(r'^(sudo sslyze|sslyze|\.\/sslyze)\s+.*?') |
172 | 172 | self.json_arg_re = re.compile(r"^.*(--json_out\s*[^\s]+).*$") |
173 | self._use_temp_file = True | |
174 | self._temp_file_extension = "json" | |
173 | 175 | |
174 | 176 | def parseOutputString(self, output): |
175 | 177 | parser = SslyzeJsonParser(output) |
241 | 243 | command_string) |
242 | 244 | |
243 | 245 | |
244 | def createPlugin(): | |
245 | return SslyzePlugin() | |
246 | ||
246 | def createPlugin(ignore_info=False): | |
247 | return SslyzePlugin(ignore_info=ignore_info) | |
248 |
23 | 23 | Basically detects if user was able to connect to a device |
24 | 24 | """ |
25 | 25 | |
26 | def __init__(self): | |
27 | super().__init__() | |
26 | def __init__(self, *arg, **kwargs): | |
27 | super().__init__(*arg, **kwargs) | |
28 | 28 | self.id = "Telnet" |
29 | 29 | self.name = "Telnet" |
30 | 30 | self.plugin_version = "0.0.1" |
76 | 76 | self._port = count_args[c - 1] |
77 | 77 | |
78 | 78 | |
79 | def createPlugin(): | |
80 | return TelnetRouterPlugin() | |
79 | def createPlugin(ignore_info=False): | |
80 | return TelnetRouterPlugin(ignore_info=ignore_info) | |
81 | 81 | |
82 | # I'm Py3 | |
82 |
72 | 72 | Example plugin to parse theharvester output. |
73 | 73 | """ |
74 | 74 | |
75 | def __init__(self): | |
76 | super().__init__() | |
75 | def __init__(self, *arg, **kwargs): | |
76 | super().__init__(*arg, **kwargs) | |
77 | 77 | self.id = "Theharvester" |
78 | 78 | self.name = "Theharvester XML Output Plugin" |
79 | 79 | self.plugin_version = "0.0.1" |
114 | 114 | |
115 | 115 | |
116 | 116 | |
117 | def createPlugin(): | |
118 | return TheharvesterPlugin() | |
117 | def createPlugin(ignore_info=False): | |
118 | return TheharvesterPlugin(ignore_info=ignore_info) | |
119 | 119 | |
120 | 120 | |
121 | # I'm Py3 | |
121 |
15 | 15 | |
16 | 16 | class traceroutePlugin(PluginBase): |
17 | 17 | |
18 | def __init__(self): | |
19 | super().__init__() | |
18 | def __init__(self, *arg, **kwargs): | |
19 | super().__init__(*arg, **kwargs) | |
20 | 20 | self.id = "Traceroute" |
21 | 21 | self.name = "Traceroute" |
22 | 22 | self.plugin_version = "1.0.0" |
55 | 55 | return None |
56 | 56 | |
57 | 57 | |
58 | def createPlugin(): | |
59 | return traceroutePlugin() | |
58 | def createPlugin(ignore_info=False): | |
59 | return traceroutePlugin(ignore_info=ignore_info) | |
60 | 60 | |
61 | # I'm Py3 | |
61 |
207 | 207 | Example plugin to parse w3af output. |
208 | 208 | """ |
209 | 209 | |
210 | def __init__(self): | |
211 | super().__init__() | |
210 | def __init__(self, *arg, **kwargs): | |
211 | super().__init__(*arg, **kwargs) | |
212 | 212 | self.identifier_tag = ["w3af-run", "w3afrun"] |
213 | 213 | self.id = "W3af" |
214 | 214 | self.name = "W3af XML Output Plugin" |
240 | 240 | |
241 | 241 | |
242 | 242 | |
243 | def createPlugin(): | |
244 | return W3afPlugin() | |
245 | ||
246 | # I'm Py3 | |
243 | def createPlugin(ignore_info=False): | |
244 | return W3afPlugin(ignore_info=ignore_info) | |
245 | ||
246 |
223 | 223 | Example plugin to parse wapiti output. |
224 | 224 | """ |
225 | 225 | |
226 | def __init__(self): | |
227 | super().__init__() | |
226 | def __init__(self, *arg, **kwargs): | |
227 | super().__init__(*arg, **kwargs) | |
228 | 228 | self.identifier_tag = "report" |
229 | 229 | self.id = "Wapiti" |
230 | 230 | self.name = "Wapiti XML Output Plugin" |
345 | 345 | pass |
346 | 346 | |
347 | 347 | |
348 | def createPlugin(): | |
349 | return WapitiPlugin() | |
350 | ||
351 | # I'm Py3 | |
348 | def createPlugin(ignore_info=False): | |
349 | return WapitiPlugin(ignore_info=ignore_info) | |
350 | ||
351 |
69 | 69 | Example plugin to parse wcscan output. |
70 | 70 | """ |
71 | 71 | |
72 | def __init__(self): | |
73 | super().__init__() | |
72 | def __init__(self, *arg, **kwargs): | |
73 | super().__init__(*arg, **kwargs) | |
74 | 74 | self.id = "Wcscan" |
75 | 75 | self.name = "Wcscan XML Output Plugin" |
76 | 76 | self.plugin_version = "0.0.2" |
132 | 132 | return re.sub(arg_match.group(1), r"-xml %s" % self._output_file_path, command_string) |
133 | 133 | |
134 | 134 | |
135 | def createPlugin(): | |
136 | return WcscanPlugin() | |
135 | def createPlugin(ignore_info=False): | |
136 | return WcscanPlugin(ignore_info=ignore_info) | |
137 | 137 | |
138 | # I'm Py3 | |
138 |
72 | 72 | Example plugin to parse webfuzzer output. |
73 | 73 | """ |
74 | 74 | |
75 | def __init__(self): | |
76 | super().__init__() | |
75 | def __init__(self, *arg, **kwargs): | |
76 | super().__init__(*arg, **kwargs) | |
77 | 77 | self.id = "Webfuzzer" |
78 | 78 | self.name = "Webfuzzer Output Plugin" |
79 | 79 | self.plugin_version = "0.0.2" |
134 | 134 | self._output_path = current_path + "/" + self.host + ".txt" |
135 | 135 | |
136 | 136 | |
137 | def createPlugin(): | |
138 | return WebfuzzerPlugin() | |
137 | def createPlugin(ignore_info=False): | |
138 | return WebfuzzerPlugin(ignore_info=ignore_info) | |
139 | 139 | |
140 | # I'm Py3 | |
140 |
116 | 116 | This plugin handles WebInspect reports. |
117 | 117 | """ |
118 | 118 | |
119 | def __init__(self): | |
120 | super().__init__() | |
119 | def __init__(self, *arg, **kwargs): | |
120 | super().__init__(*arg, **kwargs) | |
121 | 121 | self.id = "Webinspect" |
122 | 122 | self.name = "Webinspect" |
123 | 123 | self.plugin_version = "0.0.1" |
152 | 152 | ) |
153 | 153 | |
154 | 154 | |
155 | def createPlugin(ignore_info=False): | |
156 | return WebInspectPlugin(ignore_info=ignore_info) | |
155 | 157 | |
156 | ||
157 | def createPlugin(): | |
158 | return WebInspectPlugin() | |
159 |
6 | 6 | |
7 | 7 | class WfuzzPlugin(PluginBase): |
8 | 8 | |
9 | def __init__(self): | |
10 | super().__init__() | |
9 | def __init__(self, *arg, **kwargs): | |
10 | super().__init__(*arg, **kwargs) | |
11 | 11 | self.id = "Wfuzz" |
12 | 12 | self.name = "Wfuzz Plugin" |
13 | 13 | self.plugin_version = "0.0.1" |
83 | 83 | path=path) |
84 | 84 | |
85 | 85 | |
86 | def createPlugin(): | |
87 | return WfuzzPlugin() | |
86 | def createPlugin(ignore_info=False): | |
87 | return WfuzzPlugin(ignore_info=ignore_info) | |
88 | 88 | |
89 | # I'm Py3 | |
89 |
49 | 49 | |
50 | 50 | class WhatWebPlugin(PluginJsonFormat): |
51 | 51 | |
52 | def __init__(self): | |
53 | super().__init__() | |
52 | def __init__(self, *arg, **kwargs): | |
53 | super().__init__(*arg, **kwargs) | |
54 | 54 | self.id = "whatweb" |
55 | 55 | self.name = "WhatWebPlugin" |
56 | 56 | self.plugin_version = "0.1" |
73 | 73 | description=desc) |
74 | 74 | |
75 | 75 | |
76 | def createPlugin(): | |
77 | return WhatWebPlugin() | |
76 | def createPlugin(ignore_info=False): | |
77 | return WhatWebPlugin(ignore_info=ignore_info) |
21 | 21 | |
22 | 22 | |
23 | 23 | class WhitesourcePlugin(PluginJsonFormat): |
24 | def __init__(self): | |
25 | super().__init__() | |
24 | ||
25 | def __init__(self, *arg, **kwargs): | |
26 | super().__init__(*arg, **kwargs) | |
26 | 27 | self.id = "whitesource" |
27 | 28 | self.name = "whitesource" |
28 | 29 | self.plugin_version = "0.1" |
92 | 93 | ) |
93 | 94 | |
94 | 95 | |
95 | ||
96 | ||
97 | ||
98 | def createPlugin(): | |
99 | return WhitesourcePlugin() | |
96 | def createPlugin(ignore_info=False): | |
97 | return WhitesourcePlugin(ignore_info=ignore_info) |
26 | 26 | Basically detects if user was able to connect to a device |
27 | 27 | """ |
28 | 28 | |
29 | def __init__(self): | |
30 | super().__init__() | |
29 | def __init__(self, *arg, **kwargs): | |
30 | super().__init__(*arg, **kwargs) | |
31 | 31 | self.id = "whois" |
32 | 32 | self.name = "Whois" |
33 | 33 | self.plugin_version = "0.0.1" |
125 | 125 | return True |
126 | 126 | |
127 | 127 | |
128 | def createPlugin(): | |
129 | return CmdWhoisPlugin() | |
128 | def createPlugin(ignore_info=False): | |
129 | return CmdWhoisPlugin(ignore_info=ignore_info) |
48 | 48 | and adds the information to Faraday. |
49 | 49 | """ |
50 | 50 | |
51 | def __init__(self): | |
52 | super().__init__() | |
51 | def __init__(self, *arg, **kwargs): | |
52 | super().__init__(*arg, **kwargs) | |
53 | 53 | self.id = "wpscan" |
54 | 54 | self.name = "WPscan" |
55 | 55 | self.plugin_version = "0.2" |
90 | 90 | severity='unclassified') |
91 | 91 | |
92 | 92 | |
93 | def createPlugin(): | |
94 | return WPScanPlugin() | |
93 | def createPlugin(ignore_info=False): | |
94 | return WPScanPlugin(ignore_info=ignore_info) |
154 | 154 | Example plugin to parse x1 output. |
155 | 155 | """ |
156 | 156 | |
157 | def __init__(self): | |
158 | super().__init__() | |
157 | def __init__(self, *arg, **kwargs): | |
158 | super().__init__(*arg, **kwargs) | |
159 | 159 | self.identifier_tag = ["session", "landscapePolicy"] |
160 | 160 | self.id = "X1" |
161 | 161 | self.name = "Onapsis X1 XML Output Plugin" |
192 | 192 | pass |
193 | 193 | |
194 | 194 | |
195 | def createPlugin(): | |
196 | return X1Plugin() | |
195 | def createPlugin(ignore_info=False): | |
196 | return X1Plugin(ignore_info=ignore_info) | |
197 | 197 | |
198 | # I'm Py3 | |
198 |
15 | 15 | |
16 | 16 | class xsssniper(PluginBase): |
17 | 17 | |
18 | def __init__(self): | |
19 | super().__init__() | |
18 | def __init__(self, *arg, **kwargs): | |
19 | super().__init__(*arg, **kwargs) | |
20 | 20 | self.id = "xsssniper" |
21 | 21 | self.name = "xsssniper" |
22 | 22 | self.plugin_version = "0.0.1" |
54 | 54 | params=''.join(parametro), request='', response='') |
55 | 55 | |
56 | 56 | |
57 | def createPlugin(): | |
58 | return xsssniper() | |
57 | def createPlugin(ignore_info=False): | |
58 | return xsssniper(ignore_info=ignore_info) | |
59 | 59 | |
60 | # I'm Py3 | |
60 |
233 | 233 | Example plugin to parse zap output. |
234 | 234 | """ |
235 | 235 | |
236 | def __init__(self): | |
237 | super().__init__() | |
236 | def __init__(self, *arg, **kwargs): | |
237 | super().__init__(*arg, **kwargs) | |
238 | 238 | self.identifier_tag = "OWASPZAPReport" |
239 | 239 | self.id = "Zap" |
240 | 240 | self.name = "Zap XML Output Plugin" |
286 | 286 | pass |
287 | 287 | |
288 | 288 | |
289 | def createPlugin(): | |
290 | return ZapPlugin() | |
289 | def createPlugin(ignore_info=False): | |
290 | return ZapPlugin(ignore_info=ignore_info) |