From 654ea7dbe0fc8a508be17da6ba6b5eb554ea8b4a Mon Sep 17 00:00:00 2001 From: Yogesh Ojha Date: Wed, 11 Aug 2021 02:41:55 +0530 Subject: [PATCH] Send reports to Hackerone working yayy :rocket: --- web/reNgine/common_func.py | 58 ++++++++++++++++++- web/scanEngine/forms.py | 3 +- web/scanEngine/views.py | 7 ++- web/targetApp/forms.py | 4 +- .../templates/target/_items/domain_form.html | 25 ++++++++ web/targetApp/templates/target/add.html | 57 ++++++++++++++++-- web/targetApp/templates/target/update.html | 2 + web/targetApp/views.py | 6 +- web/templates/base/_items/top_nav.html | 2 +- 9 files changed, 148 insertions(+), 16 deletions(-) diff --git a/web/reNgine/common_func.py b/web/reNgine/common_func.py index d48cac4c..3bac4f48 100644 --- a/web/reNgine/common_func.py +++ b/web/reNgine/common_func.py @@ -9,7 +9,7 @@ from discord_webhook import DiscordWebhook from django.db.models import Q from functools import reduce from scanEngine.models import * -from startScan.models import Subdomain, EndPoint +from startScan.models import * def get_lookup_keywords(): @@ -206,3 +206,59 @@ def get_random_proxy(): print('Using proxy: ' + proxy_name) return proxy_name return False + +def send_hackerone_report(vulnerability_id): + headers = { + 'Content-Type': 'application/json', + 'Accept': 'application/json' + } + # get hackerone creds + if Hackerone.objects.all().exists(): + hackerone = Hackerone.objects.all()[0] + vulnerability = Vulnerability.objects.get(id=vulnerability_id) + if vulnerability.severity == 0: + severity_value = 'info' + elif vulnerability.severity == 1: + severity_value = 'low' + elif vulnerability.severity == 2: + severity_value = 'medium' + elif vulnerability.severity == 3: + severity_value = 'high' + elif vulnerability.severity == 4: + severity_value = 'critical' + report_template = hackerone.report_template + # Replace syntax of report template with actual content + if '{vulnerability_name}' in report_template: + report_template = report_template.replace('{vulnerability_name}', vulnerability.name) + if '{vulnerable_url}' in report_template: + report_template = report_template.replace('{vulnerable_url}', vulnerability.http_url) + if '{vulnerability_severity}' in report_template: + report_template = report_template.replace('{vulnerability_severity}', severity_value) + if '{vulnerability_description}' in report_template: + report_template = report_template.replace('{vulnerability_description}', vulnerability.description if vulnerability.description else '') + if '{vulnerability_extracted_results}' in report_template: + report_template = report_template.replace('{vulnerability_extracted_results}', vulnerability.extracted_results if vulnerability.extracted_results else '') + if '{vulnerability_reference}' in report_template: + report_template = report_template.replace('{vulnerability_reference}', vulnerability.reference if vulnerability.reference else '') + + data = { + "data": { + "type": "report", + "attributes": { + "team_handle": vulnerability.target_domain.h1_team_handle, + "title": '{} found in {}'.format(vulnerability.name, vulnerability.http_url), + "vulnerability_information": report_template, + "severity_rating": severity_value, + "impact": " " + vulnerability.reference if vulnerability.reference else "N/A", + } + } + } + + r = requests.post( + 'https://api.hackerone.com/v1/hackers/reports', + auth=(hackerone.username, hackerone.api_key), + json = data, + headers = headers + ) + + print(r.json()) diff --git a/web/scanEngine/forms.py b/web/scanEngine/forms.py index 9c954893..ab4d6582 100644 --- a/web/scanEngine/forms.py +++ b/web/scanEngine/forms.py @@ -470,8 +470,9 @@ class HackeroneForm(forms.ModelForm): self.initial['send_medium'] = False self.initial['report_template'] = '''Hi Team, while testing, a {vulnerability_severity} severity vulnerability has been discovered in {vulnerable_url} and below is the findings. + # Vulnerability -{vulnerability_title} +{vulnerability_name} ## Issue Description {vulnerability_description} diff --git a/web/scanEngine/views.py b/web/scanEngine/views.py index 9319f76b..d65b529a 100644 --- a/web/scanEngine/views.py +++ b/web/scanEngine/views.py @@ -84,13 +84,14 @@ def update_engine(request, id): def wordlist_list(request): wordlists = Wordlist.objects.all().order_by('id') context = { - 'scan_engine_nav_active': - 'active', 'wordlists': wordlists} + 'scan_engine_nav_active': 'active', + 'wordlist_li': 'active', + 'wordlists': wordlists} return render(request, 'scanEngine/wordlist/index.html', context) def add_wordlist(request): - context = {'scan_engine_nav_active': 'active'} + context = {'scan_engine_nav_active': 'active', 'wordlist_li': 'active'} form = AddWordlistForm(request.POST or None, request.FILES or None) if request.method == "POST": if form.is_valid() and 'upload_file' in request.FILES: diff --git a/web/targetApp/forms.py b/web/targetApp/forms.py index 4242c921..4383170c 100644 --- a/web/targetApp/forms.py +++ b/web/targetApp/forms.py @@ -84,7 +84,7 @@ class AddOrganizationForm(forms.Form): class UpdateTargetForm(forms.ModelForm): class Meta: model = Domain - fields = ['name', 'description'] + fields = ['name', 'description', 'h1_team_handle'] name = forms.CharField( validators=[validate_domain], required=True, @@ -113,7 +113,7 @@ class UpdateTargetForm(forms.ModelForm): } )) - def set_value(self, domain_value, description_value): + def set_value(self, domain_value, description_value, h1_team_handle): self.initial['name'] = domain_value self.initial['description'] = description_value self.initial['h1_team_handle'] = h1_team_handle diff --git a/web/targetApp/templates/target/_items/domain_form.html b/web/targetApp/templates/target/_items/domain_form.html index 699eed9d..5dda2136 100644 --- a/web/targetApp/templates/target/_items/domain_form.html +++ b/web/targetApp/templates/target/_items/domain_form.html @@ -24,6 +24,31 @@ {{ form.description }} +
+
+
+
+
+ +
+
+
+
+
+ + {{ form.h1_team_handle }} +
+
+
+
+
+
diff --git a/web/targetApp/templates/target/add.html b/web/targetApp/templates/target/add.html index 4283c9a2..a6a24112 100644 --- a/web/targetApp/templates/target/add.html +++ b/web/targetApp/templates/target/add.html @@ -8,6 +8,7 @@ Add target for Recon {% block custom_js_css_link %} + {% endblock custom_js_css_link %} {% block breadcrumb_title %} @@ -60,12 +61,30 @@ Add target for Recon {{ form.description }} -
- - {{ form.h1_team_handle }} +
+
+
+
+
+
+ +
+
+
+
+
+ + {{ form.h1_team_handle }} +
+
+
+
@@ -84,6 +103,31 @@ Add target for Recon +
+
+
+
+
+ +
+
+
+
+
+ + +
+
+
+
+
+
@@ -128,6 +172,7 @@ Add target for Recon {% block page_level_script %} + + {% endblock custom_js_css_link %} {% block main_content %} @@ -18,4 +19,5 @@ Update Target {% block page_level_script %} + {% endblock page_level_script %} diff --git a/web/targetApp/views.py b/web/targetApp/views.py index 67fb6838..e87246aa 100644 --- a/web/targetApp/views.py +++ b/web/targetApp/views.py @@ -47,6 +47,7 @@ def add_target(request): for target in request.POST['addTargets'].split('\n')] bulk_targets = [target for target in bulk_targets if target] description = request.POST['targetDescription'] if 'targetDescription' in request.POST else '' + h1_team_handle = request.POST['targetH1TeamHandle'] if 'targetH1TeamHandle' in request.POST else None target_count = 0 for target in bulk_targets: if not Domain.objects.filter( @@ -54,6 +55,7 @@ def add_target(request): Domain.objects.create( name=target.rstrip("\n"), description=description, + h1_team_handle=h1_team_handle, insert_date=timezone.now()) target_count += 1 if target_count: @@ -123,7 +125,7 @@ def add_target(request): "target_data_active": "active", 'form': add_target_form} return render(request, 'target/add.html', context) - + def list_target(request): domains = Domain.objects.all().order_by('-insert_date') context = { @@ -183,7 +185,7 @@ def update_target(request, id): 'Domain {} modified!'.format(domain.name)) return http.HttpResponseRedirect(reverse('list_target')) else: - form.set_value(domain.name, domain.description) + form.set_value(domain.name, domain.description, domain.h1_team_handle) context = { 'list_target_li': 'active', 'target_data_active': 'active', diff --git a/web/templates/base/_items/top_nav.html b/web/templates/base/_items/top_nav.html index 15d842a9..4760f5b2 100644 --- a/web/templates/base/_items/top_nav.html +++ b/web/templates/base/_items/top_nav.html @@ -89,7 +89,7 @@
  • Scan Engines
  • -
  • +
  • Wordlists