Основная волна интереса к тестированию пришлась на 1990-е годы и началась в Соединенных Штатах. Быстрая разработка автоматизированных систем разработки программного обеспечения (инструменты CASE) и сетевые технологии привели к росту рынка программного обеспечения и
рассмотрение вопросов обеспечения качества и надежности разрабатываемых программ. Острое усиление конкуренции среди производителей программного обеспечения потребовало особого внимания к качеству создаваемых продуктов, потому что теперь у потребителя был выбор: многие компании предлагали свои товары и услуги по достаточно разумным ценам, а значит, можно было обратиться к тому кто разработает программу не только быстро и экономично, но и качественно.
Райтапы на машинах HTB или CTF сродни детективу. Опытный пентестер быстро находит уязвимость, пишет скрипт для ее эксплуатации, и вперед! Однако в действительности этот процесс при всех удачных и неудачных попытках может занять от нескольких часов до нескольких десятков дней. Об этом не принято писать в рецензиях, потому что сам поиск далеко не такой красочный. Как на самом деле находят «нужные места» и как узнать, на что стоит обратить внимание? Для этого у самых серьезных пентестеров есть своя методика или чек-лист.
Обыкновенно процесс исследования машины включает несколько этапов.
- Сканирование и сбор информации (Scanning).
- Определение уязвимостей (Enumeration).
- Эксплуатация уязвимостей (Exploitation).
- Повышение привилегий (Privilege Escalation).
- Постэксплуатация (Post Exploitation).
- Очистка следов (House Cleaning).
Разберем каждый из них что бы знать как действовать эффективнее.
Сбор информации и сканирование
Первое, что вам нужно сделать, это восстановить исследуемую машину в исходное состояние. Для этого во всех сервисах есть опция «Вернуть» или «Сброс». Собирать информацию, не возвращая машину в исходное состояние, не стоит: нужные файлы там могут не найти, либо уже готовый эксплойт может лежать в публичной папке на 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! Командную строку для их сканирования я оставлю тебе в качестве домашнего задания.
Бывают даже лабораторные машины которые могут иметь защиту от сканирования. Если вдруг, в середине сканирования, все внезапно останавливается или вылетает, поиграйте с опциями Nmap. Например, увеличьте время между сканированиями портов и уменьшите количество одновременных сканирований.
В результате всех этих действий у тебя будет информация о доступных на машине портах.
Сканирование портов
Каким образом можно улучшить свои навыки сканирования? Читайте райтапы, смотрите, какие инструменты в них используются, и пополняйте свою копилку. Я рекомендую создать отдельный репозиторий с документами и систематически создавать там свою методологию. Сейчас у меня в разделе «сканирование портов» около десятка различных методов сканирования (Nmap, masscan, скрипты и другие).
Не торопитесь сейчас искать эксплойт для VMware или Samba! Вы совершите самую большую ошибку и рискуете попасть в так называемые кроличьи норы. Тупики, которых все ужасно боятся во время экзамена OSCP: вы можете часами пытаться взломать, например, WordPress, и в конечном итоге не получить результата, так как уязвимость была в другом сервисе, но вы просто не добрались до него.
Ваша задача — собрать полный список открытых портов и возможных сервисов, работающих за ними. После этого переходим к дальнейшему сбору информации.
Обратите особое внимание на порты, которые 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.
. Дальше слова Ubuntu-4ubuntu0.
говорят нам о том, что это, скорее всего, 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: <
говорит нам, что сайт, скорее всего, работает на WordPress.
Пришло время заглянуть в исходный код страницы! (Опция -L
позволяет корректно обрабатывать редиректы сервера.)
$ curl -i -L x.x.x.x
Здесь ты можешь попрактиковаться в чтении HTML и поиске с помощью grep и регулярных выражений. Что следует искать и уметь определять?
- Версию CMS и ее название.
- Шаблонизатор, на котором может быть построен сайт.
- Любые комментарии и временно скрытые ссылки на другие сайты или разделы.
- Ссылки на другие поддомены (особенно актуально для HTB).
- Версии подключаемых библиотек (иногда позволяют косвенно определить версию CMS).
Теперь наконец запусти браузер и посмотри, нет ли чего интересного. Это самая творческая часть, и тут как раз нужно банально набить руку. Читай много райтапов и запоминай, что и как делают люди. Что нас может интересовать здесь:
- есть ли файлы
robots.
илиtxt sitemap.
;xml - есть ли формы обратной связи или формы аутентификации;
- имеются ли закрытые разделы, варианты регистрации или восстановления пароля.
Поищи исходный код CMS в интернете. Очень часто на GitHub можно найти нужную тебе CMS и понять, на какие файлы стоит обратить внимание (например, на конфиги), там же ты найдешь списки исправленных уязвимостей.
Я использую очень удобный плагин для Firefox Wappalyzer. Он позволяет определять используемые фреймворки и другие особенности веб‑сервера.
В целом список тут практически бесконечный и тянет на большой месячный курс или десяток статей.
Обязательно посмотри вот на эти чек‑листы:
Но помни, что всегда лучше брать лучшее из них и собирать свои, чтобы точно понимать, за что отвечают каждый скрипт и команда!
Ничего интересного не нашлось? Самое время взять словарь и попытаться поискать файлы и скрытые директории. Тут можно использовать любые любимые инструменты: 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». Очень часто можно найти интересные свежие эксплоиты.
Несколько полезных советов о поиске эксплоитов и работе с ними.
- Научись в совершенстве владеть 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 из-за стресса и в итоге не берет машину. Хороший личный контрольный список поможет снизить стресс и повысить эффективность.