Archivo

Archivo para Martes, 23 de noviembre de 2004

Lios de seguridad: ¿Un Virus para Java?

Martes, 23 de noviembre de 2004
Comentarios desactivados



Aparementemente, el plugin de Java puede ayudar a ejecutar un Virus gracias a un problema de seguridad. Lo peor es que el sistema de seguridad de SandBox no ayuda para nada a minimizar el riesgo; Lo otro es que tanto Windows como Linux pueden ser afectados :(

Sun ya tiene disponibles actualizaciones de seguridad las cuales corrigen el problema entre la interacción entre Java y JavaScript. Como referencia, les coloco aqui el correo que me llego de la lista ‘Bugtrack':

From: Jouko Pynnonen <jouko@iki.fi>
To: bugtraq@securityfocus.com
Subject: Sun Java Plugin arbitrary package access vulnerability
Date: Tue, 23 Nov 2004 09:02:48 +0200

OVERVIEW

========

Sun Microsystem's Java Plugin connects the Java technology to web

browsers and allows the use of Java Applets. Java Plugin technology is

available for numerous platforms and supports major web browsers.

A vulnerability in Java Plugin allows an attacker to create an Applet

which can disable Java's security restrictions and break out of the

Java sandbox. The attack can be launched when a victim views a web page

created by the attacker. Further user interaction is not required as

Java Applets are normally loaded and started automatically.

Such Applet can then take any action which the user could: browse,

read, or modify files, upload more programs to the victim system and

run them, or send out data from the system. Java is a cross-platform

language so the same exploit could run on various OS'es and

architectures.

DETAILS

=======

There is a number of private Java packages in the Java VM, meant to be

used only by the VM internally. Java Applets can't normally access

these packages because of security concerns. Attempting to access

them normally results in an AccessControlException.

The problem is that JavaScript code can bypass the access control by

using so called reflection API. The following piece of example

JavaScript acquires a reference to a supposedly restricted, private

class "sun.text.Utility":

[script language=javascript]

var c=document.applets[0].getClass().forName('sun.text.Utility');

alert('got Class object: '+c)

[/script]

This isn't possible by a normal Java Applet, and shouldn't be for

JavaScript either. The JavaScript code could now instantiate the class

or pass it to an Applet that could use it.

An attacker can't do much with the utility class in this example, but

could use other private classes to exploit the vulnerability. Some of

them allow e.g. direct access to memory or methods for modifying

private fields of Java objects. The latter allows an attacker

to simply turn off the Java security manager, after which there is no

sandbox restricting what the Applet can do.

VULNERABLE VERSIONS

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

The Java Plugin versions 1.4.2_04 and 1.4.2_05 were tested on Windows

and Linux. Web browsers tested were Microsoft Internet Explorer,

Mozilla Firefox and Opera. It should be noted that Opera uses a

different way of connecting JavaScript and Java which caused the test

exploit not to work on Opera. However the problem itself (access to

private packages) was demonstrated on Opera too, so it may be

vulnerable to a variation of the exploit.

SOLUTION

========

Sun Microsystems was informed on April 29, 2004 and has fixed the

problem in J2SE 1.4.2_06, available at

http://java.sun.com/j2se/1.4.2/download.html

CREDITS

=======

The vulnerability was discovered and researched by Jouko Pynnonen,

Finland.

--

Jouko Pynnönen Web: http://iki.fi/jouko/

jouko@iki.fi

Sin categoría

La forma incorrecta de preguntar: ¿Mamá, me puedes hacer la tarea, porfa?

Martes, 23 de noviembre de 2004

Hace tiempo tuve el placer de publicar varios manuales en línea, que hablaban de tópicos como NFS, DNS, NIS, programación con CGI y Java y me imagino que aún andan circulando por Internet porque de vez en cuando me llegan correos como estos:

Date: Tue, 23 Nov 2004 14:45:10 -0300 (CLST)

Subject:

From: “QQQQQ EDUARDO WWWWW” Add to Address Book

To: XXXX@ing.ula.ve

CC: WWWW@ZZZZ.com

Soy de Chile y mi nombre es QQQQ WWWWW

Recien me estoy instruyendo en Linux Conectiva y necesito si me

pueden dar la siguiente ayuda :

1.-Necesito instalar, configurar y levantar un servidor ftp en

“Conectiva

10″ yo algo he instalado “wu-ftp” , pero no se que mas hacer.

2.-Necesito instalar, configurar y levantar un servidor nfs y el

cliente

nfs en “Conectiva 10” .

Si me pueden ayudar a realizar estas instalaciones desde cero, por

linea de comando, recien llevo 2 meses en Conectiva Linux y necesito

aprender lo que mas pueda de linux Conectiva 10 .

Por favor si me pueden indicar todos los paquetes que debo

instalar, sus dependencias, los archivos que debo editar y como

levantar el servicio.

Necesito conectar a lo menos 4 pc traspasar informacion y

comprtir una carpeta, algo ya e leido, pero no tengo nada

claro.

Pregunta : Donde ubico en Conectiva 10 el archivo inetd.conf

….] # vi /etc/inetd.conf

y descomentar lo siguiente :

#ftp stream tcp nowait root /usr/sbin/tcpd in.proftpd

para habilitar el puerto ftp ????

De ante mano muchas gracias

Thank you very much

Atte. CA

Este correo es genial; Creo que los Argentinos y Chilenos llaman a este tipo de personas un “boludo” :). Chiste aparte, es increible como cierta gente no sólo espera que uno les haga la tarea (“Eduardo” está esperando que yo le escriba un manual detallado, con todos los pasos y dependencias para al menos 3 aplicaciones) sino que además son completamente desorganizados en su forma de atacar el problema (fijense en la falta de coherencia de nuestro amigo “Eduardo” en la forma en como decide instalar los servicios en esa máquina).

Yo no tengo problemas en ayudar con problemas técnicos (después de todo me gano la vida como administrador de sistemas), pero creo que el respeto del valor del tiempo de los demás es algo que no se puede dejar de olvidar. Tampoco está demás que cuando se le pide ayuda a un desconocido, lo haga de manera cortés, y sobre todo tratando de despertar la curiosidad de quien puede ayudarnos a resolver el problema.

“Eduardo”, te tengo una preguntica: ¿Tus papas eran primos o hermanos, que no te enseñaron a usar Google? :D

Sin categoría

Echando código: ¿Como llenar una forma con Java?

Martes, 23 de noviembre de 2004
Comentarios desactivados

Java cuenta con las clases ‘java.net.URL‘ y ‘java.net.URLConnection‘ las cuales le permite establecer una conexión utilizando el protocolo HTTP en vez de sockets directamente. ¿Qué tan poderoso es eso? Bueno, suponga que usted quiere escribir una aplicación a la medida y la única forma de comunicarse con un recurso externo es por medio de una página web que tiene una forma.

Para este ejemplo, vamos a crear un simple programa en Java que se conecta con la página de contacto de VeneBlogs.com. Lo primero que hay que hacer es ver el código fuente de la forma de contacto y ver que hay alli:

   1:<form method="post" action="prcontacto.php?bgid=0" onSubmit="return checkRequiredFlds();">

2: <fieldset>
3: <p>
4: <label class="req">Nombre:</label>
5:
6: <br/>
7: <input type="text" name="nombre" value="" size="41" maxlength="75">
8: </p>
9: <p>
10: <label class="req">Correo:</label>
11: <br/>
12: <input type="text" name="email" value="" size="41" maxlength="75">
13: </p>
14: <p>
15:
16: <label>P&aacute;gina Web:</label>
17: <br/>
18: <input type="text" name="url" value="" size="41" maxlength="75">
19: </p>
20: <p>
21: <label class="req">Mensaje:</label>
22: <br/>
23:
24: <textarea name="mensaje" cols="41" rows="4"></textarea>
25: </p>
26: <p>
27: <input id="mybutton" type="submit" value=" Enviar " name="submit">
28: <input id="mybutton" type="button" value=" Volver " name="back" onClick="history.go(-1);">
29: </p>
30: </fieldset>
31: </form>

OK. Con eso podemos ver que variables le pasamos al programa que hace el envio, en este caso es una página llamada ‘prcontacto.php‘. Vemos también que el método utilizado es POST y si tenemos suerte la forma no está utilizando sesiones o cookies, así que con sólo la información que aparece allí podremos comunicarnos sin problema (sinó tendrá que aplicar otras ténicas más avanzadas que no se muestran aquí. También puede usar una clase de la gente de Jakarta para ese propósito).

El código a utilizar en Java es bastante simple, aqui se los muestro a continuación:

   1:package com.blogspot.elangelnegro;

2:import java.util.ResourceBundle;
3:import java.io.IOException;
4:import java.io.InputStreamReader;
5:import java.io.BufferedReader;
6:import java.io.LineNumberReader;
7:import java.io.DataOutputStream;
8:import java.net.URL;
9:import java.net.URLConnection;
10:import java.net.HttpURLConnection;
11:import java.net.URLEncoder;
12:import java.net.MalformedURLException;
13:
14:/**
15: * This program connects to the VeneBlog contact form and sends the feedback to the site owners.
16: * How to use:
17: * <code>
18: * <ol>
19: * <li> Create a file called Contact.form and make it look like this:
20: * <pre>
21: * com.blogspot.elangelnegro.ContactForm.veneblogs.url=http://lnxdev0003/cgi-bin/env.tcgi
22: * com.blogspot.elangelnegro.ContactForm.veneblogs.referer=http://www.veneblogs.com/contacto/
23: * com.blogspot.elangelnegro.ContactForm.veneblogs.website=http://elangelnegro.blospot.com/
24: * com.blogspot.elangelnegro.ContactForm.veneblogs.email=disposablehero3000-blogger@yahoo.com
25: * com.blogspot.elangelnegro.ContactForm.veneblogs.name=Jose V Nunez Z
26: * com.blogspot.elangelnegro.ContactForm.veneblogs.message=Felicitaciones por el sitio web, muy completo.
27: * </pre>
28: * <a href="http://www.javaworld.com/javaworld/javatips/jw-javatip34.html">You can check this JavaWorld tutorial for more information</a>
29: * <li> javac ContactForm.java -d .
30: * <li> cp -p ContactForm.properties com/blogspot/elangelnegro/
31: * <li> java com.blogspot.elangelnegro.ContactForm
32: * <li> mkdir javadoc &amp;&amp; javadoc -d javadoc/ -sourcepath . ContactForm.java
33: * </ol>
34: * </code>
35: * @author Jose V Nunez Zuleta (disposablehero3000-blogger@yahoo.com)
36: * @version 0.1 - 11/23/2004
37: */
38:public final class ContactForm {
39: private static final ResourceBundle BUNDLE = ResourceBundle.getBundle(ContactForm.class.getName());
40: /**
41: * Version of the application
42: */
43: public static final String VERSION = "1.0";
44:
45: /**
46: * Command line processing
47: * @param args Command line arguments, currently ignored
48: * @throws IOException if there is an error communicating with the website
49: * @since 0.1
50: */
51: public static final void main(String [] args) throws IOException {
52: if (BUNDLE.getString("com.blogspot.elangelnegro.ContactForm.veneblogs.url") == null) {
53: throw new IllegalArgumentException();
54: }
55: URL url = null;
56: LineNumberReader reader = null;
57: DataOutputStream out = null;
58: try {
59: url = new URL(BUNDLE.getString("com.blogspot.elangelnegro.ContactForm.veneblogs.url"));
60: URLConnection con = url.openConnection();
61: con.setDoInput(true);
62: con.setDoOutput(true);
63: con.setUseCaches (false);
64: con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
65: con.setRequestProperty("User-Agent", ContactForm.class.getName() + "/" + VERSION);
66: con.setRequestProperty("Referer", BUNDLE.getString("com.blogspot.elangelnegro.ContactForm.veneblogs.referer"));
67: ((HttpURLConnection) con).setRequestMethod("POST");
68: ((HttpURLConnection) con).setInstanceFollowRedirects(true);
69: // Write the form to the Website using POST
70: out = new DataOutputStream(con.getOutputStream());
71: StringBuffer postData = new StringBuffer();
72: postData.append("email=" + URLEncoder.encode(BUNDLE.getString("com.blogspot.elangelnegro.ContactForm.veneblogs.email")));
73: postData.append("&");
74: postData.append("nombre=" + URLEncoder.encode(BUNDLE.getString("com.blogspot.elangelnegro.ContactForm.veneblogs.name")));
75: postData.append("&");
76: postData.append("url=" + URLEncoder.encode(BUNDLE.getString("com.blogspot.elangelnegro.ContactForm.veneblogs.website")));
77: postData.append("&");
78: postData.append("mensaje=" + URLEncoder.encode(BUNDLE.getString("com.blogspot.elangelnegro.ContactForm.veneblogs.message")));
79: postData.append("&");
80: postData.append("submit=" + URLEncoder.encode("submit"));
81: out.writeBytes(postData.toString());
82: postData.setLength(0);
83: out.flush();
84: out.close();
85: //Read the response
86: reader = new LineNumberReader(new BufferedReader(new InputStreamReader(con.getInputStream())));
87: for (String line = reader.readLine(); line != null; line = reader.readLine()) {
88: System.out.println(line);
89: }
90: } catch (MalformedURLException malExp) {
91: throw new IllegalArgumentException(malExp.toString());
92: } catch (IOException ioExp) {
93: throw ioExp;
94: } finally {
95: try {
96: if (reader != null) {
97: reader.close();
98: }
99: } catch (IOException ignore) {};
100: try {
101: if (out != null) {
102: out.close();
103: }
104: } catch (IOException ignore) {};
105: }
106: }
107:}

Como puede ver, la configuración del programa está guardada en un archivo de recursos (ResourceBundle). Si bien este programa es muy sencillo, no es muy flexible ya que los parametros están fijos dentro del código del programa. Aqui está un archivo de configuración de ejemplo:

   1:com.blogspot.elangelnegro.ContactForm.veneblogs.url=http://www.veneblogs.com/contacto/prcontacto.php?bgid=0

2:#com.blogspot.elangelnegro.ContactForm.veneblogs.url=http://lnxdev0003/cgi-bin/env.tcgi
3:com.blogspot.elangelnegro.ContactForm.veneblogs.referer=http://www.veneblogs.com/contacto/
4:com.blogspot.elangelnegro.ContactForm.veneblogs.website=http://elangelnegro.blospot.com/
5:com.blogspot.elangelnegro.ContactForm.veneblogs.email=disposablehero3000-blogger@yahoo.com
6:com.blogspot.elangelnegro.ContactForm.veneblogs.name=Jose V Nunez Z
7:com.blogspot.elangelnegro.ContactForm.veneblogs.message=Felicitaciones por el sitio web, muy completo.

Y para correrlo sólo necesita hacer algo como lo siguiente:

javac ContactForm.java -d .

cp -p ContactForm.properties com/blogspot/elangelnegro/

java com.blogspot.elangelnegro.ContactForm > htmloutout.html

mkdir javadoc && javadoc -d javadoc/ -sourcepath . ContactForm.java

Si necesita más información, no dude en contactarme :)

kodegeek

Echando código: ¿Como usar el API de Google en la web?

Martes, 23 de noviembre de 2004
Comentarios desactivados



Todo el mundo usa Google. Yo hace tiempo que deje de usar Yahoo, Altavista, HotBoot, etc. Google conquistó el ciberspacio. Pero lo genial es que usted puede utilizar ese poder en sus aplicaciones (no comerciales, claro está) usando el API web de Google.

Para usarla, sólo bajesela, sólo necesita abrir una cuenta en Google para obtener una clave de accceso y después es sólo echar código (claro, después de leer la referencía).

La mejor forma de hacer esto es primero probar la búsqueda en Google (usando la forma web) y después corriendo la aplicación.

!Suficiente habladera de paja!. Le voy a mostrar un ejemplo prático de como utilizar el API con Java (Google provee soporte para varios lenguajes, como Perl).

Si usted es como yo, seguramente no sabe que la directora de la pelicula “Macu, La Mujer del policia” es Solveig Hoogesteijn, y por ello usted ha decidido hacer un pequeño programa para buscar información en Internet usando Google. Lo primero que hace es definir el programa de búsqueda:



   1:package com.blogspot.elangelnegro;

2:
3:import com.google.soap.search.GoogleSearch;
4:import com.google.soap.search.GoogleSearchResult;
5:import com.google.soap.search.GoogleSearchResultElement;
6:import com.google.soap.search.GoogleSearchFault;
7:
8:import java.util.ResourceBundle;
9:
10:/**
11: * This class shows how to use the Google API to perform searchs using Java.
12: * In order to make the script work, you will need a key
13: * that can be obtained from <a href="http://www.google.com/apis/download.html">here</a>
14: * @author Jose Vicente Nunez Zuleta (josevnz@yahoo.com)
15: * @version 0.1 - 11/22/2004
16: * @see http://www.google.com/apis/reference.html
17: */
18:public final class GoogleQuickSearch {
19:
20: private static final ResourceBundle BUNDLE = ResourceBundle.getBundle(GoogleQuickSearch.class.getName());
21: private GoogleQuickSearch() {}
22:
23: /**
24: * Command line arguments processing.
25: * @param args Only the first argument is considered for the search, the rest is discarded
26: * @throws GoogleSearchFault if there is any problem performing the search
27: * @since 0.1
28: */
29: public static void main(String [] args) throws GoogleSearchFault {
30: if (! ((args != null) && (args.length == 1)) ) {
31: throw new NullPointerException("Please provide a search query");
32: }
33: GoogleSearch search = new GoogleSearch();
34: search.setKey(BUNDLE.getString("com.blogspot.elangelnegro.GoogleQuickSearch.query.mandatory.key"));
35: search.setQueryString(args[0]);
36: search.setSafeSearch(false); // Do not filter my results, thanks
37: search.setLanguageRestricts(BUNDLE.getString("com.blogspot.elangelnegro.GoogleQuickSearch.query.optional.languajes"));
38: GoogleSearchResult result = search.doSearch();
39:
40: // The section 2.7, "Limitations" limitations on the search functionality
41: int totalResults = result.getEstimatedTotalResultsCount();
42: GoogleSearchResultElement[] detail = result.getResultElements();
43: for (int i=0; i < detail.length; i++) {
44: // Eliminate all the HTML formatting from the title. This is not complete by any means
45: System.out.println(detail[i].getTitle().replaceAll("<b>", "").replaceAll("</b>", "").replaceAll("&quot;", "\"") + ": ");
46: System.out.println("\t" + detail[i].getURL());
47: detail[i]=null;
48: }
49: }
50:}

El procedimiento es muy sencillo, primero construya una búsqueda con la clase ‘com.google.soap.search.GoogleSearch’, obtenga un conjunto de resultados con ‘com.google.soap.search.GoogleSearchResult’ y luego itere sobre cada uno de ellos con ‘com.google.soap.search.GoogleSearchResultElement’.

Si usted se dió cuenta, el programa de búsqueda carga un archivo de recursos (ResourceBundle) en el cual tenemos nuestra llave y otros parametros que no van a cambiar frecuentemente durante la ejecución del programa:

   1:# Required key to use the Google API

2:com.blogspot.elangelnegro.GoogleQuickSearch.query.mandatory.key=XXXXXXXXXXXXXAA
3:# Languajes to search for (restrict the results)
4:com.blogspot.elangelnegro.GoogleQuickSearch.query.optional.languajes=lang_es|lang_en|lang_sv|lang_fr

Y si es tan perezoso como yo, entonces seguramente utilizará ant para compilar está pequeña aplicación:

   1:<project default="build" name="GoogleQuickSearch" basedir=".">

2: <!-- System wide properties -->
3: <property name="version" value="0.0" />
4: <property name="src" value="src" />
5: <property name="build" value="build" />
6: <property name="dist" value="dist" />
7: <property name="test" value="test" />
8: <property name="etc" value="etc" />
9: <property name="scripts" value="scripts" />
10: <property name="lib" value="lib" />
11: <property name="doc" value="doc" />
12: <property name="jar.google" value="${user.dir}/googleapi/googleapi.jar" />
13: <property name="jarfile" value="${dist}/${ant.project.name}-${version}.jar" />
14: <property name="tarfile" value="${ant.project.name}-${version}.tar.gz" />
15: <property name="classpath" value="${jar.google}:${build}:." />
16: <target name="init" description="Prepare required directories before all the other targets">
17: <mkdir dir="${build}"/>
18: <mkdir dir="${dist}"/>
19: <mkdir dir="${doc}/javadoc"/>
20: </target>
21: <target name="clean" description="Perform directory cleanup">
22: <delete includeEmptyDirs="yes" failonerror="no">
23: <fileset dir="${build}" />
24: <fileset dir="${dist}" />
25: <fileset dir="${doc}/javadoc" />
26: </delete>
27: </target>
28: <target name="build" depends="init" description="Build the program source code">
29: <javac srcdir="${src}" destdir="${build}" includes="**/*.java" classpath="${classpath}"/>
30: <copy description="Copy the ResourceBundles for all the classes" todir="${build}" overwrite="true">
31: <fileset dir="${src}">
32: <include name="**/*.properties"/>
33: </fileset>
34: </copy>
35: </target>
36: <target name="doc" depends="init">
37: <javadoc
38: sourcepath="${src}"
39: destdir="${dist}/doc/javadoc"
40: packageList="${basedir}/PackageList.txt"
41: package="true"
42: version="true"
43: use="true"
44: author="true"
45: Header="${ant.project.name} 2004"
46: windowtitle="${ant.project.name} classpath="${classpath}">
47: <bottom><![CDATA[<a href="http://elangelnegro.blogspot.com">
48: <i>Copyright &#169; 2004 Jose Vicente Nunez Zuleta. </i></a>]]></bottom>
49: </javadoc>
50: </target>
51: <target name="jar" depends="build" description="Pack the project sources for distribution">
52: <jar jarfile="${jarfile}" basedir="${build}" description="exclude all the web classes" >
53: <exclude name="**/test/*"/>
54: </jar>
55: </target>
56:</project>

Haciendo un archivo Jar del el programa (el cual contiene nuestro código en Java y el archivo de recursos) lo ejecutamos así:

[josevnz@localhost GoogleQuickSearch]$ java com.blogspot.elangelnegro.GoogleQuickSearch

"Solveig Hoogesteijn"

Solveig Hoogesteijn:
http://www.imdb.com/Name?Hoogesteijn,+Solveig
Keywords for Solveig Hoogesteijn:
http://www.imdb.com/name/nm0393566/filmokey
--FESTIVAL INTERNACIONAL DEL NUEVO CINE LATINOAMERICANO--:
http://www.habanafilmfestival.com/primerplano/index_amplia.php3?ord=4420
Cannes Film Festival:
http://www.festival-cannes.com/perso/index.php?langue=6002&personne=5690
Festival de Cannes:
http://www.festival-cannes.fr/perso/index.php?langue=6001&personne=5690
Victor Cuica - Discografía - Temas de Películas:
http://www.victorcuica.com/disco_sound.htm
Victor Cuica - Biografía:
http://www.victorcuica.com/bio_esp.htm
SOLVEIG HOOGESTEIJN:
http://www.ultimasnoticias.com.ve/ediciones/2003/01/12/p33n1.htm
SOLVEIG HOOGESTEIJN:
http://www.ultimasnoticias.com.ve/ediciones/2003/01/12/p32n1.htm
Actualidad - "La Virgen de los sicarios" proyección en el CELARG ...:
http://www.analitica.com/va/arte/actualidad/7960571.asp
[josevnz@localhost GoogleQuickSearch]$

En un próximo articulo voy a mostrarle como pasarse el limite de 10 resultados máximo de Google y como mejorar las búsquedas.

Sin categoría

%d personas les gusta esto: