----------- NETCAT 1.10 ----------- Herramienta de Diagnostico y Exploracion de Redes Articulo por: Nahual http://www.Raza-Mexicana.org Mon May 17 14:44:33 UCT 1999 926952273 UTC --------------------- INDICE 1.Introduccion 2.Uso General 3.Usos Especificos 4.Guia Rapida 5.Nota Final INTRODUCCION Netcat en una herramienta para Unix que lee y escribe informacion entre conexiones de red, usando los protocolos TCP y UDP. Fue escrita por Hobbit, originalmente para sistemas Unix, Berkeley y System V. Weld Pond, de l0pht Heavy Ind. escribio despues Netcat 1.1NT para Guindows NT, la cual funciona casi perfectamente en Win 95/98, excepto que las conexiones que reciba no seran estables. Netcat es una herramienta de diagnostico y exploracion de redes. Puede crear casi cualquier tipo de conexion y tiene varias opciones integradas. Puede ser utilizado solo, como soporte para otros programas, o puede incluirse dentro de scripts SH (en Unix) o batch (en ms-dos). Habilidades basicas de Netcat: -Conexiones al exterior o del exterior, usando UDP o TCP, hacia o desde cualquier puerto -Verificacion de DNS normal o en reversa, con las advertencias correspondientes -Uso de cualquier puerto local -Uso de cualquier direccion a la que se tenga acceso en la red local -Habilidad de rastrear puertos, incluso de manera aleatoria -Capacidad de decidir que camino tomaran los paquetes de enviados, a modo de "encaminarlos" (source-routing) -Puede procesar comandos de programas, de scripts, y del usuario. -Capaz de enviar datos en modo de transmision lenta,una linea cada N segs -Monitoreo y presentacion, en modo hexadecimal, de datos transmitidos y recibidos -Capacidad de dejar que otro programa maneje conexiones ya establecidas -Opcionalmente responde a opciones caracteristicas de telnet -Creacion de nuevas herramientas, basandonos en los servicios de Netcat. Nota: Esta guia fue escrita principalmente para usuarios/administradores de sistemas Unix. La version de Windoze no es tan flexible por el CLI tan debil que tiene ese sistema operativo. USO GENERAL El programa en si se llama "nc". Su forma mas sencilla, "nc servidor puerto" establece una conexion TCP al puerto especificado,con el servidor especificado Lo que se le introduzca a Netcat via standard input va a ser dirigido al servidor, y lo que reciba Netcat como respuesta sera dirigido a nosotros via standard output. Es decir, Netcat va a seguir mandando datos que le introduzcamos, y recibiendo datos de otro lado de la conexion hasta que el otro lado cierre la conexion. Netcat tambien puede funcionar como servidor. Escuchando intentos de conexion a los puertos que elijamos, y haciendo el mismo proceso de entrada y salida de datos. Se puede decir que a Netcat funciona de la misma forma en modo de servidor o modo de cliente, seguira transmitiendo y recibiendo datos hasta que ya no haya mas. En ambos modos, puede forzarse la desconexion al configurarse cierto tiempo de inactividad del otro lado. Esto lo puede hacer tambien via UDP, asi que Netcat puede considerarse un programa parecido a telnet que puede usarse para diagnosticar servidores que funcionen en modo UDP. Claro que no se puede confiar en conexiones UDP como con las que utulicen TCP, ciertos sistemas pueden tener problemas al transmitir cantidades grandes de datos,pero no deja de ser util esta capacidad El uso de Netcat tiene sus ventajas sobre el uso de telnet al conectarse a puertos arbitrarios. Telnet cierra la conexion cuando el usuario o algun programa parece tomar control mediante la introduccion de datos. Esto es evidente en scripts, donde se necesita calcular un tiempo de espera para evitar que telnet interrupta la salida de datos. Esta es la razon principal por la cual Netcat sigue activo hasta que el otro lado cierre la conexion. Telnet tampoco transimita informacion binaria arbitraria, porque ciertos caracteres son interpretados como opciones de telnet, y seran removidas de la corriente de datos. Telnet tambien transmite ciertos mensajes de diagnostico que presenta en la pantalla junto con el resto de los datos; Netcat jamas metera sus propios mensajes junto con los datos transmitidos. No modificara la corriente de datos de ninguna manera, a menos que se le indique lo contrario. Telnet no puede esperar conexiones del exterior, ni tampoco usar UDP en lugar de TCP. Netcat no tiene estas limitaciones, es mas chico y veloz, y tiene muchas mas ventajas. Netcat es simple y flexible. Hobbit lo describe como la navaja suiza de la internet, se pueden hacer una gran cantidad de cosas con el, siendo la imaginacion el unico limite, tal vez. Si no se le da ningun argumento, Netcat los pedira, leera lo que se le de, y los separara internamente. Esto es util con ciertos tipos de scripts, y su efecto secundario es que no se podran ver los procesos que corra, con el comando ps. El argumento host puede ser la version alfanumerica o el IP numerico. Si la opcion -n es especificada, Netcat solo aceptara IP numericos, y no verificara el DNS por ningun motivo. Si el argumento -n no es especificado, pero -v si lo esta, Netcat hara una verificacion normal y en reversa del host, y dara una advertencia si el IP y el nombre no coinciden. Esto toma un poco mas tiempo, pero puede ser util. Aunque en ocasiones acelera la conexion cuando queremos saber el nombre de un IP y tambien conectarnos ahi. Si no se usa la -v, Netcat hara lo que tenga que hacer silenciosamente, a menos que ocurra algun error. En este respecto, una conexion rechazada no es considerada un error, a menos que se haya especificado un solo puerto. El argumento -w indica a Netcat que debera esperar un tiempo determinado de inactividad antes de cancelar la conexion. Por ejemplo, -w 3 hara que Netcat espere 3 segundos antes de intentar conexion con en otro puerto (o cancelar la operacion completamente). De hecho, esperara el numero de segundos especificados y si no recibe nada esperara nuevamente el mismo tiempo, por si las dudas, y entonces si cerrara la conexion. De esta manera, Netcat trabaja con las conexiones sin nuestra intervencion, cerrandolas cuando el servidor al que nos conectemos deje de responder. Si usamos el argumento -u, Netcat abrira conexiones con UDP en lugar de TCP. Aunque UDP es un protocolo sin conexion estrictamente hablando, Netcat manejara estas pseudo-conexciones como autenticas conexiones UDP para compatibilidad con el kernel del sistema operativo. Aunque Netcat indicacara que una conexion UDP se haya establecido inmediatamente (y de hecho siempre lo hace con cualquier tipo de conexion), ninguna clase de datos seran enviados hasta que le introdujamos algo via standard input. Solo entonces podremos saber si hay un servidor UDP del otro lado. Y aun asi puede no responder, y lo que hay que hacer es esperar la respuesta un tiempo determinado, y rezarle al dios de su preferencia. Sacaran mas provecho de las 'conexiones' UDP si el standard input a Netcat se asemeje a datos que soliciten servicios al servidor. Para ver los datos enviados y recibidos, en modo hexadecimal, debe usarse el argumento -o , e indicar un archivo que contendra estos datos. Es decir, -o archivo_de_datos En este archivo pueden observarse los simbolos ">" y "<" al principio de cada linea. ">" indica datos que fueron enviados por nosotros y "<" indica los que fueron recibidos. Cada linea contiene representaciones hexadecimal y ascii de los datos enviados y recibidos. El uso de esta opcion no es recomendable en caso de que la velocidad sea un factor critico, puesto que esto hace un poco mas lento el proceso. Netcat puede utilizar cualquier puerto local para la transmision de datos, siempre y cuando no este en uso o el acceso a ese puerto sea restringido. Esto se logra con el argumento -p numero_de_puerto. Si se es administrador del sistema, puede usarse cualquier puerto restringido, es decir < 1024. Si no se especifica un puerto desde donde conectarnos, se usara cualquiera que asigne el sistema; esto es a menos que se especifique el argumento -r en lugar de -p , lo que indicaria que se usen puertos locales al azar (e incluso puertos remotos al azar). Tambien puede usarse cualquier IP de nuestra red local, si es que pertenece a un dispositivo (computadora o lo que sea) servido por nuestra maquina. Esto no funciona bien en algunas plataformas. En modo de servidor, Netcat esperara intentos de conexion del exterior. Para entrar en este modo se usa el argumento -l, y opcionalmente se especificara un puerto local al que puedan conectarse del exterior. En modo UDP forzosamente hay que especificar este puerto, mientras que en modo TCP podemos dejar que el sistema asigne el puerto local, y si tenemos el argumento -v nos dira que puerto eligio para nosotros (Claro que la mayoria de las veces seguramente vamos a querer especificar el puerto nosotros mismos) Inclusive podemos agregar el argumento host remoto y, opcionalmente,el puerto fuente remoto. Asi Netcat solo aceptara conexiones provenientes de ese host y, opcionalmente, de ese puerto. De cualquier manera, si agregamos el argumento -v Netcat nos informara de la conexion establecida, de que que host es, y de que puerto remoto se esta conectando. Si Netcat fue compilado con -DGAPING_SECURITY_HOLE, el argumento -e especificara el programa a ejecutar una vez hecha o recibida una conexion. En modo de servidor, funciona como inetd, pero para una sola conexion. Funciona con TCP y UDP. El argumento -e solo puede ir seguido de el nombre de un programa sin argumentos. Para eso se puede escribir un script aparte, que corra dicho programa con los argumentos necesarios, o usar inetd de plano. Por razones de seguridad no esta habilitado, por default. Como administradores de sistema, en especial, no deberan dejar un puerto abierto que otorgue acceso a una shell! Si Netcat fue compilado con -DTELNET, el argumento -t le da la capacidad de conectarse a telnetd y pasar por encima de negociaciones preliminares y recibir el "prompt login:" directamente. Como esto podria hacer cambios a la corriente de datos, no esta habilitado por default. Como nota adicional, estas dos ultimas opciones se logran agregando lo siguiente a la seccion PREDEFINES del Makefile: DFLAGS= -DGAPING_SECURITY_HOLE -DTELNET Datos durante la conexion son dirigidos hacia el standard output, leyendo y escribiendo trozos de 8K.Datos introducidos via standard input son procesados de la misma forma, pero con el argumento -i se pueden introducir los datos en intervalos de tiempo definidos, haciendo el proceso algo mas lento. Esto lo hace mandando secciones de 8K linea por linea. Sin embargo, si el standard input viene de nosotros, estos datos de por si los estamos mandando linea por linea. Entonces el argumento -i es mas bien aprovechado cuando Netcat esta funcionando junto con archivos de datos o programas, y queremos cuantificar los datos que enviemos. El rastreo de puertos (port scanning/probing) es una forma de ver lo que hay al alcance. El puerto o puertos son definidos despues del host. Para rastrear un rango de puertos se separan el primer puerto y el ultimo con un guion. Ejemplos: Rastrear los puertos 20 hasta el 110: nc -v -w 3 -z localhost 21-110 nc -v -w 3 -z localhost ftp-pop3 Este ultimo ejemplo no funcionara con aquellos puertos que tengan un guion incluido en su nombre, como netbios-ssn. Netcat 1.10 no puede interpretar correctamente un rango como "ftp-netbios-ssn"; el rango tendra que ser definido numericamente, "20-139". El argumento -z, por cierto, indica a Netcat que haga un rastreo rapido de puertos abiertos, sin mandar informacion a las conexiones TCP, y muy poca informacion a las conexiones UDP. Aqui podria usarse el argumento -i para poner un intervalo de tiempo entre puerto y puerto. Por cierto, el argumento -z no es un halfscan. El rastreo va a ser grabado en los logs. Esto es porque Netcat no fue hecho especificamente para rastreo de puertos, para eso existen otras herramientas que tienen a su disposicion personas que quieran analizar su sistema, o el de otros. El argumento -r indica a Netcat que haga un rastreo de puertos al azar, y al mismo tiempo utilizara nuestros puertos locales al azar. Asi es menos obvio el rastreo. Al usar el argumento -p, el puerto local siempre sera el mismo. Nuevamente, si se agrega el argumento -i el rastreo es menos obvio porque no es tan "insistente", aunque tarde mas. Por lo tanto, los administradores de sistema debemos prestar aun mas atencion a lo que nos presentan los logs. Es posible tambien usar el argumento -g para enviar paquetes por un camino predeterminado (source-routing). Se puede usar hasta 8 veces para construir el camino que seguira la informacion. Ejemplo: nc -v -w 3 -g gateway1.net -g gateway2.net objetivo.principal.net 23 El argumento -G (mayuscula) es un indicador que sirve para ajustar el camino que recorreran los paquetes de informacion enviados. Los valores para este argumento deberan ser multiplos de 4 (4,8,16...). Hay que tener en cuenta que muchas redes no aceptan datos "encaminados" de esta manera. Pero es util para probar si nuestra red es vulnerable. Ademas, Linux no tiene soporte para source-routing por ahora (el kernel que use yo al escribir este documento es version 2.2.6) Netcat actua de manera muy similar al comando cat, en Unix. Lee el standard input de la misma manera, y podemos cerrar la conexion con ^C. Datos binarios o ASCII pueden transmitirse mediante "piping" desde algun programa,leyendolos desde algun archivo. Por ejemplo, cat archivo | nc -v -w 3 destino.com 12345 o nc -v -w 3 destino.com 12345 < archivo USOS ESPECIFICOS Estos son solo algunos ejemplos para realizar cosas comunes. Sin embargo, pueden servir para darle ideas a la mente creativa.Manejar Netcat con scripts SH (o la Shell que usen) es una manera facil de hacer cosas mas complejas. Netcat es una herramienta que puede usarse para bien o para mal. Asi como una navaja suiza puede servir para reparar y construir, o atacar y destruir. Los administradores de sistema encontraran que es una herramienta muy util para que alguien, con conocimiento intermedio de redes, escriba hacks rapidos que puedan atacar puntos debiles en su sistema. 1.Acceso a la WWW nc -v www.raza-mexicana.org 80 Y al hacerse la conexion, GET /nahual/documento.html 2.Acceso a la WWW via el script 'scripts/web' web www.raza-mexicana.org El puerto default es 80.Un nos lleva al archivo default, /index.html. Para abrir otros archivos, se da el nombre del archivo. Ejemplo: /nahual/documento.html Comandos disponibles (sin comillas): Para subir de directorio, conservando el nombre del archivo, ".." Para guardar un archivo, "SAVE" Para cambiar de host, "HOST" Para cambiar de puerto "PORT" Nota: En los puntos (1) y (2) veremos los tags HTML. Esto es porque Netcat no interpreta el codigo, lo presenta como codigo fuente HTML, tal como es. 3.Acceso a servicios en diversos puertos (telnetd, ftpd, etc.) Hacer conexion via sendmail, por ejemplo: nc -v maquina1.shell.net 25 Al terminar de hacer uso de sendmail, o lo que esten usando, solamente hay que dar un ^C para cerrar la conexion. 4.Rastreo de puertos activo echo quit | nc -v -w 3 maquina1.shell.net 20-250 500-600 4000 6667-7000 > archivo.txt 2>&1 El standard output de echo, "quit", va a ser el standard input de Netcat. Asi es posible hacer la conexion, y salirse automaticamente, obteniendo asi mas informacion sobre el servicio que ofrecen los puertos abiertos. Evitar acceso al puerto 19 (chargen), por supuesto. Todo sera grabado en archivo.txt. Incluyendo mensajes de error (2>&1) Recordar que standard error no necesariamente son errores, pueden ser avisos del kernel, como la existencia de puertos abiertos. 5.Rastreo de puertos pasivo nc -v -w 2 -z maquina1.shell.net 20-250 500-600 400 6667-7000 > archivo.txt 2>&1 Nos informara sobre servicios abiertos, pero sin intentar acceso al sistema. Nuevamente, no es un halfscan. Podemos ver la conexion grabada en los logs del sistema. 6.Transmision/Recepcion de datos Directorios archivados: Preparar el receptor nc -l -p 31337 | uncompress -c | tar xvfp - Activar el transmisor tar cfp algun/directorio | compress -c | nc -w 3 destino.com 31337 Archivos: Preparar el receptor nc -l -p 12345 | uncompress -c > archivo.xxx Activar el transmisor compress -c archivo.xxx | nc -w 3 destino.com 12345 Nota: Obviamente compress y uncompress pueden ser reemplazados por gzip y gunzip respectivamente. 7.Recepcion de datos via browser Preparar el receptor nc -l -p 20034 /dev/null Y lo bombardeamos de ida y regreso yes 09876543210987654321 | nc maquina1.shell.net > /dev/null El programa data/data.c puede generar datos aleatorios, utiles para probar la estabilidad del servicio que estemos probando. 13.Analisis de protocolos. A falta de acceso a herramientas especializadas, puede hacerse analizando los datos transmitidos con el argumento -o. El administrador de sistema, o un atacante con acceso a una root shell, puede usar esto como si fuera un sniffer. Ver el punto (21). 14.Simulacion de clientes de servicios remotos (rservices), ayudado con el programa data/rservice.c, o con rsh y rlogin. De esta manera es posible ver si hay hosts remotos inseguros en .rhosts rservice usuario password | nc -v -w 2 -p 1023 maquina1.shell.net 23 15.Verificar el funcionamiento de las alertas de sistema (syslog). Si /etc/syslog.conf es configurado de cierta forma, el siguiente ejemplo podria mandar una alerta a las terminales de todos los usuarios. echo '<0>cualquier_mensaje' | nc -v -w 2 localhost 514 Recordar que 514 es el puerto syslog 16.Verificar que nuestro sistema bloquea paquetes "encaminados" (source-routed) y que son correctamente filtradas conexiones TCP y UDP a puertos normalmente protegidos del exterior, probando con diferentes puertos y hosts. 17.Bloqueo de conexiones a puertos especificados. Los servidores de Xwindow, por aceptar conexiones de pualquier puerto, son muy vulnerables. Netcat puede ligarse al puerto 6000 del X server y cerrar cualquier intento de conexion, y/o grabar ese intento. # Este script recibe conexiones al puerto default del X server # en este caso provenientes de nuestra maquina, puerto 2, para despues # cerrarla. Facilmente pueden agregarsele opciones para # hacerlo mas flexible y potente. while true ; do nc -v -l -p 6000 localhost 2 done 18.En caso de que scripts CGI no sean permitidos en su web server, se puede abrir un puerto con Netcat, en localhost o en alguna otra maquina, y usarlo para correr programas que hagan lo que generalmente haria un script CGI, haciendo referencia a ese puerto en dicha maquina. 19.Abrir puertos que generalmente solo estarian abiertos en maquinas Winshit infectadas con caballos de troya como netbus, sockets de troie, etc. Cuando alguien intente hacer la conexion con el falso servidor troyano, se puede responder enviandole cantidades enormes de informacion inutil, o un algun ataque DoS, etc. 20.Es posible ligar puertos bajos como el 20 y conectarse a otras maquinas, asi evitando muchas veces filtros que esa maquina tenga. Por ejemplo, los servidores NFS muchas veces aceptan conexiones del exterior sin filtrarlas, cuando provienen de ciertos puertos. El administrador de sistema debe tener esto en cuenta. En sistemas Unix es necesario ser root para tomar puertos bajos (< 1024). En Windoze me parece que no hay ningun problema con tomar esos puertos. 21.Es posible ligar ciertos puertos y correr servidores falsos, a los cuales los usuarios podrian conectarse y asi es posible interceptar informacion, estilo sniffer. Toda informacion que pase por el falso servidor puede ser grabada mendiante el argumento -o Por la existencia de esta posibilidad, es recomendable lo siguiente: 1.Utilizar SSH para conectarse a los servicios de un sistema (en lugar de telnet) 2.Utilizar PGP para enviar informacion desde dicho sistema 22.Usar Netcat con los argumentos -l y -e es util para tener acceso a una shell (Unix o ms-dos). Si se usa UDP la conexion permanece abierta indefinidamente, y solo dejara entrar aquellos con nuestro IP. Escuchar la conexion desde un puerto y host especificos hace dificil que alguien mas entre, si elegimos usar TCP. Sistema remoto nc -u -l -e /bin/sh -p 3333 Nuestro sistema nc -u -w 3 sistema.remoto.net 3333 Obviamente, la shell en Unix puede ser cualquiera de la familia C, o Bourne. La familia TCL (tclsh y wish) no funciona porque no son shells verdaderas, requieren cargarse bajo una shell autentica. En caso de maquinas NT, la shell es cmd.exe. En otros tipos de Winblows es command.com pero, como ya mencionaba, es posible que no de resultado abrir un puerto en Win 9X. 23.Ataque a sistemas por fuerza bruta, adivinando passwords, una vez obtenida la lista de usuarios. El siguiente ejemplo va a usar el programa rservice para meter un usuario, su clave de acceso, y un comando (en caso de que descubramos la clave) al puerto 512 (exec) de la maquina remota, via standard input a Netcat. rservice usuario password pwd | nc -v -w 3 maquina1.shell.net exec El comando pwd es el default, por lo tanto no es obligatorio ponerlo, pero es posible poner cualquier otro comando en su lugar. Es menos probable que se graben intentos fallidos de acceso en los logs atacando exec remoto (rexec) via el puerto 512,contrario a otros puertos mas "conocidos". Es una debilidad que muchos pueden aprovechar. Es posible atacar via login remoto (rlogin) por el puerto 513, pero es necesario ligarse a un puerto entre 512 y 1023, de lo contrario rlogind no permitira el acceso. Ataque al puerto 110 (pop3) es otra opcion, la cual aprovechan programas como el "hotmail hacker". El cracker que desee atacar un sistema, puede agregar un glosario o diccionario y una lista de usuarios con facilidad, y hacer cracking por fuerza bruta. Pero un sistema bien configurado y un administrador que sepa hacer su trabajo, con seguridad podra detectar este tipo de ataque (muy lento, por cierto). 24.Spoofing es cosa sencilla, dependiente solamente de que direcciones podemos usar para "encaminar" nuestros paquetes, de que maquinas acepten informacion recibida de esta manera. Solo es cosa de construir ese camino con los argumentos -g y, si es necesario, -G 25.SYN flooding contra algun servicio es facil de realizar utilizando el argumento -s con unos cuantos hosts falsos, 5 o mas es un buen numero. Consiste en enviar un paquete de sincronizacion (SYN) para pedir una conexion, el servidor respondera que ha recibido el paquete y esta listo para establecer la conexion (SYN ACK), el cliente debera responder (ACK), pero como el SYN flooder usa hosts falsos, el servidor nunca recibira el ACK, pero se quedara esperandolo por determinado tiempo, agotando recursos. En otras palabras, SYN flooding se basa en un "3-way handshaking" incompleto. El queue se llenara de pedidos de conexion y la memoria disponible caera rapido. El ataque, por lo general, solo deshabilitara el servicio siendo atacado, a menos que maquina siendo atacada tenga poca memoria disponible. Como administradores, notaremos este tipo de conexion incompleta con el comando netstat. Lo notaremos en estado SYN_RECV. Para disminuir este problema, causado con Netcat o cualquier otra herramienta, se puede aumentar el numero de conexiones incompletas permitidas por el kernel, disminuir el tiempo que esperara el servidor por un ACK (el default suele ser 3 a 5 minutos), o tal usar algun sistema de monitoreo de conexiones mande un paquete RST a las conexiones incompletas. GUIA RAPIDA Sintaxis: nc [-argumentos] [ host] [puerto | rango_de_puertos] Argumentos: (Todos son opcionales) -h Help - duh -n Numeric - solo acepta IP numerico Acelera el diagnostico -v Verbose - pone informacion adicional sobre la coneccion Recomendable usarlo siempre -vv Very Verbose - informacion mas detallada todavia No muy necesario, podria ser util en diagnostico de sistemas problematicos -w Wait - espera cierto tiempo a que se establezca la conexion Recomendable, -w 3 es una buena opcion -p Port - puerto local a utilizar -s Server - server local a utilizar No funciona en todas las plataformas -r Random - eleccion de puertos al azar (locales y remotos) -l Listen - escuchar por conexiones del exterior. Como inetd -e Execute - correr un programa al establecerse una conexion Util, pero inseguro si Netcat actua como servidor -t Telnet - Evita negociaciones iniciales con telnetd Util, pero puede reducir confiabilidad en la transmision de datos -z Zero I/O - Rastreo rapido de puertos, evitando salida o entrada de datos. -i segs Interval - Espera un intervalo de tiempo entre paquetes enviados -g gateway Gateway - Maquina que retransmitira nuestros datos a otra maquina o al destino final. -G Gateway Pointer - Es lo que indica que gateway esta en uso en determinado momento. En ocasiones es util mover este indicador nosotros mismos. Definido en multiplos de 4. ADVERTENCIA Ni Raza-Mexicana, ni sus miembros asumen responsabilidad por el uso de esta informacion. Cualquier mal uso se deja bajo responsabilidad del lector. Windoze, Winblows, y Winshit son marcas propiedad de Microscrap Corp. NT son las letras decimo cuarta y vigesimo primera del alfabeto castellano, respectivamente. Dedicado a quien lo este leyendo ahorita, espero que les sirva. Habran revisiones periodicas a este documento. Gracias a nauj y a kukulkan por ayudarme en la etapa de pruebas. Nahual