8
8
from time import sleep
9
9
from ipaddress import ip_address
10
10
11
- from bme .helpers .logger import highlight
12
- from bme .helpers .misc import identify_target_file
13
- from bme .parsers .ip import parse_targets
14
- from bme .parsers .nmap import parse_nmap_xml
15
- from bme .parsers .nessus import parse_nessus_file
16
- from bme .BlackMarlinExec import BlackMarlinExec
17
- from bme .loaders .protocolloader import ProtocolLoader
18
- from bme .loaders .moduleloader import ModuleLoader
19
- from bme .servers .http import BMEServer
20
- from bme .BlackMarlinExec_run import BlackMarlinExec_run_setup
21
- from bme .context import Context
22
- from bme .paths import BME_PATH , DATA_PATH
23
- from bme .console import bme_console
24
- from bme .logger import bme_logger
25
- from bme .config import bme_config , bme_workspace , config_log , ignore_opsec
11
+ from src . bme .helpers .logger import highlight
12
+ from src . bme .helpers .misc import identify_target_file
13
+ from src . bme .parsers .ip import parse_targets
14
+ from src . bme .parsers .nmap import parse_nmap_xml
15
+ from src . bme .parsers .nessus import parse_nessus_file
16
+ from src . bme .BlackMarlinExec import BlackMarlinExec
17
+ from src . bme .loaders .protocolloader import ProtocolLoader
18
+ from src . bme .loaders .moduleloader import ModuleLoader
19
+ from src . bme .servers .http import src . bmeServer
20
+ from src . bme .BlackMarlinExec_run import BlackMarlinExec_run_setup
21
+ from src . bme .context import Context
22
+ from src . bme .paths import src . bme_PATH , DATA_PATH
23
+ from src . bme .console import src . bme_console
24
+ from src . bme .logger import src . bme_logger
25
+ from src . bme .config import src . bme_config , src . bme_workspace , config_log , ignore_opsec
26
26
from concurrent .futures import ThreadPoolExecutor , as_completed
27
27
import asyncio
28
- import bme .helpers .powershell as powershell
28
+ import src . bme .helpers .powershell as powershell
29
29
import shutil
30
30
import webbrowser
31
31
import random
39
39
from sys import platform
40
40
41
41
import configparser
42
- from bme .paths import BME_PATH , DATA_PATH
43
- from bme .first_run import first_run_setup
44
- from bme .logger import bme_logger
42
+ from src . bme .paths import src . bme_PATH , DATA_PATH
43
+ from src . bme .first_run import first_run_setup
44
+ from src . bme .logger import src . bme_logger
45
45
from ast import literal_eval
46
46
47
47
import argparse
48
48
import sys
49
49
from argparse import RawTextHelpFormatter
50
- from bme .loaders .protocolloader import ProtocolLoader
51
- from bme .helpers .logger import highlight
50
+ from src . bme .loaders .protocolloader import ProtocolLoader
51
+ from src . bme .helpers .logger import highlight
52
52
from termcolor import colored
53
- from bme .logger import bme_logger
53
+ from src . bme .logger import bme_logger
54
54
import importlib .metadata
55
55
56
56
import __init__
@@ -71,12 +71,12 @@ def gen_cli_args():
71
71
CODENAME = "p3xsouger"
72
72
73
73
parser = argparse .ArgumentParser (description = f"""
74
- .______ __ ___ ______ __ ___ .___ ___. ___ .______ __ __ .__ __. __________ ___ _______ ______
75
- | _ \ | | / \ / || |/ / | \/ | / \ | _ \ | | | | | \ | | | ____\ \ / / | ____| / |
76
- | |_) | | | / ^ \ | ,----'| ' / | \ / | / ^ \ | |_) | | | | | | \| | | |__ \ V / | |__ | ,----'
77
- | _ < | | / /_\ \ | | | < | |\/| | / /_\ \ | / | | | | | . ` | | __| > < | __| | |
78
- | |_) | | `----./ _____ \ | `----.| . \ | | | | / _____ \ | |\ \----.| `----.| | | |\ | | |____ / . \ | |____ | `----.
79
- |______/ |_______/__/ \__\ \______||__|\__\ |__| |__| /__/ \__\ | _| `._____||_______||__| |__| \__| |_______/__/ \__\ |_______| \______|
74
+ .______ __ ___ ______ __ ___ .___ ___. ___ .______ __ __ .__ __. __________ ___ _______ ______
75
+ | _ \ | | / \ / | | |/ / | \/ | / \ | _ \ | | | | | \ | | | ____\ \ / / | ____| / |
76
+ | |_) | | | / ^ \ | ,----' | ' / | \ / | / ^ \ | |_) | | | | | | \| | | |__ \ V / | |__ | ,----'
77
+ | _ < | | / /_\ \ | | | < | |\/| | / /_\ \ | / | | | | | . ` | | __| > < | __| | |
78
+ | |_) | | `----./ _____ \ | `----. | . \ | | | | / _____ \ | |\ \----. | `----.| | | |\ | | |____ / . \ | |____ | `----.
79
+ |______/ |_______/__/ \__\ \______| |__|\__\ |__| |__| /__/ \__\ | _| `._____| |_______||__| |__| \__| |_______/__/ \__\ |_______| \______|
80
80
81
81
Seven Degrees of Domain Admin, used for ( Pentesting the corporate )
82
82
Forged by @pxcs and @GangstaCrew using python and C for ( lib )
@@ -113,7 +113,7 @@ def gen_cli_args():
113
113
)
114
114
parser .add_argument ("--verbose" , action = "store_true" , help = "enable verbose output" )
115
115
parser .add_argument ("--debug" , action = "store_true" , help = "enable debug level information" )
116
- parser .add_argument ("--version" , action = "store_true" , help = "Display bme version" )
116
+ parser .add_argument ("--version" , action = "store_true" , help = "Display src. bme version" )
117
117
118
118
module_parser = argparse .ArgumentParser (add_help = False )
119
119
mgroup = module_parser .add_mutually_exclusive_group ()
@@ -242,7 +242,7 @@ def gen_cli_args():
242
242
protocol_object = p_loader .load_protocol (protocols [protocol ]["argspath" ])
243
243
subparsers = protocol_object .proto_args (subparsers , std_parser , module_parser )
244
244
except :
245
- bme_logger .exception (f"Error loading proto_args from proto_args.py file in protocol folder: { protocol } " )
245
+ src . bme_logger .exception (f"Error loading proto_args from proto_args.py file in protocol folder: { protocol } " )
246
246
247
247
if len (sys .argv ) == 1 :
248
248
parser .print_help ()
@@ -276,50 +276,50 @@ def create_db_engine(db_path):
276
276
277
277
278
278
async def start_run (protocol_obj , args , db , targets ):
279
- bme_logger .debug (f"Creating ThreadPoolExecutor" )
279
+ src . bme_logger .debug (f"Creating ThreadPoolExecutor" )
280
280
if args .no_progress or len (targets ) == 1 :
281
281
with ThreadPoolExecutor (max_workers = args .threads + 1 ) as executor :
282
- bme_logger .debug (f"Creating thread for { protocol_obj } " )
282
+ src . bme_logger .debug (f"Creating thread for { protocol_obj } " )
283
283
_ = [executor .submit (protocol_obj , args , db , target ) for target in targets ]
284
284
else :
285
- with Progress (console = bme_console ) as progress :
285
+ with Progress (console = src . bme_console ) as progress :
286
286
with ThreadPoolExecutor (max_workers = args .threads + 1 ) as executor :
287
287
current = 0
288
288
total = len (targets )
289
289
tasks = progress .add_task (
290
- f"[green]Running bme against { total } { 'target' if total == 1 else 'targets' } " ,
290
+ f"[green]Running src. bme against { total } { 'target' if total == 1 else 'targets' } " ,
291
291
total = total ,
292
292
)
293
- bme_logger .debug (f"Creating thread for { protocol_obj } " )
293
+ src . bme_logger .debug (f"Creating thread for { protocol_obj } " )
294
294
futures = [executor .submit (protocol_obj , args , db , target ) for target in targets ]
295
295
for _ in as_completed (futures ):
296
296
current += 1
297
297
progress .update (tasks , completed = current )
298
298
299
299
300
300
def main ():
301
- first_run_setup (bme_logger )
301
+ first_run_setup (src . bme_logger )
302
302
root_logger = logging .getLogger ("root" )
303
303
args = gen_cli_args ()
304
304
305
305
if args .verbose :
306
- bme_logger .logger .setLevel (logging .INFO )
306
+ src . bme_logger .logger .setLevel (logging .INFO )
307
307
root_logger .setLevel (logging .INFO )
308
308
elif args .debug :
309
- bme_logger .logger .setLevel (logging .DEBUG )
309
+ src . bme_logger .logger .setLevel (logging .DEBUG )
310
310
root_logger .setLevel (logging .DEBUG )
311
311
else :
312
- bme_logger .logger .setLevel (logging .ERROR )
312
+ src . bme_logger .logger .setLevel (logging .ERROR )
313
313
root_logger .setLevel (logging .ERROR )
314
314
315
315
# if these are the same, it might double log to file (two FileHandlers will be added)
316
316
# but this should never happen by accident
317
317
if config_log :
318
- bme_logger .add_file_log ()
318
+ src . bme_logger .add_file_log ()
319
319
if hasattr (args , "log" ) and args .log :
320
- bme_logger .add_file_log (args .log )
320
+ src . bme_logger .add_file_log (args .log )
321
321
322
- bme_logger .debug (f"Passed args: { args } " )
322
+ src . bme_logger .debug (f"Passed args: { args } " )
323
323
324
324
# FROM HERE ON A PROTOCOL IS REQUIRED
325
325
if not args .protocol :
@@ -328,11 +328,11 @@ def main():
328
328
if args .protocol == "ssh" :
329
329
if args .key_file :
330
330
if not args .password :
331
- bme_logger .fail (f"Password is required, even if a key file is used - if no passphrase for key, use `-p ''`" )
331
+ src . bme_logger .fail (f"Password is required, even if a key file is used - if no passphrase for key, use `-p ''`" )
332
332
exit (1 )
333
333
334
334
if args .use_kcache and not os .environ .get ("KRB5CCNAME" ):
335
- bme_logger .error ("KRB5CCNAME environment variable is not set" )
335
+ src . bme_logger .error ("KRB5CCNAME environment variable is not set" )
336
336
exit (1 )
337
337
338
338
module_server = None
@@ -348,7 +348,7 @@ def main():
348
348
args .cred_id .append (n )
349
349
args .cred_id .remove (cred_id )
350
350
except Exception as e :
351
- bme_logger .error (f"Error parsing database credential id: { e } " )
351
+ src . bme_logger .error (f"Error parsing database credential id: { e } " )
352
352
exit (1 )
353
353
354
354
if hasattr (args , "target" ) and args .target :
@@ -368,66 +368,66 @@ def main():
368
368
369
369
# The following is a quick hack for the powershell obfuscation functionality, I know this is yucky
370
370
if hasattr (args , "clear_obfscripts" ) and args .clear_obfscripts :
371
- shutil .rmtree (os .path .expanduser ("~/.bme/obfuscated_scripts/" ))
372
- os .mkdir (os .path .expanduser ("~/.bme/obfuscated_scripts/" ))
373
- bme_logger .success ("Cleared cached obfuscated PowerShell scripts" )
371
+ shutil .rmtree (os .path .expanduser ("~/.src. bme/obfuscated_scripts/" ))
372
+ os .mkdir (os .path .expanduser ("~/.src. bme/obfuscated_scripts/" ))
373
+ src . bme_logger .success ("Cleared cached obfuscated PowerShell scripts" )
374
374
375
375
if hasattr (args , "obfs" ) and args .obfs :
376
376
powershell .obfuscate_ps_scripts = True
377
377
378
- bme_logger .debug (f"Protocol: { args .protocol } " )
378
+ src . bme_logger .debug (f"Protocol: { args .protocol } " )
379
379
p_loader = ProtocolLoader ()
380
380
protocol_path = p_loader .get_protocols ()[args .protocol ]["path" ]
381
- bme_logger .debug (f"Protocol Path: { protocol_path } " )
381
+ src . bme_logger .debug (f"Protocol Path: { protocol_path } " )
382
382
protocol_db_path = p_loader .get_protocols ()[args .protocol ]["dbpath" ]
383
- bme_logger .debug (f"Protocol DB Path: { protocol_db_path } " )
383
+ src . bme_logger .debug (f"Protocol DB Path: { protocol_db_path } " )
384
384
385
385
protocol_object = getattr (p_loader .load_protocol (protocol_path ), args .protocol )
386
- bme_logger .debug (f"Protocol Object: { protocol_object } " )
386
+ src . bme_logger .debug (f"Protocol Object: { protocol_object } " )
387
387
protocol_db_object = getattr (p_loader .load_protocol (protocol_db_path ), "database" )
388
- bme_logger .debug (f"Protocol DB Object: { protocol_db_object } " )
388
+ src . bme_logger .debug (f"Protocol DB Object: { protocol_db_object } " )
389
389
390
- db_path = path_join (bme_PATH , "workspaces" , bme_workspace , f"{ args .protocol } .db" )
391
- bme_logger .debug (f"DB Path: { db_path } " )
390
+ db_path = path_join (src . bme_PATH , "workspaces" , src . bme_workspace , f"{ args .protocol } .db" )
391
+ src . bme_logger .debug (f"DB Path: { db_path } " )
392
392
393
393
db_engine = create_db_engine (db_path )
394
394
395
395
db = protocol_db_object (db_engine )
396
396
397
- # with the new bme/config.py this can be eventually removed, as it can be imported anywhere
398
- setattr (protocol_object , "config" , bme_config )
397
+ # with the new src. bme/config.py this can be eventually removed, as it can be imported anywhere
398
+ setattr (protocol_object , "config" , src . bme_config )
399
399
400
400
if args .module or args .list_modules :
401
- loader = ModuleLoader (args , db , bme_logger )
401
+ loader = ModuleLoader (args , db , src . bme_logger )
402
402
modules = loader .list_modules ()
403
403
404
404
if args .list_modules :
405
405
for name , props in sorted (modules .items ()):
406
406
if args .protocol in props ["supported_protocols" ]:
407
- bme_logger .display (f"{ name :<25} { props ['description' ]} " )
407
+ src . bme_logger .display (f"{ name :<25} { props ['description' ]} " )
408
408
exit (0 )
409
409
elif args .module and args .show_module_options :
410
410
for module in args .module :
411
- bme_logger .display (f"{ module } module options:\n { modules [module ]['options' ]} " )
411
+ src . bme_logger .display (f"{ module } module options:\n { modules [module ]['options' ]} " )
412
412
exit (0 )
413
413
elif args .module :
414
- bme_logger .debug (f"Modules to be Loaded: { args .module } , { type (args .module )} " )
414
+ src . bme_logger .debug (f"Modules to be Loaded: { args .module } , { type (args .module )} " )
415
415
for m in map (str .lower , args .module ):
416
416
if m not in modules :
417
- bme_logger .error (f"Module not found: { m } " )
417
+ src . bme_logger .error (f"Module not found: { m } " )
418
418
exit (1 )
419
419
420
- bme_logger .debug (f"Loading module { m } at path { modules [m ]['path' ]} " )
420
+ src . bme_logger .debug (f"Loading module { m } at path { modules [m ]['path' ]} " )
421
421
module = loader .init_module (modules [m ]["path" ])
422
422
423
423
if not module .opsec_safe :
424
424
if ignore_opsec :
425
- bme_logger .debug (f"ignore_opsec is set in the configuration, skipping prompt" )
426
- bme_logger .display (f"Ignore OPSEC in configuration is set and OPSEC unsafe module loaded" )
425
+ src . bme_logger .debug (f"ignore_opsec is set in the configuration, skipping prompt" )
426
+ src . bme_logger .display (f"Ignore OPSEC in configuration is set and OPSEC unsafe module loaded" )
427
427
else :
428
428
ans = input (
429
429
highlight (
430
- "[!] Module is not opsec safe, are you sure you want to run this? [Y/n] For global configuration, change ignore_opsec value to True on ~/bme/bme.conf" ,
430
+ "[!] Module is not opsec safe, are you sure you want to run this? [Y/n] For global configuration, change ignore_opsec value to True on ~/src. bme/src. bme.conf" ,
431
431
"red" ,
432
432
)
433
433
)
@@ -453,27 +453,27 @@ def main():
453
453
454
454
# loading a module server multiple times will obviously fail
455
455
try :
456
- context = Context (db , bme_logger , args )
457
- module_server = bmeServer (
456
+ context = Context (db , src . bme_logger , args )
457
+ module_server = src . bmeServer (
458
458
module ,
459
459
context ,
460
- bme_logger ,
460
+ src . bme_logger ,
461
461
args .server_host ,
462
462
args .server_port ,
463
463
args .server ,
464
464
)
465
465
module_server .start ()
466
466
protocol_object .server = module_server .server
467
467
except Exception as e :
468
- bme_logger .error (f"Error loading module server for { module } : { e } " )
468
+ src . bme_logger .error (f"Error loading module server for { module } : { e } " )
469
469
470
- bme_logger .debug (f"proto_object: { protocol_object } , type: { type (protocol_object )} " )
471
- bme_logger .debug (f"proto object dir: { dir (protocol_object )} " )
470
+ src . bme_logger .debug (f"proto_object: { protocol_object } , type: { type (protocol_object )} " )
471
+ src . bme_logger .debug (f"proto object dir: { dir (protocol_object )} " )
472
472
# get currently set modules, otherwise default to empty list
473
473
current_modules = getattr (protocol_object , "module" , [])
474
474
current_modules .append (module )
475
475
setattr (protocol_object , "module" , current_modules )
476
- bme_logger .debug (f"proto object module after adding: { protocol_object .module } " )
476
+ src . bme_logger .debug (f"proto object module after adding: { protocol_object .module } " )
477
477
478
478
if hasattr (args , "ntds" ) and args .ntds and not args .userntds :
479
479
ans = input (
@@ -488,7 +488,7 @@ def main():
488
488
try :
489
489
asyncio .run (start_run (protocol_object , args , db , targets ))
490
490
except KeyboardInterrupt :
491
- bme_logger .debug ("Got keyboard interrupt" )
491
+ src . bme_logger .debug ("Got keyboard interrupt" )
492
492
finally :
493
493
if module_server :
494
494
module_server .shutdown ()
0 commit comments