예제 #1
0
파일: cli.py 프로젝트: ssh-mitm/ssh-mitm
def init_audit_parser(parser: ModuleParser) -> None:
    subparsers = parser.add_subparsers(title='Available commands',
                                       dest="subparser_name",
                                       metavar='audit-command')
    subparsers.required = True

    parser_check_publickey = subparsers.add_parser(
        'check-publickey',
        help='checks a username and publickey against a server')
    parser_check_publickey.add_argument('--host',
                                        type=str,
                                        required=True,
                                        help='Hostname or IP address')
    parser_check_publickey.add_argument('--port',
                                        type=int,
                                        default=22,
                                        help='port (default: 22)')
    parser_check_publickey.add_argument('--username',
                                        type=str,
                                        required=True,
                                        help='username to check')
    parser_check_publickey.add_argument('--public-key',
                                        type=str,
                                        required=True,
                                        help='publickey to check')

    parser_check_privatekey = subparsers.add_parser(
        'check-privatekey',
        help='checks a username and privatekey against a server')
    parser_check_privatekey.add_argument('--host',
                                         type=str,
                                         required=True,
                                         help='Hostname or IP address')
    parser_check_privatekey.add_argument('--port',
                                         type=int,
                                         default=22,
                                         help='port (default: 22)')
    parser_check_privatekey.add_argument('--username',
                                         type=str,
                                         required=True,
                                         help='username to check')
    parser_check_privatekey.add_argument('--private-key',
                                         type=str,
                                         required=True,
                                         help='privatekey to check')
    parser_check_privatekey.add_argument(
        '--private-key-passphrase',
        type=str,
        help='used to decrypt the private key')

    parser_scan_auth = subparsers.add_parser(
        'get-auth', help='checks authentication methods')
    parser_scan_auth.add_argument('--host',
                                  type=str,
                                  required=True,
                                  help='Hostname or IP address')
    parser_scan_auth.add_argument('--port',
                                  type=int,
                                  default=22,
                                  help='port (default: 22)')
예제 #2
0
파일: cli.py 프로젝트: ssh-mitm/ssh-mitm
def main() -> None:

    if os.environ.get('APPIMAGE', None):
        # if running as appimage, remove empty arguments
        if len(sys.argv) == 2 and sys.argv[-1] == '':
            sys.argv = sys.argv[:-1]

    parser = ModuleParser(
        description='SSH-MITM Tools',
        version=f"SSH-MITM {ssh_mitm_version}",
        modules_from_file=True,
        allow_abbrev=False
    )
    parser.add_argument(
        '-d',
        '--debug',
        dest='debug',
        default=False,
        action='store_true',
        help='More verbose output of status information'
    )
    parser.add_argument(
        '--paramiko-log-level',
        dest='paramiko_log_level',
        default='warning',
        choices=['warning', 'info', 'debug'],
        help='set paramikos log level'
    )
    parser.add_argument(
        '--disable-workarounds',
        dest='disable_workarounds',
        action='store_true',
        help='disable paramiko workarounds'
    )

    subparsers = parser.add_subparsers(title='Available commands', dest="subparser_name", metavar='subcommand')
    subparsers.required = True

    parser_mitm_server: ModuleParser = cast(
        ModuleParser,
        subparsers.add_parser(
            'server',
            allow_abbrev=False,
            help='start the ssh-mitm server'
        )
    )
    init_server_parser(parser_mitm_server)
    parser_audit: ModuleParser = cast(
        ModuleParser,
        subparsers.add_parser(
            'audit',
            allow_abbrev=False,
            help='audit tools for ssh servers'
        )
    )
    init_audit_parser(parser_audit)

    args = parser.parse_args()

    root_logger = logging.getLogger()
    root_logger.setLevel(logging.DEBUG if args.debug else logging.INFO)
    root_logger.handlers.clear()
    root_logger.addHandler(RichHandler(
        highlighter=NullHighlighter(),
        markup=False,
        rich_tracebacks=True,
        enable_link_path=args.debug,
        show_path=args.debug
    ))

    if not args.disable_workarounds:
        Transport.run = dropbear.transport_run  # type: ignore

    if args.paramiko_log_level == 'debug':
        logging.getLogger("paramiko").setLevel(logging.DEBUG)
    elif args.paramiko_log_level == 'info':
        logging.getLogger("paramiko").setLevel(logging.INFO)
    else:
        logging.getLogger("paramiko").setLevel(logging.WARNING)

    if args.subparser_name == 'server':
        run_server(args=args)
    elif args.subparser_name == 'audit':
        run_audit(args=args)