Хакер - Пентест по-своему. Создаем собственную методику тестирования на примере машин с OSCP и Hack The Box
hacker_frei
Евгений Грязнов
Содержание статьи
- Сканирование и сбор информации
- Сканирование портов
- Сервисы
- Поиск уязвимостей
- Повышение привилегий
- Постэксплуатация
- Чистка следов
- Выводы
Каждому начинающему пентестеру или просто энтузиасту от мира ИБ однажды хочется перейти от чтения захватывающих райтапов к практике. Как же лучше это сделать и на что обязательно стоит обратить внимание? В этой статье я расскажу о своем пути и поделюсь некоторыми из своих наработок.
Райтапы по HTB или CTF-машинам сродни хорошему детективу. Опытный пентестер быстро находит уязвимость, пишет скрипт для ее эксплуатации, и вот уже заветный флаг у нас в руках! Однако в реальности этот процесс со всеми удачными и неудачными попытками может занять от нескольких часов до нескольких десятков дней. Об этом не принято писать в райтапах, ведь сам поиск далеко не такой красочный. Как же в реальности находятся те самые «правильные места» и как узнать, на что стоит обратить внимание? Для этого у большинства серьезных пентестеров есть собственная методика или список чек‑листов.
INFO
Вся информация, приведенная в статье, собрана автором во время прохождения лаборатории OSCP и машин с HTB. При реальном пентесте многие вещи могут работать иначе, и это стоит обязательно учитывать! Если ты слышишь о OSCP впервые, просто прочитай статью о самом популярном экзамене.
Типичный процесс исследования любой машины разделен на несколько этапов.
- Сканирование и сбор информации (Scanning).
- Определение уязвимостей (Enumeration).
- Эксплуатация уязвимостей (Exploitation).
- Повышение привилегий (Privilege Escalation).
- Постэксплуатация (Post Exploitation).
- Очистка следов (House Cleaning).
Пройдемся по ним, чтобы понять, как эффективнее действовать на каждом.
СКАНИРОВАНИЕ И СБОР ИНФОРМАЦИИ
Первое, что тебе необходимо сделать, — это привести исследуемую машину в исходное состояние. Для этого во всех сервисах есть опция Revert или Reset. Собирать информацию, не вернув машину в исходное состояние, не стоит: там могут не найтись нужные файлы или в общедоступной папке на FTP уже может лежать готовый эксплоит, что испортит тебе все удовольствие и возможность получить опыт.
Что еще хуже, некоторые эксплоиты вроде переполнения буфера могут сработать ровно один раз, и, сканируя такую машину, ты просто не найдешь нужный сервис. Поэтому всегда возвращаем машину в исходное состояние! В HTB стараются не делать таких сервисов, но там тоже можно проголосовать за Revert или перезапустить машину самому, если у тебя есть статус VIP.
Сканирование портов
Споры о правильных способах сканирования портов не утихают никогда. Существует много разных скриптов вроде Autorecon, nmapAutomator, они очень полезные, но я не рекомендую начинать с них. Почему? Всегда лучше понять, как работает та или иная утилита, а не слепо полагаться на нее. Поэтому лучше скачай их и посмотри исходный код, а мы будем использовать старый добрый Nmap.
Для начала можно пройтись быстрым сканированием популярных портов:
$ nmap x.x.x.x -v --top-ports 10 –open
Если вдруг Nmap возвращает ошибку о недоступности хоста, попробуй опцию -Pn. Пока ты размышляешь над полученной информацией, можно запустить полное сканирование всех TCP-портов.
$ nmap x.x.x.x -p- -v -sV --reason
Не забудь, существуют еще порты UDP! Командную строку для их сканирования я оставлю тебе в качестве домашнего задания.
INFO
Помни: даже некоторые лабораторные машины могут иметь защиту от сканирования. Если вдруг в середине сканирования все внезапно прервалось или зависло, поиграй с опциями Nmap. Например, увеличь время между пробами портов и уменьши количество одновременных проб.
В результате всех этих действий у тебя будет информация о доступных на машине портах.

Не бросайся сразу же искать эксплоит для VMware или Samba! Ты совершишь самую большую ошибку и рискуешь попасть в так называемые кроличьи норы (Rabbit Holes). Тупиковые места, которых страшно боятся все на экзамене OSCP: ты можешь потратить часы в попытках сломать, например, WordPress и в конце не добиться результата, поскольку уязвимость была в другом сервисе, но ты до него просто не дошел.
Твоя задача — собрать весь список открытых портов и возможных сервисов, которые работают за ними. После этого переходим к дальнейшему сбору информации.
Как улучшить свои навыки сканирования? Читай райтапы, смотри, какие в них используются инструменты, и пополняй свою копилку. Рекомендую завести отдельный репозиторий с документами и там планомерно создавать собственную методику. У меня в разделе «сканирование портов» сейчас около десятка разных способов сканирования (Nmap, masscan, скрипты и другие).
Особо обрати внимание на любые порты, которые Nmap не смог однозначно идентифицировать. Также — порты, о которых ты не знал раньше, и на привычные вещи вроде веб‑серверов и FTP на нестандартных портах вроде 9000, 5000 и других. Обычно это перспективные с точки зрения эксплуатации сервисы, которые просто хотели спрятать от быстрого сканирования. Именно поэтому я рекомендую всегда проводить полное сканирование всех портов TCP и быстрое — базовых UDP. Мне встречались машины, где уязвимый сервис был спрятан в UDP.
Сервисы
В этом разделе я приведу примеры нескольких популярных портов и расскажу, на что обязательно стоит обращать внимание при исследовании каждого.
21-й порт
Мне очень нравится проверять информацию о любых, особенно неизвестных портах на сайте speedguide.net. На экзамене это даже помогло мне взять одну из машин!
Как видно, порт 21 обычно отвечает за FTP, но за ним может находиться любой из известных тебе FTP-сервисов, а может и не FTP вообще. Вдруг какой‑то хитрый админ перевесил туда SSH. Поэтому первое, что я всегда делаю, — пробую подключиться к сервису с помощью netcat.
$ nc -nv x.x.x.x 21
Чаще всего тебя встретит баннер FTP-сервера, вроде такого.

Но если увидишь там ответ SSH или иного сервиса, просто запиши это и переходи к соответствующему разделу, чтобы понять, что еще оттуда можно добыть!
На что следует обратить внимание при исследовании FTP:
- название программы‑сервера и ее версия;
- разрешен ли анонимный доступ;
- нет ли чего‑то интересного в папках на сервере;
- не разрешена ли запись в какую‑нибудь папку;
- есть ли уязвимости в этой версии сервера.
- Версию FTP тебе покажет nc, либо можно попробовать узнать ее через Nmap:
$ nmap -A -v x.x.x.x -p21
В сети есть множество программ, которые пытаются эвристически определить версию FTP-сервера, можешь использовать их.
- Теперь подключись к серверу стандартным FTP-клиентом и проверь анонимный доступ. Обычно это guest, ftp, anonymous. Если получилось — отлично. Если нет, не отчаивайся, возможно, ты найдешь учетные данные позже или сервис вообще не понадобится.
- Если удалось попасть на FTP, осмотрись. Это может быть просто пустая папка, а может каталог веб‑сервера, запиши это. Иногда находятся какие‑нибудь файлы — складируй их для дальнейшего изучения. Кстати, самое время найти и записать себе команду для рекурсивного скачивания всех файлов с FTP! Ты же не собираешься постоянно делать это по одному?
- Проверь, можешь ли ты записать в папку хоть что‑то. Удобно сделать это командой
put. Но помни, иногда сервер дает право записи, но не удаления! Не клади туда ничего ценного, лабораторные машины доступны всем. - Время поискать уязвимости. Самый простой и разрешенный в OSCP способ — использовать скриптовые возможности Nmap. С них стоит начинать всегда независимо от того, какой порт ты изучаешь. Давай узнаем, какие есть скрипты для FTP, и запустим их все сразу. (Кстати, так за тебя делает nmapAutomator.)
$ ls -la /usr/share/nmap/scripts/ftp*
$ nmap --script ftp-* -p21 x.x.x.x
Нашлись возможные уязвимости? Отлично! Запиши их себе, но не бросайся сразу же пробовать! У нас еще столько непроверенных портов. Ты же не хочешь попасть в кроличью нору? Но если больше ничего не нашлось — тоже не беда! В разделе «Поиск уязвимостей» я расскажу, где еще их можно поискать.
Вот небольшой список того, что мне встречалось на FTP в лабораториях и HTB.
- FTP-сервер, уязвимый к переполнению буфера.
- Доступ к полному содержимому диска C, где удалось найти конфигурационные файлы с логинами к другому сервису.
- Возможность записать файл в директорию веб‑сервера для дальнейшего выполнения кода.
- Directory Traversal (возможность читать файлы не только из папки FTP-сервера).
- И еще многое другое! Не забывай дописывать к своей методике удачные ходы.
22-й порт
Обычно это порт SSH, но мы же не доверяем числам! Проверь его с помощью nc.
$ nc -nv x.x.x.x 22

Отлично, это точно SSH! Видишь версию пакета? OpenSSH_8.2p1. Дальше слова Ubuntu-4ubuntu0.1 говорят нам о том, что это, скорее всего, Ubuntu. Поискав в Google «openssh 8.2p1 4ubuntu0.1 version», мы можем с большой долей уверенности сказать, что это версия Focal 20.04. Запиши эту информацию, возможно, она пригодится.
Теперь нужно получить отпечаток (fingerprint) для SSH.
$ ssh root@x.x.x.x
Для чего нам эта информация? Например, посмотреть, нет ли для этого отпечатка известного приватного ключа SSH. Обязательно прочитай об уязвимых ключах SSH.
Теперь осталось самое интересное и сложное. Научись понимать расширенный вывод SSH. Для этого просто запусти SSH с ключом -v.
$ ssh root@x.x.x.x -v
Сначала ты можешь быть шокирован размером появившегося текста, но он крайне важен! Изучи его. Почему этот так важно? В лаборатории и HTB очень часто встречались машины со старым SSH-сервером, к которому отказывается подключаться свежий Kali, так как он будет считать алгоритм шифрования устаревшим и не отдавать ключ через SSH, а сервер, выпущенный в 2014 году, считает его вполне безопасным. Тогда без опции -v ты просто получишь отказ в доступе, но никогда не узнаешь почему, а достаточно было просто добавить пару опций в строку подключения. С таким я тоже сталкивался, и это один из популярных вопросов на форуме студентов. В общем, внимательно изучи вывод SSH с ключом -v и обязательно в нем разберись!
Если у тебя есть список логинов и паролей, можешь попробовать подобрать их, например, программой Hydra. Как и всегда, запиши эти знания и опробуй их в своей методике! И если нашел в чьем‑то райтапе интересные способы работы с SSH, тоже обязательно разберись и добавь их себе!
Что интересного встречалось мне при работе с SSH?
- Те самые «плохие» ключи SSH, которые можно определить и подобрать по отпечатку.
- Уязвимые ключи, которые можно подобрать по отпечатку публичного ключа.
- Уязвимость в ранних версиях SSH, позволявшая перечислять локальных пользователей.
- Несовпадение версий клиента и сервера, требующее специальных флагов для работы.
- Раскрытие точной информации о версии и ОС сервера, позволяющее производить дальнейшее исследование файлов через path traversal.
80-й порт
Самый популярный и самый безграничный для исследования порт — именно на нем живут все веб‑сервисы. Но мы пока не будем даже запускать браузер, а методично проверим всю доступную информацию!
Тут нам уже не поможет nc. Но я все равно рекомендую вначале запустить его.
$ nc -nv x.x.x.x 80
Вдруг это прячется SSH-сервер на 80-м порте. Дальше проверь заголовки сервера:
$ curl -I x.x.x.x
Там наверняка может найтись тип сервера и его версия, версия PHP, если он используется, и другая очень полезная информация.

Как видишь, на нашем примере сервер защищает сервис защиты от DDOS-атак Qrator, а строка Link: <https://xakep.ru/wp-json/>; rel=https://api.w.org/ говорит нам, что сайт, скорее всего, работает на WordPress.
Пришло время заглянуть в исходный код страницы! (Опция -L позволяет корректно обрабатывать редиректы сервера.)
$ curl -i -L x.x.x.x
Здесь ты можешь попрактиковаться в чтении HTML и поиске с помощью grep и регулярных выражений. Что следует искать и уметь определять?
- Версию CMS и ее название.
- Шаблонизатор, на котором может быть построен сайт.
- Любые комментарии и временно скрытые ссылки на другие сайты или разделы.
- Ссылки на другие поддомены (особенно актуально для HTB).
- Версии подключаемых библиотек (иногда позволяют косвенно определить версию CMS).
Теперь наконец запусти браузер и посмотри, нет ли чего интересного. Это самая творческая часть, и тут как раз нужно банально набить руку. Читай много райтапов и запоминай, что и как делают люди. Что нас может интересовать здесь:
- есть ли файлы
robots.txtилиsitemap.xml; - есть ли формы обратной связи или формы аутентификации;
- есть ли закрытые разделы, варианты регистрации или восстановления пароля.
Поищи исходный код CMS в интернете. Очень часто на GitHub можно найти нужную тебе CMS и понять, на какие файлы стоит обратить внимание (например, на конфиги), там же ты найдешь списки исправленных уязвимостей.
Я использую очень удобный плагин для Firefox Wappalyzer. Он позволяет определять используемые фреймворки и другие особенности веб‑сервера.
В целом список тут практически бесконечный и тянет на большой месячный курс или десяток статей.
WWW
Обязательно посмотри вот на эти чек‑листы:
Но помни, что всегда лучше брать лучшее из них и собирать свои, чтобы точно понимать, за что отвечают каждый скрипт и команда!
Ничего интересного не нашлось? Самое время взять словарь и попытаться поискать файлы и скрытые директории. Тут можно использовать любые любимые инструменты: nikto, Gobuster, DIRB.
$ gobuster dir -t 128 -u http://x.x.x.x/ -w /usr/share/seclists/Discovery/Web-Content/common.txt -s '200,204,301,302,307,403,500' -e
Скажу сразу: если ты видишь, что перебор займет часов пять или шесть, то, вероятнее всего, это не тот путь, которым следует идти. Такое встречалось мне в лабораторных машинах. Просто пометь себе, что этот вариант ты не проверил, и иди дальше.
Что интересного мне встречалось в веб‑сервисах?
- SQL и командные инъекции.
- Информация о датах рождения, позволявшая подобрать пароль или ответить на секретный вопрос в форме восстановления пароля.
- XSS, позволяющая получить админские сессии.
- Ошибки настройки веб‑сервера.
- Скрипты разработчика, которые вместе с path traversal позволяли найти файлы с паролями и скачать их.
- И многое, многое другое.
Для XSS, обхода фильтрации команд и других инъекций я очень рекомендую один из самых больших сборников полезных нагрузок.
Порты 139 и 445
Это известная тебе Samba. Для работы с ней существует множество инструментов, я перечислю лишь некоторые из них.
$ enum4linux x.x.x.x
Так ты сможешь узнать имя хоста, его принадлежность к домену и рабочей группе, доступные ресурсы, возможные имена пользователей и многое другое. Обязательно поэкспериментируй с этой утилитой.
Получить список доступных папок можно такой командой:
$ smbclient -L //x.x.x.x -N
Если тебе нужно рекурсивно посмотреть все папки, то пиши
$ smbclient //HOST/PATH -c 'recurse;ls' PASS -U USER
Проверь наличие известных уязвимостей в SMB с помощью Nmap. EternalBlue — все еще мощный инструмент.
$ nmap --script smb-vuln* -p139,445 -T4 -Pn 10.11.1.111
Вот как запустить удаленно команду с помощью SMB:
$ winexe -U username //10.11.1.111 "cmd.exe" –system
Советы здесь в целом похожи на советы из раздела о FTP. Выясни, какие ресурсы тебе доступны, какие пользователи есть на сервере (могут пригодиться при переборе), нет ли полезной информации в доступных папках. И, как всегда, внимательно читай райтапы, подсматривай используемые утилиты, разбирайся в их работе и заноси в свою подборку. Обязательно старайся выяснить, почему была использована одна утилита, а не другая.
В моей персональной методике еще много описанных портов, но я не буду перечислять их дальше, а просто отправлю тебя в уже известный тебе чек‑лист по портам.
ПОИСК УЯЗВИМОСТЕЙ
Теперь, когда у тебя есть список используемого ПО с версиями, самое время поискать известные уязвимости и готовые эксплоиты. В лаборатории OSCP тебе вряд ли придется писать собственные эксплоиты, чаще всего нужно максимум поправить готовые. А вот сложные машины HTB вполне могут требовать ручного написания эксплоита.
Где же искать эксплоиты? Помни, что не на все уязвимости есть готовые эксплоиты и не все уязвимость позволяют их написать. Поэтому стоит начать с самой большой базы данных уязвимостей cvedetails.com.
Там есть поиск по вендору, программе, версиям и другим критериям. Мой тебе совет: никогда не превращайся в скрипт‑кидди, который способен только запустить программу и ждать результата. Прочитай CVE, пойми, почему та или иная программа уязвима. Если есть эксплоит, проверь, требует ли он компиляции. Можешь ли ты его собрать. Будет ли он работать на твоей системе. Какие у него есть начальные условия.
Часто бывает, что есть целый перечень отличных эксплоитов, но они требуют админских прав в CMS или на сайте. В этом случае тебе нужно либо найти данные администратора, либо искать другой вариант проникнуть на машину. В лаборатории OSCP мне встретилась машина, на которой не работал готовый эксплоит повышения привилегий, но стоило прочитать CVE и просто заменить одно слово, как он снова был работоспособен!
Где стоит брать эксплоиты? Самая известная база эксплоитов — это, конечно, exploit-db.com и ее консольный вариант searchsploit. Размещенные там эксплоиты достаточно безопасны для использования. Но никогда не ограничивайся ей. Поищи в Google «имя программы версия exploit». Очень часто можно найти интересные свежие эксплоиты.
WARNING
Никогда не запускай непроверенные эксплоиты на своей машине! Всегда читай исходный код и проверяй, что он не несет ничего вредоносного. Всегда лучше собрать бинарник самому, чем скачать его непонятно где. Делай резервные копии и снапшоты своей рабочей системы.
Несколько полезных советов о поиске эксплоитов и работе с ними.
- Научись в совершенстве владеть searchsploit. Можешь потренироваться на сервере Apache: научись показывать только эксплоиты удаленного доступа, а не выполнения DOS-атак, раздели выдачу по Apache httpd от Apache Tomcat.
- Попробуй поискать эксплоиты на GitHub с помощью Google. Пойми, как это лучше делать и как правильно фильтровать результаты.
- Научись собирать эксплоиты не только под
x86_64, но и под чистыйi386. Иногда такое может очень пригодиться. - Научись искать и использовать эксплоиты в Metasploit.
ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Этот раздел вполне бы потянул на несколько статей, поэтому я просто дам тебе ссылки на отличные статьи о получении root-доступа и прав администратора в Windows.
От себя добавлю несколько полезных советов и трюков, встречавшихся мне в разных ситуациях.
- Инструменты linPEAS и подобные им полезны, но на экзаменационных машинах OSCP они не находят абсолютно ничего! Разберись, как они работают, и набросай себе список нужных команд вроде поиска SUID.
- Поставь и внимательно изучи чистые Windows и Linux. Тебе нужно понимать, какие сервисы есть в системе после установки, а какие туда могли добавить.
- Увидел неизвестную тебе программу? Обязательно запиши! Очень часто через нее можно получить повышение привилегий.
- Внимательно смотри на странности в папках
sbinиbin. У меня однажды там лежалeximXX(явно указана версия в названии), хотя в списке установленных пакетов его не было. Конечно же, через него можно было получить рут. - Внимательно изучи доступные изнутри порты. Очень часто внутри на
127.0.0.1есть уязвимый или плохо настроенный сервис.
Из очень интересного я встречал в лабораториях машину с Windows NT 4.0, с доступом по VNC, где пароль админа был записан на обоях рабочего стола, но был скрыт окном логина. Нужно было передвинуть окно входа в систему и просто прочитать пароль «под ковриком».
Ну и как всегда, заноси все найденные интересные решения в свою методику. Лично для меня обычно сложнее получить доступ на машину, чем повысить в ней привилегии. Видимо, сказывается большой опыт работы архитектором и настройки разных серверов.
ПОСТЭКСПЛУАТАЦИЯ
Этот этап очень редко встречается в отдельных машинах HTB, но крайне важен в лабораториях. Впрочем, ты мог встретить такое, если проходил вводные машины HTB.
Что нужно обязательно сделать на этом этапе.
- Собрать все доступные хеши паролей. Это может быть mimikatz, файл
/etc/shadow, настройки сервисов и баз данных. В общем, все пароли, до которых сможешь дотянуться. - Просмотри все сетевые соединения. Иногда можно увидеть интересное общение с другими серверами и найти пути входа на них.
- Просмотри всю доступную информацию в базах данных. Там могут быть логины/пароли для других серверов или интересные резервные копии.
- Собственно резервные копии. Не пренебрегай ими, и, возможно, найдешь что‑нибудь важное.
- Пользовательские папки. В них могут быть те же резервные копии, история выполнения команд (например, использования пароля для подключения к БД или другому серверу) и так далее.
- Не забудь о реестре Windows. Там могут быть пароли к VNC и другим похожим сервисам.
Обязательно документируй все находки. Очень часто у тебя есть информация для доступа к новой машине, но ты не можешь найти ее. Встретил документ или файл RDP с паролем к новому компьютеру в лаборатории — сделай запись об этом! В OSCP повторное использование паролей — обычное дело.
ЧИСТКА СЛЕДОВ
Правило хорошего тона в любой лаборатории — очистка машины от своих следов. Сюда входит удаление любых эксплоитов, которые ты использовал, возврат в первоначальное состояние машины в лаборатории OSCP, удаление всех шеллов Metasploit. Кстати, в экзаменационном отчете OSCP этому посвящен отдельный раздел.
ВЫВОДЫ
Вывод у меня очень простой. Если ты хочешь стать хорошим пентестером, введи системность в свои действия. Изучай операционные системы, сети, постоянно читай новые материалы и пополняй свои чек‑листы и списки техник. В результате всего этого у тебя выработается определенное чутье и понимание, на что же стоит обратить внимание при исследовании очередной машины. Если соберешься сдавать экзамен, это вдвойне пригодится. Нередки случаи, когда сдающий просто забывал проверить содержимое robots.txt из‑за стресса и не брал в итоге машину. Хороший собственный чек‑лист позволяет снизить стресс и действовать более эффективно.
Помни, направление пентеста постоянно развивается и появляются новые интересные инструменты и техники. Не упусти их!
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei