HackIndex
sábado, 12 de octubre de 2002 SET BLASTER=A220 I7 D1 H5 P330 T6
CAPITULO II: "Conocimientos Tecnicos Basicos del Hacker" II.c.3: "Guia de referencia de TELNET, FTP y DEMAS" por Seldon
****************************** Manual de referencia de FTP, Telnet, correo y news ******************************
1. PREFACIO 2. PEQUEÑA INTRODUCCIÓN A LOS PUERTOS 3. FTP 2.a Teoría 2.b Comandos 2.c Práctica 4. TELNET 3.a Teoría 3.b Práctica 5. ENVÍO DE CORREO ELECTRÓNICO (SMTP) 4.a Práctica 4.b Remailers anónimos< 6. OTRAS CUESTIONES DE INTERÉS 6.a. Otros puertos interesantes ***************************************************************** 1.- PREFACIO Esto es una pequeña guía para ayudar a los más nuevos (newbies) a poder seguir sin muchas dificultades las siguientes lecciones del FOR YOUR EYES ONLY. No es en ningún caso un manual de hacking, los servicios a los que accederemos aquí son accesibles para todo el mundo, no sólo para hackers ;-) Si después de leer esto tienes dudas, vuélvetelo a leer. Si sigues teniendo dudas, pregúntalas al grupo, no a mi dirección de e-mail. Todos ganaremos si las dudas son respondidas en el grupo, además de servir para corregir o añadir algo al texto. ***************************************************************** 2.- PEQUEÑA INTRODUCCIÓN A LOS PUERTOS Un puerto lógico es en parte similar a un puerto físico (eso que hay detrás de la caja del ordenador, donde conectamos la impresora, el ratón, el módem...). Detrás de cada puerto hay un programa, que da un servicio a todo aquel que se conecte a él y tenga permiso para acceder al servicio. Para que sea accesible, el puerto debe estar 'abierto'. Además, debe tener un programa detrás de él, porque si no, aunque nos conectemos, no podremos hacer nada con él. Para saber qué puertos están abiertos debemos usar un scaner. Puedes encontrar algunos muy buenos en http://hello.to/nbk/ y http://www.geocities.com/crino1p/ ;-)))) Hay miles de listas muy completas con todos los puertos. Ahí abajo incluyo una Página 1
sábado, 12 de octubre de 2002 para mayor comodidad, con los puertos más comunes y/o más importantes. En la lista se asume que cada puerto está relacionado con su número asociado (ftp con el 21, smtp con el 25, etc...), pero nada impide que podamos intercambiar estos números (poner el ftp en el 1234, p.e.). También recordar que a la hora de conectar con un puerto da igual poner su número que su nombre ('telnet www.servidor.com 21' es equivalente a 'telnet www.servidor.com ftp') Y aquí está la lista: Puerto
Servicio
Utilidad
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=7 echo Lo que teclees se volvera a escribir 9 discard dev/null - basura 11 systat Informacion sobre los usuarios 13 Hora y fecha en el host remoto 15 netstat Informacion sobre la red 21 ftp Transferencia de ficheros 23 telnet Acceso al shell 25 smtp Correo saliente 37 time Hora en el host remoto 39 rlp Localizacion del recurso 43 whois Informacion sobre la red y el host 53 domain Nombre del servidor 70 gopher Buscador de informacion (ya anticuado) 79 finger Informacion sobre los usuarios 80 www Servidor de Web 110 pop3 Correo entrante 119 nntp Grupos de noticias (news) 139 nbsession Netbios session 443 shttp Servidor de Web 'seguro' 512 biff Notificacion de correo 513 rlogin Login remoto 514 shell Comando remoto 515 spooler 520 route Protocolo de informacion routing 8000 http Otro servidor de web. 8080 proxy
***************************************************************** 3.- FTP 3.a Teoría FTP significa File Transfer Protocol, protocolo de transferencia de archivos, en castellano. Y sirve, cómo no, para ésto mismo, transferir ficheros: o de nuestra máquina hacia la máquina remota (upload o subir archivos) o de la máquina remota hacia la nuestra (download o bajar archivos). También permite seguir bajandose un archivo después de un corte de conexión (por haberse cortado o por ser un archivo muy grande que queremos bajar en varias sesiones) Un programa de FTP servidor suele abrir el puerto 21 en la máquina en ls que está instalado, para que se puedan conectar por él otras máquinas. Un programa de FTP cliente es el que se utiliza para conectarnos al servidor. Los hay gráficos, como el CuteFTP para Windows o el IglooFTP para Linux, y en modo texto, que están incluídos en ambos sistemas operativos (para arrancarlos, escribir el comando ftp en una ventana de MS-DOS o de la consola texto, en Windows y Linux respectivamente). Aquí nos centraremos en los programas clientes de texto. El FTP no está diseñado para ejecutar programas, para eso está telnet (ver más Página 2
sábado, 12 de octubre de 2002 abajo), pero sí se pueden ejecutar algunos, los que sirven para poder decirle a la máquina que queremos subir o bajar algún archivo o para navegar entre los directorios. Hay varios modos de transferencia de ficheros: ASCII y binarios. Los ficheros ASCII son los archivos de texto, y los binarios todos los demás (programas, imágenes...). Si transferimos un fichero de texto como binario, seguramente se perderá el formato del archivo (aparecerán símbolos extraños o saltos de línea donde no deberían haberlos), pero no será excesivamente grave. Sin embargo, si transferimos un binario como texto, es casi seguro que quede inutilizable. Por eso es importante asegurarse de cambiar el modo antes de bajarse un programa, una imagen o un archivo de sonido. Luego, a menos que queramos bajarnos otro archivo, debemos cambiar nuevamente al modo ASCII para poder recibir correctamente la lista de archivos de un directorio (al hacer ls). Normalmente no deberemos preocuparnos por esto si utilizamos un programa de ftp, aunque sea en modo texto. Pero si nos conectamos mediante un programa de telnet sí lo tendremos que tener en cuenta. 3.b Comandos Nota: Estos son los comandos más importantes del ftp texto para Linux. Los del ftp texto para ms-dos son iguales en su mayor parte, así que no creo que haya ningún problema en encontrar los comandos equivalentes. Para información sobre los comandos que no he incluído aquí, escribir el comando 'man ftp' ascii = cambia a modo ASCII (por defecto) binary = cambia a modo binario bye = quit = exit = ¡adiós! cd = Cambio Directorio (¡ojo! no sirve poner 'cd..' como en DOS, hay que poner 'cd ..' (con espacio) cdup = igual a 'cd ..' close = disconnect = corta la conexión sin salir del programa delete = borra un archivo en la máquina remota dir = muestra la lista de archivos del directorio actual. No admite parámetros. get [archivo.arc] = descargarse el archivo.arc. ¡Ojo! Fíjate de que estás en el modo adecuado antes de descargarlo. lcd = sin nada más, muestra el directorio local actual. Con un directorio, cambia el directorio local a ese directorio (en el directorio local se guardarán los archivos descargados, y de él se cojerán los que se suban) ls = muestra los archivos del directorio actual. Los parámetros son los mismos que los del ls del s.o. mkdir = crea un directorio en la máquina remota. open = abre una conexión. Sólo es necesario si no ha sido especificado un sitio en la llamada al programa (como por ejemplo, ftp ftp.rediris.es) proxy = Se conecta a otro sitio sin desconectar del primero. put = sube un archivo rename = renombra un archivo/directorio -- ¡Esto puede resultar muy interesante a veces! ;-) reget = seguir bajándose un archivo que ha sido cortado anteriormente. rmdir = borra un directorio, siempre que esté vacío (aunque algunos parezca que lo estén porque no vemos nada al hacer un ls, lo que pasa es que tienen archivos para los que no tenemos permiso de lectura (si no sabes lo que es esto, lee un manual básico de UNIX)). mdelete, mdir, mget, mls = lo mismo que esos comandos sin m, pero para varios archivos / directorios
3.c Práctica Vamos a subir nuestra página wez al servidor, para ponerla en intesné. Nuestra página principal se llama index.html, y contiene una imagen llamada imagen.jpg, que la queremos poner en un directorio aparte (imágenes). Pues primero nos conectamos a nuestro servidor. Esto se hace poniendo el comando 'ftp (servidor)'. Debes sustituir (servidor) por el nombre de tu Página 3
sábado, 12 de octubre de 2002 servidor, por ejemplo ftp.servidor.es. Por defecto se asume que el puerto es el 21, si fuera otro tedrías que indicárselo. Por ejemplo, si usa el puerto 4000,tendrías que poner 'ftp ftp.servidor.es 4000'. Ahora nos saldrá un prompt que nos pedirá un login (username). Le ponemos nuestro nombre de usuario. Si quisiéramos conectarnos anónimamente tendríamos que poner 'anonymous' (esto es así para la mayoría de servidores. Puede, no obstante, que te encuentres alguno que no sea así. En estos casos hay que probar con 'guest' o similares). Como este no es el caso, introducimos nuestro nombre de usuario, por ejemplo, seldon. Luego nos pedirá una contraseña. Si hemos entrado como 'anonymous' tendremos que poner una dirección de e-mail. Poniendo 'guest@' ya vale en la mayor parte de los casos. También puedes poner tu verdadera dirección si quieres que te acaben de mandar por correo los archivos que no te has podido bajar (el servidor debe aceptar esta opción). Si hemos entrado como usuario no anónimo, introduciremos nuestra contraseña. ¡Y ya estamos dentro!, ahora podemos ver nuestros directorios. Si ponemos 'cd ..' veremos que estamos en el directorio raíz. Esto no es así en realidad, para la máquina no es el nuestro el directorio raíz, sólo lo es para un usuario (nosotros). Si ponemos 'ls' podremos ver los archivos que hayamos puesto anteriormente nosotros ahí. También veremos varios subdirectorios. Uno de ellos es bin, otro sbin. Si miramos dentro de estos subdirectorios veremos que, aparentemente, están vacíos, pero no es así, lo que pasa es que están llenos de archivos para los que no tenemos permisos de lectura (pero sí de ejecución). Si no sabes qué quiere decir esto, te recomiendo que mires la sección de permisos de un manual básico de UNIX. Estos subdirectorios no se pueden borrar, porque contienen archivos de los que no somos los propietarios, pero sí renombrar ;-) Bueno, a lo que íbamos. Aquí está el resto del trabajo. No creo que necesite más explicación que la que ya tiene entre los símbolos /* y */. lcd /mipagina /*cambia el directorio local actual a /mipagina, que es donde se supone que tenemos guardada la página. Los usuarios de windows tendrán que usar la barra invertida '\'*/ put index.html /*sube el archivo index.html. Como los html son archivos de texto no hace falta cambiar el modo. Si tuvieras problemas, cambia al modo binary*/ mkdir imagenes cd imagenes /*crea el subdirectorio imagenes y se cambia a él (todo en la máquina remota*/ binary /*cambia a modo binario (vamos a subir la imagen) (esto no es necesario si usamos un programa de ftp, sí lo es si no lo usamos)*/ put imagen.jpg ascii /*vuelve a cambiar al modo ascii (porque vamos a comprobar que todo está bien, y necesitamos recibir la información en modo texto (ascii)) (esto no es necesario si usamos un programa de ftp, sí lo es si no lo usamos)*/ ls /*comprueba que la imagen está en su sitio*/ quit /*salimos*/ ********************************************************* 4.- TELNET 4.a Teoría Página 4
sábado, 12 de octubre de 2002 Primero creo que hay que distinguir entre un programa de telnet y el protocolo telnet. Un programa cliente de telnet es un emulador de terminal (teclado + monitor) con el que nos podremos conectar con nuestro ordenador a otro y utilizarlo como si nuestro programa fuera un terminal de la máquina lejana. Es decir, es el que nos permitirá conectar a cualquiera de los puertos abiertos de un sistema para aprovecharnos de sus servicios. Prácticamente todos los s.o. traen uno. Tanto en Linux como en win se llaman igual: telnet. También hay otros programas que hacen eso. Uno de los más conocidos es el CRT (para win), que podréis encontrar en shareware.com, entre otros muchos lugares. Y el protocolo telnet es un protocolo orientado a ejecutar programas en una máquina remota. Nosotros le enviamos la información al programa de la máquina lejana mediante el teclado, el programa la procesa en la máquina lejana, y recibimos el resultado en nuestra pantalla. Es decir, este protocolo está orientado a la ejecución de programas en la máquina lejana. ¿Y cómo más podemos utilizarlo? Pues nos puede servir para encontrar y utilizar un proxy con el que anonimizarnos más. 4.b Práctica Si queréis ver una muestra de cómo se pueden ejecutar programas en una máquina lejana, podéis probar con éstos: eucmvx.sim.ucm.es (login: biblioteca) <-- Catálogo de la universidad complutense de Madrid babel.uab.es -- Catálogo de la universidad autónoma de Barcelona chess.unix-ag.uni-kl.de (puerto: 5000) <-- Jugar al ajedrez contra otros usuarios Para conectar con ellos en Linux debéis escribir 'telnet servidor' si se usa el puerto 23 (los que no he puesto nada) o 'telnet servidor puerto' si se usa otro puerto diferente. P.e.: 'telnet babel.uab.es' ó 'telnet babel.uab.es 23' En windows, iniciad vuestro programa de telnet preferido, y en el menú de conexión escribid el nombre y el puerto (dejad telnet si es el 23). Dejad el tipo de terminal en vt-100. Si no veis lo que escribís, habilitad el eco (estará en el cuadro de opciones o similar) Para utilizar un proxy wingate para anonimizarnos, primero tendremos que conseguir una lista de posibles proxys conectables. Para ello, vamos al IRC y escribimos '/raw stats glines'. Esto nos dará una lista de gente que ha sido baneada. Nos quedaremos con los que en el motivo de ban ponga algo de 'proxy abierto' o similar. Nos vamos al programa de telnet y probamos con uno. Si no nos deja conectar, o no dice nada al conectar, pasamos al siguiente. Si nos contesta con el prompt 'wingate>', ¡felicidades! has encontrado un wingate. Con él podrás conectarte a otro sitio sin dejar tu verdadera IP (quedará guardada en el sitio de la conexión la IP del wingate, y la tuya quedará reflejada en el wingate). Hay algunos wingates que no guardan logs (archivos en los que quedan reflejadas todas las conexiones). Éstos son los que deberemos conseguir encontrar. El problema es que no hay forma de saber si un sitio guarda o no logs. Por eso es conveniente conectarse a dos o más consecutivamente. Con esto aumentan las posibilidades de encontrarse uno que no guarde logs, aunque la velocidad disminuye. Una vez conectado a un wingate, para conectarnos a otro o a cualquier otra parte tendremos que poner 'open servidor puerto'. ***************************************************************** 5.- SMPT (envío de e-mails) Página 5
sábado, 12 de octubre de 2002 5.a Práctica Creo que lo mejor para ver cómo funciona el envío de e-mails es enviandolos 'a mano'. Para esto abriremos nuestro programa de telnet, y conectaremos con nuestro servidor de smtp, que estará en el puerto 25. P.e.: telnet smtp.wanadoo.es 25 Después de los mensajes de bienvenida, y para enviar un mail, escribimos: mail from: Nadie <nadie@ningunsitio.com>, o bien: mail from: nadie@ningunsitio.com La diferencia es que en el primer caso saldrá en el programa de correo empleado para leer nuestro mail que ha sido enviado por Nadie, mientras que en el segundo caso habrá sido enviado por nadie@ningunsitio.com. Hay algunos servidores que requieren que el servidor que hay detrás de la @ exista. En ese caso basta con poner un servidor que exista (no necesariamente nuestro ;-) ) Para designar el receptor: rcpt to: Amigo <amigo@nuestro.es> (rcpt significa recipient) Ahora viene el cuerpo del mensaje. Le decimos al servidor que queremos introducirlo escribiendo: data Si no ponemos nada, la primera línea será el subject, luego tendremos que dejar una línea en blanco, y el resto el cuerpo del mensaje. Finalizaremos con un puntito sólo en una línea. Pero también podemos poner nuestras propias cabeceras. Como las únicas obligatorias son el from, el to, y el Received (que lo pone el servidor y no podemos modificar), las demás nos las podemos inventar, o copiar de las que ponen los programas de correo. Esto incluye, entre otras, la fecha. Seguramente el servidor la incluirá por otro lado, pero puede ayudar a sembrar la confusión ;-). La última que debemos poner debe ser el subject: , y a partir de esa ya vendrá el mensaje. 5.b Remailer anónimos Son los servidores de correo saliente que no incluyen la IP del que la envía. Podemos saber si un servidor es o no un remailer anónimo con el comando helo. Ponemos: helo cualquiercosa Si nos contesta con: Helo (nuestronombreenlared) [(nuestraip)] please to meet you. ya nos podemos olvidar, porque no es un remailer anónimo. Si en la contestación no se incluye nuestra IP, seguramente sí lo será. Podemos comprobarlo enviando un mensaje y comprobando si la incluye. El comando helo es conveniente utilizarlo al conectar a un servidor smtp. No es necesario, pero si no lo usamos en las cabeceras del mensaje se incluirá un warning (advertencia) de que somos unos maleducados que no saludamos :-D. También se llama remailer anónimo a cierto servicio en la red, al que nosotros dirigimos nuestros mensajes, y ellos eliminan el campo From y lo redirigen al receptor original. Página 6
sábado, 12 de octubre de 2002 Ninguno de estos dos sistemas es completamente anónimo, ya que si hacemos alguna 'guarrerida' y a los MIG les da por investigar, como nuestra entrada en estos servidores ha quedado registrada, no tendrán mucha dificultad para seguir el rastro. ******************************************************** 6.- OTRAS CUESTIONES DE INTERÉS -¿Cómo podemos hacer todo esto off-line? Pues teniendo instalados los programas servidores de cada servicio. No sé qué programas hay para windows, ni su utilización, así que no me voy a meter ahí. Lo que sí tenéis que tener en cuenta es que estos programas son comerciales, con lo que tendréis que comprarlos (y no serán baratos precisamente) o conseguirlos de otra forma (no diré cuál XDDD ) En linux lo tenemos muchísimo más fácil, ya que casi todos los programas necesarios son gratuitos, y se suelen incluir e instalar por defecto en la mayoría de las distribuciones. Además, son los programas usados mayoritariamente en internet, como el servidor web Apache, el servidor smtp Sendmail, el servidor de news Leafnode o el servidor ftp wu-ftpd. Si los tenemos instalados y configurados correctamente (consulta las páginas de manual y los how-to adecuados a cada caso), debemos asegurarnos de que su puerto está abierto. Los servicios ofrecidos están en el archivo /etc/inetd.conf. Descomentamos (quitamos el símbolo # de delante) las líneas referidas al servicio que queramos ofrecer, y lo reiniciamos poniendo '/sbin/init.d/inetd restart' (en el caso de la distribución suse. Para otras distribuciones podemos consultar las primeras líneas del archivo en busca del comando a utilizar, y, si no lo encontramos, con el comando find buscar el archivo inetd (find / -name inetd) y escribir el directorio equivalente a /sbin/init.d). Si lo hemos hecho correctamente, ya nos podremos conectar con nosotros mismo, poniendo como servidor 'localhost', p.e.: telnet localhost 25, para practicar con el sendmail. 6.a Otros puertos de interés -Netstat Uso: netstat (servidor) Nos da mucha información sobre las conexiones del sistema, y puertos 'listening' (puertos abiertos y escuchando, que nos pueden ahorrar un escaneo de puertos). La función de este puerto es la de hacer estadísticas sobre la red. -Systat Uso: telnet (servidor) systat Nos da información sobre los procesos que se están ejecutando en la máquina remota. Con esta información podemos, entre otras cosas, buscar exploits para estos programas -Finger Uso: telnet (servidor) (usuario) Nos da información sobre los usuarios de un sistema. Sin el parámetro usuario nos mostrará todos los que haya conectados en ese momento (no es normal que lo haga a menos que seas root). La información que da es: Página 7
sábado, 12 de octubre de 2002 login de usuario nombre completo del usuario directorio personal shell que utiliza última conexión (o si está conectado o si nunca se ha conectado) y desde dónde si tiene correo por leer Si no te da la lista de usuarios conectados sin dar nombre, además de probar el finger con el root para ver sobre todo cuándo se conecta, puedes probar 'a ciegas'. Si están en una máquina española puedes probar con logins como juan, jose, pedro, jlopez... y en una máquina americana con logins como john, mike, smith... Es casi seguro que hay algún usuario llamado así. ¡Ten en cuenta la nacionalidad del servidor, no vayas a probar jose en un servidor japonés! Con esta información podemos intentar adivinar una contraseña, teniendo en cuenta que la mayoría de la gente no quiere contraseñas difíciles de recordar, y usa una combinación de su nombre y sus apellidos. También puede servir para enviarle un mail a su nombre verdadero pasando por ser el administrador del sistema, intentando convencerle de que te dé su contraseña (esto se llama ingeniería social XDDD ). También puedes ser más sutil, e intentar sacarle su fecha de nacimiento, o la fecha de su boda, o el nombre de sus hijos o de su pareja, o cosas similares que suelen ser muy utilizadas como contraseña. Y bueno, esto ha sido todo. Espero no haberos aburrido mucho.
Página 8