Archivo

Archivo para la categoría ‘Software Libre’

Rompiendo contraseñas de documentos de MS Word

sábado, 4 de marzo de 2023 Sin comentarios

Hace 15 años dejé protegidos con contraseña una serie de documentos de Microsoft Word (versión XP/2003) que impedían su apertura. Con el pasar del tiempo y la contínua renovación de contraseñas, en algún momento puntual, dejé de recordar qué contraseña usé para proteger dichos documentos.

Pensé que en la actualidad no sería difícil encontrar algún mecanismo para romper el sistema de contraseñas que usaba MS Office en 2003 (MD5 + RC4) y me puse manos a la obra en busca de algún programa que me facilitase la tarea. Había dos planteamientos:

  • Eliminando la solicitud de la contraseña.
  • Ataque por fuerza bruta para averiguar la contraseña.

En el primer caso encontré algún artículo en Internet que, mediante la edición del documento .doc con un editor hexadecimal, eliminando la zona en la que se albergaba la contraseña se deshabilitaba la solicitud de la misma, pero no encontraba los patrones con los cuales identificarla y, tras varios intentos, aquello se convirtió en un callejón sin salida. Al menos averigüe que Office 2003 sigue funcionando en Windows 10 y de forma bastante rápida.

El segundo caso me llevó algo más de tiempo porque el mercado está lleno de páginas webs milagrosas y programas en versión demo que sólo me sirvieron para saber que la contraseña tenía más de 6 caracteres y que por fuerza bruta, con un AMD 5900X de 12 núcleos, me llevaría al menos 36 horas. Pero luego descubrí que existía una combinación de software libre bastante más potente.

Primero necesitaríamos extraer el hash de la contraseña del fichero .doc. Este trabajo lo puede hacer un script que podremos descargar desde esta URL y luego utilizaremos el proyecto de HashCat para obtener nuestro objetivo.

Teniéndolo todo en un mismo directorio, los comandos a utilizar serían los siguientes:

python3 office2hashcat.py ficheroObjetivo.doc > hash.txt

./hashcat.bin -a 3 -m 9700 hash.txt

El primer comando extrae de forma inmediata el hash de la contraseña y lo almacena en un fichero de texto «hash.txt» y tendrá el siguiente aspecto:

$oldoffice$1*04477077758555626246182730342136*b1b72ff351e41a7c68f6b45c4e938bd6*0d95331895e99f73ef8b6fbc4a78ac1a

Con lo anterior y consultando la información de la wiki de HashCat sabremos que nuestro hash-mode será el 9700 (-m 9700). Además, como carecemos de diccionario de palabras o sospechamos que no sería de utilidad para encontrar la contraseña,  indicaremos que nuestro modo de ataque será por fuerza bruta (-a 3).

Como contamos con una RTX 3800, HashCat saca provecho de ello y la utiliza para empezar el ataque que nos informa que durará como máximo alrededor de 90 minutos, bastante menos que las 36 horas que nos daban algunos programas en su versión demo. Pero el asombro llega por partida doble cuando el programa termina con éxito al cabo de 15 minutos y nos provee de una contraseña que en mi vida hubiese utilizado. Esto último se debe a las posibles colisiones que existen cuando contamos con cifrados débiles, donde dos palabras diferentes pueden tener el mismo hash.

Finalmente, la contraseña obtenida nos permite abrir esos ficheros sin mayores problemas.

Conclusiones:

  • La cantidad de desinformación, de páginas web fachada y porquería inútil es cada vez mayor en Internet. Resulta dolorosamente penoso el uso de buscadores hoy en día.
  • La contraseña que crees que no vas a olvidar en tu vida no existe, el paso de los años hace estragos en la memoria.
  • Con un hardware comercial a la mano de mucha gente se pueden romper contraseñas en minutos, donde sólo la longitud de la misma y la dureza del cifrado ponen trabas.

Error Django en Seafile

martes, 25 de enero de 2022 Sin comentarios

Si nos encontramos un error similar al siguiente en los log’s de Seafile (sobretodo al intentar crear un fichero «.md»):

django.db.utils.OperationalError: no such column: base_filecomment.uuid_id

Se debe a que en la migración a la versión 7.0 la base de datos no sufrió los cambios necesarios y nos toca hacerlos a mano.

En el caso de utilizar MySQL nos bastará con hacer lo siguiente después de haber eliminado la tabla «base_filecomment»:

CREATE TABLE `base_filecomment` (

`id` int(11) NOT NULL AUTO_INCREMENT,
`author` varchar(255) NOT NULL,

`comment` longtext NOT NULL,
`created_at` datetime NOT NULL,

`updated_at` datetime NOT NULL,
`uuid_id` char(32) NOT NULL,

`detail` longtext NOT NULL,
`resolved` tinyint(1) NOT NULL,

PRIMARY KEY (`id`),
KEY `base_filecomment_uuid_id_4f9a2ca2_fk_tags_fileuuidmap_uuid` (`uuid_id`),

KEY `base_filecomment_author_8a4d7e91` (`author`),

KEY `base_filecomment_resolved_e0717eca` (`resolved`),

CONSTRAINT `base_filecomment_uuid_id_4f9a2ca2_fk_tags_fileuuidmap_uuid` FOREIGN KEY (`uuid_id`) REFERENCES `tags_fileuuidmap` (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Si se trata de SQLite tendremos que eliminar la tabla «base_filecomment» y recrearla con lo siguiente:

CREATE TABLE «base_filecomment» (
«id» integer NOT NULL PRIMARY KEY AUTOINCREMENT,
«author» varchar(255) NOT NULL,
«comment» text NOT NULL,
«created_at» datetime NOT NULL,
«updated_at» datetime NOT NULL,
«uuid_id» char(32) NOT NULL REFERENCES «tags_fileuuidmap» («uuid»),
«detail» text NOT NULL,
«resolved» bool NOT NULL);

De Ubuntu 18.04 Server a cliente Kodi

miércoles, 15 de abril de 2020 Sin comentarios

Partiendo del hecho de que una Ubuntu Server carece de interfaz gráfica tal cual la conocemos habitualmente, a la hora de instalar un Kodi y que sea lo único que aparezca se hace algo laborioso.

Instalaremos Kodi con lo siguiente:

add-apt-repository ppa:team-xbmc/ppa
apt install kodi

En caso de tener una tarjeta gráfica de Nvidia, instalaremos su driver propietario:

apt install ubuntu-drivers-common
ubuntu-drivers devices
ubuntu-drivers autoinstall

Observando los diferentes escritorios a los que podemos optar, yo elegí Lubuntu por su ligereza:

tasksel –list-task
tasksel install lubuntu-core
service lightdm start

Con lo anterior ya deberíamos tener una interfaz gráfica donde hacer login que hará que arranque Kodi nada más entrar. Para no necesitar introducir la contraseña podemos hacer que entre automáticamente creando un fichero «/etc/lightdm/lightdm.conf.d/50-myconfig.conf» que incluya lo siguiente:

[Seat:*]
autologin-user=nombre_de_usuario
autologin-user-timeout=0

Sin embargo, nos encontraremos con problemas para hacer passthrough de sonido a través del HDMI de la gráfica. Tendremos que crear un script que se inicie con la sesión que recoja estos comandos:

echo autospawn = no > $HOME/.config/pulse/client.conf
pulseaudio –kill > /dev/null 2>&1

 

Software libre para servicios en red

domingo, 5 de abril de 2020 Sin comentarios

Desde la comunidad Self-Hosted de Reddit encontré un repertorio lleno de alternativas de software libre para cubrir las necesidades que se nos puedan pasar por la cabeza y que podemos implantar con mayor o menor dificultad en nuestro servidor. Desde luego sirve como buen punto de partida cuando sabemos que queremos algo pero no sabemos por dónde empezar a probar proyectos.

Servidor Airsonic

sábado, 4 de abril de 2020 Sin comentarios

Airsonic es un fork de Subsonic. Es software libre, programado en Java y permite hacer streaming por HTTP de una gran multitud de formatos de música. Lo que más me gusta es que me permite explorar mi colección de música bajo la estructura de carpetas, nada de etiquetas.

Requiere tener instaladas una serie de dependencias:

apt install wget openjdk-8-jre ffmpeg

La instalación no es complicada:

useradd airsonic

mkdir -p /opt/airsonic

cd /opt/airsonic

wget https://github.com/airsonic/airsonic/releases/download/v10.5.0/airsonic.war

ln -s /usr/bin/ffmpeg

chown -R airsonic:airsonic /opt/airsonic

Y para que arranque al inicio crearemos un script de este estilo («nano /etc/systemd/system/airsonic.service»):

[Unit]
Description=Airsonic Media Server
After=remote-fs.target network.target
AssertPathExists=/opt/airsonic

[Service]
Type=simple
Environment=»JAVA_JAR=/opt/airsonic/airsonic.war»
Environment=»JAVA_OPTS=-Xmx700m»
Environment=»AIRSONIC_HOME=/opt/airsonic»
Environment=»PORT=8080″
Environment=»CONTEXT_PATH=/airsonic»
Environment=»JAVA_ARGS=»
EnvironmentFile=-/etc/default/airsonic
ExecStart=/usr/bin/java \
$JAVA_OPTS \
-Dairsonic.home=${AIRSONIC_HOME} \
-Dserver.context-path=${CONTEXT_PATH} \
-Dserver.port=${PORT} \
-jar ${JAVA_JAR} $JAVA_ARGS
User=airsonic
Group=airsonic

# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
# for details
DevicePolicy=closed
DeviceAllow=char-alsa rw
NoNewPrivileges=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
SystemCallFilter=~@clock @debug @module @mount @obsolete @privileged @reboot @setuid @swap
ReadWritePaths=/opt/airsonic

# You can uncomment the following line if you’re not using the jukebox
# This will prevent airsonic from accessing any real (physical) devices
PrivateDevices=yes

# You can change the following line to `strict` instead of `full`
# if you don’t want airsonic to be able to
# write anything on your filesystem outside of AIRSONIC_HOME.
ProtectSystem=full

# You can uncomment the following line if you don’t have any media
# in /home/…. This will prevent airsonic from ever reading/writing anything there.
ProtectHome=true

# You can uncomment the following line if you’re not using the OpenJDK.
# This will prevent processes from having a memory zone that is both writeable
# and executeable, making hacker’s lifes a bit harder.
#MemoryDenyWriteExecute=yes

[Install]
WantedBy=multi-user.target

Y si necesitamos añadir algún tipo de configuración especial crearemos un fichero con «nano /etc/default/airsonic» que, en principio, lleva el siguiente contenido:

# Set the location of the standalone war to use
JAVA_JAR=/opt/airsonic/airsonic.war

# Set any java opts separated by spaces
JAVA_OPTS=-Xmx700m

# Set a different location for the airsonic home.
# If this path is /opt/libresonic or even contains «libresonic»,
# the data from a previous libresonic can be used as is (i.e. without
# renaming libresonic.properties,db/libresonic*, etc
AIRSONIC_HOME=/opt/airsonic

# Change the port to listen on
PORT=8080

# Change the path that is listened to on
CONTEXT_PATH=/airsonic

# Add any java args. These are different than JAVA_OPTS in that
# they are passed directly to the program. The default is empty:
#JAVA_ARGS=

# Note that there are several settings for spring boot, not explicitly listed
# here, but can be used in either JAVA_OPTS or JAVA_ARGS. The full list
# can be found here:
# https://docs.spring.io/spring-boot/docs/1.4.5.RELEASE/reference/htmlsingle/#common-application-properties
# For example to set debug across the board:
#JAVA_ARGS=–debug

# Or to change the IP address that is listened to:
#JAVA_ARGS=–server.address=127.0.0.1

Habilitaremos el servicio:

systemctl daemon-reload

systemctl start airsonic

systemctl enable airsonic

Reiniciando Plasma de KDE sin reiniciar el sistema

sábado, 23 de noviembre de 2019 Sin comentarios

A veces el uso de una versión inestable del entorno de escritorio puede hacer que éste sufra algún tipo de error que fuerce su cerrado y nos deje sin barra de tareas. Si en dicha ocasión reiniciar el ordenador es un inconveniente, siempre nos quedará la posibilidad de, en versiones Plasma superiores a la 5.10, usar los siguiente comandos desde un terminal o desde ALT+F2:

kquitapp5 plasmashell
kstart5 plasmashell

En versiones inferiores a Plasma 5.10, supuestamente (no lo he probado) se deben utilizar los siguientes comandos:

killall plasmashell
kstart plasmashell

Categories: GNU/Linux, Software Libre Tags: , ,

Jellyfin como sustituto de Plex

sábado, 9 de noviembre de 2019 Sin comentarios

Jellyfin es un gestor de contenido multimedia que permite hacer streaming de nuestra música, películas, series, etc. Es como un sustituto de Plex y Emby (del cual proviene) de código totalmente abierto y gratuito.

Existe una imagen preparado con él en Turnkey que nos permite tener funcionando el sistema en cuestión de pocos minutos.

Si queremos tener la posibilidad de trascodificar nuestro contenido puede ser que nos salga el siguiente error al querer utilizar, por ejemplo, nuestro navegador:

PlaybackErrorNoCompatibleStream

Para darle solución sólo tendremos que instalar ffmpeg de la siguiente forma:

apt install ffmpeg

Después, desde el panel de control de Jellyfin dentro de la sección de «Reproducción» tendremos que poner la siguiente ruta en «Ruta de FFmpeg:»:

/usr/bin/ffmpeg

Seafile con editor para ofimática

miércoles, 23 de octubre de 2019 Sin comentarios

Si tenemos funcionando un servidor de Seafile para tener nuestros documentos siempre a mano como alternativa a NextCloud, podemos dotarlo de un complemento que nos permitirá visualizar y editar ficheros en línea del tipo .odt, .docx, etc. Para ello sólo tenemos que seguir unas instrucciones bastantes básicas como usuario root para el supuesto caso de que tengamos Debian:

curl -sL https://deb.nodesource.com/setup_8.x | bash –

apt update

apt dist-upgrade

apt-get install postgresql

su postgres

psql -c «CREATE DATABASE onlyoffice;»

psql -c «CREATE USER onlyoffice WITH password ‘onlyoffice’;»

psql -c «GRANT ALL privileges ON DATABASE onlyoffice TO onlyoffice;»

exit

apt-get install redis-server

apt-get install rabbitmq-server

apt-get install npm nginx-extras

apt install dirmngr

apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv-keys CB2DE8E5

echo «deb https://download.onlyoffice.com/repo/debian squeeze main» | tee /etc/apt/sources.list.d/onlyoffice.list

apt-get update

apt-get install onlyoffice-documentserver

Después deberemos editar un fichero de configuración ( conf/seahub_settings.py ) de nuestro servidor Seafile para que derive al otro la apertura de este tipo de documentos. Concretamente hay que añadir lo siguiente:

# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
ONLYOFFICE_APIJS_URL = ‘http://mi-servidor/web-apps/apps/api/documents/api.js’
ONLYOFFICE_FILE_EXTENSION = (‘doc’, ‘docx’, ‘ppt’, ‘pptx’, ‘xls’, ‘xlsx’, ‘odt’, ‘fodt’, ‘odp’, ‘fodp’, ‘ods’, ‘fods’)
ONLYOFFICE_EDIT_FILE_EXTENSION = (‘docx’, ‘pptx’, ‘xlsx’)

Sólo nos quedaría reiniciar los servicios de Seafile y ya debería dejarnos consultar y editar los documentos desde la interfaz web.

Haciendo un wget sobre Google Drive

miércoles, 26 de diciembre de 2018 Sin comentarios

Si nos vemos ante la necesidad de descargar un fichero alojado en Google Drive desde línea de comandos, existe una pequeña utilidad escrita en Perl que será ideal.

Tan sólo tenemos que seguir estas pautas que dejó su autor:

wget https://raw.githubusercontent.com/pavanjadhaw/gdown.pl/master/gdown.pl && chmod u+x gdown.pl

./gdown.pl "enlace de Google Docs" fichero.zip

 

Categories: Software Libre Tags: ,

¿WordPress te pregunta por una cuenta FTP?

viernes, 21 de abril de 2017 Sin comentarios

Instalas WordPress en tu propio servidor y cuando intentas instalar un plugin o actualizar la versión te sale una pantalla en la que te solicita la introducción de los datos de acceso por FTP. Esto es síntoma de que los permisos sobre la carpeta «wp-content» no son correctos o que el sistema de auto-detección de modo de escritura que incorpora WordPress no termina de funcionar correctamente en tu configuración.

Podemos intentar saltarnos ese sistema de auto-detección si estamos seguros de que los permisos son correctos en la carpeta «wp-content». Para ello tendremos que indicarle el método en el fichero «wp-config.php»

define(‘FS_METHOD’, ‘direct’);

Categories: Software Libre Tags: