Automágica: durante 2017 estoy trabajando bastante en Automágica, mi software para editar libros: Más información - Posts relacionados

Limpiar Wordpress infectado

Si tenés un blog con Wordpress y te atrasás con las actualizaciones (o no) tarde o temprano te embocan (no es la primera vez que me pasa). Alguna herramienta automática detecta que estás corriendo una versión vulnerable a cierto fallo de seguridad reciente y otra inserta código malicioso en todos los archivos de tu sistema de blogging en los que pueda escribir.

Las consecuencias son que cuando tus visitantes intenta entrar al blog son redirigidos a un sitio porno o de venta de Viagra. Si se accede con Chrome a uno de estos sitios infectados, un enorme cartel rojo de avisa que el sitio incluye contenido de una web rumana reportada como distribuidora de malware.

Tu hosting te manda un mail diciéndote que no te sientas solo por que no lo estás, pero en realidad si lo estás. Te recomiendan cosas poco prácticas como actualizar, cambiar claves o restaurar un back-up previo a la infección. Tengo casi 1000 archivos .php llenos de código malicioso y me decís que cambié mis claves (?). Necesito una forma de arreglar esto.

Dejo aquí unos tips en base a mi experiencia personal, con la certeza de que en cualquier momento voy a volver a buscarlos por necesidad.

Muchas de las herramientas que agregan código malicioso (las más simples) agregan una línea al principio de todos los .php en los que pueden escribir. En mi caso esta línea tenía esta forma:

 <?php /**/ eval(base64_decode("aWYoZnVuY3...oZnVu"));?><?php

(código codificado que es decodificado y evaluado al ejecutar el archivo).

¿Qué archivos están infectados?

grep -l eval\(base64_decode -R *

¿Cuantos archivos hay infectados? (aprox.)

grep -l eval\(base64_decode -R * | wc -l

Limpiar todos los archivos:

for x in `grep -l eval\(base64_decode -R * | grep -v .back`; do sed -i.back '1d' $x ; sed -i '1 i 

El anterior comando busca todos los archivos infectados (excepto los que tienen extensión .back), les borra la primer línea y luego les agrega una primer línea "

Mejoras, sugerencias y correcciones bienvenidas!


Generar un video a partir de miles de fotos

Un par de noches atrás nos juntamos con los excompañeros de la facu en casa. Mi amigo Nico trajo su nuevo chiche, una camarita de alta resistencia que está haciendo furor por estos días: GoPro.

Una de las cosas que se puede hacer con la cámara es dejarla en algún lugar sacando fotos cada, por ejemplo, dos segundos. Luego, con un comando en Linux, puede generar un video. El resultado es muy bueno; muy acorde a lo acelerado que se vive en estos días y una forma de que los nerds avancemos varios casilleros en la escala social mostrando el artilugio.

Le pedí el pace mágico para tenerlo a mano si alguna vez me compro uno de estos aparatitos:

for a in $( seq -w 65 141);

do ls /media/3837-3763/DCIM/100GOPRO/GOPR0$a.JPG >> lista.txt; done

mencoder mf://@lista.txt -mf fps=25:type=jpg -lavcopts vcodec=mpeg4:vbitrate=3200000:mbd=2:mv0:trell:v4mv:cbp:last_pred=3:predia=2:dia=2:vmax_b_frames=2:vb_strategy=1:precmp=2:cmp=2:subcmp=2:preme=2:vme=5:naq:qns=2 -vf scale=1280:1024 -oac copy -audiofile soundtrack.mp3 -o video-1024.avi


El hack del día: cómo usar Citrix desde Ubuntu

Con el nombre genérico de Citrix, se suele conocer dentro de muchas empresas a una solución de virtualización de aplicaciones (XenApp) muy utilizada en corporaciones que permite a los usuarios conectarse con su PC a un servidor remoto y ejecutar las aplicaciones que allí se encuentran. Con esto se logra por ejemplo: reducir el gasto en licencias y centralizar actualizaciones.

En la empresa donde trabajo (una multinacional del rubro de las telecomunicaciones) lo usa. Además de aplicaciones de gestión de equipos, dentro de "Citrix", se puede correr un escritorio remoto. Esto permite, desde una PC con Internet, acceder a tu puesto de trabajo respetando las políticas de seguridad que haya dispuesto la empresa.

Ok, quiero acceder desde GNU/Linux. En particular Ubuntu, el SO que uso en mi notebook. El la mayoría de los casos, no vamos a tener soporte para esto. Escribo las siguientes instrucciones con la esperanza de que a alguien le sirva dentro de su organización.

Lo primero que necesitamos es un software cliente. Es la parte fácil. Podemos bajar el cliente e instalarlo. El ejecutable queda en:

/usr/lib/ICAClient/wfcmgr

Al intenatr ejecutarlo puede ser que obtengamos un error diciendo que falta la bibiloteca libXm.so.4. en Ubuntu 10.04 no viene la versión 4 de esta biblioteca, sino la 3.

Podemos instalar la versión 3:

sudo apt-get install libmotif3

y engañarlo; parece funcionar sin problemas:

sudo ln -s /usr/lib/libXm.so.3.0.2 /usr/lib/libXm.so.4

Lo siguiente que falta es un certificado, de lo contrario al intentar conectarnos obtendremos un error diciendo que no hemos especificado que confiamos en el host que nos servirá las aplicaciones.

A los usuarios de Windows les dan un archivo binario de extesión .p7b al que le hacen click derecho y eligen la opción "Instalar certificado". En GNU/Linux no es tan fácil y luego de buscar bastante en Internet, no encontré la forma de instalarlo, pero la solución me llegó casi Inspiración Divina o por Instinto Animal.

Utilicé el comando strings para leer cadenas de texto dentro del archivo .p7b y con grep busqué .crt, la extensión de los certificados:

strings XXXX.p7b | grep .crt

Encontré una url dentro de la empresa, me bajé el certificado y lo guardé en /usr/lib/ICAClient/keystore/cacerts, que es donde Citrix Xen App guarda los certificados.

Voilá! Estaba adentro.


Cómo unir videos en GNU/Linux

Ayer en Carlos Pellegrini fue el Día del Pueblo. Una de las actividades que hubo fue una carrera de autos con obstáculos. Aproveché para filmar un poco y probar mi nuevo celular, por lo que terminé con varios archivos mp4. Para subirlos a Internet quería unirlos: ¿cómo hacerlo de forma fácil? Si tenés varios archivos de texto y querés unirlos, o expresándome de forma más correcta, contactenarlos, usás el comando cat. ¿Se puede hacer lo mismo con videos? Suena algo loco cuando se escucha por primera vez, pero hay algunos formatos que SI lo soportan, como mpeg 1 y 2.

Usando ffmpeg podemos convertir los archivos mp4 a mpeg. Parados en el directorio donde estén los videos:

for i in ls *.mp4; do ffmpeg -i $i -sameq $i.mpeg; done

Ahora simplemente los concatenamos y redirigimos la salida de cat a un nuevo archivo:

cat *.mpeg > video.mpeg

Notemos que el orden lexicográfico de los videos coincide con el orden en que fueron tomados; por eso puedo usar el * y obtener un resultado ordenado en el tiempo.

Listo, subí el resultado a YouTube.

Me hubiese gustado una transición más suave entre video y video, pero investigarlo y hacerlo excedía la ecuación costo beneficio. Se escuchan ideas!


Cómo cambiar el puerto de salida por defecto de ssh

Si en una terminal tipeamos:

ssh user@domain.com

el cliente ssh intentará contactarse al puerto 22 de domain.com. Cómo cambiamos ese puerto?

ssh -p 2222 user@domain.com

Pero qué pasa si no tenemos acceso a cambiar ese parámetro? Puede pasarnos esto? Sí, por ejemplo si accedemos a un repositorio cvs por ssh; cuando ejecutamos uno de los comandos cvs, el tunel ssh se hace sin que nos demos cuenta. Si el servidor al que nos queremos conectar escucha en un puerto distinto al por defecto, tenemos un problema.

Hoy no me acordaba cómo se configuraba esto y resultó bastante tedioso buscarlo en Internet (todas las respuestas a la búsqueda era sobre como cambiar el puerto en el que un servidor ssh escucha). Lo dejo aquí para futuras referencias.

La forma de configurar un puerto por defecto para un cliente ssh en GNU/Linux es editando el archivo .ssh/config y añadiendo la línea:

Port NNNN

dónde NNNN es el número de puerto.


Borrar todos los archivos de un directorio menos los que...

terMenos los que respetan un PATRON:

for a in ls | grep -v PATRON; do rm -fr $a; done

Menos los que contienen tar.gz en su nombre:

for a in ls | grep -v tar.gz; do rm -fr $a; done

Útil en muchas situaciones.

La línea de comandos es tu amiga.


Alarmas en GNOME

Nunca había usado esta aplicación hasta hoy. Estoy muy concentrado trabajando en la computadora, mensaje por IM: "llamame en 15 minutos". "Mmmm", pienso. "Me voy a olvidar". Debe haber alguna herramienta en mi escritorio que me permita resolver esto, es algo realmente sencillo. Busco: GNOME + alarma, encuentro: Gnome Alarm (el paquete se llama alarm-clock).

Pantallazo-Alarma

Cargo una alamar para dentro de 14 minutos. Si, la búsqueda llevo solo 1. ¡Genial! No solo por la herramienta (es sencilla pero extremadamente útil) sino por el ecosistema de software que es el Software Libre; no creo que en otro ámbito puedas tener una necesidad, pensar en un programar y que exista para solucionar tu problema solo por que antes ya alguien tuvo el problema y lo solucionó. Allí estaba la herramienta, lista para usar.

Llevo media hora, y ya la usé dos veces :)



Borrar muchas líneas con vim

Hoy necesité este comando. Voy a anotarlo aca para tenerlo a mano la próxima vez.

Dentro de vim:

:.,$-10d

Desde dónde estoy parado (.) hasta el final ($), borrar menos las últimas 10 (-10d).


Jargon Fortunes

Hoy recuperé un viejo backup de fortunes para el comando fortune de GNU/Linux.

Fortune es un programa que al ser invocado imprime en pantalla una cita aleatoria. Las citas provienen de archivos ubicados generalmente en /usr/share/games/fortunes pero también puede recibir el directorio dónde están los archivos de citas como parámetro.

juanjo@albus:~$ fortune

If two people love each other, there can be no happy end to it.

-- Ernest Hemingway

juanjo@albus:~$ fortune

The smallest worm will turn being trodden on.

-- William Shakespeare, "Henry VI"

Uno de los archivos que recuperé contenía un programa que convierte el Jargon File en un archivo que se puede usar con fortune. Just for fun cree un sitio web en que una definición distinta del Diccionario de los Hackers es mostrada cada vez que se accede:

http://jargon.juanjoconti.com.ar