setxkbmap: Cambiar layout del teclado

Posted on August 15th, 2008 in tutoriales by Miggs

setxkbmap sirve para cambiar el layout del teclado desde sesiones X. Muy útil, cuando uses ordenadores que no sean tuyos.

USO

Muy sencillo, lo de siempre

$ setxkbmap us # Cambia al layout de US.
$ setxkbmap es # Cambia al layout Español.

Recuerda al reiniciar sesión los cambios se perderán. Si quieres cambiarlo permanentemente, edita el xorg.conf


SUSE Enterprise 10, updatedb y locate

Posted on July 22nd, 2008 in Linux, tutoriales by Miggs

Los de Suse Enterprise cada dia lo hacen peor, no hay duda… Si queréis contar con updatedb y locate os tendréis que bajar los fuentes e instalarlos vosotros mismos… El paquete se llama findutils y los podréis encontrar aqui o dentro de /gnu/findutils/ en vuestro repositorio favorito; ex: ftp://mirrors.kernel.org/gnu/findutils/

Instalacion

Muy sencillo, lo de siempre

$ wget ftp://mirrors.kernel.org/gnu/findutils/findutils-4.4.0.tar.gz
$ tar -xvvf findutils-4.4.0.tar.gz
$ cd findutils-4.4.0
$ sudo ./configure
$ sudo make
$ sudo make install
# Por ultimo
$ sudo updatedb

Ya podréis utilizar el locate como habéis echo siempre.


awk: elemento separador

Posted on July 1st, 2008 in Linux, Programacion, tutoriales by Miggs

Nota rápida pero quite handy. Como cambiar el símbolo separador de argumentos en awk (por defecto es el espacio)

# awk -F. ‘{…}’

Saludos


Forma Rapida Segura y Sencilla de ELIMINAR archivos

Posted on July 1st, 2008 in Linux, Programacion, Seguridad, tutoriales by Miggs

El otro dia mi jefe me pidio que le llamase antes de borrar un archivo para asegurarnos de que realmente los datos eran eliminados. El proceso es simple, sobreescribir el contenido del archivo con datos. Idilicamente se debería de hacer con datos aleatorios, pero tampoco es cuestion de ser paranoicos. Basta con repetir el proceso unas cuantas veces antes de borrarlo. En cualquier si alguien tiene a mano como hacerlo correctamente que escriba un comentario y lo anado.

$ sed -i -e ’s/./X/g’ ./path/to/fichero

Saludos


Generador de palabras. Wordgenerator.c

Posted on May 23rd, 2008 in FreeBSD, Linux, Programacion, Seguridad, tutoriales by Miggs

beastyHace tiempo, trasteando con las redes wifi y la clásica encriptacion WEP llegue a un punto en el que necesitaba una diccionario de claves. Como las claves eran ’semi-aleatorias’ no me servia cualquier diccionario, necesitaba algo que me generase todas las posibles claves de determinada longitud con un determinado juego de caracteres. Así que decidí poner en buen uso mis conocimientos de C y crearme una herramienta que me lo hiciera. El problema era conceptual mente simple así que me puse manos a la obra.

Inicialmente resolví el problema con recursividad (lento), mejorandolo mas tarde utilizando un algoritmo lineal (mucho mucho mas rápido). Aquí os dejo el código fuente.

Compilar

Si dispones de gcc el proceso es muy sencillo.

$ gcc -o wordgenerator.c wordgenerator

Ejecucion

Desde la linea de comandos basta con

$ ./wordgenerator

Código

//Librerias necesarias
#include<stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
//Prototipos
int getOptions(int,char**,char**,int*,int*);
void ayuda();
void generator(char *, char *,int, int);
//
//Funcion: wordgenerator.c
//Description: Genera palabras linear o recursivamente.
//Autor: Miggs
//Date: 18/10/2006
//
int main (int argc, char *argv[])
{
//Caracteres a usar por defecto
char *c = “1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM”;
int len;
//Usamos recursividad?
int r = 0; //No a no ser que nos lo pidan…

if(getOptions(argc,argv,&c,&len,&r)<0)
ayuda();

char actual[len + 1];
actual[len] = ‘\0′;

if(r == 0){
//Lineal = rapido
int i,j;
for(i = 0; i < len ; i ++)
for(j = 0; j< strlen(c) ; j ++){
actual[i] = c[j];
printf(”%s\n”,actual);
}
}else
//Recursividad = lento
generator(c,actual,len,0);
return 0;
}
//
//Funcion: generator
//Description: funcion recursiva
//Date: 18/10/2006
//
void generator(char *c,char *actual, int len, int level)
{
int i;
if(level < len)
{
for(i = 0; i < strlen(c);i = i + 1){
actual[level] = c[i];
generator(c,actual,len,level+1);
}
}
else
printf(”%s\n”,actual);
}

//
//Funcion: getOptions
//Description: Interpreta las opciones de la linea de comandos
//Date: 18/10/2006
//
int getOptions(int argc, char **argv, char **vC, int *l, int *r)
{
int c;
int retValue = -1;

while((c = getopt(argc, argv, “l:c:r”)) != -1){
switch(c){
case ‘l’:
*l = atoi(optarg);
if(*l > 0)
retValue = 1;
break;
case ‘c’:
*vC =optarg;
break;
case ‘r’:
*r = 1;
default:
break;
}
}
return retValue;
}

//
//Funcion: ayuda
//Description: Imprime la ayuda por pantalla
//Date: 18/10/2006
//
void ayuda()
{
printf(”\n// wordGenerator 0.1 6/Feb/2008\n”);
printf(”// icaix.com//\n”);
printf(”\n Uso:\n”)//
printf(” ./wordGenerator [-C CaracteresAUsar] [-r] -l <longitudPalabra> \n”);
printf(”\n Generacion palabras de longitud 3, metodo lineal\n”);
printf(” ./wordGenerator -l 3\n”);
printf(”\n Generacion palabras de longitud 3, metodo recursivo\n”);
printf(” ./wordGenerator -r -l 3\n”);
printf(” Generacion palabras de longitud 3 con vocabulario abcdefghABCDEFGH\n”);
printf(” ./wordGenerator -l 3 -C abcdefghABCDEFGH\n\n”);
_exit(0);
}


Configuracion del sonido FreeBSD en nc6400

Posted on May 22nd, 2008 in FreeBSD, tutoriales by Miggs

beastyAl instalar FreeBSD 7.0 para tener sonido en el portátil, es necesario ordenarle explicitamente al sistema que cargue el modulo de sonido corespondiente. Esto afortunadamente es una tarea relativamente simple que se arregla insertando una linea en /boot/loader.conf.

Tarjeta de sonido

Para ver los dispositivos PCI del pc utilizamos el comando ‘pciconf’:

# pciconf -l -cv

[..]
vendor = ‘Intel Corporation’
device = ‘82801G (ICH7 Family) High Definition Audio’
class = multimedia
cap 01[50] = powerspec 2 supports D0 D3 current D0
cap 05[60] = MSI supports 1 message, 64 bit
cap 10[70] = PCI-Express 1 type 0
[..]

Modulo de sonido: snd_hda.ko

Es necesario cargar el modulo snd_hda para que el audio funcione correctamente.

# kldload snd_hda

Para cargar el modulo automáticamente durante el arranque del sistema, añade la siguiente linea en /boot/loader.conf

snd_hda_load=”YES”


Resolucion nativa 1280×800 en FreeBSD 7.0, Compaq nc6400

Posted on May 22nd, 2008 in FreeBSD, tutoriales by Miggs

beastyTal y como suele ocurrir al instalar Debian, una de las primeras batallas a las que se enfrenta uno es configurar la configuración de X11. FreeBSD no es diferente, especialmente en resoluciones diferentes a 1024×768. En mi caso, dispongo de un compaq nc6400 equipada con un Core 2 Duo T5500, 3 GB de RAM, disco SATA de 250 GB y afortunadamente el chipset GM945 de intel. La pantalla es de 14.1” con una resolución nativa de 1280×800. El proceso no es complicado en si pero si que puede llevar algo de tiempo a los recién iniciados como me ocurrió a mi.

Por cierto, aquí os dejo un ‘must have’ a todos los que migréis de Linux a FreeBSD y viceversa Unix/Linux/BSD Cheat Sheet.

Especificaciones H.W. de mi equipo relevantes al manual.

  • Chipset GM945, AGP.
  • Resolución nativa de la pantalla: 1280×800.

Necesidades:

  • modulo i915
  • Paquete i915resolution.

Paso 1: Asegurarnos que el i915 esta cargado.

En FreeBSD para ver los modulos cargados en cada momento se utiliza el comando ‘klbstat’

# kldstat

En caso de que no este en la lista el modulo ‘i915.ko’ tendras que cargarlo.

# kldload i915

Para cargar el modulo automáticamente durante el arranque añade la siguiente linea en /boot/loader.conf

i915_load=”YES”

Paso 2: Instalacion paquete i915resolution.

Es necesario tener instalado este paquete para permitir algunas resoluciones especificas, como por ejemplo 1280×800 en nuestro caso. Hay muchas formas de instalar paquetes, una de ellas es.

# pkg_add -r i915resolution

Una vez instalado agrega las siguientes lineas a /etc/rc.conf

i915resolution_enable=”YES”
i915resolution_modes=”3c”
i915resolution_width=1280
i915resolution_height=800

Configuracion: /etc/X11/xorg.conf

Este es mi xorg.conf.

Section “Files”
FontPath “/usr/share/fonts/X11/misc”
FontPath “/usr/share/fonts/X11/cyrillic”
FontPath “/usr/share/fonts/X11/100dpi/:unscaled”
FontPath “/usr/share/fonts/X11/75dpi/:unscaled”
FontPath “/usr/share/fonts/X11/Type1″
FontPath “/usr/share/fonts/X11/100dpi”
FontPath “/usr/share/fonts/X11/75dpi”
EndSection

Section “Module”
Load “i2c”
Load “bitmap”
Load “ddc”
Load “dri”
Load “extmod”
Load “freetype”
Load “glx”
Load “int10″
Load “vbe”
EndSection

Section “InputDevice”
Identifier “Generic Keyboard”
Driver “kbd”
Option “CoreKeyboard”
Option “XkbRules” “xorg”
Option “XkbModel” “pc105″
Option “XkbLayout” “de”
EndSection

Section “Device”
Identifier “Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller”
Driver “i810″
BusID “PCI:0:2:0″
Option “AGPMode” “4″
Option “AGPFastWrite” “yes”
Option “ColorTiling” “on”
Option “EnablePageFlip” “yes”
Option “DynamicClocks” “true”
Option “BIOSHotkeys” “true”
EndSection

Section “Monitor”
Identifier “Generic Monitor”
ModelName “1280X800@60HZ”
Option “DPMS”
VendorName “Hp”
Modeline “1280×800″ 80.58 1280 1344 1480 1680 800 801 804 827
EndSection

Section “Screen”
Identifier “Default Screen”
Device “Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller”
Monitor “Generic Monitor”
DefaultDepth 24
SubSection “Display”
Depth 24
Modes “1280×800″
EndSubSection
EndSection

Section “ServerLayout”
Identifier “Default Layout”
Screen “Default Screen”
EndSection

Section “DRI”
Mode 0666
EndSection

Section “Extensions”
Option “Composite” “Enable”
EndSection


Instalacion por red con PXE. Ubuntu/Debian

Posted on December 26th, 2007 in Linux, tutoriales by Miggs

Requisitos

  • Un servidor DHCP
  • Un servidor tftp (trivial ftp) con soporte hpa.

Instalación Requisitos

Suponiendo que disponemos de una maquina con Debian o alguna de sus variantes, obtengamos los paquetes necesarios:

$ sudo apt-get install dhcp3-server tftpd-hpa

Configuración

Servidor Dhcp

Una vez instalados es necesario configurar el servidor de dhcp. El archivo de configuración suele encontrar en /etc/dhcp3/dhcpd.conf, es bueno hacer un backup.

$ sudo cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.confBackup

Edita lo con tu editor favorito. Aquí os dejo el contenido de mi fichero de configuración:

option domain-name-servers 192.168.1.1;
default-lease-time 86400;
max-lease-time 604800;
authoritative;

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.70 192.168.1.100;
filename “pxelinux.0″;
next-server 192.168.1.106;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
}

Es importante que NO SOLO copiéis y peguéis. Comprobar que los parámetros son correctos, con especial atencion a:

  • option domain-name-servers -> servidor de dns, en mi caso el propio gateway.
  • subnet -> Rango de la propia LAN.
  • range -> Rango en el que el servidor de dhcp concedera ips.
  • filename -> Nombre del archivo desde que el que comenzar el proceso de arranque. Este fichero en mi caso se encuentra en el directorio raiz del servidor de tftp.
  • next-server -> direccion donde se encuentra el servidor de tftp.
  • routers -> Direccion del gateway

Reiniciad el servidor para que los cambios tengan efecto

$ sudo /etc/init.d/dhcp3-server restart

Servidor de tftp

Una vez instalado el servidor de tftp descarguemos los ficheros que utilizaremos para el inicio de la instalación.

Si usas Ubuntu -> netboot.tar.gz

Si prefieres Debian -> netboot.tar.gz

Una vez descargado descomprime lo en /var/lib/tftpboot/

$ sudo tar -xvvf NombreFichero.tar.gz –directory /var/lib/tftpboot/

En este caso NO es necesario reiniciar el servidor de tftp.

Comprobación que los servidores están arrancados

Intoduciendo $ netstat -uap. Deberian de aparecer dos procesos en escucha udp en el puerto 68 para dhcpd y 69 para tftpd. En caso de que falte alguno de los dos intenta arrancarlos.

DHCP: $ sudo /etc/init.d/dhcp3-server start
TFTP: $ sudo /etc/init.d/tftpd-hpa start


Transferir archivos con netcat

Posted on April 22nd, 2007 in Linux, tutoriales by Miggs

Introducción

Como transferir archivos entre dos maquinas interconectadas entre si de una manera rápida y sencilla usando netcat.

Requisitos

Descripción

Servidor

  • Al equipo donde se encuentra el archivo a copiar lo denominamos ‘Servidor’.
  • El servidor permanecerá en escucha hasta que el cliente se conecte a el.
  • Una vez el cliente se conecte, el servidor transferirá el contenido del archivo.
  • Una vez completada la transmisión, se cierra la conexión.

# nc -l -p 1234 < fichero.ext -q 0

-l modo de escucha.
-p puerto de escucha.
‘fichero.ext’ nombre del fichero a copiar
-q tiempo en segundos antes de salir una vez completada la transferencia.

Cliente

  • Al equipo donde queremos recibir la información lo denominaremos ‘Cliente’.
  • El cliente se conecta al servidor.
  • La información reciba una vez conectado la guardaremos en ‘fichero.ext’.
  • Una vez completada la transmisión, se cierra la conexión.

# nc servidor 1234 > Copiafichero.ext

servidor Hostname o ip del servidor
1234 puerto de escucha en el servidor
‘Copiafichero.ext’ nombre de la copia

Limitaciones

  • Netcat no usa ningún tipo de encriptación.
  • Por cada archivo a transferir es necesario crear un servidor.
  • Puertos por debajo de 1024 [0-1023] necesitan privilegios de administrador.

Video Tutorial: Backtrack 2 | Remote brute force attack

Posted on April 13th, 2007 in Linux, Seguridad, tutoriales by Miggs

Una de las responsabilidades de los administradores de sistemas es limitar el acceso a aquellos usuarios con autorización para entrar en el mismo. Con el fin de bloquear el acceso a terceros se crearon las contraseñas. Cada usuario posee un ‘nombre de usuario’ y una contraseña. Cada vez que un usuario quiere acceder al sistema se le piden dichos datos. Si el nombre de usuario y la contraseña coinciden con los almacenados en el servidor le permitimos el acceso, si no, se lo denegamos.

Uno de los problemas de este sistema surge cuando una tercera persona se hace pasar por uno de nuestros usuarios. Siempre y cuando conozca el nombre de usuario y su password se le permitirá el acceso, independientemente de que la persona no sea quien dice ser.

Otro problema es que si el acceso a sido denegado, el usuario puede volver a intentar acceso n numero de veces (normalmente n es infinito). Por lo general, limitar el número de intentos puede bloquearnos el acceso, haciendo del remedio peor que la enfermedad.

Un ataque muy común que se hace uso de dichas ‘vulnerabilidades’ son los ‘ataques basados en diccionarios’ (dictionary-based attack). El ataque consiste en bombardear al servidor con nombres de usuarios y contraseñas aleatorios. Es algo parecido a intentar abrir una caja fuerte introduciendo números al azar. Si alguna vez te has encargado de algún servidor ssh o ftp seguramente los hayas sufrido.

Ya que el número de posibles combinaciones de usuarios y passwords posibles es demasiado alto, en este tipo de ataque normalmente se usan diccionarios. Un diccionario (de passwords y/o usuarios) es un fichero de texto con nombres de usuario y passwords frecuentemente usados. Por ejemplo, en la mayor parte de sistemas nos solemos encontrar un usuario ‘root‘, y, estadísticamente hablando, passwords como ‘1234‘ o ‘qwerty‘ son usadas mas frecuentemente que ‘a\/gW1~3|23‘. Como te podrás imaginar, para diferentes idiomas se usan diferentes diccionarios.

Pero entonces…? SI!, La única manera de que este ataque funcione es que la combinación usuario-password este en tu diccionario, o en otras palabras, una mala gestión de usuarios/passwords.

El motivo por el que este tipo de ataques están tan extendidos es porque con un simple script podemos testear cientos o miles de servidores de forma automática sin necesidad de intervenir en el proceso. Otro motivo es que los ‘chicos malos’ necesitan ordenadores desde los que realizar sus ataques.

En un ataque real conseguir acceso al sistema es solo el primer paso. Una vez dentro se suele instalar como mínimo algún troyano con el cual garantizar el acceso en caso de que se cambie la password. Hay ocasiones en el que el atacante simplemente cambia la password para levantar sospecha y darle a conocer al usuario que su password es débil.

En este video tutorial os muestro un ejemplo práctico de cómo realizar este tipo de ataques y por supuesto como detectar su presencia.

Detalles técnicos

  • La distro usada para realizar el ataque es Backtrack 2, versión Live.
  • Para escanear la red y localizar posibles víctimas se uso nmap.
  • Para el ataque en si utilizamos medusa (~# man medusa).
  • El diccionario usado pertenece a ‘john the ripper‘ (Incluido por defecto en Backtrack 2).
  • El servidor de ssh en la víctima es una instalación estándar de OpenSSH.

Ver video tutorial

Video Tutorial: Backtrack 2 | Remote brute force attack

Pulsa aquí o sobre la imagen para acceder al vídeo tutorial.

Detección y prevención

La mejor forma de detectar este y cualquier tipo de ataque es comprobando los logs y analizando cualquier anomalía. En su día escribí un post llamado ‘Navegando entre los logs’ donde hable de cómo el servidor en el que se encuentra alojado esta web, Fujiyama, estaba en constante estado de alerta.

En ‘Consejos básicos: Mantener un servidor del ssh’ menciono las practicas mas habituales para evitar este tipo de ataques sobre servidores de ssh. En esa época decidí cambiar el puerto de escucha del servidor de ssh y desde entonces no he recibido ningún ataque en los dos últimos meses.


Next Page »