logotipo

El otro día estuve en el cine viendo Buscando a Dory, una película totalmente recomendable si te gustó Buscando a Nemo. El caso es que compramos las entradas por internet (5.90€ cada entrada). El bendito desarrollo tecnológico que nos permite reservar un asiento desde la comodidad de nuestro hogar. Un par de clicks, introduces tu información de pago y te mandan a tu correo un link con tu entrada.

Este link es una url así: http://compraentradas.com/EntradaMail/373[…]6133 y contiene un código de barras que posteriormente se escanea en el propio cine y se imprimen tus entradas:

Captura de pantalla de 2016-06-25 16-40-48

Pero… no hay ningún método de autenticación del usuario, por lo que cualquiera puede acceder a esa entrada si tiene el link. Investigando un poco veo que los ids de las entradas van aumentando pero no son consecutivas. Se podría probar con un ataque de fuerza bruta probando números hasta dar con una pelicula que nos convenza, en un cine cercano y en un horario que nos venga bien, imprimirla e ir al cine antes que su legítimo dueño. Una vez dentro procura sentarte en otro asiento por si van a buscarte.

Pero como ya he dicho, estamos en el siglo XXI y la tecnología nos lo pone más fácil todavía. En compraentradas.com tienen un sistema que te permite recuperar tus entradas si las has perdido( http://www.compraentradas.com/CompruebaCompra ). Para ello te pide el cine y la fecha de compra como datos obligatorios y tu email, el código de entrada o el número del código de barras:

 

He perdido la entrada pero me sé el código de barras o la referencia. Si.

Esto te devuelve la entrada (o entradas (?) ) que coinciden con los criterios de búsqueda. Y si sabes como funciona puedes verlo como una máquina de entradas gratis.El caso es que esto huele a SQL injection desde aquí. Y no del difícil, basta con utilizar la palabra mágica ‘ or ‘1’=’1 en el campo de código de barras o referencia. Por lo visto a alguien no le pareció importante filtrar esa entrada de datos. Ahora seleccionamos el cine al que queremos ir, como fecha de compra hoy, o hace pocos días y como código de barras todos los que hagan cumplir que 1=1:

Captura de pantalla de 2016-06-25 17-02-38

Esa búsqueda, por ejemplo, devuelve 287 resultados. 287 entradas entre las que elegir. Las que tienen la etiqueta “CORRECTA” enlazan al código de barras listo para imprimir:

Captura de pantalla de 2016-06-25 17-05-03

Me quedo con Star Wars.

Captura de pantalla de 2016-06-25 17-10-58

 

PD: Los de compraentradas están ya informados. Daos prisa o lo arreglarán 😀

EDIT: Este método ya no funciona, pero viendo la calidad de la plataforma probablemente encontréis más formas de atacar este sistema.

63592313146119228768743262_1123676

Hoy os traigo un truco para forzar la actualización de historial de comandos de la terminal para que se realice justo después de ejecutar cualquier comando. Por defecto hay que cerrar la terminal y abrir otra nueva, lo cual es bastante molesto cuando sueles trabajar con muchas terminales a la vez. Para hacer esto añadimos a nuestro .bashrc la siguiente línea:

export PROMPT_COMMAND='history -a'

Esto ejecutará el comando history -a justo antes de imprimir el prompt por pantalla, lo que viene a significar que siempre tendremos el history actualizado.

BONUS: Aumentar tamaño del historial:

Actualmente el tamaño de almacenamiento es demasiado barato como para almacenar solo los 500 ultimos comandos. Si queremos almacenar más, debemos modificar la variable $HISTSIZE y establecerla al valor que estimemos oportuno.

BONUS2: No guardar comandos repetidos:

Si queremos cambiar el molesto comportamiento de guardar varias veces el mismo comando cuando lo ejecutamos muchas veces seguidas podemos añadir la línea:

export HISTCONTROL=erasedups

BONUS3: ignorar algunos comandos:

Por último, si añadimos comandos separados por punto y coma en la variable $HISTIGNORE, no los almacenará en el historial al ejecutarlos. Por ejemplo, no nos sirve guardar los history así que podríamos hacer:

export HISTIGNORE="history"

Espero que sea útil 😉

Fuente

 

Chrome-Remote-Desktop es una herramienta de Google, aún en beta pero usable, que nos permite compartir la pantalla y el control de nuestra máquina con otros dispositivos desde Chrome. Lo malo es que para Linux sólo ofrecen un .deb y ninguna información sobre como instalarlo en sistemas que manejen RPM, pero vamos a ver que no es tan difícil.

Primero descargamos la extensión de Chrome: Chrome-Remote-Desktop

Luego, cuando intentamos compartir nuestro escritorio, nos redirige a la descarga del .deb. Guardamos el archivo en lugar seguro. Ahora hay que transformarlo en .rpm con alien:

sudo dnf install dpkg fedora-packager python-psutil xorg-x11-server-Xvfb
alien -r chrome-remote-desktop_current_amd64.deb

Por último, instalamos el rpm generado. Si con dnf install da problemas, se puede forzar la instalación:

sudo rpm -Uvh --force chrome-remote-desktop-50.0.2661.22-2.x86_64.rpm

No es lo más recomendable pero funciona.Ahora tenemos que hacer un nuevo grupo e incluirnos, además de crear carpetas y archivos de configuración necesarios:


sudo groupadd chrome-remote-desktop
sudo usermod -G chrome-remote-desktop joselito    # Cambiar por tu user
sudo chkconfig chrome-remote-desktop on
echo 'exec startxfce4' >> ~/.chrome-remote-desktop-session
mkdir ~/.config/chrome-remote-desktop
sudo mkdir -p /etc/chromium-browser/native-messaging-hosts
sudo ln -s /etc/opt/chrome/native-messaging-hosts/* /etc/chromium-browser/native-messaging-hosts/

Una vez hecho esto, lo demás es seguir las instrucciones de la aplicación:

Captura de pantalla de 2016-04-17 12-20-05

swap1

La memoria de intercambio o swap es útil en aquellos ordenadores con una memoria RAM limitada. Sin embargo en máquinas modernas con 4GB de memoria o más también suele estar presente. Su funcionamiento se basa en copiar a disco duro la información que no cabe en la RAM, pero con la configuración que suelen traer las distribuciones por defecto, esta copia se hace mucho antes de que sea realmente necesario.
El parámetro que tiene en cuenta el kernel para decidir cuando empezar a usar la SWAP es el swappiness, un valor entre 0 y 100 y que por defecto suele estar en 60. A más bajo esté, mas llena ha de estar la RAM para que se empiece a usar (con 0 no se utilizará nunca) por lo que desde aquí recomiendo bajarlo a una valor entre 5 y 10. Notarás un incremento del rendimiento de tu máquina, pues las lecturas/escrituras en disco son varios ordenes de magnitud mas lentas que en memoria.
Para consultar el valor de swappiness que tenemos configurado actualmente hacemos:

cat /proc/sys/vm/swappiness

y para modificar este valor:

sudo sysctl -w vm.swappiness=10

Una vez hecho esto, podemos probar el rendimiento del sistema durante un tiempo para ver si mejora o no. Si estamos contentos con el cambio (ya os adelanto que lo estaréis) podemos hacerlo permanente modificando el archivo de configuración de sysctl:

su -c "echo 'vm.swappiness=10' >> /etc/sysctl.conf"

Fuente

El principal motivo por el que todavía utilizo Google Chrome en vez de Firefox como navegador predeterminado es porque tenía un error que me desquiciaba, y es que el texto que introduzco en los text-input de determinadas páginas (sobre todo Youtube) me aparecía en blanco, al igual que el fondo, lo que hacía que no pudiese ver lo que estaba escribiendo a no ser que seleccionase el texto, y esto se volvía bastante molesto. Creo que tiene que ver con mi tema de GTK, pero por más vueltas que le di no conseguí solucionarlo, por lo que acabé usando Chrome por defecto.

Hoy he descubierto un truco para añadir estilos CSS personalizados que se cargarán en todas las páginas que visitemos. Para ello solo tenemos que localizar el archivo ~/.mozilla/firefox/xxxxxxxx.default/chrome/userContent.css. Si no existe lo creamos y si hay más de una carpeta xxxxxxxx.default podemos mirar en el archivo profiles.ini cual es la asociada a nuestro perfil.

Una vez lo tenemos localizado, insertamos los estilos personalizados que queramos. En mi caso serán:


input:not(.urlbar-input):not(.textbox-input):not(.form-control):not([type='checkbox']) {
-moz-appearance: none !important;
background-color: white;
color: black;
}

#downloads-indicator-counter {
color: white;
}

textarea {
-moz-appearance: none !important;
background-color: white;
color: black;
}

select {
-moz-appearance: none !important;
background-color: white;
color: black;
}

Captura de pantalla de 2016-02-17 20-01-23

Además, también se pueden modificar los colores de la barra de marcadores y demás elementos de la interfaz de Firefox:


#PersonalToolbar { color: black; }   /* Barra de favoritos*/
#searchbar { color: black; }    /* Barra de búsqueda*/
#main-menubar  { color: black; } /* Menu principal*/
#urlbar { color: black; }    /* Barra de url*/

 

Facil, verdad?

diagram02

 

Cuando ejecutamos un programa en segundo plano suele ser para no volver a saber de él hasta que termine, dejándolo trabajar de forma autónoma. Pero es posible que necesitemos enviar datos a la entrada estándar de dicho programa o leer de su salida estándar. Existen 2 formas de hacerlo:

La forma mas sencilla es leer/escribir en el fd(descriptor de archivo) estándar correspondiente al PID del proceso con el que nos queramos comunicar. Por si alguien no lo sabe, la entrada estándar es el fd 0, la salida estándar el 1 y la salida de error el 2. Estos descriptores de archivo se encuentran en el directorio /proc/<PID>/fd/. 

Como demostración voy a lanzar un cat que lea de la entrada estándar y voy a introducirle los datos desde otro terminal:

Captura de pantalla de 2015-12-21 11-02-42

La segunda forma consiste en redireccionar un archivo fifo al programa con el que queramos hablar antes de mandarlo al background y luego introducir los datos en dicho fifo:

Captura de pantalla de 2015-12-21 11-15-51

El comando cat> /tmp/fifo-entrada & es importante porque evita que el proceso con el que vamos a hablar reciba un fin de archivo nada mas ejecutarlo. Cuando queramos que realmente envíe un EOF y termine tendremos que hacer un kill este cat, cuyo PID tenemos guardado en la variable pid_cat.

Esta segunda solución es más portable puesto que no en todos los sistemas existe el directorio /proc/pid/fd

Fuente

33ffe1d2fccb053

En ocasiones, al grabar imágenes .iso en memorias flash con dd se corrompe la tabla de particiones del dispositivo y se queda inutilizable. Según la magnitud del destrozo, es posible que ni siquiera gparted sepa arreglarlo. Para esos momentos lo mejor es tener a mano fdisk y arreglarlo “a mano”.

Esta aplicación probablemente venga instalada en tu distribución. Para empezar, vamos a ver el nombre del dispositivo en cuestión con:

# fdisk -l

Una vez lo identificamos, por ejemplo /dev/sdb, ejecutamos:

# fdisk /dev/sdb

Y nos pide los comandos que queramos realizar sobre ese dispositivo. Estos cambios no se escriben hasta que no ejecutamos ‘w’, por lo que si te equivocas, puedes empezar de nuevo sin peligro.

Lo que queremos hacer es borrar la lista de particiones y crear una nueva partición. Ejecutamos:

o (borra la tabla)

n(crea una partición)

p(esta partición será primaria)

1(numero de partición)

Luego dejamos los valores de tamaño por defecto (todo el dispositivo)

t(elegir tipo de formato)

w(escribir datos permanentemente)

Después de esto, tendremos un pen como nuevo

 

black-and-white-city-jungle-loading-Favim.com-714413

Para grabar una iso en un dispositivo para hacerlo booteable se suele utilizar dd, una herramienta sencilla pero que no ofrece una barra de progreso, lo cual es incómodo si estamos trabajando con archivos de varios gigas y tenemos que esperar a que acabe sin tener la certeza de que va a acabar algún día.

Para solucionar esto os traigo la herramienta pv (Normalmente disponible en los repositorios). Básicamente lo que hace es copiar la entrada estándar a la salida estándar, pero mostrando algo de Feedback por pantalla, como el tiempo transcurrido, el porcentaje completado, o el tiempo estimado. Por lo tanto, redirigiendo entradas y salidas, lo que antes hacíamos asi:

dd if=Fedora-Live-Workstation-x86_64-22.iso of=/dev/sda

Ahora lo hacemos asi:

dd if=Fedora-Live-Workstation-x86_64-22.iso | pv | dd of=/dev/sda

Además de dd, pv se puede utilizar con cualquier otro comando, como copias de datos vía nc,…

Fuente

FFmpeg-logo

m3u es un formato de archivo que define la localización de uno o varios archivos multimedia y que últimamente se está usando en los servicios de vídeo en streaming como powvideo y parecidos. En mi proyecto streaming-dl necesitaba interpretar este tipo de archivo para descargar el vídeo al que referencia y la forma más sencilla que he encontrado es con ffmpeg ( Instalado en cualquier ordenador que se precie ) de este modo:

ffmpeg -i http://url.com/archivo.m3u8 -c copy "Archivo-de-salida"

Esto detectará el formato de entrada y descargará correctamente el archivo en el directorio actual.

Fuente

SQLite

Hace unos días, mi instalación de Owncloud dejó de funcionar de repente. Por algún motivo, ninguno de mis dispositivos sincronizaba los datos con el servidor. Tras revisar los logs, me encuentro con un error de la base de datos sqlite: “database disk image is malformed”. Esto quiere decir que el archivo de la base de datos está corrupto. Por suerte es fácilmente arreglable porque, aunque el formato del archivo sea erróneo, los datos suelen seguir intactos.

Para empezar, comprobamos que, efectivamente, el archivo está corrupto:

echo 'PRAGMA integrity_check;' | sqlite3 database.db

Este comando suele devolver un simple ‘ok’, pero en este caso no lo hará, sino que nos informará de todas las cosas que no encajan. Luego hacemos un dump de todos los datos a otro archivo así:

sqlite3 database.db 
 sqlite> .mode insert
 sqlite> .output dump.sql
 sqlite> .dump

Por último, generamos otra base de datos con la información recopilada:

sqlite3 database_2.db 
 sqlite> .read dump.sql
 sqlite> .exit

No podemos olvidar que estamos rescatando datos de un archivo corrupto, por lo que es posible que algunas tuplas se pierdan, pero siempre es mejor recuperar algo que nada. Aunque sería mejor no tener que hacer esto por tener una copia de seguridad actualizada xP

Fuente