Nettacker/core/module_protocols/core_smtp.py

93 lines
2.9 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import copy
import smtplib
# from core.utility import reverse_and_regex_condition
from core.utility import process_conditions
from core.utility import get_dependent_results_from_database
from core.utility import replace_dependent_values
# def response_conditions_matched(sub_step, response):
# return response
class NettackSMTPLib:
def smtp_brute_force(host, ports, usernames, passwords, timeout):
smtp_connection = smtplib.SMTP(host, int(ports), timeout=int(timeout))
smtp_connection.login(usernames, passwords)
smtp_connection.close()
return {
"host": host,
"username": usernames,
"password": passwords,
"port": ports
}
def smtps_brute_force(host, ports, usernames, passwords, timeout):
smtp_connection = smtplib.SMTP(host, int(ports), timeout=int(timeout))
smtp_connection.starttls()
smtp_connection.login(usernames, passwords)
smtp_connection.close()
return {
"host": host,
"username": usernames,
"password": passwords,
"port": ports
}
class Engine:
def run(
sub_step,
module_name,
target,
scan_unique_id,
options,
process_number,
module_thread_number,
total_module_thread_number,
request_number_counter,
total_number_of_requests
):
backup_method = copy.deepcopy(sub_step['method'])
backup_response = copy.deepcopy(sub_step['response'])
del sub_step['method']
del sub_step['response']
if 'dependent_on_temp_event' in backup_response:
temp_event = get_dependent_results_from_database(
target,
module_name,
scan_unique_id,
backup_response['dependent_on_temp_event']
)
sub_step = replace_dependent_values(
sub_step,
temp_event
)
action = getattr(NettackSMTPLib, backup_method, None)
for _ in range(options['retries']):
try:
response = action(**sub_step)
break
except Exception as _:
response = []
sub_step['method'] = backup_method
sub_step['response'] = backup_response
sub_step['response']['conditions_results'] = response
# sub_step['response']['conditions_results'] = response_conditions_matched(sub_step, response)
return process_conditions(
sub_step,
module_name,
target,
scan_unique_id,
options,
response,
process_number,
module_thread_number,
total_module_thread_number,
request_number_counter,
total_number_of_requests
)