Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
    
    
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
    
Дочерние селекторы
    
Селекторы атрибутов
 
Универсальный селектор
    
Псевдоклассы
  
Псевдоэлементы
    
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
    
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
   
Списки
                                          
Ссылки
                                          
Дизайны сайтов
    
Формы
  
Таблицы
    
CSS3
                                         
HTML5
                                       
									Блог для вебмастеров
									Новости мира Интернет
                                    Сайтостроение
    
									Ремонт и советы
	
                                    Все новости
                                        
									
                                    Справочник от А до Я
    
									HTML, CSS, JavaScript
									
									
									Афоризмы о учёбе
									Статьи об афоризмах
									Все Афоризмы
									
									
| Помогли мы вам | 
Hack The Box сложного уровня (hard).
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /:
10.10.11.220 intentions.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).
Результат работы скрипта
По результатам сканирования имеем всего два открытых порта: 22 — служба OpenSSH 8.9p1 и 80 — веб‑сервер Nginx 1.18.0. Брутить SSH на машинах с HTB не принято, а на сайте нас встречает форма авторизации и регистрации.
Страница авторизации
Регистрируем нового пользователя и авторизуемся на сайте.
Главная страница авторизованного пользователя
На странице профиля пользователя находим поле, на которое мы можем воздействовать.
Страница профиля пользователя
Заглянув в Burp History (а все действия я рекомендую проводить через Burp), обнаружим, что используется API.
История запросов
В поле изменения жанра я попробовал вставить нагрузку '  для SQL-инъекции и в ответе получил те же данные, только без пробелов.
Запрос на сервер
Ответ сервера
Стоит отметить, что нагрузку мы отправляем к API /, а проверяем измененные данные через API /.
Первым делом я решил перебрать разные нагрузки с помощью Burp Intruder. Но сложность в том, что нужно выполнять два запроса — один с нагрузкой, а другой для проверки результата. Тут нам могут помочь макросы, которые задаются через настройки Burp. Переходим к списку правил сессии и создаем новое.
Список правил сессий
В открывшемся окне в поле Rule action создаем новый макрос run  — то есть выполняемый после основного запроса.
Настройки правила
Для созданного макроса открываем Editor и выбираем запрос к API: /. Здесь мы получаем текущее значение настроек профиля.
Настройки макроса
Подтверждаем — и в окне с настройками созданного правила видим наш макрос.
Настройки правила
Переходим на вкладку Scope и в параметре URL scope выбираем Include all URLs, чтобы правило применялось абсолютно ко всем запросам.
Настройки правила
Подтверждаем установленные параметры и видим созданное правило в общем списке правил.
Список правил сессий
Теперь переносим запрос к API / в Burp Intruder. В настройках переходим к опции Grep → Extract и указываем интересующее нас поле, чтобы добавить его содержимое в общую таблицу результатов Intruder.
Burp Intruder — вкладка Positions
Burp Intruder — вкладка Settings
Так как мы используем правило с несколькими запросами, перебирать нужно в один поток.
Результат перебора
Просмотрев результат, я ничего необычного не нашел, кроме того, что мы получаем ошибку при отправке символа ". Таким образом, как бы ни менялось поле жанра, ничего интересного мы не добиваемся.
Немного побродив по сайту, замечаем, что жанр также используется при просмотре галереи. Там выполняется вызов API /.
Запрос в Burp History
Мы получаем разные изображения в зависимости от установленного у нас жанра. Этот момент тоже необходимо протестировать, поэтому возвращаемся к нашим правилам и изменяем макрос, чтобы он выполнял запрос к API /. Для изменения выбираем Re-record macro и отмечаем нужный запрос.
Настройки макроса
Macro Recorder
После изменения макроса переводим запрос в Burp Repeater и отправляем обычную нагрузку с комментарием для Boolean-based-инъекции test'or .
Запрос на сервер
Ответ сервера
В ответ получаем ошибку — видимо, из‑за кавычки. Тогда пробуем указать нагрузку без кавычки.
Запрос на сервер
Ответ сервера
Запрос обработан, но данные никакие не получаем. Переходим к перебору нагрузок.
Настраиваем Burp Intruder в один поток, только в этот раз ничего извлекать из ответа не будем, а просто отсортируем результат по размеру ответа.
Burp Intruder — вкладка Positions
Результат атаки
|  |  |