Files
osmedeus/modules/probing.py
T

96 lines
3.6 KiB
Python

from modules import skeleton
from lib.core import utils
from lib.mode import speed
from lib.sender import execute
from lib.sender import polling
from lib.sender import report
from lib.sender import summary
class Probing(skeleton.Skeleton):
"""docstring for Probing"""
def banner(self):
utils.print_banner("Starting Probing")
utils.make_directory(self.options['WORKSPACE'] + '/probing')
self.options['DEBUG'] = True
# get all subdomain previous modules
def get_subdomains(self, command):
utils.print_info("Joining all previous subdomain")
final_path = command.get('requirement')
if utils.not_empty_file(final_path):
return
subdomain_modules = ['SubdomainScanning',
'PermutationScan', 'VhostScan']
needed_reports = []
# get reports
reports = report.get_report_path(self.options, module=False)
for rep in reports:
if rep.get('module') in subdomain_modules and 'final' in rep.get('note'):
if utils.not_empty_file(rep.get('report_path')):
needed_reports.append(rep.get('report_path'))
utils.join_files(needed_reports, final_path)
if utils.not_empty_file(final_path):
utils.check_output(final_path)
# clean up for massdns result
def clean_massdns(self, command):
utils.print_good('Cleaning for {0}:{1}'.format(
command.get('banner'), command.get('post_run')))
output = utils.just_read(command.get('output_path'), get_list=True)
if not output:
utils.print_bad('Output not found: {0}'.format(
command.get('output_path')))
return False
only_A_record, summaries, resolved = [], [], []
for line in output:
if '. A ' in line:
only_A_record.append(line.split('. A ')[1].strip())
resolved.append(line.split('. A ')[0])
summary = "domain|{0};;ip_address|{1}".format(
line.split('. A ')[0], line.split('. A ')[1])
summaries.append(summary)
elif '. CNAME ' in line:
resolved.append(line.split('. CNAME ')[0])
only_A_record = list(set(only_A_record))
cleaned_output = utils.just_write(command.get(
'cleaned_output'), "\n".join(only_A_record))
resolved_path = utils.replace_argument(
self.options, '$WORKSPACE/probing/resolved-$OUTPUT.txt')
resolved_output = utils.just_write(resolved_path, "\n".join(resolved))
if cleaned_output:
utils.check_output(command.get('cleaned_output'))
if resolved_output:
utils.check_output(resolved_path)
self.update_summaries(summaries)
def get_domain(self, command):
utils.print_good('Cleaning for {0}:{1}'.format(
command.get('banner'), command.get('post_run')))
output = utils.just_read(command.get('output_path'))
if not output:
utils.print_bad('Output not found: {0}'.format(
command.get('output_path')))
return False
no_scheme = output.replace('https://', '').replace('http://', '')
utils.just_write(command.get('cleaned_output'), no_scheme)
if command.get('cleaned_output'):
utils.check_output(command.get('cleaned_output'))
def update_summaries(self, summaries):
content = "\n".join(summaries)
formatted = utils.replace_argument(
self.options, '$WORKSPACE/probing/formatted-all-$OUTPUT.txt')
utils.just_write(formatted, content)
summary.push_with_file(self.options, formatted)