Blog de hacking e in-seguridad informática

Blog de hacking e in-seguridad informática

[HTB-writeup] Player


Comencemos con un poco de escaneo:
nmap 10.10.10.145 -sC -sV -n -Pn -p- -oA nmap.tcp
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   1024 d7:30:db:b9:a0:4c:79:94:78:38:b3:43:a2:50:55:81 (DSA)
|   2048 37:2b:e4:31:ee:a6:49:0d:9f:e7:e6:01:e6:3e:0a:66 (RSA)
|   256 0c:6c:05:ed:ad:f1:75:e8:02:e4:d2:27:3e:3a:19:8f (ECDSA)
|_  256 11:b8:db:f3:cc:29:08:4a:49:ce:bf:91:73:40:a2:80 (ED25519)
80/tcp   open  http    Apache httpd 2.4.7
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: 403 Forbidden
6686/tcp open  ssh     OpenSSH 7.2 (protocol 2.0)
Service Info: Host: player.htb; OS: Linux; CPE: cpe:/o:linux:linux_kernel

(Se ha omitido UDP por no haber devuelto resultados interesantes).

Antes de continuar, añadiremos player.htb a /etc/hosts para facilitar la enumeración.

Tras un vistazo rápido al puerto 80:

Por lo que vamos a intentar encontrar hosts virtuales:
wfuzz -c -w /usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-20000.txt --hc 400,404,403 -H "Host: FUZZ.player.htb" -u http://player.htb -t 100
********************************************************
* Wfuzz 2.4 - The Web Fuzzer                           *
********************************************************

Target: http://player.htb/
Total requests: 19983

===================================================================
ID           Response   Lines    Word     Chars       Payload                                                                                                                                           
===================================================================

000000019:   200        86 L     229 W    5243 Ch     "dev"                                                                                                                                             
000000067:   200        63 L     180 W    1470 Ch     "staging"                                                                                                                                         
000000070:   200        259 L    714 W    9513 Ch     "chat" 

Tras añadir los resultados a /etc/hosts podemos hacer un poco de fuzzing en la URL principal y en los vhost dev, staging y chat:
gobuster dir -r -x php -t 100 -u http://player.htb -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
gobuster dir -r -x php -t 100 -u http://dev.player.htb -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
gobuster dir -r -x php -t 100 -u http://staging.player.htb -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
gobuster dir -r -x php -t 100 -u http://chat.player.htb -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt

Como ya sabemos, la enumeración es importantísima para una futura explotación, por lo que vamos a ir anotando todo lo que nos vaya llamando la atención.

RCE no autenticado en Citrix Netscaler y Gateway (CVE-2019-19781)

El 17 de Diciembre de 2019, Citrix anunció que NetScaler ADC (Application Delivery Controller) y Citrix Gateway tenían una vulnerabilidad que puede permitir a un atacante no autenticado ejecutar código en gateways vulnerables.

Esto condujo a una ola de titulares alarmantes sobre "80.000 empresas" expuestas debido a esta fallo. Lo más interesante es que Citrix no publicó un parche sino un workaround que, básicamente, añade una política para denegar estas peticiones:
enable ns feature responder
add responder action respondwith403 respondwith "\"HTTP/1.1 403 Forbidden\r\n\r\n\""
add responder policy ctx267027 "HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/vpns/\") && (!CLIENT.SSLVPN.IS_SSLVPN || HTTP.REQ.URL.DECODE_USING_TEXT_MODE.CONTAINS(\"/../\"))" respondwith403
bind responder global ctx267027 1 END -type REQ_OVERRIDE
save config

Como podéis comprobar, una regla para bloquear intentos de explotar path traversal... ¿Y cómo se consigue ejecución remota de código a través de este path traversal?

El 10 de enero, Rio Sherri, consultor de seguridad de MDSec, publicó un post destacando el código en la función 'csd' del módulo perl UserPrefs que "construye una ruta desde el encabezado HTTP NSC_USER sin ningún tipo de sanitización" y se activará con cualquier script que llame a la función:
sub csd {
        my $self = shift;
        my $skip_read = shift || "";
  # Santity Check
    my $cgi = new CGI;
print "Content-type: text/html\n\n";

// Username variable initialized by the NSC_USER HTTP Header
    my $username = Encode::decode('utf8', $ENV{'HTTP_NSC_USER'}) || errorpage("Missing NSC_USER header.”); <- br="" mark="" this="">
    $self->{username} = $username;
...
    $self->{session} = %session;

// Constructing the path from the username.
        $self->{filename} = NetScaler::Portal::Config::c->{bookmark_dir} . Encode::encode('utf8', $username) . '.xml’;
        if($skip_read eq 1) {
                return;
        }

BusKill: un cable USB contra los "tirones" de portátil

Imagina que estás en una cafetería con tu portátil, en la página de tu banco o en otro servicio importante, y de repente alguien coge tu portátil y sale corriendo... ¿qué pasaría si ese alguien se aprovechara de que estabas autenticado para realizar cualquier acción rápidamente?

Quizás no te diera tiempo a llamar al banco para que congelaran tus cuentas, o avisar a tu empresa para forzar un logout, etc.

Pues leyendo encontré una solución bastante original para bloquear, apagar o "autodestruir" el ordenador cuando está físicamente separado de uno mismo: BusKill.

Se trata de un cable USB conectado al equipo y alguna parte del cuerpo (la muñeca por ejemplo, que os veo venir) y que al tirar y desconectarse realice esa acción inmediata que nos salve el culo. Esto se puede mejorar aún más utilizando un conector magnético. Por ejemplo, los siguientes elementos son suficientes para construir este cable USB de "interrupción":

Lo más visto del 2019 en Hackplayers

En esta época de arraigada tradición no quería dejar escapar las últimas horas de este año 2019 sin publicar el top 50 de entradas más vistas en el blog, excusa como siempre para hacer un brevísimo balance y desearos a todos un feliz y próspero 2020.

Creo que este año ha sido un buen año para la Comunidad, empezando por el reconocimiento en MundoHacker como impulsores de talento, el vuestro, el de todos los que estáis leyendo y que de alguna manera habéis participado contribuyendo y debatiendo todo lo relacionado con la temática que nos apasiona: el hacking y la in-seguridad informática. A todos vosotros un guiño de complicidad y muchas gracias por estar siempre ahí.

Pero no puedo despedirme de este año sin hacer también mención especial como siempre a la familia (a mis niñas) y a los que habéis estado más cerca, a los compis del curro con los que he trabajado codo con codo y viajado a otras conferencias y jugado en algún CTF que otro. También a los de los grupos de Telegram, sobretodo a los de mi equipo de gigantes de L1k0rd3b3ll0t4 y a los organizadores y resto de staff de h-c0n que en esta nueva edición la estamos preparando buena... Así que a los que estéis el 31 de enero y 1 de febrero en Madrid espero veros allí y, a los que no podáis, pues seguir escribiéndonos y viéndonos virtual o físicamente, compartiendo experiencias, anécdotas y más de una cerveza, que es de lo que se trata... ;)

¡Gracias y a por el 2020!

1 El abc para desproteger un Excel con contraseña
2 Listado de códigos secretos de Android
3 Grupos de Telegram sobre hacking y seguridad informática en español
4 8 servicios proxy gratuitos para evitar restricciones y mantener el anonimato y la privacidad : hackplayers
5 Ya llega BlueKeep... aka ejecución remota de código en RDP
6 Taller para escalar privilegios en Windows/Linux
7 hackplayers: Blogroll en español
8 iDict, una herramienta de fuerza bruta para obtener contraseñas de usuarios de iCloud
9 100 grupos de hackers famosos
10 Cómo clonar la tarjeta SD de la Raspberry Pi

Aprovechando el Directorio Activo como C2 (Command & Control)

En un directorio activo, por defecto, todos los usuarios autenticados tienen acceso de escritura a algunos de sus propios atributos y acceso de lectura a los atributos de otros usuarios. Por increíble que parezca, se puede abusar de los atributos de usuario con acceso de lectura/escritura para almacenar payloads y convertir así al directorio activo en un auténtico C2.

La idea no es nueva, de hecho ya la expuso harmj0y en su blog en 2016, que además creó un script en powershell para usar la propiedad 'msmqsigncertificates' para escribir el payload en el atributo del usuario. La ventaja de usar 'msmqsigncertificates' es que tiene un tamaño máximo de 1 MB y también tiene el PAS (Partial Attribute Set), es decir, los payloads almacenados en 'msmqsigncertificates' se propagarán a todas las copias del catálogo global en el bosque.

Entonces básicamente el procedimiento será el siguiente: un usuario cambia su propiedad mientras que otro usuario consulta continuamente la información que se puede leer por todos y luego informa los resultados a sus propios "certificados de msmqsignce". Es decir, tenemos un canal de datos bidireccional de 1 MB.


En el escenario propuesto por akijos, Aki (el atacante) creará un payload utilizando el cmdlet 'New-ADPayload'. El payload se comprimirá utilizando la compresión .NET [IO.Compression.DeflateStream] y luego los datos en Base64 se almacenarán en el atributo 'msmqsigncertificates'. Esto también creará como resultado un script en Powershell que debe ejecutarse en la máquina Victim (Tom Hanks).

Writeup CTF clasificatorio HTB x UNI

El pasado 20 de noviembre tuvo lugar el HTB x UNI CTF, el primer CTF de HackTheBox orientado exclusivamente a equipos de distintas universidades de todo el mundo. En este caso, el CTF era una competición clasificatoria de la cual saldrían clasificados para la final los 15 equipos universitarios con mejor puntuación. El CTF tenía una duración de 24 horas y constaba de 18 retos de categorías como reversing, exploiting, hacking web, blockchain, criptografía, hardware, forense y miscelanea.

Personalmente, tuve el placer de participar junto a algunos compañeros de mi universidad y lograr clasificar para la final del HTB x UNI CTF con un cuarto puesto.


Uno de los requisitos para poder clasificarse a la final, en el caso de encontrarse entre los 15 mejores equipos, era elaborar un write-up (solucionario) de los retos realizados por el equipo. Tras la publicación de los equipos ganadores y el visto bueno por parte de la organización de publicar las soluciones de los retos, aquí dejo las soluciones de los retos del CTF realizados por mi equipo "RWX", junto a las explicaciones y el proceso que hemos llevado a cabo para solventarlos.

¡Feliz navidad!

Reto 31: hc0n Christmas CTF

Llega la Navidad y con ella César Calderón aka @_Stuxnet y Ayushman Dubey aka
@D4mianWayne nos traen un reto para entretenernos. Se trata de un CTF 'boot2root': una máquina que tendréis que pwnear para obtener acceso primero como usuario local "normalucho" y luego como root escalando privilegios.

Esta vez la máquina estará disponible online en la plataforma TryHackMe, una nueva plataforma para enseñar y aprender hacking que permite crear 'salas virtuales' y otras opciones que la hacen muy interesante.

Para ingresar en la habitación o sala de la máquina de este reto concreto, debéis primero estar registrados en el sitio y haber descargado el archivo vpn correspondiente que se encuentra la parte de "access".

Después, en el menú tendréis la opción de "My Rooms", y cuando entréis en la parte inferior veréis un textbox donde podréis ingresar un código para poder entrar en una habitación, en este caso para nuestro CTF es 'hc0nchristmasctf'.


Una vez dentro de la sala tendréis que pulsar el botón "deploy" y tendréis la máquina levantada durante una hora. Pasado ese tiempo podréis levantar la máquina otra vez, sólo cambia la IP.

Los tres primeros en conseguir rootear la máquina e introducir las flags correspondientes en la room de la máquina conseguirán entrar en nuestro eterno hall de la fama y además obtendrán un ticket para nuestro congreso h-c0n que tendrá lugar los próximos 31 de enero y 1 de febrero en Madrid y una taza de obsequio siempre que puedan recogerla presencialmente durante el evento.

pd. veréis que está KaoRz arriba en el scoreboard, pero su posición no cuenta ya que se encargó de probar la máquina previamente y no pudo resistir el "ansia viva" de meter las flags.. xD

Así que suerte y... ¡a empezar la navidad jugando (y quién sabe, ganando)!

Detectando técnicas y tácticas ATT&CK en Linux

El australiano Krishna aka Kirtar22 ha creado un interesante proyecto en Github para asentar una buena base de conocimiento que ayude a crear/mejorar las capacidades de detección de amenazas en Linux. Los vectores de ataque están alineados con el framework ATT&CK de MITRE.
 

Lo que hizo fue usar la mayoría de los casos de prueba de ataque de Atomic Red Team y luego analizó cómo detectarlos y qué fuentes de logs serían necesarias para capturar estos ataques. Aunque es un proyecto que no ha recibido actualizaciones desde hace meses si que tiene una buena cantidad de casos de uso que todo threat hunter debe tener en cuenta ;):

defense evasion

MalwinX: un framework para aprender Malware y funciones de win32

Cuando se realiza ingeniería inversa del malware en Windows, normalmente y sobretodo al principio, se suele realizar una búsqueda individual explícita de cada función y su uso. MalwinX de Mohit Dabas es una pequeña utilidad en forma de aplicación web en Flask que nos permitirá comprender mejor el api de win32. Simplemente subiremos el binario correspondiente y podremos consultar rápidamente fragmentos de código y referencias de cada librería que carga.

Pre-requisitos

pip install flask
pip install pefile
pip install requests

Uso

$ git clone https://github.com/MohitDabas/malwinx.git
$ cd malwinx
$ python flaskapp.py

http://localhost/


Demo


Repo

https://github.com/MohitDabas/malwinx