mirror of
https://github.com/yogeshojha/rengine.git
synced 2026-09-18 15:57:44 +02:00
130 lines
4.9 KiB
Python
130 lines
4.9 KiB
Python
from django.db import models
|
|
from targetApp.models import Domain
|
|
from scanEngine.models import EngineType
|
|
from django.db.models import JSONField
|
|
|
|
|
|
class ScanHistory(models.Model):
|
|
last_scan_date = models.DateTimeField()
|
|
scan_status = models.IntegerField()
|
|
domain_name = models.ForeignKey(Domain, on_delete=models.CASCADE)
|
|
scan_type = models.ForeignKey(EngineType, on_delete=models.CASCADE)
|
|
celery_id = models.CharField(max_length=100, blank=True)
|
|
|
|
def __str__(self):
|
|
# debug purpose remove scan type and id in prod
|
|
return self.domain_name.domain_name
|
|
|
|
def get_subdomain_count(self):
|
|
return ScannedHost.objects.filter(scan_history__id=self.id).count()
|
|
|
|
def get_endpoint_count(self):
|
|
return WayBackEndPoint.objects.filter(url_of__id=self.id).count()
|
|
|
|
def get_vulnerability_count(self):
|
|
return VulnerabilityScan.objects.filter(
|
|
vulnerability_of__id=self.id).count()
|
|
|
|
def get_info_vulnerability_count(self):
|
|
return VulnerabilityScan.objects.filter(
|
|
vulnerability_of__id=self.id).filter(
|
|
severity=0).count()
|
|
|
|
def get_low_vulnerability_count(self):
|
|
return VulnerabilityScan.objects.filter(
|
|
vulnerability_of__id=self.id).filter(
|
|
severity=1).count()
|
|
|
|
def get_medium_vulnerability_count(self):
|
|
return VulnerabilityScan.objects.filter(
|
|
vulnerability_of__id=self.id).filter(
|
|
severity=2).count()
|
|
|
|
def get_high_vulnerability_count(self):
|
|
return VulnerabilityScan.objects.filter(
|
|
vulnerability_of__id=self.id).filter(
|
|
severity=3).count()
|
|
|
|
def get_critical_vulnerability_count(self):
|
|
return VulnerabilityScan.objects.filter(
|
|
vulnerability_of__id=self.id).filter(
|
|
severity=4).count()
|
|
|
|
|
|
class ScannedHost(models.Model):
|
|
subdomain = models.CharField(max_length=1000)
|
|
cname = models.CharField(max_length=500, blank=True)
|
|
scan_history = models.ForeignKey(ScanHistory, on_delete=models.CASCADE)
|
|
open_ports = models.CharField(max_length=1000)
|
|
http_status = models.IntegerField(default=0)
|
|
content_length = models.IntegerField(default=0)
|
|
page_title = models.CharField(max_length=1000)
|
|
http_url = models.CharField(max_length=1000)
|
|
ip_address = models.CharField(max_length=1000)
|
|
is_ip_cdn = models.BooleanField(null=True, default=False)
|
|
screenshot_path = models.CharField(max_length=1000, null=True)
|
|
http_header_path = models.CharField(max_length=1000, null=True)
|
|
technology_stack = models.CharField(max_length=1500, null=True)
|
|
directory_json = JSONField(null=True)
|
|
checked = models.BooleanField(null=True, blank=True, default=False)
|
|
discovered_date = models.DateTimeField(blank=True, null=True)
|
|
target_domain = models.ForeignKey(
|
|
Domain, on_delete=models.CASCADE, null=True, blank=True)
|
|
interesting_subdomain = models.BooleanField(null=True, default=False)
|
|
interesting_subdomain_reason = models.CharField(max_length=100, null=True)
|
|
|
|
def __str__(self):
|
|
return str(self.subdomain)
|
|
|
|
|
|
class WayBackEndPoint(models.Model):
|
|
url_of = models.ForeignKey(ScanHistory, on_delete=models.CASCADE)
|
|
http_url = models.CharField(max_length=5000)
|
|
content_length = models.IntegerField(default=0)
|
|
page_title = models.CharField(max_length=1000)
|
|
http_status = models.IntegerField(default=0)
|
|
content_type = models.CharField(max_length=100, null=True)
|
|
discovered_date = models.DateTimeField(blank=True, null=True)
|
|
target_domain = models.ForeignKey(
|
|
Domain, on_delete=models.CASCADE, null=True, blank=True)
|
|
|
|
def __str__(self):
|
|
return self.page_title
|
|
|
|
|
|
class VulnerabilityScan(models.Model):
|
|
vulnerability_of = models.ForeignKey(ScanHistory, on_delete=models.CASCADE)
|
|
host = models.ForeignKey(
|
|
ScannedHost,
|
|
on_delete=models.CASCADE,
|
|
blank=True,
|
|
null=True)
|
|
discovered_date = models.DateTimeField(null=True)
|
|
url = models.CharField(max_length=1000)
|
|
name = models.CharField(max_length=400)
|
|
severity = models.IntegerField()
|
|
description = models.CharField(max_length=1000, null=True, blank=True)
|
|
extracted_results = models.CharField(
|
|
max_length=1000, null=True, blank=True)
|
|
template_used = models.CharField(max_length=100)
|
|
matcher_name = models.CharField(max_length=400, null=True, blank=True)
|
|
open_status = models.BooleanField(null=True, blank=True, default=True)
|
|
target_domain = models.ForeignKey(
|
|
Domain, on_delete=models.CASCADE, null=True, blank=True)
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
def get_severity(self):
|
|
return self.severity
|
|
|
|
|
|
class ScanActivity(models.Model):
|
|
scan_of = models.ForeignKey(ScanHistory, on_delete=models.CASCADE)
|
|
title = models.CharField(max_length=1000)
|
|
time = models.DateTimeField()
|
|
status = models.IntegerField()
|
|
|
|
def __str__(self):
|
|
return str(self.title)
|