-[ 0x0A ]-------------------------------------------------------------------- -[ [Paseando por la red] ]--------------------------------------------------- -[ madfran ]----------------------------------------------------------SET-26- INTRODUCCION No siempre se encuentra lo que se desea ni se destapa lo que se quiere. La mayoria de las veces cuando navegamos por estas redes tenebrosas, lo unico que encontramos es una coleccion de dibujos, fotografias y montajes, que solo disparan una cantidad enorme de colores y movimientos sin mas objeto que reclamar nuestra atencion pero sin ninguna intencion de darnos nada a cambio. Normalmente el aburrimiento nos puede y mecanicamente nos encontramos introduciendo en los campos que nos presentan las web, codigos que no tienen ninguna similitud con nuestro nombre y apellidos. Un observador casual se preguntara para que introducimos esta serie de caracteres extravagantes en el sitio donde una pringosa web esta intentando enterarse de nuestros datos mas intimos. Que pretendemos con esta serie de %20 /, ? y demas cosas que no dicen nada a los comunes mortales, es bastante evidente. Estamos intentando explotar alguno de los miles de defectos que adornan las web de esta tierra (otras no conozco) para enterarnos de algunas tonterias, como la password del administrador, la cuenta bancaria de algunos cientos de confiados usuarios o el numero de la tarjeta VISA de unos miles de incautos que han comprado alguna tonteria en esta o aquella infame web. TECNOLOGIA WEB A pesar del tiempo que lleva en marcha la red de redes, los protocolos sobre los que se basa la web son todavia de forma fundamental los viejos y queridos HTTP que trabajan a traves del puerto 80 y su hermano gemelo HTTPS que se comunica a traves del puerto 443. Ya pueden introducir los firewalls que les de la gana y las protecciones que deseeen, pero siempre deben dejar estas dos puertas para poderse comunicar con el exterior y siempre que alguien deja una puerta abierta,... un indeseable pueda aprovechar el momento. Si hacemos un poco de historia y recorrido de protocolos, nos encontramos que existen diversas versiones del mismo protocolo. Para el HTTP, tenemos : HTTP/0.9 Nunca he sabido el porque de este numero de version tan heterodoxo, pero el caso es que fue el primero en salir ahi por el anyo 1990. Sus especificaciones se encuentran en el documento RFC1945 que si teneis ganas de leer, podeis encontrar en, www.ietf.org/rfc/rfc1945.txt Hasta 1996 su uso fue mas bien modesto debido al estado infantil en que se encontraba por aquel entonces la red. Eran tiempos en que todo se hacia a base de telnet y de menus con nulos contenidos graficos HTTP/1.0 Se presento en sociedad en Mayo de 1994 y a pesar de su avanzada edad (en terminos informaticos), sigue siendo el rey de los protocolos HTTP en la red. Esta va a ser el arma de aprendizaje para controlar el funcionamiento del sistema cliente/servidor. En el mismo documento antes mencionado (rfc1945), podreis encontrar las especificaciones. HTTP/1.1 Oficialmente salio en 2001 (no se en que mes) y es la ultima version de este protocolo. Esta documentada en el RFC2616, que podeis encontrar en la misma web antes aludida. Existe una diferencia fundamental con respecta a las versiones anteriores y es que soporta el paso de parametros con el query '?'. Este hecho es el motor de muchas de las aplicaciones que se encuentran en la red y es el principal punto de apoyo para iniciar ataques en toda regla. Para el HTTPS solo existe una version, que se encuentra especificada en el documento RFC2246. En el fondo este protocolo es un trafico HTTP cifrado. Con lo cual solo emisor y receptor son capaces de entenderse y no existe la posibilidad de que terceros a la escucha se enteren de nuestro trafico. Los mensajes se cifran mediante una especificacion SSL (Secure Sockets Layer) de la cual hay diversas versiones con sus protocolos (SSLv1, SSLv2, SSLv3) Si nos centramos en los protocolos HTTP sin cifrar, lo primero de todo es comprobar que version esta corriendo en la maquina que deseamos visitar. Todo el mundo debiera saber que lo que vemos en nuestro navegador no es lo que realmente recibe nuestra maquina sino una interpretacion de lo que le llega. En el fondo es como las personas, no decimos lo que vemos o hemos visto, sino que damos nuestra interpretacion particular, de forma gratuita. Dejando a parte las digresiones que tanto me gustan pero que a ninguna parte llevan, lo que nos hace falta es un interprete que no ponga nada de su parte, eso existe (al menos en el mundo de la informatica de redes) y se llama netcat. Es una herramienta que podeis encontrar en el disco duro de mi PC, pero como no tengo intencion de daros acceso al mismo, lo mejor es que lo busqueis en algun sitio de confianza tipo www.l0pht.com o algo por el estilo, en todo caso podeis buscar en google pero tened cuidado con lo que os bajais porque hay versiones con troyanos incluidos gratis en el paquete. Una vez teneis el netcat en vuestras manos solo teneis que teclear, nc.exe www.ejemplo.com 80 GET / HTTP/1.0 y darlo dos veces al return Como respuesta el servidor os devolvera una informacion parecida a esta, HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Content-Location: http://191.11.12.2/ default.htm .... y otras informaciones Con todo esto ya podeis saber conque tipo de maquina os enfrentais (tambien han podido falsear los header, pero esto es otra historia) y podeis empezar a planificar el ataque. De momento es bueno saber que tipo de comandos podeis emplear. Si os enfrentais a servidor HTTP/1.0 podeis utilizar, GET Devuelve el contenido del archivo solicitado. Si se pide un archivo html devolvera el contenido pero si es un archivo ASP, el servidor procesara el archivo y enviara el resultado de la ejecucion del archivo Atentos a la diferencia ! HEAD En este caso no devuelve el contenido del archivo sino el resultado de informacion generica del servidor. COn esta informacion se puede empezar a trabajar ! POST Solicita al servidor aceptar una cierta informacion para realizar algunas tareas con ella. Normalmente se utiliza en contexto de scripts CGI. Si estais frente a un HTTP/1.1 , hay mas opciones, CONNECT Utilizado si queremos jugar con un proxy que tiene las suficientes habilidades para hacer switch dinamico. DELETE Sirve para borrar cosas, pero casi nunca esta activada en los servidores modernos, por motivos obvios. GET Mismas funciones que en el caso del protocolo HTTP/1.0. HEAD Mismas funciones que en el caso del protocolo HTTP/1.0. OPTIONS Informa de las opciones disponibles. Si ponemos un *, nos informara de todo lo que esta implementado en el servidor. Por tanto es sumamente practico como punto de partida. POST Mismas funciones que en el caso del protocolo HTTP/1.0. PUT Crea un fichero con el contenido (casi) que le solicitemos. Para registrar salidas que luego van a ser entradas de otras scripts es bastante practico. TRACE Envia una peticion de mensaje loopback. Es muy util para descubrir los proxys en linea. ALGO SOBRE CARACTERES ESPECIALES Despues de conocer que tipo de adversario tenemos, es bueno conocer que tipo de informacion podemos utilizar. Cualquier tipo de archivo html no es otra cosa que un conjunto de caracteres alfanumericos, pero como de costumbre e incluso entre los seres humanos ocurre, no todos los caracteres son iguales ni tienen la misma importancia ni siquiera un comportamiento parecido. En el caso de la tecnologia HTTP es bueno repasar algunos caracteres, ? Es un separador query. Todo lo que se encuentra a su derecha se interpreta como una peticion query a una base de datos o de entrada a un programa. & Separador de parametros. Muy util si queremos enviar varios parametros al mismo tiempo y no deseamos que se mezclen de una forma obscena e inutil para nuestros propositos. = Separa el nombre de un parametro de su contenido y de paso lo asigna para que posteriormente pueda ser tratado de forma decente. + Se transforma en un espacio (casi siempre). : Separador de protocolo. Ya sabeis, lo que esta antes normalmente es un http, pero a veces es un https e incluso ftp. # Se utiliza para indicar un punto concreto de arranque dentro de un mismo archivo. O sea .....index.html#1 es distinto de ...index.html#2 pero se encuentra dentro del mismo archivo index.html % Es un caracter de escape para indicar que a continucion se encontrara una notacion hexadecimal. @ Bastante famoso, no? Se utiliza para direccion de correo electronico ~ En ambientes tipo unix, indica un directorio personal Tambien es bueno saber algo de los metacaracteres, * Es un caracter comodin ; Su significado difere en funcion de la aplicacion. Para lenguajes como C o perl es un indicador de final de linea. En scripts Bourne o queries SQL es un separador de comandos. | Es un caracter pipe para encadenar el resultado de un comando con la entrada de otro. ' El caracter acento grave se utiliza como comando de substitucion de salida. Poniendo un ejemplo clarificador si conseguimos que el servidor trague con un comando tal como files='ls -la' conseguira que el resultado de la instruccion ls -la pase a engrosar el contenido del fichero files. Todo programe que corra en un servidor que se precie de serlo, debe controlar que no se le envien este tipo de caracteres, pero esto no es el caso de muchisimas aplicaciones que todavia se encuentran activas. Si encontramos alguno de estos servidores con exceso de espiritu de colaboracion y capaz de prestar todo tipo de informacion, solo hace falta saber un poco sobre el sistema operativo a atacar y en poco tiempo se tendra completo acceso. Sin embargo estos son tiempos pasados y salvo los servidores carentes de cualquier interes, los mas serios han aprendido la leccion y cuidan sus scripts, sin embargo al poco tiempo aparecio otro tipo de problema. Los caracteres Unicode. CODIFICACION UNICODE La codificacion ASCII hexadecimal es mas que suficiente para dar servicio al alfabetico latino (con todas sus variantes) a la numeracion arabiga y a algunos caracteres mas de uso normal, como los operadores matematicos. El problema empezo cuando se quiso dar servicio a todo tipo de alfabetos y caracteres esotericos para lo cual hubo que hechar mano de la codificacion UTF-8 (Universal Character Set Translation Format). A pesar que UCS esta mantenido por ISO, hubo un grupo de empresas (fundamentalmente vendedores de software) que se dedicaron a estudiar la posibilidad de unificar la representacion de una serie de codigos bajo un unico esquema. Este grupo se conoce como el Unicode Consortium (www.unicode.org). Sin entrar en como funciona este galimatias, lo importante es darse cuenta (como se dieron cuanta algunos) que el mismo caracter se puede representar en un unico byte, con dos o con tres. Fue asi como un avispado, hacia el Octubre de 2000, descubrio que el caracter '/' se representa como el 00101111 en binario, como 47 en decimal y 2F en hexadecimal. Todo esto en un unico byte, pero queria decir lo mismo 1100000 10101111, o 49327 o C0 AF si se emplean dos bytes. Reflexionando sobre el tema se le ocurrio poner en el navegador %C0%AF y el servidor que solo controlaba el paso de un escualido 2F, dejo pasar el '/' y el tipo en cuestion consiguio entrar en muchos sitios que antes le estaban vedados y seguidores suyos crearon el gusano Code Red. Este es la famosa vulnerabilidad Unicode. Un ejemplo muy sencillo de la explotacion de la vulnerabilidad es, http://www.servidor.com/scripts/..%C0%AF../winnt/system32/cmd.exe?/c+dir+d:\ Esta sencilla conbinacion, nos lista el contenido del directorio raiz del disco d: de un servidor con windows NT con su software sin actualizar (ya hay pocos de esos, tampoco os molesteis conmogo si no encontrais ninguno a las primeras de cambio). ALGO MAS QUE APRENDER Los programadores que tienen que crear los pesados conjuntos de caracteres que configuran los modernos programas, se valen normalmente de tecnologias bastante standard. Siempre es bueno saber de estamos hablando antes de empezar a teclear codigos a diestro y siniestro. He ahi una forma basica de reconocer la tecnologia empleada. Si vemos que en la URL del navegador hay algo que termina con una cierta extension, podemos deducir lo que tenemos al otro lado de los cables. Extension Technologia Plataforma .pl Perl CGI script Generico. Normalmente UNIX .asp Active Server Pages Microsoft IIS .aspx ASP+ Microsoft .NET .php PHP script Generico. Normalmente Apache .cfm CodFusion Generico. Normalmente Microsoft IIS .nsf Lotus Domino Servidor Lotus Domino CASO PRACTICO Supongamos una URL de aquellas cutres de hace anyos que tiene un aspecto tal como, www.servidor.com/cgi-bin/login.cgi La pantalla de nuestro navegador muestra la tipica ventana donde se pide el nombre de usuario y el password invitando a validar todo mediante un boton standard login. Supongamos que introducimos como usuario 'pepe' y como password 'nena'. Si, a continuacion, en lugar de dar al login le damos en el menu a Ver/Fuente (suponiendo que nuestra configuracion sea en castellano) veremos el listado del fichero html y cuyo aspecto puede parecerse a este.
Nombre: input name=user type=text width=20>
Password: input name=pass type=password width=20>
O sea estamos intentando pasar las variables 'user' y 'password' y cada una de ellas tendra el valor de 'pepe' y 'nena'. La primera variable es de tipo text y la segunda de tipo password, aunque la unica diferencia es que el contenido de la primera variable se ve en la pantalla y la segunda no, impidiendo que cualquier fisgon mire por encima de tu hombro. Por lo demas no ofrece ningun tipo de proteccion adicional. Lo importante de esta historia es que se puede enviar la informacion a traves de la ventana del navegador o bien mediante la siguiente URL http://www.dominio.com/cgi-bin/login.cgi?user=pepe&password=nena Poder lanzar peticiones de login sin tener que pasar por la pantallita es el punto de partido para poder planificar ataques de fuerza bruta en linea. RECUENTO FINAL No vamos a explicar con detalle todo lo que se puede hacer, se ha hecho, se esta haciendo y se hara en el futuro. Como en casi todos mis articulos, lo unico que pretendo (con escualidos resultados) es despertar la curiosidad de alguien para que continue el camino que yo solo he senyalado. Solo hace falta quedarse con unos pocos conceptos. - Lo que veis en el navegador solo es la interpretacion de un codigo. - Este codigo puede ser by-pasado mediante caracteres insertados directamente en la URL del navegador. - Los codigos pueden construirse con distintos esquemas, pero los programadores preferentemente utilizan tan solo unos pocos por aquello de 'que inventen ellos'. Para que no os quedeis con mal sabor de boca, os dare algunas direcciones utiles que os pueden servir tanto para profundizar un tema concreto como para descargar herramientas automaticas. UTILIDADES www.foundstone.com SuperScan Un scaner de puertos TCP muy popular bajo Windows FScan Un scaner en linea de comando. Tambien bajo Windows www.wiretrip.net/rfp/ Whister Un scaner para vulnerabilidades de web. Escrito en PERL www.nstalker.com/stealth/ Stealth Scanner Scanner de vulnerabilidades de web. www.nessus.org Nessus Scanner Scanner de vulnerabilidades. www.cerberus-infosec.co.uk Cerberus Scanner de vulnerabilidades de web y de bases de datos. www.nextgenss.com Typhon I Similar a Cerberus www.insecure.org/nmap/ Nmap Creo que es el mejor scanner que incluye todo tipo de servicios e identificacion de sistemas operativos LINK Y RECURSOS http://www.packetstormsecurity.org http://www.securityfocus.com http://www.securiteam.com http://neworder.box.sk http://www.cert.org http://www.wiretrip.net/rfp/ HERRAMIENTAS AUTOMATICAS Netcat Herramienta para efectuar conexiones sin ningun tipo de interface. Es muy util para automatizar ataques o para ver codigos ocultos. Whisker Es un buscador de vulnerabilidades que corre bajo Unix y Windows. Puede utilizarse para realizar ataques de fuerza bruta. Brutus La ultima vez que lo busque lo encontre en www.hoobie.net/brutus Es uno de los automatas de ataque mas completos Achilles Actua como un proxy, de forma que permite modificar la informacion que recibe antes de devolver la respuesta. Las posibilidades posibilidades son las siguientes : - Servidor proxy (puerto configurable) - Interceptacion de trafico HTTP y SSL - Insercion y modificacion de datos en linea - Recalculo de campos HTTP - Chequeo de buffer overflow - Registro de sesiones HTTP y SSL Cookie Pal Se utiliza para controlar los cambios que se producen en los cookies que recibimos. Teleport Pro Muestra todas las referencias que existen bajo una direccion URL *EOF*