Основная волна интереса к тестированию пришлась на 1990-е годы и началась в Соединенных Штатах. Быстрая разработка автоматизированных систем разработки программного обеспечения (инструменты CASE) и сетевые технологии привели к росту рынка программного обеспечения и
рассмотрение вопросов обеспечения качества и надежности разрабатываемых программ. Острое усиление конкуренции среди производителей программного обеспечения потребовало особого внимания к качеству создаваемых продуктов, потому что теперь у потребителя был выбор: многие компании предлагали свои товары и услуги по достаточно разумным ценам, а значит, можно было обратиться к тому кто разработает программу не только быстро и экономично, но и качественно.
Райтапы на машинах HTB или CTF сродни детективу. Опытный пентестер быстро находит уязвимость, пишет скрипт для ее эксплуатации, и вперед! Однако в действительности этот процесс при всех удачных и неудачных попытках может занять от нескольких часов до нескольких десятков дней. Об этом не принято писать в рецензиях, потому что сам поиск далеко не такой красочный. Как на самом деле находят «нужные места» и как узнать, на что стоит обратить внимание? Для этого у самых серьезных пентестеров есть своя методика или чек-лист.
Обыкновенно процесс исследования машины включает несколько этапов.
Разберем каждый из них что бы знать как действовать эффективнее.
Первое, что вам нужно сделать, это восстановить исследуемую машину в исходное состояние. Для этого во всех сервисах есть опция «Вернуть» или «Сброс». Собирать информацию, не возвращая машину в исходное состояние, не стоит: нужные файлы там могут не найти, либо уже готовый эксплойт может лежать в публичной папке на 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.
Сдесь я приведу примеры нескольких популярных портов и на что вам обязательно стоит обратить внимание при изучении каждого из них.
Мне очень нравится проверять информацию о любых, особенно неизвестных портах на сайте 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.
Обычно это порт 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?
Самый популярный и самый безграничный для исследования порт — именно на нем живут все веб‑сервисы. Но мы пока не будем даже запускать браузер, а методично проверим всю доступную информацию!
Тут нам уже не поможет 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 и регулярных выражений. Что следует искать и уметь определять?
Теперь наконец запусти браузер и посмотри, нет ли чего интересного. Это самая творческая часть, и тут как раз нужно банально набить руку. Читай много райтапов и запоминай, что и как делают люди. Что нас может интересовать здесь:
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
Скажу сразу: если ты видишь, что перебор займет часов пять или шесть, то, вероятнее всего, это не тот путь, которым следует идти. Такое встречалось мне в лабораторных машинах. Просто пометь себе, что этот вариант ты не проверил, и иди дальше.
Что интересного мне встречалось в веб‑сервисах?
Для XSS, обхода фильтрации команд и других инъекций я очень рекомендую один из самых больших сборников полезных нагрузок.
Это известная тебе 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». Очень часто можно найти интересные свежие эксплоиты.
Несколько полезных советов о поиске эксплоитов и работе с ними.
x86_64
, но и под чистый i386
. Иногда такое может очень пригодиться.Этот раздел вполне бы потянул на несколько статей, поэтому я просто дам тебе ссылки на отличные статьи о получении root-доступа и прав администратора в Windows.
От себя добавлю несколько полезных советов и трюков, встречавшихся мне в разных ситуациях.
sbin
и bin
. У меня однажды там лежал eximXX
(явно указана версия в названии), хотя в списке установленных пакетов его не было. Конечно же, через него можно было получить рут.127.0.0.1
есть уязвимый или плохо настроенный сервис.Из очень интересного я встречал в лабораториях машину с Windows NT 4.0, с доступом по VNC, где пароль админа был записан на обоях рабочего стола, но был скрыт окном логина. Нужно было передвинуть окно входа в систему и просто прочитать пароль «под ковриком».
Ну и как всегда, заноси все найденные интересные решения в свою методику. Лично для меня обычно сложнее получить доступ на машину, чем повысить в ней привилегии. Видимо, сказывается большой опыт работы архитектором и настройки разных серверов.
Этот этап очень редко встречается в отдельных машинах HTB, но крайне важен в лабораториях. Впрочем, ты мог встретить такое, если проходил вводные машины HTB.
Что нужно обязательно сделать на этом этапе.
/etc/shadow
, настройки сервисов и баз данных. В общем, все пароли, до которых сможешь дотянуться.Обязательно документируй все находки. Очень часто у тебя есть информация для доступа к новой машине, но ты не можешь найти ее. Встретил документ или файл RDP с паролем к новому компьютеру в лаборатории — сделай запись об этом! В OSCP повторное использование паролей — обычное дело.
Правило хорошего тона в любой лаборатории — очистка машины от своих следов. Сюда входит удаление любых эксплоитов, которые ты использовал, возврат в первоначальное состояние машины в лаборатории OSCP, удаление всех шеллов Metasploit. Кстати, в экзаменационном отчете OSCP этому посвящен отдельный раздел.
Мой вывод очень простой. Если вы хотите стать хорошим пентестером, привнесите последовательность в свои действия. Исследуйте операционные системы, сети, постоянно читайте новые материалы и добавляйте в свои контрольные списки и списки методов. В результате всего этого у вас разовьется определенный талант и понимание того, на что обращать внимание при осмотре следующей машины. Если вы собираетесь сдавать экзамен, он будет полезен вдвойне. Здающий нередко просто забывает проверить содержимое robots.txt из-за стресса и в итоге не берет машину. Хороший личный контрольный список поможет снизить стресс и повысить эффективность.
Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…
Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…
Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…
С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…
Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…
Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…