Haxcra 10
Haxcra 10
Haxcra 10
P
A
E n f r é n t a t e a l f u t u r o
S
O
XML
El estandar universal
P A S Oa
a
a
a
a a
a
a
a
a
a
a
aa
a
Visual Basic
Acceso a Datos
Organízate!!!
TRIO DE ASES:
APACHE + PHP +
MYSQL
PHPBB: MONTA
TU PROPIO FORO
Gestión de Usuarios
y el estándar Vi
Nº 10 -- P.V.P. 4,5 EUROS
00010
IP Spoofing en DCC
Obtención de Puertos
SOLO EXISTE UNA DEFENSA ANTE LOS ATAQUES EN INTERNET :
LEER ESTA PUBLICACÓN CADA MES... DEJA DE SER UNA VÍCTIMA !!!
8 414090 202756
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.
CONOCIMIENTO Para ser 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.
INTENTANDO MEJORAR
Estimados lectores, los colaboradores de Hack x
Crack estamos trabajando duro para ofreceros cada
mes nuestros conocimientos e intentamos no caer
en la tentación de convertirnos en una revista del
tipo aprieta este botón y conviértete en un hacker.
- Hack x Crack ha habilitado un servidor para que puedas A partir de ese momento, cualquiera que acceda a ese
realizar las prácticas de hacking. servidor, verá el default.htm modificado para vergüenza
del site hacheado. Esto es muy genérico pero os dará
- Actualmente tiene el BUG del Code / Decode y lo una idea de cómo funciona esto de hackear Webs ;)
dejaremos así por un tiempo (bastante tiempo ;) Nuestra
intención es ir habilitando servidores a medida que os - Cuando accedas a nuestro servidor mediante el CODE /
enseñemos distintos tipos de Hack, pero por el momento DECODE BUG, crea un directorio con tu nombre (el que
con un Servidor tendremos que ir tirando (la economía no mas te guste, no nos des tu DNI) en la unidad d: a ser
da para mas).
posible (que tiene mas espacio libre) y a partir de ahora
- En el Servidor corre un Windows 2000 Advanced Server utiliza ese directorio para hacer tus prácticas. Ya sabes,
con el IIS de Servidor Web y está en la IP 80.36.230.235. subirnos programitas y practicar con ellos :)
- El Servidor tiene tres unidades: Puedes crearte tu directorio donde quieras, no es necesario
* La unidad c: --> Con 2GB que sea en d:\mellamojuan. Tienes total libertad!!! Una
* La unidad d: --> Con 35GB y Raíz del Sistema idea es crearlo, por ejemplo, en
* La unidad e: --> CD-ROM d:\winnt\system32\default\mellamojuan (ya irás
aprendiendo que cuanto mas oculto mejor :)
Nota: Raíz del Servidor, significa que el Windows Advanced
Server está instalado en esa unidad (la unidad d:) y Es posiblemente la primera vez que tienes la oportunidad
concretamente en el directorio por defecto \winnt\ de investigar en un servidor como este sin cometer un
Por lo tanto, la raíz del sistema está en d:\winnt\ delito (nosotros te dejamos y por lo tanto nadie te
perseguirá). Aprovecha la oportunidad!!! e investiga mientras
- El IIS, Internet Information Server, es el Servidor de dure esta iniciativa (que esperamos dure largos años)
páginas Web y tiene su raíz en d:\inetpub (el directorio
por defecto) - En este momento tenemos mas de 600 carpetas de peña
que, como tu, está practicando. Así que haznos caso y
Nota: Para quien nunca ha tenido instalado el IIS, le será crea tu propia carpeta donde trabajar.
extraño tanto el nombre de esta carpeta (d:\inetpub) cómo
su contenido. Pero bueno, un día de estos os enseñaremos
a instalar vuestro propio Servidor Web y detallaremos su
funcionamiento.
Nota: Como curiosidad, te diremos que APACHE es otro MUY IMPORTANTE!!!!! Por favor, no borres archivos
Servidor de páginas Web (seguro que has oído hablar de
él). Si tuviésemos instalado el apache, cuando pusieses del Servidor si no sabes exactamente lo que estás haciendo ni
nuestra IP en TU navegador, accederías a un directorio borres las carpetas de los demás usuarios. Si haces eso, lo único
raíz del Apache (donde se hubiese instalado) e intentarías
leer una página llamada index.html que consigues es que tengamos que reparar el sistema servidor
y, mientras tanto, ni tu ni nadie puede disfrutar de él :(
Explicamos esto porque la mayoría, seguro que piensa en
un Servidor Web como en algo extraño que no saben ni Es una tontería intentar romper el Servidor, lo hemos puesto
donde está ni como se accede. Bueno, pues ya sabes para que disfrute todo el mundo sin correr riesgos, para que todo
dónde se encuentran la mayoría de IIS (en \Inetpub\) y
cuál es la página por defecto el mundo pueda crearse su carpeta y practicar nuestros ejercicios.
(\Inetpub\wwwroot\default.htm). Y ahora, piensa un poco
En el Servidor no hay ni Warez, ni Programas, ni claves, ni nada
¿Cuál es uno de los objetivos de un hacker que quiere
decirle al mundo que ha hackeado una Web? Pues está de nada que robar, es un servidor limpio para TI, por lo tanto
claro, el objetivo es cambiar (o sustituir) el archivo
default.html por uno propio donde diga hola, soy DIOS cuídalo un poquito y montaremos muchos más :)
y he hackeado esta Web (eso si es un lamer ;)
Editor VI: Mucho más que un Editor y un estándar en todas las distribuciones
LINUX.
Los puntos que hoy abarcaremos, y sin perder Como hemos dicho, cada persona debe poseer
nunca de vista lo visto anteriormente serán: su nombre y clave para acceder a nuestro
Crear y administrar usuarios y el editor vi . sistema. Este nombre, a partir de ahora login,
Tras esto, en el próximo artículo trataremos la debe de ser único. Es decir, distintos usuarios
programación en bash-shell y en C bajo no pueden tener el mismo login.
GNU/LiNUX. Ambos temas formaban parte de
este artículo, pero la extensión ocupaba cerca Toda la información relativa a las cuentas de
de las 35 páginas en A4. usuario reside en el archivo /etc/passwd. Este
archivo debe de tener permiso de escritura
1. Administración de usuarios para root y de lectura para el resto:
La tarea más básica de administración que -rw-r--r-- 1 root root 2,0K 2003-04-29 02:03
debemos de realizar en un entorno multiusuario /etc/passwd
es siempre la administración de los posibles
usuarios de dicho sistema. Entenderemos por Si miramos el contenido de este archivo veremos
administración de usuarios a la capacidad de algo como:
crear, modificar y eliminar cuentas de usuario.
root@el_chaman:~# cat /etc/passwd
Una cuenta de usuario será un conjunto de root:x:0:0:root:/root:/bin/bash
informaciones (nombre o login del usuario y daemon:x:1:1:daemon:/usr/sbin:/bin/sh
problema, almacenan las claves encriptadas Ni que decir tiene que nosotros optaremos por
en otro archivo, /etc/shadow, el cual sólo es hacerlo a mano en este artículo por una simple
accesible para el administrador y el grupo razón: Queremos saber qué pasa en nuestro
shadow. Se indica la existencia de un archivo sistema cuando se añade un usuario.
/etc/shadow si en /etc/passwd encontramos una
x en el campo password. Los pasos generales que seguiremos para crear
un archivo serán:
Ojo: Insisto una vez más porque es muy
importante; sólo se puede cambiar la clave 1 - Añadir la información adecuada a nuestro
mediante el comando passwd: No intentéis archivo /etc/passwd.
editar el archivo /etc/passwd o /etc/shadow "a
mano". 2 - Crear un directorio home para el usuario y
asignarle como propietario el nuevo usuario.
1.2. Creando un usuario
3 - Copiar los archivos de configuración
Antes de nada, como vamos a trastear con necesarios a dicho directorio y asignarlos los
cosas un poco peligrosas, conviene cubrirnos permisos/propietarios adecuados.
las espaldas y generar unas copias de seguridad:
Añadiendo información
root@el_chaman:~# mkdir bck
root@el_chaman:~# cp /etc/passwd* bck Veamos un ejemplo. Vamos a añadir el usuario
root@el_chaman:~# cp /etc/shadow* bck hxc. A este usuario le daremos como clave
root@el_chaman:~# cp /etc/group* bck 123hXc321 y le asignaremos como directorio
root@el_chaman:~# ls bck home /home/hxc
total 36K
4,0K group 4,0K group.org 4,0K passwd- 4,0K Siguiendo el guión mostrado, la primera tarea
shadow 4,0K shadow.org a realizar será la de añadir como root una
4,0K group- 4,0K passwd 4,0K passwd.org entrada a /etc/passwd. Esto lo podremos hacer
4,0K shadow- con un editor como el vi que veremos más
root@el_chaman:~# adelante en este mismo artículo. Nosotros
añadiremos:
Si algo fuera realmente mal, bastaría con
teclear: hxc::1024:100::/home/hxc:/bin/bash
Retype new UNIX password: los dejamos ocultos (empiezan por un punto)
passwd: password updated successfully y cambiamos su propietario a hxc.
Pero si queremos utilizar shadow-passwords Como es obvio que esto resulta tedioso,
será: normalmente lo que se hace es crear un
directorio /etc/skel donde depositamos todos
root@el_chaman:~# shadowconfig on los archivos de configuración o iniciales de los
Shadow passwords are now on. que dispongan los nuevos usuarios.
root@el_chaman:~# passwd hxc Posteriormente se copian estos archivos al
Enter new UNIX password: directorio home, se actualizan los permisos y
Retype new UNIX password: listo.
passwd: password updated successfully
Borrando un usuario
Recomiendo examinar las entradas de
/etc/passwd y de /etc/shadow en cada caso para Borrar un usuario consistirá en desandar el
ver los cambios efectuados camino recorrido para crearlo: Básicamente
tendremos que eliminar su directorio home y
Creando el directorio home borrar las entradas necesarias en /etc/passwd y
/etc/shadow si corresponde.
Ahora, creamos el directorio home para el
usuario hxc: Insisto en que todas las tareas vistas
actualmente las realizan diversos scripts y
root@el_chaman:~# mkdir /home/hxc programas que nos facilitan mucho la vida. A
veces estos programas varían de una distribución
Una vez hecho esto, cambiamos el propietario a otra, pero ABSOLUTAMENTE TODOS ELLOS
de dicho directorio: realizan las tareas que hemos descrito.
Copiando archivos de configuración necesarios Los grupos funcionan de manera análoga a los
usuarios. Cada usuario debe de pertenecer a
Estos archivos normalmente suelen ser un grupo y un grupo puede gestionar los
/etc/bashrc, /etc/profile y todo aquello que permisos de varios usuarios simultaneamente
queramos meter. Un ejemplo clásico será: (recordad en el artículo anterior cómo
asignábamos permisos al propietario, al grupo
root@el_chaman:~# cp /etc/bashrc y al resto de los usuarios). Resultan una manera
/home/hxc/.bashrc muy cómoda de manejar sistemas en los que
root@el_chaman:~# cp /usr/share/vim/vimrc existen muchos usuarios que realizan tareas
/home/hxc/.vimrc muy diferentes.
root@el_chaman:~# chown hxc.users
/home/hxc/.bashrc La información relativa a los grupos se encuentra
root@el_chaman:~# chown hxc.users en /etc/group y suele tener el siguiente aspecto:
/home/hxc/.vimrc ......
proxy:x:13:
y editaríamos dichos archivos más tarde a kmem:x:15:
nuestro gusto. Obsérvese que ambos archivos dialout:x:20:
Dicho esto alguno estará pensando "yo tengo Una vez abierto el vi estaremos en modo
el vim, ¿es lo mismo que el vi?". Sí y no. Vim comando. Para alternar entre modo comando
(Vi improbed, vi mejorado) es una versión y modo edición se utilizará la tecla escape.
mejorada del vi que proporciona muchas Vamos a crear un archivo llamado saludo.txt.
mejoras al primitivo vi y es compatible con él. Inicialmente invocaremos al editor de la
Todo lo que aquí se diga es válido para el vim, siguiente manera:
pero tened en cuenta que lo que vais a
encontrar en todos los sistemas UNiX es el vi. luis@el_chaman:~$ vi saludo.txt
El vi (Visual Interface) es una mejora más que Se nos mostrará entonces la siguiente pantalla
se hizo sobre los primitivos editores de líneas
(como el ex o ed) presentes en UNiX,
y que dotaron de capacidades visuales a
estos primitivos editores de manera que
pudieran aprovechar las potentes capacidades
de los entonces modernos terminales
tty.
En el modo comando podremos movernos por "saludo.txt" [Fichero nuevo] 0,0-1 Todo
el texto, invocar comandos del vi, invocar a ed
o ex, etc... La parte izquierda es de significado obvio;
los números 0-0 indican la línea y columna
En el modo edición simplemente nos limitaremos donde está situado el cursor, y el Todo
a introducir texto como si de un editor normal nos dice que está mostrando todo el
se tratase. documento en la pantalla. Si el documento
fuese más grande, en vez de poner Todo
En el modo ex o ed pasamos a manejar los pondría el porcentaje correspondiente al
antiguos editores de línea. texto mostrado en pantalla con respecto al
total.
Normalmente una sesión de vi comienza
invocando el propio programa seguido de uno En este momento estamos en modo
o más ficheros. Las siguientes invocaciones de comando y el vi está preparado para que
vi son válidas: le demos una orden. La orden que vamos
a dar es la de insertar texto así que
luis@el_chaman:~$ vi pulsamos la letra 'i' (i minúscula). Entonces
luis@el_chaman:~$ vi hola.txt obtendremos los que muestra la siguiente
luis@el_chaman:~$ vi hola.txt adios.txt imagen.
luis@el_chaman:~$
SUSCRIBETE A
PC PASO A PASO
45 EUROS (10% DE DESCUENTO)
SUSCRIPCIÓN POR: +
1 AÑO = SORTEO DE UNA CONSOLA XBOX
+
11 NUMEROS SORTEO 2 JUEGOS PC (A ELEGIR)
C o n t r a R e e m b o l s o Giro Post al
Solo tienes que enviarnos un mail a preferente@hackxcrack.com Envíanos un GIRO POSTAL por valor de 45 EUROS a:
indicando: CALLE HIGINIO ANGLES Nº2, 4º-1ª
- Nombre CP 43001 TARRAGONA
- Apellidos ESPAÑA
- Dirección Completa IMPORTANTE: En el TEXTO DEL GIRO escribe un mail de contacto
- Población o un número de Teléfono.
- Provincia
- Cógigo Postal Y enviarnos un mail a preferente@hackxcrack.com indicando:
- Mail de Contacto y/o Teléfono Contacto - Nombre
Es imprescindible que nos facilites un mail o teléfono de contacto, - Apellidos
puesto que 24 horas después de que recibamos tu petición de - Dirección Completa
subscripción te daremos un número de Cliente Preferente. Este - Población
número será utilizado para los sorteos. - Provincia
- Tipo de Subscripción: CONTRAREEMBOLSO - Cógigo Postal
- Número de Revista: - Mail de Contacto y/o Teléfono Contacto
Este será el número a partir del cual quieres subscribirte. Si deseas Es imprescindible que nos facilites un mail o teléfono de contacto,
(por ejemplo) subscribirte a partir del número 5 (incluido), debes poner puesto que 24 horas después de que recibamos tu petición de
un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos) subscripción te daremos un número de Cliente Preferente. Este
número será utilizado para los sorteos.
APRECIACIONES: - Tipo de Subscripción: GIRO POSTAL
* Junto con el primer número recibirás el abono de 45 euros, precio - Número de Revista:
de la subscripción por 11 números (un año) y una carta donde se te Este será el número a partir del cual quieres subscribirte. Si deseas
indicará tu número de Cliente Preferente y justificante/factura de la (por ejemplo) subscribirte a partir del número 5 (incluido), debes poner
subscripción. un 5 y te enviaremos desde el 5 hasta el 15 (ambos incluidos)
* Puedes hacernos llegar estos datos POR MAIL,tal como te hemos
indicado; rellenando el formulario de nuestra WEB APRECIACIONES:
(www.hackxcrack.com) o enviándonos una carta a la siguiente dirección: * Junto con el primer número recibirás una carta donde se te indicará
CALLE HIGINIO ANGLES Nº2, 4º-1ª tu número de Cliente Preferente y justificante/factura de la subscripción.
CP 43001 TARRAGONA * Puedes hacernos llegar estos datos POR MAIL,tal como te hemos
ESPAÑA indicado; rellenando el formulario de nuestra WEB
* Cualquier consulta referente a las subscripciones puedes enviarla (www.hackxcrack.com) o enviándonos una carta a la siguiente dirección:
por mail a preferente@hackxcrack.com CALLE HIGINIO ANGLES Nº2, 4º-1ª
CP 43001 TARRAGONA
ESPAÑA
* Cualquier consulta referente a las subscripciones puedes enviarla
por mail a preferente@hackxcrack.com
raw 4: dcc
direct client to client
protocol
Como prometí en el número anterior, aquí está Todas estas técnicas para abusar del
el artículo sobre DCC, para completar todo lo DCCfueron ideadas por mí, aunque seguro que
referente a los protocolos relacionados con a más de un lector, en cuanto lea la primera
IRC. parte en la que explico el funcionamiento básico
del protocolo, se le ocurrirán las mismas ideas,
Este artículo va a ser bastante diferente a los ya que son bastante simples (aunque no por
anteriores. Para empezar, no se basa en ningún ello menos efectivas). Por tanto, todo lo aquí
RFC ya que, tal y como podemos comprobar contado es el fruto de mis experimentos
buscando la palabra DCC en http://www.rfc- personales, así que puedo garantizar que todo
editor.org/rfcsearch.html , no existe ningún lo explicado funciona y, además, que ningún
RFC que especifique el funcionamiento de este animal fue dañado para realizar los experimentos
protocolo. El funcionamiento del protocolo DCC en el laboratorio. ;-)
es muy simple, por lo que para detallarlo sólo
emplearé la primera mitad del artículo. Es en 1.- FUNCIONAMIENTO DEL DCC
la segunda mitad del artículo donde se
encuentra la principal diferencia con otros 1.1. Funcionamiento básico del DCC a
artículos de la serie, puesto que esta parte grandes rasgos
estará enteramente dedicada a técnicas para
explotar este protocolo. Para los que aún no sepan de qué demonios
trata este artículo, os explicaré rápidamente
Por tanto, en esta ocasión no me limitaré tan en qué consiste el DCC.
sólo a detallar el funcionamiento de un Los usuarios de IRC (Internet Relay Chat) no
protocolo, si no también a detallar sus sólo tienen la posibilidad de conversar con otros
usuarios de la misma red, si no que además establecer ningún tipo de conexión entre 2
pueden hacer muchas otras cosas, como enviar usuarios sin la intervención del servidor, que
archivos, montar servidores de archivos, chat es el único que conoce las IPs de todos los
por voz, utilizar una pizarra común para escribir usuarios. Como segundo ejemplo, aún
o dibujar, o incluso videoconferencia. suponiendo que las IPs fuesen públicas,
Todas estas virguerías se consiguen mediante imaginaos lo que sería si para decir una simple
un protocolo encapsulado en el propio protocolo frase en un canal con 100 usuarios vuestra
de IRC, que es el DCC. modesta conexión casera (56K, 256K, o poco
más) tuviese que establecer una conexión con
En realidad, la mayoría de estas virguerías son cada uno de los 100 usuarios para enviarles la
sólo implementadas por unas pocas aplicaciones frasecita de marras.
de IRC, y están muy poco extendidas.
Volviendo al DCC, éste protocolo es el que
Como sabrá cualquier asiduo al IRC, las dos
permite realizar cualquier tarea que requiera
utilidades típicas del DCC son: DCC Chat y DCC
una conexión punto a punto entre 2 usuarios.
Send.
Las dos utilidades más sencillas que se nos
pueden ocurrir en las que se necesite una
Ambos tienen en común una característica, y
conexión punto a punto son:
es que funcionan mediante una conexión punto
a punto entre los dos usuarios, y no a través
1- Enviar archivos: menuda locura sería
del servidor de IRC. Por eso precisamente el
si tuviésemos que enviar un archivo de 700MB
protocolo se llama Direct Client to Client. ;-)
a través del servidor de IRC mientras otros
3000 usuarios están enviando simultáneamente
Os recuerdo que en IRC todo circula a través sus ISOs.
del servidor. Por ejemplo, cuando escribimos
un mensaje privado a un usuario, en realidad Chat privado: las queries, o chats privados
estamos enviando este mensaje primero al entre dos usuarios de IRC, funcionan también
servidor de IRC, para que luego el servidor lo a través del servidor de IRC (así que eso de
envíe a su vez al usuario correspondiente. privado...), pero hay varios motivos para que
no queramos que nuestra conversación pase
Pensad en el problema que sería si esto no por un punto intermedio. Los motivos principales
fuese así. Para empezar, en algunas redes son dos: en primer lugar, la privacidad, y en
(como en el IRC-Hispano) las IPs de los usuarios segundo lugar, el no depender de las limitaciones
no son visibles, por lo que sería imposible técnicas del servidor intermedio.
Cuando hablo de
limitaciones
técnicas del
s e r v i d o r
intermedio me
refiero, ante
todo, a dos
problemas bien
conocidos por
todos los
usuarios de IRC,
que son: el lag,
y los splits. En un DCC Chat, es decir, un chat así que si queremos establecer una conexión
privado entre 2 usuarios mediante una conexión punto a punto tendremos primero que
punto a punto, y no a través del servidor de preguntarle la IP del otro usuario al servidor.
IRC, el lag que haya depende tan sólo de la Para los que os hayáis frotado las manos
conexión de los dos usuarios, y no de la del pensando que esto se podría aprovechar para
servidor de IRC. Además, si ocurre un split en sacar IPs haciendo falsas consultas al servidor,
la red de IRC, o incluso si uno de los usuarios o para los que os hayáis llevado las manos a
se cae, el DCC Chat sigue funcionando sin la cabeza ante la inexactitud de lo que acabo
enterarse. de decir, ¡dejad todos las manos quietas! Lo
he explicado así para que pilléis rápidamente
el concepto, pero lo que ocurre en realidad no
! es que un usuario consulte la IP de otro usuario,
si no justo todo lo contrario. Lo que hace el
Lag y Splits
usuario es decirle al servidor: dile mi IP a este
usuario. Así nos aseguramos de que mediante
Split es cuando uno (o varios) servidores que forman parte DCC sólo se podrán conseguir las IPs de los
de la RED IRC se "desconectan" temporalmente del resto usuarios que voluntariamente quieran.
de servidores que forman esa RED. Para no ocupar 2 Pero aún sigo sin contar toda la verdad, ya que
páginas explicando los detalles, mejor te miras este enlace en realidad todo esto es mucho más divertido.
http://www.ayuda-irc.net/splits.shtml, está perfectamente Lo que decimos al servidor no es exactamente
expuesto con imágenes y todo :) dile mi IP a este usuario, si no mi IP es ésta,
anda, ve y díselo a este usuario. Por tanto, la
Lag es cuando por el motivo que sea se produce un retraso IP que llega hasta un usuario con el que quieres
desde que escribes un mensaje hasta que el resto de usuarios establecer una conexión DCC, no es la IP que
lo reciben y viceversa (desde que otro usuario escribe un conoce el servidor, si no la que tú le digas...
mensaje hasta que tu lo recibes). Las causas pueden ser sea cual sea...
muchas, desde que tu conexión deja de responder
temporalmente hasta que el servidor de IRC al que estás Una vez realizadas las gestiones previas (que
conectado está saturado. consisten, resumiendo, en decirle al otro usuario
nuestra IP y un puerto para que pueda
conectarse), ya se podrá establecer una
1.2. Establecimiento de la conexión
conexión TCP/IP de toda la vida que, por
El establecimiento de la conexión en DCC es supuesto, se puede realizar mediante Telnet.
diferente a la del resto de protocolos que hemos
visto hasta ahora en la serie RAW. Y es que no Como ya dijimos, existen básicamente 2 tipos
basta con hacer un telnet a un puerto de mensajes DCC (todos los demás los vamos
determinado en el que hay escuchando un a ignorar, por no estar tan extendidos):
servidor, si no que tenemos que realizar unas
gestiones previas para que ese puerto se - DCC Send
abra en la máquina a la que nos queremos - DCC Chat
conectar.
El DCC Send es una petición que dice al
Esto se debe a que el establecimiento de servidor IRC: quiero enviar éste fichero a éste
conexión se realiza a través del servidor de usuario.
IRC. Recordemos que un usuario de IRC no
tiene por qué conocer la IP de otro usuario, El DCC Chat es una petición que dice al servidor
IRC: quiero establecer un chat privado con servidor de IRC la consabida petición: quiero
éste usuario. enviar éste fichero a éste usuario. Para ello,
dile que se conecte a éste puerto en ésta IP.
En ambos casos, hay que añadir la siguiente (Por supuesto, más adelante veremos el formato
coletilla: para ello, dile que se conecte a éste real de esta petición XD).
puerto en ésta IP. Es decir, el que lanza la
petición de DCC es siempre el que actúa como
servidor para la conexión TCP/IP que se
establecerá, bien en el envío del archivo, o
bien en el chat privado.
Para explicar mejor todo el proceso de conexión, 1.2.3. El usuario Scherzo acepta la
voy a poner un ejemplo, en el cual el usuario petición
PyC quiere enviar un archivo al usuario Scherzo.
En este momento, Scherzo debe decidir si quiere
1.2.1. PyC lanza la petición al servidor recibir ese archivo de PyC. Para ello, en su
de IRC aplicación cliente de IRC le aparecerá una
ventana preguntándole si desea aceptar el DCC.
Tanto PyC como Scherzo están conectados al
mismo servidor de IRC (condición Si no acepta, aquí se acabó la historia. Pero
imprescindible), por lo que PyC le lanza al vamos a suponer que si que acepta.
1.2.4. Scherzo establece la conexión RAW que forman parte del protocolo IRC,
TCP/IP con PyC sobre el cual trataba mi anterior artículo.
Una vez aceptada la petición, la aplicación Si recordamos algo sobre ese artículo, sabremos
cliente de IRC de Scherzo establecerá una ya que los comandos que utilizamos en nuestro
conexión TCP/IP de las de toda la vida con la cliente de IRC no son directamente
IP y puerto que se especificó en la petición. comprensibles por el servidor, ya que nuestro
Si nuestro cliente de IRC es nuestro amado cliente hace un parseo y lo convierte al formato
Telnet, podemos lanzar manualmente la propio del servidor, que es el que llamamos
conexión abriendo otro Telnet (aparte del que formato RAW.
usamos para conectar al servidor de IRC),
mediante: Como rápido recordatorio, si queréis hacer
pruebas con los comandos RAW, podéis utilizar
telnet ip puerto el comando QUOTE de vuestro cliente de IRC.
Todo lo que pongáis después de un /quote
Donde ip es la ip que se nos especificó en la será enviado en RAW al servidor.
petición DCC, y puerto es el que se nos
especificó en la petición DCC. El comando RAW más versátil es el PRIVMSG,
así que podéis probar, por ejemplo, lo siguiente:
1.2.5. PyC envía el archivo a Scherzo a
través de la conexión establecida /quote privmsg PyC: hola, PyC! Como
molan tus articulos!!! ;)
Pues eso, inmediatamente después de
establecer la conexión, empezará a transmitirse Si no utilizáis un cliente de IRC, si no un Telnet
el archivo a través de esa conexión establecida. a pelo, os recuerdo que lo mismo se haría
escribiendo:
En el caso de
que, en lugar de PRIVMSG PyC: hola, PyC! Como molan
DCC Send, tus articulos!!! ;)
hubiese sido
DCC Chat, El comando PRIVMSG no se usa sólo para
llegados a este hacer privados a otros usuarios, si no también
punto, en lugar para la conversación rutinaria en los canales.
de transmitirse Por ejemplo con:
el archivo,
comenzaría una /quote privmsg #hackxcrack: buenas :D
comunicación
interactiva, donde cada usuario recibiría lo que Estaréis enviando un saludo al canal
el otro escribiese a través de esa conexión #hackxcrack. Por supuesto, para que este
establecida. texto aparezca, tendréis que estar en el canal,
o bien el canal tendrá que tener modo n.
1.3. Comandos RAW Para DCC
Recordemos también que el CTCP (Client To
No hemos visto aún cómo son en realidad esas Client Protocol) funciona encapsulado en el
peticiones que el usuario lanza al servidor. comando PRIVMSG. Un ejemplo básico de
Estas peticiones son, por supuesto, comandos CTCP es el siguiente:
Pues ahora vamos a rizar el rizo un poco más. La base que utilizamos nosotros a diario es la
Si bien el CTCP no es más que un tipo de base 10; por eso, cada cifra de un número
mensaje PRIVMSG, resulta que el DCC es a esta comprendida entre 0 y 9. Por ejemplo, si
su vez un tipo de mensaje CTCP. Por lo que queremos representar el número 256 en base
al final, resulta que el DCC también funciona 10, separando las cifras por puntos, sería ésta
mediante el famoso PRIVMSG. Bonito su representación: 2.5.6.
trabalenguas. :-)
Si queremos representar el mismo número en
Si consideramos que el protocolo CTCP base 256, tenemos que tener en cuenta que
comprende todos los comandos que se pueden cada cifra podrá valer ahora entre 0 y 255, y
ejecutar en un servidor de IRC que implican no sólo entre 0 y 9, así que ésta sería la
una comunicación entre 2 usuarios, podemos representación del número 256 en base 256,
definir dentro de estos comandos un separando las cifras por puntos: 1.0.
subconjunto, que es el formado por aquellos Curioso, ¿eh? El número 10 se representa como
comandos que realizan una comunicación 1.0 en base 10, y el número 256 se representa
directa entre 2 usuarios estableciendo una como 1.0 en base 256. Esto ocurre con todas
conexión específica entre ambos. Este las bases. Si conocemos la base 2, también
subconjunto es lo que llamamos DCC (Direct conocida como binario, sabremos que el
Client to Client). número 2 se representa como 1.0 (supongo
que conoceréis el clásico chiste que dice: existen
Veamos ya un ejemplo de comando RAW para 10 clases de personas, las que saben binario,
DCC, y luego lo explicaremos en detalle: y las que no). Si conocemos también la base
hexadecimal, o base 16, sabremos que el 16
/quote privmsg PyC:DCC CHAT chat se representa como 1.0. Y así con todas las
3645183495 4510 bases. :-)
¿Y esos numerajos? ¿No habíamos quedado Siguiendo con este curso intensivo de aritmética
en que lo que se enviaba en una petición era m o d u l a r, v e a m o s c o m o e j e m p l o l a
la IP y el puerto? Yo no veo la IP por ninguna representación del número 256 en binario:
parte... 100000000, y en hexadecimal: 100.
Pues, aunque no la veas, ahí está, pero
codificada. Y, por supuesto, yo os enseño Para que podáis convertir cualquier número a
ahora mismo cómo decodificarla. :-) cualquier base, os explico brevemente el
yonki.jpg, y un numerajo más que en el DCC con Ac1dBrn, si no con PyC, que ha capturado
Chat. Los dos primeros numerajos son la IP la conexión. ;)
y el puerto, exactamente igual que en DCC
Chat. El tercer numerajo es simplemente el Ahora que ya os he puesto un poco en situación,
tamaño del archivo en Bytes. y os he abierto el apetito, vamos a ponernos
en el pellejo de PyC.
Como ejercicio os propongo que decodifiquéis
esta IP. ;-) Para conseguir capturar esa conexión, PyC ha
necesitado antes de nada recopilar una serie
Pues bien... seguro que con todo esto que os de datos acerca de Zer0Cul (el que ha lanzado
he contado ya habrá aparecido en vuestras la petición de DCC). La mejor forma de conseguir
mentes pervertidas alguna idea maliciosa para estos datos es mediante ingeniería social
sacar provecho del DCC pero, por si acaso, (ingsoc), una de las armas más poderosas.
os voy a ahorrar el trabajo contando mis ideas ¿Pero qué datos se necesitan? Pues los dos
maliciosas. ]:-) datos que circulan en una petición de DCC
Chat, es decir: la IP de Zer0Cul, y el puerto
2. INSEGURIDAD EN DCC que abre Zer0Cul para la petición de DCC Chat.
Para poder llevar a cabo algunos de los No puedo hacer aquí un tutorial completo de
experimentos que voy a contar a continuación, obtención de IPs, así que me limitaré a explicar
es necesaria una investigación previa para lo más básico.
conseguir ciertos datos del usuario que
usaremos (bonita redundancia), bajo su En primer lugar, si la red de IRC en la que
consentimiento, espero, para realizar los estamos no encripta las IPs, como en el caso
experimentos. de EfNet, nos bastará con escribir en nuestro
cliente de correo:
Para comprenderlo vamos a ver un escenario
de ejemplo, en el cual hay 3 personajes: /dns Zer0Cul
pero esto, aparte de que cantaría en cualquier decir algo así como: Oye, Ac1dBrn, te voy a
IDS, nos consumiría muchos recursos. Por enviar un DCC Chat, así que acéptalo entonces
tanto, es mejor que estemos pendientes de un no hace falta muestrear el idle ni más leches.
parámetro que nos indica la actividad de nuestro XD
querido Zer0Cul, que es su IDLE. :-)
Es fácil programar un script que haga un En cualquier
muestreo del IDLE de un usuario y te avise caso, lo
cada vez que éste se pone a 0, pero también importante es
podéis hacer el muestreo a mano. Y es que, que sepáis que
a diferencia de las capturas en FTP, que el cliente de IRC
requieren una gran velocidad, las capturas de de Zer0Cul no
DCC tienen la gran ventaja del amplio margen realiza ningún
de tiempo disponible. tipo de
comprobación
La razón de esto es que, a no ser que Ac1dBrn sobre la IP del
tenga autoaccept, habrá un margen de tiempo que se conecta
entre que reciba la petición de Zer0Cul hasta al DCC Chat por
que la acepte. Este margen de tiempo muchas lo que, si sois
veces es de varios segundos, ya que es un más rápidos
factor humano, así que contamos con todo ese estableciendo la conexión que Ac1dBrn pulsando
tiempo para colarnos nosotros antes que el botoncito de ACCEPT, entonces seréis
Ac1dBrn. :-) vosotros los que ocupéis el puerto que tenía
abierto Zer0Cul en espera de la conexión de
Os recuerdo que para ver el IDLE de un Ac1dBrn.
usuario, si no estáis en el mismo servidor que
ese usuario, basta con que hagáis: Lo más interesante es que, tal y como vimos,
en la conexión de DCC Chat se envía el texto
/whois Zer0Cul Zer0Cul a pelo, sin ninguna información sobre los nicks
o las IPs. Por tanto, cuando en vuestro cliente
Es decir, un whois con su nick repetido. Si
de IRC aparece el nick del interlocutor en la
estáis en el mismo servidor, bastará con poner
ventana de DCC Chat, es porque el propio
el nick una vez:
cliente pone el nick del interlocutor, asumiendo
que éste será siempre el de aquel al que se
/whois Zer0Cul
lanzó la petición de DCC Chat. ]:-)
Cada vez que Zer0Cul escriba algo en cualquier
canal, o en cualquier privado, su idle se pondrá
a 0. Pero también ocurrirá esto cuando lance
una petición de DCC. Por tanto, podemos
muestrear los puertos de DCC cada vez que
se ponga a 0 su idle. Por supuesto, todo esto
se puede automatizar mediante software, así
que os propongo como ejercicio (para los que
queráis sacar un 10) que hagáis una aplicación
que automatice todo esto.
Si hacéis la captura mediante un cliente de No hay que ser muy listo para darse cuenta de
Telnet, recordad activar el LOG para luego que spoofear la IP en una petición de DCC es
poder ver el fichero. Bastará con que renombréis absolutamente trivial. Si vuestro problema es
el archivo .log a la extensión adecuada. que no sabéis lo que es el IP spoofing, os
No podéis conocer la extensión original del aclaro en un segundo que consiste simplemente
archivo, ni su nombre, ya que la petición (en en enviar, con algún fin, paquetes con una IP
la cual iba incluido el nombre del archivo con falsa, es decir, que no es vuestra IP real.
su extensión) no os llegó a vosotros, si no al El IP spoofing clásico consiste en modificar el
receptor legítimo. Por tanto, tendréis que campo de IP de origen en la cabecera de los
analizar el archivo para deducir su extensión. datagramas IP, lo cual tiene muchos
inconvenientes que no viene al caso comentar.
Pero en este caso la modificación no se hace
Evidentemente, no me voy a poner aquí a a nivel de red, si no dentro del propio protocolo
hablar sobre las cabeceras de los distintos DCC.
formatos de archivos, ya que se saldría bastante Veamos algunas ventajas que se pueden sacar
del tema, y esta revista sería más gorda que del hecho de poner una IP que no es la nuestra
una biblia. :-) en una petición de DCC.
El FXP es el mecanismo utilizado por los couriers Se sale del tema del artículo explicar el
de los grupos de warez para distribuir las funcionamiento de un Fserver, así que espero
releases a través de los distintos servidores, que ya conozcáis el clásico mecanismo de:
sin necesidad de que ellos tengan conexiones trigger -> búsqueda del archivo mediante dir
de alta velocidad en su casita. y cd -> get.
paso 2: nos llega el DCC send del Fserver que sabes hacer, pero a mi personalmente me
encanta. :-)
Cuando llega nuestro turno en la cola (queue)
del Fserver, nos llegará su petición de DCC Supongamos que hay 2 listillos que quieren
Send. NO la aceptaremos. En lugar de eso, conseguir nuestra IP, intentando establecer un
copiaremos la petición tal cual nos llega (os DCC con nosotros. Para no variar, se llamarán
recuerdo que para ver la petición completa no Zer0Cul y Ac1dBrn. Ambos estarán deseando
nos sirve mIRC, tal y como expliqué en el que les lancemos una petición de DCC, o bien
apartado 2.1). que aceptemos una petición suya.
La petición podría ser algo así:
En el momento en que, por ejemplo, Zer0Cul
:WrzServ!Wrz@82-15-31- nos tantee lanzándonos una petición de DCC
37.uc.nombres.ttd.es PRIVMSG PyC :DCC chat estará la cosa hecha. Recibiremos algo
SEND edlin.iso 1376722725 4510 como esto:
681574400
:Zer0Cul!H4x0r@82-15-31-
paso 3: enviamos el DCC send a nuestra 37.uc.nombres.ttd.es PRIVMSG PyC :DCC
máquina remota CHAT chat 1376722725 4510
Esa petición que hemos copiado la reenviamos Así que de inmediato modificamos
a FastDld, con sólo cambiar el nick de destino: ligeramente esa petición, para lanzar
esto:
/quote privmsg FastDld :DCC SEND
edlin.iso 1376722725 4510 681574400 /quote privmsg Ac1dBrn :DCC CHAT chat
1376722725 4510
paso 4: el autoaccept de FastDld chupa
el archivo :) Es decir, mandamos exactamente la misma
petición a Ac1dBrn.
Para que nuestra máquina remota pueda chupar
los archivos que le FXPeamos tiene que tener Desde el punto de vista de Ac1dBrn, TU serás
autoaccept para ese tipo de archivos. el que le estará lanzando la petición de DCC
Chat, cuando en realidad esa era la petición
Mira que somos rebuscados, eh?... ¿pero y lo que te lanzó a ti
friki que resulta chupar archivos de esta forma Zer0Cul. En el
tan complicada? :-) momento en que
Ac1dBrn la acepte,
Una segunda utilidad que se me ocurre para desde el punto de vista
el FXP en DCC es el engañar simultáneamente de Zer0Cul TU serás el
a 2 listillos-busca-IPs, pero me parece a mí que que lo habrá aceptado.
eso mejor os lo cuento con DCC Chat, que es A partir de ese
aún más divertido... ;-) momento comenzarán
un diálogo de besugos,
2.4.3. P u e n t e a n d o un DCC Chat creyendo cada uno de
ellos que el otro
Este truquillo no tiene mucha utilidad, excepto interlocutor eres tú. 0:)
el poder reírte un rato o fardar de las chorradas
Aquí os copio un par de capturas de pantalla a nadie a ejecutar un programa con un botón
de un DCC chat puenteado entre 2 colaboradores muy grande que ponga DESTRUIR MAQUINA
voluntarios, para que veáis que desde el punto REMOTA, si no el hurgar en las tripas de los
de vista de ambos es con PyC con quien creen protocolos hasta que nuestra ansia de
estar hablando. conocimiento se sacie al conocer hasta los más
rebuscados trucos.
Aquí os explicaré como hacer un escaneo de
puertos anónimo, utilizando un Fserver como
bouncer. Los resultados son bastante pésimos,
os lo advierto. xD
que intentéis conseguir esto mismo con otros mensaje de bienvenida de 89 bytes.
scripts, para lo cual tendréis que hacer una En el caso de que no haya mensaje de
labor de investigación para analizar las bienvenida, nos responderá con ( 0 bytes ).
respuestas que os pueda dar el script, tanto La respuesta suele tardar bastante en llegar,
ante un puerto abierto, como ante un puerto os aviso.
cerrado. Suponemos en el ejemplo que WrzServ
utiliza Ircap 6.999, para que veáis las respuestas 3: respuesta del script ante un puerto
que da este script ante un escaneo. cerrado
1: envío de la petición spoofeada En este caso, la respuesta puede ser algo como
esto:
Tenemos que construir una petición de DCC
Send (ya que DCC Chat es improbable que -WrzServ- Recibido caca.pis ( bytes ). Tus
sea autoaceptado) en la que la IP sea la de la créditos en mi Fserve son
máquina que queremos escanear (82.15.31.37), de 300000 ( + 0 )
y el puerto pues... el que queremos escanear.
:-) Como vemos, en este caso no ha recibido nada,
ya que no ha podido conectar con el puerto.
Vamos a ver si en esa IP hay un servidor de La diferencia con el caso de que el puerto esté
SMTP corriendo (puerto 25), así que construimos abierto pero sin mensaje de bienvenida, es que
el siguiente paquete: en ese caso nos pondría ( 0 bytes ), en lugar
de poner simplemente ( bytes ).
/quote privmsg WrzServ :DCC SEND
uber.lco 1376722725 25 6922 Por supuesto, la máquina que está siendo
escaneada no conocerá en ningún momento
Por supuesto, el primer número es la codificación vuestra IP, ya que será WrzServ el que se esté
de la IP que queremos escanear, el segundo conectando a sus puertos.
es el puerto (25 = SMTP), y el tercero un
tamaño de archivo que nos inventamos, al igual 2.5. Desvariando de todas las formas
que el nombre del archivo. posibles
Otra idea estúpida consiste en lanzar una Por ejemplo, servidores de FTP, POP3, SMTP,
petición de DCC Chat donde la ip esté spoofeada WEB, etc, etc. Podéis escribir comandos y recibir
para que sea la de alguna máquina que tenga las respuestas como si se tratase de Telnet. Y
un servidor de echo (puerto 7) corriendo. luego dicen de emacs, pero se puede hacer
Algunos cablemodems, por ejemplo, tienen todo sin salir de tu cliente de IRC, así que, como
servicio de eco. Cuando acepten el DCC Chat, sigamos así, mIRC terminará siendo el sistema
todo lo que escriban en la sesión de chat les operativo del futuro. xD
será devuelto como si estuviesen hablando con
un loro. Autor: PyC (LCo)
Ilustraciones: MariAn (LCo)
Otra cosa que podéis hacer es conectaros a Agradecimientos: Scherzo (LCo), uhm, CabRa,
cualquier tipo de servidor utilizando DCC Chat. CHICOPOP, shoot_me, kaiszz, Smeagol_, ...
SABEMOS que muchas personas (quizás tu eres una de ellas) han creado
textos y cursos para consumo propio o de unos pocos.
¿Qué hemos hecho?, pues, bajo mi criterio, le Al aceptar veremos que se nos han añadido
estoy diciendo al programa que cuando estemos varios objetos en la barra de herramientas de
al final de fichero (o principio) y se vuelva a la izquierda. El que a nosotros nos interesa
pulsar "Siguiente" (o "Anterior") se de la vuelta ahora mismo es el "ListView", así que
entera. Es decir, si estamos en el último registro a g r e g u é m o s l o a n u e s t r o fo r m u l a r i o
del Recordset y
p u l s a m o s
"Siguiente", el
programa volverá al
primer registro y lo
mostrará. Otra
posibilidad es
mostrar un mensaje
cuando estemos al
final o principio de
fichero, lo dejo bajo
vuestro criterio.
Bien, empecemos
entonces con algo
nuevo. Lo que
vamos a hacer para
empezar es un
formulario donde se
muestren todos los
registros de la base
de datos. Para ello
utilizaremos el
objeto "ListView".
Abrimos un nuevo
proyecto de Visual
Basic, y elegimos
E X E e s t á n d a r.
Vamos al menú "Proyectos" y seleccionamos
"componentes". En !
principio no
deberíamos tener Recordad que debemos agregar las referencias necesarias
ninguno añadido. En para el acceso a datos. Estas se encuentran en el menú
la lista desplegable, "Proyectos->Referencias". Para agregarlas tenemos que
buscamos "Microsoft seleccionar "Microsoft ActiveX Data Objects 2.6 Library"
Windows Common
Controls 6.0" y lo Pasamos a configurar el "ListView". Para ello
seleccionamos. debemos pulsar en el botón "Personalizado"
que está en el cuadro de propiedades,
apareciéndonos la hoja de propiedades del
objeto.
ella) y "Gridlines"
(líneas separadoras
entre registros).
Pulsamos "Aceptar" y
ejecutamos el
programa. De
primeras, si hemos
hecho todo bien,
debería aparecernos
el formulario, con el
"ListView" vacío, los
encabezados de
columna escritos y las
líneas que separarán
los registros.
Bueno, finalmente nos debería quedar algo Estupendo, esto ya va cobrando forma. Sería
parecido a esto interesante que cuando el usuario de esta
aplicación picase sobre alguno de los registros,
los datos de este pasaran a las cajas de texto.
Es una operación sencilla, a parte, si hacemos
esto, estaremos posicionando el "Recordset"
en el registro seleccionado. Creemos una rutina
que traspase los datos a los "TextBox". Por
ejemplo, la podemos llamar "Pintar".
Bien, ahora vamos al botón aceptar. Lo primero Una vez pasada todas las comprobaciones,
que vamos a hacer aquí es preguntar qué vale vamos a añadir el registro. La propiedad que
la variable "Opcion". Si su valor es "Alta" indica a un "Recordset" que se le va a añadir
comprobar si hemos rellenado todos los campos, un nuevo registro es ".AddNew", pasándole
ya que a mi entender, todos son obligatorios. posteriormente todos los valores
Para ello haremos una función que devolverá (RsRecordset("IdCLiente")=TxtIdCliente,
verdadero en caso de que todos los campos RsRecordset("NomCliente")=TxtNomVliente...)
estén llenos, o falso si alguno de ellos no lo y llamando a la propiedad ".Update" finalmente
está. El código sería el siguiente: para finalizar el proceso de alta. Por ahora el
botón Nuevo quedaría así:
Function ComprobarCampos() As Boolean
If TxtIdCliente = "" Or TxtNomCliente = "" Private Sub CmdAceptar_Click()
Or TxtTelCliente = "" Or TxtDirCliente If Opcion = "ALTA" Then
= "" Then If ComprobarCampos Then
MsgBox "Faltan campos por rellenar" RsRecordset.MoveFirst
El botón Modificar es prácticamente igual al ¿No era tan difícil, verdad? Y es que según se
botón Nuevo, con la diferencia que no debemos mire, se parece bastante al alta. Lo primero
limpiar los campos, ya que estamos que hacemos es posicionarnos al principio y
modificando, y que debemos deshabilitar el buscar el registro, ya que así nos colocamos
campo TxtIdCliente, porque al ser clave, no en él. Para buscarlo usamos el ya conocido
debe de ser modificado. ".Find", y como criterio, el valor que hay en la
caja de texto TxtIdCliente.
Private Sub CmdModificar_Click()
Frame1.Enabled = True Una vez buscado, comprobamos los campos,
TxtIdCliente.SetFocus ya que es posible que a alguien se le ocurra
Opcion = "EDITAR" borrar el texto de alguno de los "TextBox", por
Deshabilitar lo que hay que volver a revisarlo. En caso de
TxtIdCliente.Enabled = False que todo esté bien, realizamos la modificación,
End Sub ¿cómo?, pues primero pasándole todos los
valores y posteriormente llamando al ".Update".
Bien, ahora debemos codificar de nuevo el Es muy parecido al alta, con la diferencia de
código del botón Aceptar. Justo después de que no hacemos ".AddNew", por lo que el
cerrar la última sentencia condicional, la que "Recordset" sabe que tiene que modificar y no
En un futuro muy próximo habrán dos tipos de personas: las que dominen
XML y las que no. ¿A qué grupo quieres pertenecer?
!
Lo que hace tan poderoso a XML es que
Una tabla es un conjunto de filas y columnas, algo parecido
cualquier tipo de datos (incluso los datos de
a lo que vemos cuando abrimos una hoja de Excel.
concepción abstracta) puede ser estructurado,
es decir que cualquier tipo de datos puede
Visualmente lo veríamos de la manera siguiente, ser construido según una estructura.
siendo lo que vemos a continuación lo que
podemos "pintar" con html: Un tipo de datos de concepción abstracta es
!
XML es un lenguaje de marcado de texto (
Ejemplo 1: El catálogo
tiene un conjunto de reglas que especifican
como definir etiquetas), definido de manera
CONCEPTO ABSTRACTO: CATALOGO
que no está limitado a un determinado lenguaje,
|
vocabulario o utilización en particular. Sigue
|
leyendo y entenderás todo esto :)
CRITERIO: ¿Qué necesitamos saber
para definir inequívocamente cada uno de los
QUE PODEMOS HACER CON XML,
| Productos (elementos)
que contiene el concepto abstracto llamado PARA QUE SIRVE
catálogo?
Personalmente, puedo contaros algo que me
|
ocurría a mi. Leía sobre xml en todas partes,
ESTRUCTURA Número de Producto
devoraba toda la información que encontraba
Nombre de Producto
acerca de este lenguaje y finalmente cuando
Descripción de Producto
lo entendía y venia un colega y me hacia la
maldita pregunta , se me ponía cara de imbécil
<PRECIOS>
<APLICAR> Cuando correspondencia = 5 <7</APLICAR>
</PRECIOS>
Los comentarios en xml se escriben del Un elemento de un archivo xml estaría conformado por el tag de
siguiente modo: inicio, el contenido y el tag de fin, por este orden riguroso. Cualquier
otro orden seria erróneo.
<!-- esto es un comentario xml --> En xml todo lo que se abre debe cerrarse.
TAGS -ETIQUETAS
barra invertida (/)l <ELEMENTO> ESTE ELEMENTO PERTENECE AL ELEMENTO RAIZ </ELEMENTO>
<DEPORTES>
Puede darse el caso de que un tag sea principio <FUTBOL>SU PADRE ES DEPORTES</FUTBOL>
Y en ese caso el tag será único y llevara el <COMENT2>DEPORTES + SUS HIJOS PERTENECEN A VARIOS</COMMENT2>
<SALTO/>
Os podéis preguntar , y si quiero especificar contenido propio no podremos escribir la etiqueta de fin </VARIOS> hasta
para el elemento RAIZ o para el elemento VARIOS, o para el q u e h aya m o s c e r ra d o D E P O RT E S , F U T B O L
elemento DEPORTES, ¿Como lo hago?. ,BALONCESTO, COMENT Y COMENT2.
Muy fácil, Se añade a continuación de la etiqueta de inicio:
</RAIZ> </DEPORTES>
</VARIOS>
texto) el texto de manera correcta. Tal como está Fijaros que FUTBOL contiene a BALONCESTO y
escrito ahora , de un primer vistazo puede parecer FUTBOL se cierra antes de cerrar BALONCESTO.
que COMMENT y COMMENT2 son hijos de DEPORTES,
cuando ahora estamos diciéndole que son hijos de
VARIOS. Este texto , correctamente indentado quedaría DOCUMENTOS BIEN FORMADOS
como sigue:
El conjunto de todos los elementos de un archivo
<VARIOS> xml se denomina documento.
<DEPORTES> Los documentos deben estar bien formados, y
estarán bien formados siempre que cumplan los
<FUTBOL>SU PADRE ES DEPORTES</FUTBOL>
siguientes requisitos:
<BALONCESTO>SU PADRE ES DEPORTES</BALONCESTO>
</DEPORTES>
Tendrán como mínimo un elemento.
<COMENT> DEPORTES, VARIOS PERTENECEN RAIZ</COMENT> Todos los elementos estarán comprendidos dentro
<COMENT2>DEPORTES + SUS HIJOS PERTENECEN A VARIOS</COMMENT2> del elemento raíz.
</VARIOS> Los elementos estarán anidados correctamente.
No tiene necesidad de validarse contra ningún
b- Para todos lo elementos cuyo contenido sea DTD, ni contra ningún Xml-Schema
diferente a vacío, debe incluirse una etiqueta de inicio ( encontrareis las explicaciones de estos dos términos
y una de fin. en el apartado LA DECLARACION XML).
No es correcto escribir:
LA DECLARACIÓN <?XML>
<DEPORTES>
<FUTBOL>SU PADRE ES DEPORTES SU PADRE ES DEPORTES</BALONCESTO>
El orden debe ser estricto no puede escribirse: Los atributos version, encoding y standalone deben
aparecer en este orden.
</FUTBOL>SU PADRE ES DEPORTES <FUTBOL>
La declaración debe estar al comienzo del archivo
Otra muestra de xml mal formado seria: xml.
<DEPORTES>
<?xml version 1.0 standalone=yes ?>
El ultimo dato que incluimos en la declaración será siempre un documento bien formado, sin
es el de que efectivamente, que es un embargo un documento bien formado no tiene
documento standalone. Esto significa que es por que ser válido (es muy posible que sea
un documento autosuficiente, que no necesita standalone=yes o sea que no necesite ni DTD
de ninguna estructura ajena para validarse. ni xml-schema).
Tienen un nombre (PROYECTO NOMBRE ) . de las aplicaciones , de los datos que la mayoría
de aplicaciones no necesitan, y ahí estaría
Ese nombre debe de estar seguido de un nuestro atributo. Es una posibilidad.
signo igual y de un par de comillas (aunque Un elemento ocupa mas espacio que un atributo,
no le asignéis contenido) EJ: <PROYECTO ¿porque no utilizar entonces un atributo?
NOMBRE=> seria correcto. Primero de todo y mas importante, porque se
perdería una de las características básicas de
El tipo de dato que pueden contener, es el xml, que es la sencillez, la capacidad de
que pueden recibir (un atributo puede recibir autodescripción de las etiquetas y la legibilidad
un valor un momento dado), o el valor de una del código xml. También tenemos que considerar
lista . que trabajar con elementos, nos dará mas juego
para futuras ampliaciones del código, del árbol
Se les podrá decir si son de carácter opcional, xml. En cuanto al tamaño, con una buena
obligatorio o constante desde el DTD, lo técnica de compresión nos vendríamos a quedar
comento solo a título de curiosidad, como he a la par que las etiquetas con atributos.
explicado, no vamos a entrar en los DTD.
Os pongo también una serie de criterios bastante
CUANDO UTILIZAR ATRIBUTOS aclaradores:
EN LUGAR DE ELEMENTOS HIJOS
Si el dato contiene subestructuras= elemento.
Puesto que pueden utilizarse tanto los atributos Si el dato es de gran tamaño = elemento.
como los elementos hijos, tal como hemos Si el dato cambia frecuentemente = elemento.
visto en el ejemplo del proyecto x , uno se Si el dato es de pequeño tamaño y raramente
puede preguntar cuando utilizar uno o cuando cambia = atributo.
utilizar el otro. Si el dato solo puede tener unos cuantos
valores fijos = atributo.
Pregunta de difícil respuesta. Si el dato se va a mostrar a un usuario o
aplicación = elemento.
Desgraciadamente no hay una respuesta clara Si el dato no se va a mostrar = atributo.
al respecto. Oficialmente, los atributos son
pares de nombre-valor, es decir nombre atributo Utilizad pues un atributo cuando sea un par
valor atributo ( nombre=proyecto x en el atributo-valor (algo indivisible, que cuando
ejemplo). mencionéis el atributo penséis en el valor, o
algo que este muy ligado al atributo), cuando
Sin embargo hay otras personas que sea un metadato (cuando sea un dato que
argumentan que la información contenida en exista pero que no lo va a consultar todo el
los atributos son metadatos . mundo, solo casos especiales) y sobretodo
Los metadatos intentan responder a las cuando os sintáis mas cómodos trabajando con
preguntas quién, que, cuando, donde, porqué atributos que con elementos.
y cómo, sobre cada una de las facetas relativas
a los datos que se documentan. Por ejemplo SECCIONES CDATA
supongamos el número de serie de un CD de
música, la mayoría de aplicaciones no Cuando nos encontremos que tenemos que
necesitarían esa información, entonces puede escribir muchos signos > (>) o < (<) o
tener sentido que ese dato sea un atributo. & (&am;) nuestro código puede convertirse
Esto separaría los datos que precisan la mayoría en un auténtico laberinto de símbolos y puede
objXMLDOM.Load (path)
ReDim elementos(objNodes.length)
'**************Cuerpo*********************
elementos(iIndex) = objNodes.Item(iIndex).nodeTypedValue
MsgBox elementos(iIndex)
Next
End Sub
Fijaros que el nombre de la referencia es a la dll msxml3.
Bueno ahora nos quedaría pulir esto un poco, Vemos que el numero es de una calle, y esta
vamos a empezar por otras direcciones. asociado indivisiblemente al piso y escalera.
¿Cuales pueden ser estas otras direcciones? Asimismo vemos que el código postal es de esa
¿Las direcciones de los bancos con que dirección . Podemos pues, crear un elemento
trabaja?,no , si seguimos ese criterio dirección calle que este al mismo nivel que
acabaremos colocando en la lista de otras dirección url, o dirección correo electrónico.
direcciones, las direcciones de las discotecas Lo tenemos todo.
donde bebe cerveza negra. Vamos a ceñirnos
a las direcciones a las que podemos dirigirnos Antes de ponernos a estructurar hemos de
y por lo que veo estas serian finalmente todas preguntarnos:
las direcciones. Borramos el numero 8 (es
todo?) pero sin embargo dejamos el nº 6 de ¿Nos olvidamos algo?
otras direcciones. En el caso de que se nos
ocurrieran nuevos tipos de direcciones o Si pensamos detenidamente, vemos que sí ,
que tenemos el nombre del cliente, pero nos <?xml version="1.0" standalone="yes"?>
hemos olvidado de el nombre de la empresa
<!--Tendremos varios clientes, luego cliente
del cliente, e incluso de su cargo y de su
departamento en el caso de que la empresa no nos sirve de directorio raiz -->
fuera muy grande. ¿Como íbamos a enviar los <Direcciones_Cliente>
correos sin el nombre de la empresa?
<Cliente>Juan Jose Martinez Ruiz
De acuerdo , ahora nos queda organizar esta
información que nos ha surgido a última hora. <Direcciones>
<Comerciales>
¿A que nivel situamos el nombre de la empresa? <Nombre_Empresa>Azorin
Yo he propuesto hacerlo al mismo nivel que <Cargo>Director</Cargo>
<Departamento>Desarrollo</Departamento>
dirección calle o dirección correo electrónico. </Nombre_Empresa>
Y he llegado a esa conclusión de la siguiente <Calle>Mallorca 125
<Piso>1</Piso>
manera: <Puerta>4</Puerta>
<Ciudad>Leganes</Ciudad>
<Provincia>Madrid</Provincia>
Supongamos que la empresa crece, que <Codigo_Postal>07485</Codigo_Postal>
adquiere otra sucursal, ¿Como se llamará la </Calle>
<Correo_Electronico>jj@cor.com</Correo_Electronico>
empresa? Tendrá el mismo nombre. Y el cargo <Url_Web>www.generacion98.es</Url_Web>
del cliente ¿cambiará cuando tengamos una </Comerciales>
nueva sucursal? No, y tampoco lo hará su <Particulares>
departamento. Por ese motivo lo pondré al <Calle>Puente 88
<Piso>1</Piso>
mismo nivel que las direcciones. <Puerta>3</Puerta>
<Ciudad>Cadalso Vidrios</Ciudad>
<Provincia>Madrid</Provincia>
Es importante cuando analicemos un problema <Codigo_Postal>48759</Codigo_Postal>
pensar en lo que tenemos y en lo que podemos </Calle>
<Correo_Electronico>hxc@jj.com</Correo_Electronico>
llegar a tener, es importante hacerse las <Url_Web>No tiene</Url_Web>
preguntas: ¿Que pasaría si...? , ¿Y si....?. </Particulares>
<Otras>
</Otras>
Bueno pues ya tenemos hecha una posible </Direcciones>
clasificación. Y digo posible porque cualquier </Cliente>
otra, mientras sea coherente y argumentada
</Direcciones_Cliente>
puede ser tan o mas buena que esta que os
he presentado yo.
Lo podéis guardar como direcciones.xml y abrirlo en el Explorer o
Ahora vamos a pintarlo en un organigrama en netscape para visualizarlo (tienes la imagen en la página siguiente).
para verlo visualmente, para ayudarnos a pintar
el xml. Espero que os haya gustado el articulo y que os animéis a programar
en xml. Tened en cuenta que solo hemos hablado de una pequeña
Quedaría así (vease gráfico en la página parte del xml, la parte más básica sin duda, pero solo una pequeña
siguiente). parte.
Saludos compañeros!
Para terminar, construiremos el xml con el
notepad o el vi o cualquier otro editor de texto,
que quedará como sigue:
SI TE GUSTA LA INFORMÁTICA.
SI ESTAS CABREADO CON GÜINDOUS ;)
SI QUIERES PROGRESAR DE VERDAD
Incluye 7 CDs y 1 DVD
PC PASO A PASO Manual de Instalación.
SOR TEA CADA MES UN S.O. Manual de Administracion
Vamos a divertirnos un poco :) Pues bien, si has seguido nuestro curso, a estas
alturas seguro que tienes el Servidor Apache
Hace varios números que estamos liados con montado en tu ordenador y unos conocimientos
APACHE y, para no cansar a la peña con sobre el mismo más que suficientes sobre su
demasiada teoría vamos a hacer algo muy, funcionamiento. Estamos sobradamente
muy, muy práctico y refrescante. preparados para montar un foro en nuestro
equipo y vamos a ponerlo a disposición
Hemos recibido muchos mails en los que se del mundo :)
nos pide que enseñemos cómo montar un Foro
al estilo del Foro de Hack x Crack Puesta a Punto y Conceptos Previos
(www.hackxcrack.com).
Vamos a montar
uno de los foros
más completos
que existen en la
actualidad y para
colmo es Software
Libre bajo licencia
GPL. Resumiendo
esto significa que
no tendrás que
pagar un solo euro
por utilizarlo ni
aguantar ningún
tipo de limitación
y por supuesto,
ningún tipo de
a ñ a d i d o
indeseable tipo
spyware-adware
!
Hice seguir este texto a un alumno de la ESO y pude ver
como le era imposible editar este archivo desde un Windows
XP. El problema era que si pulsaba el botón derecho del
mouse no le salía la opción de editar con el Block de Notas.
La solución pasa por ejecutar el Block de Notas y abrir el Finalmente buscamos la sección IfModule y
archivo desde el programa (un proceso muy lento), pero le añadimos la línea:
yo que utilizo mucho MAC le propuse que abriese el Block Action application/x-httpd-php
de Notas y arrastrase el archivo httpd.conf desde "/php/php.exe"
c:\apache\conf\ hasta el Block de Notas. El alumno se Con esto le indicamos a APACHE dónde está
sorprendió enormemente de que un archivo pudiese editarse el ejecutable de PHP. Puedes ver que en lugar
de esa forma y yo me sorprendí de que se sorprendiese de decirle que está en c:\php\php.exe le damos
tanto (valga la redundancia). el alias antes definido /php/ :)
El Servidor de Datos ha contestado a la petición de interpretado por un Servidor Web (esté instalado dicho
conexión por Telnet indicando la versión de MySQL Servidor sobre el Sistema que sea). Por lo tanto, un
que está corriendo. programa en PHP es independiente de la plataforma.
Para que los puristas no se enfaden, diremos que esto no
es 100% cierto, pero salvo que tengas un nivel de
! programación muy avanzado te aseguro que es no tendrás
problemas en este sentido.
Ya hemos explicado en anteriores números sobre el uso de Una vez descargado lo descomprimimos donde queramos
TELNET según la versión de Windows que tengas. y obtendremos una carpeta llamada phpBB2 y en su
interior un montón de carpetas y archivos.
http://127.0.0.1/forophp/install/install.php (y cruza
los dedos!!!)
Finalizando
EL GANADOR DEL
SORTEO DE UN SUSE
LINUX 8.2 DEL MES DE
abril ES:
Rafael diaz pareja
Arriba a la izquierda pulsa sobre Log In e introduce lOjA - granada
tu user y pass de Administrador, nosotros utilizamos SEGUIR LLAMANDO, EL PROXIMO
attfe494 y cedente 1 respectivamente. Una vez PODRIA SER PARA TI (PAG 56)
NÚMERO 2:
NÚMERO 3:
NÚMERO 5:
NÚMERO 6:
- PROTOCOLOS: POP3
- PASA TUS PELICULAS A DIVX III (EL AUDIO)
- PASA TUS PELICULAS A DIVX IV (MULTIPLEXADO)
- CURSO DE VISUAL BASIC: LA CALCULADORA
-IPHXC: EL TERCER TROYANO DE HXC II
- APACHE: UN SERVIDOR WEB EN NUESTRO PC
- CCPROXY: IV TROYANO DE PC PASO A PASO
- TRASTEANDO CON EL HARDWARE DE UNA LAN
NÚMERO 8:
- CURSO DE LINUX
- APACHE: COMPARTE ARCHIVOS
- REVERSE SHELL
- CURSO DE VISUAL BASIC: MAS CALCULADORA
- PROTOCOLOS Y SU SEGURIDAD: SMTP
NÚMERO 9: