コード例 #1
0
def stats_banner():
    delimeter = ' ' * 10
    msg = '|%sStatistics%s|' % (delimeter,delimeter)
    corner = logger.red_fg('+')
    bar = '-' * (len(msg) - 2)
    print(corner+bar+ corner)
    print(logger.red_fg(msg))
    print(corner+bar+ corner)
コード例 #2
0
ファイル: shelby.py プロジェクト: bladeism/shelby
def main():
    args = arguments.get_args()  # get all the arguments
    absolute_path = os.path.dirname(os.path.realpath(__file__))
    absolute_path = str(absolute_path).replace('/lib', '/')

    if args.experimental:
        experimental_obfuscation.obfuscate()
        quit()

    # generate_all_shells() runs through all the various shells that are in shelby and replaces the templates and writes them out to args.cradle_directory; it returns a list of shell objects.
    all_shells = shells.generate_all_shells(
    )  # This purely configures the shells and writes them to ./server_port.

    # print some useful stuff
    print("The Web Delivery Server is at: %s:%s" %
          (logger.red_fg(args.ip_address), logger.red_fg(args.server_port)))
    print("Shells receiving at: %s:%s" %
          (logger.red_fg(args.ip_address), logger.red_fg(args.shell_port)))
    print("Writing cradles to: %s" % logger.red_fg(args.cradle_directory))
    print()

    # print out the available shells
    if all_shells != None:
        logger.heading('Shells')
        for shell in all_shells:
            logger.bullet('%s: %s' %
                          (logger.yellow_fg(shell.name), shell.location))

    logger.heading('SSH Keys')
    logger.bullet(
        '%s: %s' %
        (logger.yellow_fg('SSH Keys written to'), args.ssh_directory))

    # same thing as generate_all_shells()
    all_cradles = cradles.generate_all_cradles(all_shells)

    with open('cradle_commands.txt', 'a') as f:
        time_of_run = strftime("%d/%m/%y, %H:%M:%S", gmtime())
        f.write('%s\n%s\n' % (time_of_run, '=' * len(time_of_run)))
        logger.heading('Cradles')
        for counter, cradle in enumerate(all_cradles):
            print('%s %s' % (logger.yellow_fg('[-]'), cradle.name))
            logger.green.fg(cradle.execution)
            f.write('[%s] %s:\n%s\n\n' %
                    (counter, cradle.name, cradle.execution))
            print()

    print(
        '[%s]\tWritten by %s & %s (%s)' %
        (logger.yellow_fg('+'), logger.yellow_fg('@michaelranaldo'),
         logger.yellow_fg('@mez-0'), logger.yellow_fg('https://ad-995.group')))
コード例 #3
0
def obfuscate():
    args = arguments.get_args()
    logger.heading('C++ Obfuscation')
    print(
        '%s: This is an experimental function and it only works on C++ projects.'
        % logger.yellow_fg('WARNING'))

    working_directory = args.experimental_args

    if working_directory == None:
        logger.red.fg('Please specify a a directory containing a cpp project!')
        quit()

    new_directory = './experimental_obfuscation/'
    print('Writing to: %s' % logger.red_fg(new_directory))

    original_root_dir = working_directory[:working_directory.rindex('/')] + '/'

    copy(working_directory, new_directory)

    all_files = get_all_files(working_directory)
    if all_files == None:
        print('No files found in %s!' % logger.red_fg(working_directory))
        return False

    cpp_files = get_cpp_files(all_files)
    if cpp_files == None:
        print('No cpp files found in %s!' % logger.red_fg(working_directory))
        return False

    header_files = get_header_files(all_files)
    if header_files == None:
        print('No header files found in %s!' %
              logger.red_fg(working_directory))
        return False

    cpp_objs = create_cpp_objs(cpp_files)
    if cpp_objs == None:
        logger.red.fg('Could not extract cpp functions from cpp files!')
        return False

    gns_objs = create_globalnamespace(cpp_files)
    if gns_objs == None:
        logger.red.fg('Could not extract global namespaces from cpp files!')
        return False

    do_name_change(cpp_files, cpp_objs, gns_objs, new_directory,
                   original_root_dir)
    fix_header_files(header_files, gns_objs, new_directory, original_root_dir)
コード例 #4
0
ファイル: cradles.py プロジェクト: bladeism/shelby
def generate_all_cradles(all_shells):
    # each of these are lists of cradles; cradle for each shell. one for bind, one for reverse etc etc.
    if args.linux == False and args.windows == False:
        powershell_IEX_raw_cradles = powershell_IEX_raw(all_shells)
        powershell_IEX_b64_cradles = powershell_IEX_b64(all_shells)
        powershell_IEX_gzip_cradles = powershell_IEX_gzip(all_shells)
        regsvr32_cradles = regsvr32(all_shells)
        linux_cradles = [
            bash_reverse(),
            netcat_reverse(),
            netcat_reverse_openbsd(),
            python_reverse(),
            add_ssh_key_sh(all_shells)
        ]
        cradles = powershell_IEX_raw_cradles + powershell_IEX_b64_cradles + powershell_IEX_gzip_cradles + regsvr32_cradles + linux_cradles

    elif args.windows:
        powershell_IEX_raw_cradles = powershell_IEX_raw(all_shells)
        powershell_IEX_b64_cradles = powershell_IEX_b64(all_shells)
        powershell_IEX_gzip_cradles = powershell_IEX_gzip(all_shells)
        regsvr32_cradles = regsvr32(all_shells)
        cradles = powershell_IEX_raw_cradles + powershell_IEX_b64_cradles + powershell_IEX_gzip_cradles + regsvr32_cradles

    elif args.linux:
        linux_cradles = [
            bash_reverse(),
            netcat_reverse(),
            netcat_reverse_openbsd(),
            python_reverse(),
            add_ssh_key_sh(all_shells)
        ]
        cradles = linux_cradles

    else:
        logger.red.fg("Unknown OS type. Please specify %s or %s!" %
                      (logger.red_fg('Linux'), logger.red_fg('Windows')))
        quit()

    return cradles
コード例 #5
0
def copy(src, dest):
    try:
        print('Copied %s to %s' %
              (logger.green_fg(src), logger.green_fg(dest)))
        shutil.copytree(src, dest)
        return True
    except OSError as e:
        if e.errno == errno.ENOTDIR:
            print('Copied %s to %s' %
                  (logger.green_fg(src), logger.green_fg(dest)))
            shutil.copy(src, dest)
            return True
        else:
            print('%s already exists' % logger.red_fg(dest))
            return False
コード例 #6
0
ファイル: shells.py プロジェクト: bladeism/shelby
def write_shell_out(filename,content):
	if args.randomize_names:
		filename = ''.join(random.choice(string.ascii_lowercase) for i in range(12))
	else:
		filename = filename

	if not os.path.exists(args.cradle_directory):
		try:
			os.mkdir(args.cradle_directory)
		except Exception as e:
			print('Got error: %s' % logger.red_fg(e))
			quit()
	location = args.cradle_directory + filename
	with open(location, "w") as destination_file:
		destination_file.write(content)
	return filename,location # write the shell and return the name and location of it