El papel de telnet
1 Conceptos básicos de inicio de sesión remoto
En primer lugar, comprendamos el significado de inicio de sesión: un sistema de tiempo compartido permite que varios usuarios utilicen una computadora al mismo tiempo. Para garantizar la seguridad del sistema y la conveniencia de la contabilidad, el sistema requiere que cada usuario tenga una cuenta independiente como ID de inicio de sesión y el sistema también asigna una contraseña a cada usuario. Los usuarios ingresan su ID y contraseña antes de usar el sistema, un proceso llamado "iniciar sesión".
El inicio de sesión remoto es un proceso en el que los usuarios utilizan el comando Telnet para convertir temporalmente su computadora en una terminal simulada en un host remoto. El terminal emulado es equivalente a una máquina no inteligente. Solo es responsable de transmitir cada carácter ingresado por el usuario al host y luego mostrar cada información generada por el host en la pantalla.
2 El surgimiento y desarrollo del inicio de sesión remoto
Podemos comenzar con el concepto de proporcionar servicios de edición remota de texto. La implementación de este servicio requiere un servidor que acepte solicitudes de edición de archivos y datos. y a El cliente que envió la solicitud. El cliente establecerá una conexión TCP desde la computadora local al servidor, lo que por supuesto requiere una respuesta del servidor, luego enviará información escrita (información de edición de archivos) al servidor y leerá la salida devuelta por el servidor. Lo anterior es un modelo de servicio cliente/servidor estándar y común.
Con los servicios en modo cliente/servidor, parece que todos los problemas remotos están resueltos. Sin embargo, las cosas no son tan sencillas como crees. Si solo necesitamos editar archivos de forma remota, entonces el servicio que acabamos de imaginar es totalmente capaz, pero si nuestros requisitos no son tan simples, queremos realizar administración remota de usuarios, entrada remota de datos, mantenimiento remoto del sistema y cualquier otra cosa que pueda ser. hecho en el host remoto Para completar las operaciones en el servidor, necesitaremos una gran cantidad de programas de servidor dedicados y configurar un proceso de servidor para cada operación. El problema con esto es que la máquina remota puede verse abrumada rápidamente por los procesos del servidor y ahogarse en un mar de procesos del servidor (aquí no incluimos las máquinas remotas más profesionales).
Entonces, ¿hay solución? Por supuesto, todo esto lo podemos solucionar iniciando sesión de forma remota. Permitimos a los usuarios crear una sesión de inicio de sesión en una máquina remota y luego implementar servicios más comunes ejecutando comandos como si estuvieran operando localmente. De esta manera podemos acceder a todos los comandos disponibles en el sistema remoto sin que el diseñador del sistema tenga que proporcionar múltiples programas de servidor dedicados.
Este problema parece haberse desarrollado hasta el punto en que hay un futuro brillante. El inicio de sesión remoto debería resolverlo, pero no es fácil lograr el inicio de sesión remoto. Los sistemas informáticos que no fueron diseñados pensando en la creación de redes esperan que los usuarios puedan iniciar sesión sólo a través de un teclado y un monitor conectados directamente. Agregar capacidades de inicio de sesión remoto a estas máquinas requiere modificar el sistema operativo de la máquina, lo cual es muy intimidante y algo que intentamos hacer. Evitado. Por lo tanto, deberíamos centrarnos en crear un software de servidor de inicio de sesión remoto, aunque esto también es difícil. ¿Por qué esto también es difícil?
Por ejemplo, el sistema operativo asigna significados especiales a teclas específicas, como "Ctrl+C", que el sistema local interpreta como "terminar el proceso de comando actualmente en ejecución". Sin embargo, suponiendo que hayamos ejecutado el software del servidor de inicio de sesión remoto, es posible que "Ctrl+C" no se envíe a la máquina remota. Si el cliente realmente envía "Ctrl+C" a la máquina remota, es posible que "Ctrl+C" no se envíe. terminados. Los procesos locales, es decir, es probable que ocurra el caos aquí. Esta es sólo una de las dificultades encontradas.
A pesar de las dificultades técnicas, los programadores de sistemas han logrado crear un software de servidor telnet que funciona con la mayoría de los sistemas operativos, así como software de aplicación como cliente. Normalmente, el software cliente elimina todas las interpretaciones locales menos una de una pulsación de tecla y convierte esas interpretaciones locales en interpretaciones remotas, de modo que el software cliente pueda interactuar con la máquina remota como si estuviera sentada frente al host remoto. Lo mismo, evitando así la confusión anterior. La única excepción a esto es un botón que lleva al usuario de regreso al entorno local.
Otro requisito para diseñar un servidor de inicio de sesión remoto como software a nivel de aplicación es que requiere que el sistema operativo proporcione soporte para pseudoterminales.
Usamos pseudoterminal para describir el punto de entrada a un sistema operativo que permite que programas como un servidor Telnet transfieran caracteres al sistema operativo y hagan que esos caracteres parezcan provenir del teclado local. Solo en dicho sistema operativo se puede diseñar el servidor de inicio de sesión remoto como software a nivel de aplicación (como el software del servidor Telnet, de lo contrario, el sistema operativo local y la transmisión del sistema remoto no podrán reconocer la información enviada entre sí (); Debido a que solo pueden reconocer la información enviada desde el teclado local ingresado), el inicio de sesión remoto fallará.
Diseñar el servidor de inicio de sesión remoto como software a nivel de aplicación tiene ventajas significativas: es más fácil modificar y controlar el servidor que incrustar código en el sistema operativo. Pero también tiene la desventaja de ser ineficiente (se explica más adelante), lo cual es aceptable considerando la lentitud con la que los usuarios escriben información.
3 Proceso de inicio de sesión remoto
El uso del protocolo Telnet para el inicio de sesión remoto debe cumplir las siguientes condiciones: la computadora debe estar equipada con un programa cliente que contenga el protocolo Telnet o; Se debe conocer el nombre de dominio del host remoto. Debe conocer el ID de inicio de sesión y la contraseña.
El servicio de inicio de sesión remoto Telnet se divide en los siguientes cuatro procesos:
1) Establecer una conexión entre los hosts local y remoto. En realidad, este proceso establece una conexión TCP y el usuario debe conocer la dirección IP o el nombre de dominio del host remoto.
2) Convertir el nombre de usuario y la contraseña ingresados en el terminal local y cualquier comando o carácter ingresado posteriormente; al formato NVT (Network Virtual Terminal) al host remoto. Este proceso en realidad envía un datagrama IP desde el host local al host remoto;
3) Convertir la salida de datos en formato NVT del host remoto a un formato localmente aceptable y enviarlo de regreso al terminal local, incluido introduzca la lectura del comando y los resultados de la ejecución del comando;
4) Finalmente, el terminal local revoca la conexión con el host remoto. Este proceso consiste en revocar la conexión TCP.
Lo anterior solo analiza los aspectos más básicos del inicio de sesión remoto. La complejidad y las dificultades de los programadores están más allá de nuestra imaginación. ¡Me pregunto si ha pensado en esto mientras usaba Telnet libremente!
Tres protocolos Telnet
Sabemos que el software de servidor Telnet es nuestro software de servidor de inicio de sesión remoto más utilizado. Es un servicio típico en modo cliente/servidor que utiliza el protocolo Telnet para funcionar. . Entonces, ¿qué es el protocolo Telnet? ¿Qué funciones tiene?
1 Contenido básico
El protocolo Telnet es miembro de la familia de protocolos TCP/IP y es el protocolo estándar para los servicios de inicio de sesión remoto de Internet. El protocolo Telnet se puede utilizar para convertir la computadora utilizada por los usuarios locales en una terminal en el sistema host remoto. Proporciona tres servicios básicos:
1) Telnet define un terminal virtual de red y proporciona una interfaz estándar para sistemas remotos. El programa cliente no necesita conocer el sistema remoto en detalle, sólo necesita construir un programa que utilice la interfaz estándar;
2) Telnet incluye un mecanismo que permite al cliente y al servidor negociar opciones y proporciona un conjunto de opciones estándar
3) Telnet maneja ambos extremos de la conexión de forma simétrica, es decir, Telnet no obliga al cliente a utilizar la entrada del teclado, ni obliga al cliente a mostrar la salida en el pantalla.
2 Adaptación a la heterogeneidad
Para hacer posible la interoperabilidad Telnet entre múltiples sistemas operativos, es necesario tener una comprensión detallada de computadoras y sistemas operativos heterogéneos. Por ejemplo, algunos sistemas operativos requieren que cada línea de texto termine con un retorno de carro ASCII (CR), otros requieren un avance de línea ASCII (LF) y otros requieren un retorno de carro de dos caracteres y una secuencia de avance de línea (CR -LF). final, por ejemplo, la mayoría de los sistemas operativos proporcionan a los usuarios un atajo para interrumpir un programa, pero la forma de interrumpir puede ser diferente en diferentes sistemas (algunos sistemas usan CTRL). Por ejemplo, la mayoría de los sistemas operativos proporcionan a los usuarios un atajo para interrumpir la ejecución del programa, pero este atajo puede variar de un sistema a otro (algunos sistemas usan CTRL+C, otros usan ESCAPE).
Si no se tiene en cuenta la heterogeneidad entre sistemas, es probable que los caracteres o comandos enviados localmente sean inexactos o incorrectos cuando se transmitan e interpreten en el sistema remoto. Por tanto, el protocolo Telnet debe solucionar este problema.
Para adaptarse a entornos heterogéneos, el protocolo Telnet define cómo se transmiten los datos y comandos a través de Internet. Esta definición se denomina Terminal Virtual de Red (NVT). El proceso de solicitud es el siguiente:
Para los datos enviados: el software del cliente convierte las pulsaciones de teclas y las secuencias de comandos del terminal de usuario al formato NVT y las envía al servidor. El servidor convierte los datos y comandos recibidos de NVT. formatear en El formato requerido por el sistema remoto;
Para los datos devueltos: el servidor remoto convierte los datos del formato de la máquina remota al formato NVT, y el cliente local convierte los datos del formato de la máquina remota a Formato NVT y Convertir datos al formato NVT. El cliente local reconvertirá los datos recibidos en formato NVT al formato local.
Para definiciones detalladas del formato NVT, los interesados pueden consultar información relevante.
3 Transmisión de comandos remotos
Sabemos que la mayoría de los sistemas operativos proporcionan varios atajos para implementar los comandos de control correspondientes. Cuando los usuarios escriben estos atajos en la terminal local, el sistema local ejecutará los correspondientes. comandos de control sin tomar estos atajos como entrada. Para Telnet, ¿cómo transmite comandos de control de forma remota?
Telnet también utiliza NVT para definir cómo se transfieren las funciones de control del cliente al servidor. Sabemos que el conjunto de caracteres USASCII consta de 95 caracteres imprimibles y 33 códigos de control. Cuando el usuario escribe un carácter ordinario localmente, NVT lo transmitirá de acuerdo con su significado original; cuando el usuario escribe una tecla de acceso directo (combinación de teclas), NVT lo convertirá en un carácter ASCII especial y lo transmitirá a través de la red. llega a la máquina remota convertida en los correspondientes comandos de control. Hay dos razones principales para distinguir el juego de caracteres ASCII normal de los comandos de control:
1) Esta distinción significa que Telnet tiene una mayor flexibilidad: puede transferir todos los caracteres ASCII posibles, así como todas las funciones de control; p>
2) Esta distinción permite al cliente especificar la señalización sin dicotomía o confusión de funciones de control con caracteres ordinarios.
4 Flujo de datos
Mencionamos anteriormente que existe una desventaja al diseñar Telnet como software a nivel de aplicación. ¿Por qué es esto? El siguiente es el flujo de datos en Telnet:
El usuario ingresa datos desde el teclado local y los pasa al programa cliente a través del sistema operativo. El programa cliente procesa los datos y los devuelve al sistema operativo. , y luego el sistema operativo pasa La red transmite los datos a la máquina remota, la máquina remota pasa los datos recibidos al programa del servidor, y el programa del servidor procesa los datos nuevamente y los devuelve al punto de entrada del pseudo terminal en el sistema operativo sistema. Finalmente, el sistema operativo remoto transmite los datos a la aplicación en ejecución del usuario, que es un proceso de entrada completo; la salida seguirá la misma ruta desde el servidor hasta el cliente.
Esta sobrecarga es muy costosa ya que la computadora cambiará los contextos de proceso varias veces para cada entrada y salida. Afortunadamente, las tasas de escritura de los usuarios no son tan altas y todavía podemos vivir con esta deficiencia.
5 comandos forzados
Deberíamos considerar una situación: supongamos que el usuario local ejecuta sin cesar el comando o programa incorrecto desde la máquina remota y la máquina remota ha dejado de leer la entrada, entonces el Como resultado, el búfer del sistema operativo puede llenarse. Si esto sucede, el servidor remoto ya no podrá escribir datos en el pseudo terminal y eventualmente hará que deje de leer datos de la conexión TCP, y el búfer de la conexión TCP eventualmente se llenará. también se llenará, lo que provocará que se detenga el flujo de datos a la conexión. Si ocurre la situación anterior, el usuario local perderá el control de la máquina remota.
Para solucionar este problema, el protocolo Telnet debe utilizar señalización saliente para obligar al servidor a leer comandos de control.
Sabemos que TCP implementa la señalización de datos salientes a través del mecanismo de datos de emergencia, por lo que Telnet solo necesita agregar un octeto reservado llamado sello de fecha y notificar al servidor permitiendo que TCP envíe un segmento con el bit de datos de emergencia configurado. El segmento evitará el control de flujo. y llegar al servidor directamente. En respuesta a la señalización de emergencia, el servidor leerá y descartará todos los datos hasta que encuentre un marcador de datos. El servidor reanudará el procesamiento normal después de encontrar el marcador de datos.
Negociación de 6 opciones
La heterogeneidad de máquinas y sistemas operativos en ambos extremos de Telnet hace que sea imposible e indeseable especificar estrictamente la configuración detallada de cada conexión Telnet, lo que afectará en gran medida la capacidad de Telnet. capacidad para adaptarse a la heterogeneidad. Por tanto, Telnet utiliza un mecanismo de negociación de opciones para resolver este problema.
Las opciones de Telnet varían ampliamente: algunas amplían la funcionalidad en direcciones generales, mientras que otras cubren detalles minuciosos. Por ejemplo, hay una opción para controlar si Telnet se ejecuta en modo semidúplex o dúplex completo (el grande), y hay una opción que permite al servidor en la máquina remota determinar el tipo de terminal del usuario (el pequeño). .
La forma en que se negocian las opciones de Telnet también es interesante. Maneja cada opción de forma simétrica, es decir, cualquiera de los extremos puede enviar una solicitud de negociación; Además, si un extremo intenta negociar opciones que el otro extremo no conoce, el extremo receptor puede simplemente negarse a negociar. Por lo tanto, las versiones cliente-servidor de Telnet más nuevas y complejas pueden interoperar con versiones más antiguas y menos complejas. Si tanto el cliente como el servidor comprenden las nuevas opciones, puede mejorar la interacción. De lo contrario, operarán juntos de una manera menos eficiente pero factible. Todos ellos tienen como objetivo mejorar la adaptabilidad a la heterogeneidad, y la importancia de la adaptabilidad de Telnet a la heterogeneidad es obvia para su adopción y desarrollo.
La discusión anterior trata sobre algunos aspectos principales. Aunque es difícil para nosotros alcanzar este nivel cuando usamos Telnet, creo que es muy significativo entender esto y nos dará mucha información. Echemos un vistazo al servicio Telnet de Win2000.
4. Servicio Telnet de Win2000
De hecho, desde el nivel de la aplicación, no hay nada que decir sobre el servicio Telnet de Win2000. La mayor parte del contenido se puede obtener del archivo de AYUDA. , Lo solucioné un poco aquí.
1 Configuración básica
Win2000 nos proporciona el programa cliente Telnet y el programa servidor: Telnet.exe es el programa cliente (Cliente), tlntsvr.exe es el programa servidor (servidor), También nos proporciona el administrador del servidor Telnet tlntadmn .exe.
Windows 2000 instala el servicio Telnet de forma predeterminada, pero no lo inicia. A continuación se proporcionan algunas configuraciones predeterminadas para el servicio Telnet en el archivo de AYUDA:
AllowTrustedDomain (permitir dominio confiable): si se permite el acceso a los usuarios del dominio. El valor predeterminado es 1, lo que permite el acceso a usuarios de dominio confiables. Se puede cambiar a 0: no permitir el acceso a los usuarios del dominio (solo usuarios locales).
Dominio predeterminado: se puede configurar en cualquier dominio que tenga una relación de confianza con esta computadora. El valor predeterminado es "."
DefaultShell: muestra la ubicación de la ruta de instalación del shell. El valor predeterminado es: %systemroot%\System32\Cmd.exe /q /k
MaxFailedLogins: muestra el número máximo de intentos fallidos de inicio de sesión antes de finalizar la conexión. El valor predeterminado es 3.
LoginScript: muestra la ubicación de la ruta del script de inicio de sesión del servidor Telnet. La ubicación predeterminada es "%systemroot%\System32\login.cmd". Puede cambiar el contenido del script para que la pantalla de bienvenida aparezca de forma diferente al iniciar sesión en Telnet.
NTLM: Opciones de autenticación NTLM.
El valor predeterminado es 2 y puede tener los siguientes valores:
0: no utiliza autenticación NTLM.
1: Pruebe primero la autenticación NTLM, si eso falla, use el nombre de usuario y la contraseña.
2: Utilice únicamente autenticación NTLM.
TelnetPort: Muestra el puerto en el que el servidor telnet escucha las solicitudes telnet. El puerto predeterminado es 23, puedes cambiarlo a otro puerto.
Las configuraciones anteriores se pueden configurar fácilmente usando tlntadmn.exe (Administrador del servidor Telnet), que requiere reiniciar el servicio Telnet. Como se muestra en la Figura 1
2 NTLM
Cuando mencionas telnet, no puedes evitar mencionar NTLM. Creo que este es el mayor dolor de cabeza para los intrusos, incluso si obtienes el. administrador No es fácil simplemente pasar NTLM como cuenta y contraseña, y telnet en win2000 solo puede autenticar la identidad a través de NTLM de forma predeterminada, lo que nos obliga a prestar atención a NTLM. Esto nos obliga a prestar atención a NTLM, entonces, ¿qué es NTLM?
El primer protocolo SMB transmitía claramente las contraseñas en la red. Más tarde, apareció el mecanismo de autenticación "LAN Manager Challenge/Response", conocido como LM, que fue muy simple y fácil de descifrar. propuso el mecanismo de autenticación de desafío / respuesta de Windows NT, a saber, NTLM. Ahora hay NTLMv2 y Kerberos más nuevos, que es una versión más nueva. Sistemas de autenticación NTLMv2 y Kerberos. NTLM funciona de la siguiente manera:
1. El cliente primero cifra localmente la contraseña del usuario actual en un valor hash de contraseña.
2. El cliente envía su número de cuenta al servidor. no está cifrado y se transmite en texto claro
3. El servidor genera un número aleatorio de 16 bits y lo envía al cliente como un número aleatorio de 16 bits. El servidor genera un número aleatorio de 16 bits y lo envía al cliente como número de desafío
4. El cliente cifra el número de desafío con el hash criptográfico de la contraseña y lo devuelve al servidor. En respuesta
5, el servidor envía el nombre de usuario, el desafío al cliente y la respuesta devuelta por el cliente al controlador de dominio
6. inicie sesión en SAM Busque el hash de contraseña del usuario en el repositorio de administración de contraseñas y luego use ese hash de contraseña para cifrar el desafío.
7. El servidor envía el desafío al cliente en forma de un número aleatorio.
7. El controlador de dominio compara los dos desafíos cifrados y si son iguales, la autenticación es exitosa.
Del proceso anterior, podemos ver que NTLM enviará una solicitud de inicio de sesión al servidor Telnet como el usuario actual, en lugar de iniciar sesión con la cuenta y contraseña de otros administradores que usted escaneó, por lo que su inicio de sesión. obviamente fracasará. Por ejemplo, la computadora de su hogar se llama A (computadora local), la computadora que pirateó se llama B (computadora remota), su cuenta en A es xinxin, la contraseña es 1234 y la cuenta de administrador que escaneó en B es Administrador, la La contraseña es 5678. Cuando desee hacer Telnet a B, NTLM utilizará automáticamente la cuenta y la contraseña del usuario actual como credenciales de inicio de sesión. es decir, use xinxin y 1234 en lugar del Administrador y 5678 que seleccionó, y todas estas operaciones se completarán automáticamente, sin darle ninguna posibilidad de intervenir, por lo que su operación de inicio de sesión fallará.
Dado que el servidor Telnet tiene 3 opciones de uso NTLM, cuando haga Telnet en la computadora remota, se mostrará una de las siguientes opciones:
1)Opción de autenticación = 0 cuando
======================================
Microsoft (R ) Windows (TM) Versión 5.00 (compilación 2195)
Bienvenido al servicio Microsoft Telnet
Telnet Server Build 5.00.99201.1
Iniciar sesión:
Contraseña:
\0 No utilice la autenticación NTML, ingrese el nombre de usuario y la contraseña directamente, por ejemplo, puede ingresar Sweept Administrator y 5678
2) Cuando la opción de autenticación = 1,
==================== ==================
La autenticación NTLM falló debido a credenciales insuficientes. Inicie sesión con un nombre de usuario y una contraseña de texto claro
Microsoft (R) Windows (TM) versión 5.00 (compilación 2195)
Bienvenido al servicio Microsoft Telnet
Telnet Server Build 5.00.99201.1
Inicio de sesión:
Contraseña:
(Pruebe primero la autenticación NTLM, si falla, luego use el nombre de usuario y la contraseña; de hecho, esto Para nosotros, este método no es muy diferente del método anterior
3) Cuando la opción de autenticación = 2
=============== == ======= ==============
La autenticación NTLM falló debido a credenciales insuficientes. Inicie sesión con un nombre de usuario y contraseña de texto claro
El servidor solo permite la autenticación NTLM
El servidor ha cerrado la conexión
Se perdió la conexión con el host.
C:\>
(Mire atentamente la pantalla de arriba. No hay posibilidad de que ingrese su nombre de usuario y contraseña. Simplemente desconéctese directamente y escaneará la contraseña. vano
Entonces, para los intrusos, NTLM es una gran montaña frente a nosotros. Debemos deshacernos de él. Generalmente tenemos los siguientes métodos:
1. modificando la configuración del registro remoto, cambie el método de autenticación de 2 a 1 o 0;
2. Utilice NTLM.exe, cárguelo y ejecútelo directamente, puede cambiar el método de autenticación del servidor telnet de 2 a 1. ;
p>
3 Cree un usuario de escaneo localmente y luego use este usuario para abrir el cliente telnet e inicie sesión de forma remota
4 Use software, como opentelnet; exe (se requieren derechos de administrador para abrir la canalización IPC)
5 Utilice scripts, como RTCS (requiere derechos de administrador, pero no depende de las canalizaciones IPC)
Básicamente, los cinco anteriores Los dos últimos se utilizan más comúnmente para abrir tácticas de telnet y el método de uso también es muy simple.
El comando es el siguiente:
OpenTelnet.exe \\nombre de usuario y contraseña del servidor NTLMAuthor telnetport
OpenTelnet.exe \\\\dirección del servidor nombre de usuario y contraseña del administrador modo de autenticación (rellene 0 o 1) puerto telnet
cscript RTCS.vbe nombre de usuario y contraseña de IP de destino NTLMAuthor telnetport
cscript RTCS.vbe OpenTelnet. exe \\ \\ dirección del servidor administrador nombre de usuario contraseña modo de autenticación (rellene 0 o 1) puerto telnet