Archive for the ‘how to’ Category

HowTo: Intalar Skipfish en Ubuntu.

Skipfish es una herramienta para escaneo de vulnerabilidades en sitios web muy completa desarrollada por gente de google que al terminar el escaneo presenta los resultados en forma muy amigable (html).

Para instalarlo en ubuntu necesitaremos:

  1. Descragar sikpfish aquí.
  2. Instalar algunos paquetes ( libssl-dev y libidn11-dev ) ya sea con synaptic o en linea de comandos:

      sudo apt-get install libssl-dev libidn11-dev
     
  3. Descomprimir el paquete en alguna carpeta
    e.j.


      cd /tmp && tar -zxvf /opt/descargas/skipfish-1.13b.tgz
     
  4. Usando una terminal ir a la carpeta del skipfish y ejecutar make:

      cd /tmp/skipfish && make
     
  5. ahora necesitamos copiar un diccionario de la carpeta …/skipfish/dictionaries a …/skipfish con el nombre “skipfish.wl”:

      cp /tmp/skipfish/dictionaries/default.wl /tmp/skipfish/skipfish.wl
     
  6. Finalmente podemos correr un test:

      mkdir /tmp/results
       /tmp/skipfish/skipfish -o /tmp/results http://localhost/myweb
     

Es importante revisar los readme’s que están tanto en la carpeta skipfish como en la dictionaries.

Happy Testing !!

Por petición.. algunas screenshots:
skipfish corriendo

Reporte generado por skipfish (HTML)

HowTo: Explorar un equipo remoto por medio de ssh y nautilus (sftp)

Una de las funcionalidades más interesantes del escritorio gnome es sin duda el gvfs (gnome virtual file system – Sistema virtual de archivos de gnome) por medio del cual podemos explorar gráficamente distintos equipos remotos de una forma simple y como si fuera local.

Para realizar la exploración es necesario conectarnos a estos equipos remotos mediante algún protocolo como smb (samba – comparticiones de windows), ftp, webdav, sftp (secure ftp) entre otros.

En esta ocasión veremos el caso de sftp que nos permite conectarnos a un equipo que tenga instalado el openssh y esté corriendo el servidor del mismo, esto nos permite explorar todo el contenido al que tenga acceso el usuario (del equipo remoto) con el que nos conectemos.

Para comenzar necesitamos tener instalados algunos paquetes:

Del lado del equipo remoto:


  sudo apt-get install openssh-server
 

Del lado del equipo cliente:


  sudo apt-get install sshfs openssh-client
 

Ya que tenemos estos paquetes instalados abrimos el nautilus en su modo de navegador y damos click en el botón de cambiar la barra de dirección entre botones y texto para que podamos escribir la dirección a la que queremos llegar.


Una vez que tenemos la barra de dirección editable escribimos la linea de conexión de esta forma:


  ssh://<ip>/<carpeta o direccion en el equipo remoto>
 

Tambien podemos agregar el usuario a la linea de conexión de esta forma:


  ssh://<usuario>@<ip>/<carpeta o direccion en el equipo remoto>
 

Despues damos enter y nos aparecerá una ventana en la que nos pedirá el nombre de usuario (si no lo incluimos en la linea de conexion) y contraseña y en donde podemos elejir una opción para manejar las identidades y al dar click ok.



Si los datos son correctos nautilus mostrara los archivos de la carpeta a la que nos acabamos de conectar..


En algunos casos puede aparecer un error que indica que nautilus no sabe como manejar el protocolo sftp pero puede ser un simple error del nautilus que no afecte la conexión. La forma de comprobar esto es observar los elementos de la barra lateral ya que, si se encuentra conectado, debe aparecer un elemento con la leyenda “sftp” como este:



También se puede observar el icono de la conexión en el escritorio.

Algo interesante de gvfs es q te deja hacer uso de los archivos de forma casi local, es decir, si queremos editar un archivo simplemente le damos doble click y este se abrirá y me dejara editarlo y al guardar los datos se guardaran en el equipo remoto. También podemos reproducir vídeo y audio sin mayor problema y sin necesidad de copiar el archivo a nuestro equipo.

Una vez que se a terminado de usar la conexión esta puede ser cerrada dando click al icono de “eject” que esta en la barra lateral a un lado de la carpeta montada:

Para cerrar la conexión también se puede dar click derecho a la carpeta que aparece en el escritorio y seleccionar la opción desmontar

Una vez que el elemento desaparezca de la barra lateral la conexión abra quedado cerrada.

Nota Extra:

Las conexiones establecidas quedan montadas en una carpeta con el nombre de la conexión y se crea dentro de una carpeta llamada .gvfs que esta en el directorio del usuario que hizo la conexión.

Espero que sea útil esta información.

HowTo: Realizar consultas a una base de datos sqlite desde java.

Sqlite no es un gestor de bases de datos como MySql, Oracle o PostgreSql sino que, es una librería que permite tener una base de datos transaccional en un archivo sin necesidad de un servidor o configuración alguna lo cual puede llegar a ser muy útil para cierto tipo de proyectos que no requieran un servidor dedicado de base de datos.

Para poder utilizar este tipo de bases de datos como nuestra capa de persistencia en java todo lo que necesitamos es la librería (jar) o “driver” que puede ser descargado desde aquí.

Una vez descargada la librería de sqlite para java, podemos agregarlo a nuestro buildpath si es que estamos usando una IDE como eclipse o netbeans o agregarlo al classpath al momento de compilar la aplicación.

Para realizar la conexión únicamente necesitamos agregar las siguientes lineas:


  Class.forName("org.sqlite.JDBC");
  Connection conn = DriverManager.getConnection("jdbc:sqlite:sqliteFile");
 
  • La primera linea se encarga de cargar la clase de la librería sqlite.
  • La segunda linea crea una conexión a la base de datos auto contenida (archivo).
  • “sqliteFile” es la ruta completa del archivo (ej. /opt/base1.sqlite) que contiene o contendrá la base de datos, si el archivo no existe sera creado eh inicializado y si ya existe sera usado.

Una vez creada la conexión podemos usarla para acceder a la base de datos.


  PreparedStatement ps = null;
  ps = conn.prepareStatement("insert into tabla1 values (?);");
  ps.setInt(1,10);
  ps.execute();
  ps.close();
 

Hay que tomar en cuenta que por el carácter de este tipo de bases de datos no se puede escribir cuando se tiene un flujo de lectura abierto o leer cuando se tiene un flujo de escritura abierto, es decir, al realizar una transacción en la base de datos esta se bloquea hasta que la transacción se cierra por lo que es muy importante cerrar dicha transacción tan pronto como sea posible.
Se recomienda hacer uso de los prepared statements y de los batch y realizar todas las transacciones de una sola vez.


  PreparedStatement ps = null;
  ps = conn.prepareStatement("insert into tabla1 values (?);");
  for(int i=0; i < 20 ; i++){
    ps.setInt(1,i);
    ps.addBatch();
  }
  conn.setAutoCommit(false);
  ps.executeBatch();
  conn.commit()
  ps.close();
 

Tambien hay que recordar cerrar los ResultSet en cuanto se terminen de usar.


  PreparedStatement ps = conn.prepareStatement("SELECT * FROM tabla1");
  ResultSet rs = ps.executeQuery();
  while(rs.next()){
    System.out.println(rs.getString(1));
  }
  rs.close();
 

Para finalizar dejare el codigo de un ejemplo completo:


/** @author cool2k
* fecha 05/JUN/2009
*
* Ejemplo para crear una base de datos con la libreria sqlite y crear algunas entradas.
*
*/

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class sqlite {

private sqlite(){}

/**
*
* @param args
* @throws ClassNotFoundException
* @throws SQLException
*/
public static void main(String[] args)
throws ClassNotFoundException, SQLException{
Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite:/tmp/db1.sqlite");
PreparedStatement ps = null;

conn.prepareStatement("create table tabla1(id,nombre,apellido,telefono)").execute();
conn.prepareStatement("create table tabla2(id,usuario,password,email)").execute();

conn.setAutoCommit(false);

ps = conn.prepareStatement("insert into tabla1 values(?,?,?,?)");
ps.setInt(1, 1);
ps.setString(2, "Juan");
ps.setString(3, "Perez");
ps.setString(4, "55123456");
ps.addBatch();
ps.setInt(1, 2);
ps.setString(2, "José");
ps.setString(3, "Peres");
ps.setString(4, "55345612");
ps.addBatch();
ps.setInt(1, 3);
ps.setString(2, "Ana");
ps.setString(3, "Perez");
ps.setString(4, "55561234");
ps.addBatch();
ps.executeBatch();
conn.commit();
ps.close();

ps = conn.prepareStatement("insert into tabla2 values(?,?,?,?)");
ps.setInt(1, 1);
ps.setString(2, "jperez");
ps.setString(3, "mypass");
ps.setString(4, "j.perez@correo.com");
ps.addBatch();
ps.setInt(1, 2);
ps.setString(2, "joperes");
ps.setString(3, "mypass2");
ps.setString(4, "jose.peres@correo.com");
ps.addBatch();
ps.setInt(1, 3);
ps.setString(2, "aperez");
ps.setString(3, "mypass3");
ps.setString(4, "ana@correo.com");
ps.addBatch();
ps.executeBatch();
conn.commit();
ps.close();

conn.close();

}
}
 

Espero que esta entrada les sea de ayuda.
Saludos !!

HowTo: Cambiar la resolucion de la consola (tty)

Día con día nuestros escritorios linux van mejorando y se ven más y más impresionantes y nos permiten hacer más y más cosas con herramientas gráficas pero, ya sea por costumbre, facilidad, rapidez o por falta de una opción gráfica, algunas veces tenemos que usar la consola de linea de comandos.

Existen varios emuladores de la consola de linea de comandos en el ambiente gráfico (gnome-terminal, xterm, konsole,..) pero algunos usuarios podemos preferir o necesitar usar la consola real (ctrl+alt+[F1 o F2 o F3 …. F7]) y al pasar a ella encontramos, normalmente, que sin importar el tamaño de nuestro monitor o la capacidad de la tarjeta gráfica la consola luce exactamente igual que desde hace 20 años, es decir, nos encontramos con un numero muy reducido de lineas y columnas por pagina y letras de tamaño enorme.

Podemos cambiar esto de una forma muy sencilla cambiando la resolución de la consola siguiendo estos pasos:

1.- Abrimos el archivo con un editor en modo superusuario.


  gksu gedit /boot/grub/menu.lst

 

o


  sudo nano /boot/grub/menu.lst
 

2.- Buscamos en la parte final del archivo la entrada del kernel que usamos para iniciar linux normalmente:


  title Ubuntu 8.10, kernel 2.6.27-9-generic
  root (hd0,0)
  kernel /vmlinuz-2.6.27-9-generic root=UUID=xxxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx ro quiet splash
  initrd /initrd.img-2.6.27-9-generic
  quiet
 

3.- editamos la linea que empieza con "kernel" y agregamos la opción vga=xxx o si ya existe cambiamos el valor por el que necesitemos de la tabla de resoluciones siguiente:

Colores 640x480 800x600 1024x768 1280x1024 1600x1200 Preguntar al inicio
8 bits vga=769 vga=771 vga=773 vga=775 vga=796 vga=ask
16 bits vga=785 vga=788 vga=791 vga=794 vga=798 vga=ask
32 bits vga=786 vga=789 vga=792 vga=795 vga=799 vga=ask

de modo que debe quedar así:


  kernel /vmlinuz-2.6.27-9-generic root=UUID=xxxxxxx-xxx-xxxx-xxxx-xxxxxxxxxxxx ro quiet splash vga=791
 

En este caso lo estoy configurando para obtener una resolución de 1024x768 con 16bits de colores.

4.- Reiniciar el equipo.

Nota:

Sí después de reiniciar el sistema manda error y no nos deja bootear podemos editar temporalmente la opción desde el menú de inicio de grub. Solo hay que seleccionar la opción a editar (del menú de inicio de grub) y presionar la tecla "e" después seleccionar la linea a editar (la que empieza con kernel) y presionar nuevamente la tecla "e". En este punto nos da un cursor con el que podemos movernos y editar la opción vga a otro valor que si sea aceptado o incluso podemos quitar la opción vga por completo.
Una vez concluida la edición salimos del modo editor con la tecla "Esc" y después presionamos la tecla "b" para iniciar nuestro sistema con las opciones editadas.

Saludos!.

How To: Descargar Torrents Via Web (ImageShack)

Algunas veces nos encontramos con que la red a la que estamos conectados no permite usar bittorrent para descargar archivos, sin importar el cliente que usemos ( vuze — antes conocido como azureus –, utorrent, deluge, transmissionbt, etc) el resultado es el mismo, no hay descargas!!

Existe una forma para solucionar este problema, se llama ImageShack TorrentDrive que no es otra cosa más que un muy util servicio web que ofrece ImageShack que nos permite descargar torrents en su servidor directamente y a partir de ahí descargarlos a nuestro equipo en forma de descarga directa.

Los torrents se descargan a muy buena velocidad y la descarga directa se puede acelerar usando un gestor de descargas vinculado al navegador (FDM) o alguno otro que soporte envío de cabecera personalizado (para enviar los datos de la sesión y así poder descargar el archivo ).

Para usar imageshack es necesario:

  1. Registrarse (solo hay que proporcionar nuestro correo y un nombre de usuario).

     
     

  2.  

  3. Ya que estamos registrados iniciamos sesión.

     

  4.  

  5. Iniciada la sesión nos dirigimos a la seccion de torrents.

     
     

  6.  

  7. En esta sección podemos comenzar las descargas de dos formas, por un lado podemos subir el archivo .torrent que tengamos almacenado en disco o podemos pegar la url de descarga de algún archivo .torrent que consigamos en algún lado como mininova.org

     
     
    En la parte superior podemos ver el estado de nuestra cuenta, es decir, el espacio de almacenamiento disponible y usado y la cantidad de bandwidth que aun tenemos disponible (el bandwidth es reseteado mensualmente).

     
     

  8.  

  9. Podemos seleccionar la opción de “Edit Selection” que nos permite seleccionar los archivos que queremos descargar.

    Al terminar la selección podemos optar por salvar y comenzar descarga o solo salvar y damos click en el botón continuar.

  10.  

  11. Si elegimos “Begin Torrent” o en la pantalla de selección de archivos optamos por guardar y comenzar, la descarga intentara iniciar pero puede ser que no ocurra debido a 2 cosas:
     

    1. El limite de descargas simultaneas se ah alcanzado (2).
    2.  

    3. El limite de descargas permitidas para usuarios de cuentas gratuitas se ah alcanzado (pool común).

     
    En el primer caso es necesario esperar a que se acabe una descarga o detenerla manualmente para poder iniciar la nueva descarga.
    En el segundo caso es necesario continuar intentando hasta que se libere un puesto de descarga y nuestra descarga pueda iniciar, para esto, se puede usar un plugin ( Reloadevery o TabMixPlus ) de firefox que permite refrescar la pantalla automáticamente.

  12.  

  13. Finalmente ya podemos ver el estado de nuestras descargas y una vez terminadas podemos descargarlas a nuestro disco duro dando click en el botón “Download”.

 
 
Espero les sea de ayuda.
 
Saludos!

HowTo: Habilitar un puerto seguro en un servidor Apache Tomcat.

Para Habilitar el puerto seguro (https) en tomcat se necesitan 2 cosas; crear un certificado y modificar el archivo de configuración del tomcat.

Crear certificado.

Para generar las llaves necesitamos usar la herramienta “keytool” que se encuentra dentro del directorio en donde esta instalado java y ahí encontraremos la herramienta keytool en la ruta “/java/bin/keytool”.

  1. Primero necesitamos generar una llave y un keystore, para ello usamos el comando:

      keytool -keystore myks.ks -genkeypair – alias mycert
     

    Este comando generara una llave llamada “mycert” y las almacenara en un keystore (almacén) llamado “myks.ks”, sí el almacén no existe lo generara.

  2. En este punto nos debe pedir la contraseña para el almacén.

      Escriba la contraseña del almacén de claves:
     
  3. Despues nos pide los datos para la llave que se generara:

      ¿Cuáles son su nombre y su apellido?
        X1
      ¿Cuál es el nombre de su unidad de organización?
        X2
      ¿Cuál es el nombre de su organización?
        X3
      ¿Cuál es el nombre de su ciudad o localidad?
        X4
      ¿Cuál es el nombre de su estado o provincia?
        X5
      ¿Cuál es el código de país de dos letras de la unidad?
        MX
     
  4. Despues de proporcionar estos datos nos pregunta si la informacion es correcta, a loque tenemos que responder si o no (yes o no en el caso de que este en ingles).

      ¿Es correcto CN=X1, OU=X2, O=X3, L=X4, ST=X5, C=MX?
     
  5. De ser correcta lnos pide una clave para la llave que acabamos de generar, puede ser lamisma del keystore (recomendable) o puede ser otra (tomcat requerirá mayor configuración).

      Escriba la contraseña para la clave (INTRO si es la misma contraseña que la del almacén de claves):
     
  6. Despues de Proporcionar esta clave se generara la llave y quedara almacenada, para desplegarla podemos usar este comando:

      keytool -keystore myks.ks -list
     
  7. Despues de proporcionar la clave que asignamos para el almacén nos mostrara la información.

      Escriba la contraseña del almacén de claves:

      Tipo de almacén de claves: JKS
      Proveedor de almacén de claves: SUN

      Su almacén de claves contiene entrada 1

      mycert, 3/09/2008, PrivateKeyEntry,
      Huella digital de certificado (MD5): CB:31:21:87:25:B4:38:5B:E1:97:C1:BC:28:D0:85:E0  
     

  8. En este punto ya podemos copiar el archivo myks.ks a la carpeta del tomcat.

Configurar Tomcat.

Una vez que tenemos el keystore en el directorio del tomcat (/tomcat/myks.ks) hay que modificar el archivo server.xml que se encuentra en “/tomcat/conf/server.xml” de la siguiente forma.
Buscar la parte “<Connector port=”8443″ ” y sí esta comentada la descomentamos y depues la editamos para que quede de la siguiente forma:


  <Connector port="8443" maxHttpHeaderSize="8192"
     maxThreads="150" minSpareThreads="25"
     maxSpareThreads="75"
     enableLookups="false" disableUploadTimeout="true"
     acceptCount="100" scheme="https" secure="true"
     clientAuth="false" sslProtocol="TLS"
     keystorePass = "123123"
     keystoreFile = "myks.ks"
  />  
 

Sí el password de la llave es diferente al del almacén de llaves tenemos que agregar esta propiedad a la configuración anterior:


  keypass="pwd de la llave"
 

Sí el almacén de llaves contiene más de una llave y queremos especificar una en especifico usamos el alias de la llave y agregamos esta propiedad a la configuración del puerto:


  keyAlias="alias de la llave"
 

En este ejemplo tenemos un keystore llamado myks.ks en el directorio raiz del tomcat (/tomcat/myks.ks) y el password para el keystore es 123123; El puerto que ah quedado configurado para que podamos accesar al servidor por un canal seguro es el 8443, los demas valores son valores estandar y deben de quedar igual que como el ejemplo.

Si queremos restringir el servidor para que solos sea accesible por medio de este puerto, buscamos la sección “<Connector port=”8080″ ” y la dejamos comentada.


  <!-- <Connector port="8080" maxHttpHeaderSize="8192"
     maxThreads="150" minSpareThreads="25"
     maxSpareThreads="75"
     enableLookups="false" acceptCount="100"
     connectionTimeout="20000" disableUploadTimeout="true" /> -->  
 

Con esto ya tenemos configurado el apache tomcat para que funcione con puerto seguro, si el servidor esta corriendo hay que reiniciarlo para que aplique las nuevas configuraciones.

Saludos!

How To: Nombrar y Renombrar Particiones (discos) en linux.

Algunas veces tenemos que cambiar el nombre a nuestras unidades de disco duro o, más comúnmente, a dispositivos de almacenamiento masivo extraible (discos duros portátiles, memorias usb, memorias SD, etc).
Resulta que en linux en realidad no es tan difícil como parecería aunque, antes de cambiar las etiquetas, necesitamos instalar algunos paquetes si es que aun no los tenemos instalados.

Para renombrar las particiones necesitamos instalar los siguientes paquetes:

 

  • mtools
  • ntfsprogs
  • e2fsprogs
  • jfsutils
  • reiserfsprogs
  • xfsprogs

 


  sudo apt-get install mtools ntfsprogs e2fsprogs jfsutils reiserfsprogs xfsprogs
 

Una vez instalados estos paquetes podemos pasar al siguiente paso, desmontar la unidad que queremos renombrar pues no sera posible renombrarla si esta montada.
Para desmontar la unidad podemos hacerlo con el siguiente comando:

 
  sudo umount <dispositivo.>
 

  sudo umount /dev/sda1
 

ó

 
sudo umount <ruta en la que esta montado el dispositivo.>
 

  sudo umount /boot
 

Para identificar los dispositivos montados usamos el siguiente comando:


  mount
 

la primera parte de cada linea corresponde al identificador del dispositivo en linux, la siguiente parte corresponde a la ruta en la que esta montado el dispositivo.
Ejemplo:


  >mount
  /dev/sda1 on /boot type ext3 (rw)
  /dev/sda2 on /home type reiserfs (rw)
 

Identificador del dispositivo en linux: /dev/sda1
Ruta en la que esta montado: /boot

Con la unidad desmontada ya podemos renombrarla.

  • fat16 y fat32.
    Comprobar la etiqueta actual:

     
      sudo mlabel -i <dispositivo> -s ::
     

      sudo mlabel -i /dev/sda1 -s ::
     

    Renombrar:

     
      sudo mlabel -i <dispositivo> -s ::<etiqueta>
     

      sudo mlabel -i /dev/sda1 -s ::boot
     
  • NTFS.
    Comprobar la etiqueta actual:

     
      sudo ntfslabel <dispositivo>
     

      sudo ntfslabel /dev/sda1
     

    Renombrar:

     
      sudo ntfslabel <dispositivo> <etiqueta>
     

      sudo ntfslabel /dev/sda1 boot
     
  • ext2 y ext3.
    Comprobar la etiqueta actual:

     
      sudo e2label <dispositivo>

     


      sudo e2label /dev/sda1
     

    Renombrar:

     
      sudo e2label <dispositivo> <etiqueta>
     

      sudo e2label /dev/sda1 boot
     
  • JFS.
    Comprobar la etiqueta actual:

     
      sudo jfs_tune -l <dispositivo>
     

      sudo jfs_tune -l /dev/sda1
     

    Renombrar:

     
      sudo jfs_tune -l <etiqueta> <dispositivo>
     

      sudo jfs_tune -l boot /dev/sda1
     
  • ReiserFS.
    Comprobar la etiqueta actual:

     
      sudo reiserfstune -l <dispositivo>
     

      sudo reiserfstune -l /dev/sda1
     

    Renombrar:

     
      sudo reiserfstune -l <etiqueta> <dispositivo>
     

      sudo reiserfstune -l boot /dev/sda1
     
  • XFS.
    Comprobar la etiqueta actual:

     
      sudo xfs_admin -l <dispositivo>
     

      sudo xfs_admin -l /dev/sda1
     

    Renombrar:

     
      sudo xfs_admin -l <etiqueta> <dispositivo>
     

      sudo xfs_admin -l boot /dev/sda1
     
  • Saludos.