コード例 #1
0
    def setup_injector(cls, session):
        parser_retval = cls.parser().parse_known_args(None, None)
        args, _ = parser_retval
        cls.session = session
        cls.args = args
        form = re.compile('.*:\d{1,5}')

        for target in cls.args.client_tunnel_dest:
            if not form.match(target):
                logging.warning(
                    "--tunnel-client-dest %s does not match format host:port (e.g. google.com:80)",
                    target)
                break
            destnet, destport = target.split(":")
            t = TCPServerThread(ClientTunnelHandler(
                session, (destnet, int(destport))).handle_request,
                                run_status=cls.session.running,
                                network=cls.args.client_tunnel_net)
            t.start()
            cls.tcpservers.append(t)
            logging.info(
                "{session} created client tunnel injector for host {host} on port {port} to destination {dest}"
                .format(host=t.network,
                        port=t.port,
                        dest=target,
                        session=session))
コード例 #2
0
ファイル: injectservertunnel.py プロジェクト: ktux/ssh-mitm-1
 def __init__(self, session, server_interface, destination):
     super().__init__(session, server_interface, destination)
     self.tcpserver = TCPServerThread(self.serve,
                                      network=self.args.server_tunnel_net,
                                      run_status=self.session.running)
     logging.info(
         "created server tunnel injector for host {host} on port {port} to destination {dest}"
         .format(host=self.tcpserver.network,
                 port=self.tcpserver.port,
                 dest=self.destination))
     self.tcpserver.start()
コード例 #3
0
 def __init__(self, session: 'ssh_proxy_server.session.Session',
              server_interface:
              'ssh_proxy_server.interfaces.server.ServerInterface',
              destination: Optional[Tuple[str, int]]) -> None:
     super().__init__(session, server_interface, destination)
     self.tcpserver = TCPServerThread(self.handle_request,
                                      network=self.args.server_tunnel_net,
                                      run_status=self.session.running)
     logging.info((
         f"{EMOJI['information']} {stylize(session.sessionid, fg('light_blue') + attr('bold'))}"
         " - "
         f"created server tunnel injector for host {self.tcpserver.network} on port {self.tcpserver.port} to destination {self.destination}"
     ))
     self.tcpserver.start()
コード例 #4
0
ファイル: socks4.py プロジェクト: ssh-mitm/ssh-mitm
    def setup(cls, session: 'ssh_proxy_server.session.Session') -> None:
        parser_retval = cls.parser().parse_known_args(None, None)
        args, _ = parser_retval

        t = TCPServerThread(ClientTunnelHandler(session).handle_request,
                            run_status=session.running,
                            network=args.socks_listen_address)
        t.start()
        cls.tcpservers.append(t)
        logging.info((
            f"{EMOJI['information']} {stylize(session.sessionid, fg('light_blue') + attr('bold'))}"
            " - "
            f"created Socks4 proxy server on port {stylize(t.port, fg('light_blue') + attr('bold'))}. "
            f"connect with {stylize(f'socat TCP-LISTEN:LISTEN_PORT,fork socks4:127.0.0.1:DESTINATION_ADDR:DESTINATION_PORT,socksport={t.port}', fg('light_blue') + attr('bold'))}"
        ))
コード例 #5
0
ファイル: socks5.py プロジェクト: ssh-mitm/ssh-mitm
    def setup(cls, session: 'ssh_proxy_server.session.Session') -> None:
        parser_retval = cls.parser().parse_known_args(None, None)
        args, _ = parser_retval

        t = TCPServerThread(
            ClientTunnelHandler(session, args.socks5_username, args.socks5_password).handle_request,
            run_status=session.running,
            network=args.socks_listen_address
        )
        t.start()
        cls.tcpservers.append(t)
        logging.info((
            f"{EMOJI['information']} {stylize(session.sessionid, fg('light_blue') + attr('bold'))}"
            " - "
            f"created SOCKS5 proxy server on port {t.port}. connect with: {stylize(f'nc -X 5 -x localhost:{t.port} address port', fg('light_blue') + attr('bold'))}"
        ))
コード例 #6
0
class InjectableRemotePortForwardingForwarder(RemotePortForwardingForwarder):
    """For each server port forwarding request open a local port to inject traffic into the port-forward

    The Handler is still the same as the RemotePortForwardingForwarder, only a tcp server is added

    """
    @classmethod
    @typechecked
    def parser_arguments(cls) -> None:
        plugin_group = cls.parser().add_argument_group(cls.__name__)
        plugin_group.add_argument(
            '--tunnel-server-net',
            dest='server_tunnel_net',
            default='127.0.0.1',
            help='local address/interface where injector sessions are served')

    @typechecked
    def __init__(self, session: 'ssh_proxy_server.session.Session',
                 server_interface:
                 'ssh_proxy_server.interfaces.server.ServerInterface',
                 destination: Optional[Tuple[str, int]]) -> None:
        super().__init__(session, server_interface, destination)
        self.tcpserver = TCPServerThread(self.handle_request,
                                         network=self.args.server_tunnel_net,
                                         run_status=self.session.running)
        logging.info((
            f"{EMOJI['information']} {stylize(session.sessionid, fg('light_blue') + attr('bold'))}"
            " - "
            f"created server tunnel injector for host {self.tcpserver.network} on port {self.tcpserver.port} to destination {self.destination}"
        ))
        self.tcpserver.start()

    @typechecked
    def handle_request(self, listenaddr: Tuple[Text, int],
                       client: Union[socket, paramiko.Channel],
                       addr: Tuple[Text, int]) -> None:
        try:
            f = TunnelForwarder(
                self.session.transport.open_channel("forwarded-tcpip",
                                                    self.destination, addr),
                client)
            self.server_interface.forwarders.append(f)
        except (paramiko.SSHException, OSError):
            logging.warning("injector connection suffered an unexpected error")
            self.tcpserver.close()
コード例 #7
0
ファイル: socks.py プロジェクト: ssh-mitm/ssh-mitm
    def setup(cls, session: 'ssh_proxy_server.session.Session') -> None:
        parser_retval = cls.parser().parse_known_args(None, None)
        args, _ = parser_retval

        t = TCPServerThread(
            ClientTunnelHandler(session).handle_request,
            run_status=session.running,
            network=args.socks_listen_address
        )
        t.start()
        cls.tcpservers.append(t)
        logging.info((
            f"{EMOJI['information']} {stylize(session.sessionid, fg('light_blue') + attr('bold'))}"
            f" - local port forwading\n"
            f"{stylize('SOCKS port:', attr('bold'))} {stylize(t.port, fg('light_blue') + attr('bold'))}\n"
            f"  {stylize('SOCKS4:', attr('bold'))}\n"
            f"    * socat: {stylize(f'socat TCP-LISTEN:LISTEN_PORT,fork socks4:127.0.0.1:DESTINATION_ADDR:DESTINATION_PORT,socksport={t.port}', fg('light_blue') + attr('bold'))}\n"
            f"    * netcat: {stylize(f'nc -X 4 -x localhost:{t.port} address port', fg('light_blue') + attr('bold'))}\n"
            f"  {stylize('SOCKS5:', attr('bold'))}\n"
            f"    * netcat: {stylize(f'nc -X 5 -x localhost:{t.port} address port', fg('light_blue') + attr('bold'))}"
        ))
コード例 #8
0
ファイル: injectservertunnel.py プロジェクト: ktux/ssh-mitm-1
class InjectableServerTunnelForwarder(ServerTunnelForwarder):
    """For each server port forwarding request open a local port to inject traffic into the port-forward

    The Handler is still the same as the ServerTunnelForwarder, only a tcp server is added

    """
    @classmethod
    def parser_arguments(cls):
        cls.parser().add_argument(
            '--tunnel-server-net',
            dest='server_tunnel_net',
            default='127.0.0.1',
            help='local address/interface where injector sessions are served')

    def __init__(self, session, server_interface, destination):
        super().__init__(session, server_interface, destination)
        self.tcpserver = TCPServerThread(self.serve,
                                         network=self.args.server_tunnel_net,
                                         run_status=self.session.running)
        logging.info(
            "created server tunnel injector for host {host} on port {port} to destination {dest}"
            .format(host=self.tcpserver.network,
                    port=self.tcpserver.port,
                    dest=self.destination))
        self.tcpserver.start()

    def serve(self, client, addr):
        try:
            f = TunnelForwarder(
                self.session.transport.open_channel("forwarded-tcpip",
                                                    self.destination, addr),
                client)
            self.server_interface.forwarders.append(f)
        except (paramiko.SSHException, OSError):
            logging.warning("injector connection suffered an unexpected error")
            self.tcpserver.close()