SlideShare una empresa de Scribd logo
1 de 84
Descargar para leer sin conexión
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
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11
Hxc11

Más contenido relacionado

Similar a Hxc11 (20)

Hxc10
Hxc10Hxc10
Hxc10
 
Hxc1 hacker
Hxc1 hackerHxc1 hacker
Hxc1 hacker
 
Hxc1
Hxc1Hxc1
Hxc1
 
Hxc1
Hxc1Hxc1
Hxc1
 
Hxc1
Hxc1Hxc1
Hxc1
 
Hx c01
Hx c01Hx c01
Hx c01
 
01. crea tu primer troyano [indetectable por los antivirus]
01. crea tu primer troyano [indetectable por los antivirus]01. crea tu primer troyano [indetectable por los antivirus]
01. crea tu primer troyano [indetectable por los antivirus]
 
Hxc16
Hxc16Hxc16
Hxc16
 
Hxc13
Hxc13Hxc13
Hxc13
 
Hxc18
Hxc18Hxc18
Hxc18
 
Hxc2
Hxc2Hxc2
Hxc2
 
Hxc23
Hxc23Hxc23
Hxc23
 
Hxc20
Hxc20Hxc20
Hxc20
 
Hxc21
Hxc21Hxc21
Hxc21
 
Hxc12
Hxc12Hxc12
Hxc12
 
Hxc15
Hxc15Hxc15
Hxc15
 
Hacker en 24 HRS
Hacker en 24 HRSHacker en 24 HRS
Hacker en 24 HRS
 
Hxc14
Hxc14Hxc14
Hxc14
 
Hxc3
Hxc3Hxc3
Hxc3
 
Clase UBA 11 PFII
Clase UBA 11 PFIIClase UBA 11 PFII
Clase UBA 11 PFII
 

Más de rubenroa

Estudios epidemiologicos
Estudios epidemiologicosEstudios epidemiologicos
Estudios epidemiologicosrubenroa
 
Efectividad de la vacunacion Covid-19 en variante delta
Efectividad de la vacunacion Covid-19 en variante deltaEfectividad de la vacunacion Covid-19 en variante delta
Efectividad de la vacunacion Covid-19 en variante deltarubenroa
 
Causalidad
CausalidadCausalidad
Causalidadrubenroa
 
Evaluacion de tecnologias sanitarias
Evaluacion de tecnologias sanitariasEvaluacion de tecnologias sanitarias
Evaluacion de tecnologias sanitariasrubenroa
 
Epidemiologia
Epidemiologia Epidemiologia
Epidemiologia rubenroa
 
Pediatrics 2008 jul 122(1) 143 8, figure-1
Pediatrics 2008 jul 122(1) 143 8, figure-1Pediatrics 2008 jul 122(1) 143 8, figure-1
Pediatrics 2008 jul 122(1) 143 8, figure-1rubenroa
 
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011rubenroa
 
Maceira sss&farma-taller15jun2011
Maceira sss&farma-taller15jun2011Maceira sss&farma-taller15jun2011
Maceira sss&farma-taller15jun2011rubenroa
 
Datos cohorte chilena sida (1)
Datos cohorte chilena sida (1)Datos cohorte chilena sida (1)
Datos cohorte chilena sida (1)rubenroa
 
Kappos fingolimod moa-clin_results_vfinal_buenosaires1a
Kappos fingolimod moa-clin_results_vfinal_buenosaires1aKappos fingolimod moa-clin_results_vfinal_buenosaires1a
Kappos fingolimod moa-clin_results_vfinal_buenosaires1arubenroa
 
Uso Racional de Medicamentos
Uso Racional de MedicamentosUso Racional de Medicamentos
Uso Racional de Medicamentosrubenroa
 
tabaquismo
tabaquismotabaquismo
tabaquismorubenroa
 
Sesion ppt -2641_
Sesion ppt -2641_Sesion ppt -2641_
Sesion ppt -2641_rubenroa
 
Auditoria em
Auditoria emAuditoria em
Auditoria emrubenroa
 
Indice tobillo brazo
Indice tobillo brazoIndice tobillo brazo
Indice tobillo brazorubenroa
 
indice tobillo brazo
indice tobillo brazoindice tobillo brazo
indice tobillo brazorubenroa
 
Epistemología y paradigmas
Epistemología y paradigmasEpistemología y paradigmas
Epistemología y paradigmasrubenroa
 
Vertigo acv
Vertigo acvVertigo acv
Vertigo acvrubenroa
 
Apendicectomia
ApendicectomiaApendicectomia
Apendicectomiarubenroa
 

Más de rubenroa (20)

Estudios epidemiologicos
Estudios epidemiologicosEstudios epidemiologicos
Estudios epidemiologicos
 
Efectividad de la vacunacion Covid-19 en variante delta
Efectividad de la vacunacion Covid-19 en variante deltaEfectividad de la vacunacion Covid-19 en variante delta
Efectividad de la vacunacion Covid-19 en variante delta
 
Causalidad
CausalidadCausalidad
Causalidad
 
Evaluacion de tecnologias sanitarias
Evaluacion de tecnologias sanitariasEvaluacion de tecnologias sanitarias
Evaluacion de tecnologias sanitarias
 
Epidemiologia
Epidemiologia Epidemiologia
Epidemiologia
 
Pediatrics 2008 jul 122(1) 143 8, figure-1
Pediatrics 2008 jul 122(1) 143 8, figure-1Pediatrics 2008 jul 122(1) 143 8, figure-1
Pediatrics 2008 jul 122(1) 143 8, figure-1
 
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
Introducción análisis farmacoepidemiológico sss&farma-taller15jun2011
 
Maceira sss&farma-taller15jun2011
Maceira sss&farma-taller15jun2011Maceira sss&farma-taller15jun2011
Maceira sss&farma-taller15jun2011
 
Datos cohorte chilena sida (1)
Datos cohorte chilena sida (1)Datos cohorte chilena sida (1)
Datos cohorte chilena sida (1)
 
Ferinject
FerinjectFerinject
Ferinject
 
Kappos fingolimod moa-clin_results_vfinal_buenosaires1a
Kappos fingolimod moa-clin_results_vfinal_buenosaires1aKappos fingolimod moa-clin_results_vfinal_buenosaires1a
Kappos fingolimod moa-clin_results_vfinal_buenosaires1a
 
Uso Racional de Medicamentos
Uso Racional de MedicamentosUso Racional de Medicamentos
Uso Racional de Medicamentos
 
tabaquismo
tabaquismotabaquismo
tabaquismo
 
Sesion ppt -2641_
Sesion ppt -2641_Sesion ppt -2641_
Sesion ppt -2641_
 
Auditoria em
Auditoria emAuditoria em
Auditoria em
 
Indice tobillo brazo
Indice tobillo brazoIndice tobillo brazo
Indice tobillo brazo
 
indice tobillo brazo
indice tobillo brazoindice tobillo brazo
indice tobillo brazo
 
Epistemología y paradigmas
Epistemología y paradigmasEpistemología y paradigmas
Epistemología y paradigmas
 
Vertigo acv
Vertigo acvVertigo acv
Vertigo acv
 
Apendicectomia
ApendicectomiaApendicectomia
Apendicectomia
 

Último

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 

Último (11)

Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 

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