Все совершают ошибки, или как я сдал 0 багов на хаксе
В потоке эфемерных советов, крутых инструментов и историй успеха, соскучился по историям не_успеха, тупым ситуациям и мыслям об этом.
Проанализировал свои действия на хаксе, собрал мысли в пункты и по каждому расписал как попал в ситуацию из названия + как мог избежать + что понял.
В единую миску текста, перемешал следующие мюсли ::
Как не утонуть в бесконечном реконе и фаззинге
Решая десятки, а то и сотни CTF тасков + написывая отчёты по ним, я неосознанно вбивал в голову паттерн
быстро пройтись по приложению -> найти выбивающийся функционал -> найти аномалию -> раскрутить -> сдать флаг
Что же происходило при подходе к живой цели?
Внутренняя похекерская ящерица видела over 9000 паттернов выбивающегося функционала, призывала СТФерскую интуицию и вместе они сходила с ума, перегружая мозг бесконечным реконом и фаззингом, в надежде поймать low-hanging fruit.
Потому что CTF развивает навыки вширь, поддаваясь и расширяя кругозор, в то время как багбаунти тянет в глубь, позиционируя себя неприступной стена, но у которой пару кирпичей в фундаменте сделаны из пенопласта.
Веду к тому, что в CTF возможно забрать флаг без углублений в работу приложения, а зная множество техник и выкрутасов. В багбаунти же надо разбираться как работает приложение, чтобы его поломать.
Как остановить ящерный мозг?
Во-первых, чеклисты, чеклисты и даже mindmap чеклисты.
Стоило обозначить шаги для первичного анализа приложения и оглушив внутреннего ящера битой, со словами : :
Твои low-hanging fruits спрятались чуть глубже в приложении.
Разберись как работает приложение и закончи чеклист.
и ящер умолк, а я перестал тонуть в бесконечном реконе и фаззинге.
Начал понимать как работает приложение, как взаимодействуют компоненты и где могут быть уязвимости. Это и позволило найти первый баг, но об этом позже.
- перечень шагов, приводящих к единому или набору результатов. пишу в обычном markdown. каждый шаг - чекбокс с описанием
- карта действий, с прикрепленными результатами
Второй вариант легче показать, чем объяснить.
В отличие от "шагов в тексте", "карта действий" помогает быстрее ориентироваться среди результатов анализа и вспоминать с чем работаю.
Сами "карты" создаю в Obsidian Canvas. Это кибер-полотно, с возможностью расставлять блоки с текстом, вставлять заметки из хранилище, связывать их линиями и вставлять preview веб-страниц!
Как говорят в легендарном подкасте про багхантинг critical thinking:
You need to get "intimate" with a web application to find a juicy bugs
Во-вторых, делай перерывы. Всякий раз, ловя себя на "распылении", это были моменты усталости и не понимания что делать.
Надо было остановиться, встать из-за стола и сходить прогуляться. Дав себе отдохнуть, переключить и позволить взглянуть на приложение "со стороны".
Даже если переключишься на другое дело, твоё подсознание продолжит пахать в фоне, генерируя возможные способы решения задачи. Моё подсознание десятки раз подсказывало мне как решить тот или иной таск, пока мылся в душе.
Сколько и когда отдыхать? С этим придётся экспериментировать.
Я обычно работаю 2ч и отдыхаю 20мин, однако, если вхожу в поток, то могу работать часами напролет без отдыха. В такие моменты наиболее велика вероятность распыления, но и продуктивность тоже невероятна высока.
Потребление контента и overthinking
Готовясь к хаксу, стал загружать в голову подкасты critical thinking + darknet diaries, паттерны с райтапов решенных лаб, багбаунти отчётов (спасибо BBRE), кучу сообщений вебпвнчата и конечно же, сохранил "очень важные" посты в saved messages.
Это конечно круто, что я теперь, как попугай, могу повторять термины жестких веберов, и даже иногда в тему, но какой смысл, если не получается находить баги?
А смысла нет, ведь это всё - симптомы overthinking (надумывания), когда пытаешься предугадать все исходы и подготовиться к каждому из них. Пока я тратил 100 единиц усилий на "подготовку", другие проёбывались и получали опыт, тратя лишь 1 единицу усилий
Если тебе знакомо это ощущение, то настоятельно рекомендую прочитать эту статью про Overthinking, от легендарного UX-спеца.
Как перестать думать и начать прогрессировать?
Помогло перечитать модуль Learning Process от HackTheBox Academy, с мыслью
Фокусируйся на практике, с небольшим теоритическим перекусом, чтобы после обратно нырять в практику
Если ещё не читал этот модуль про самообучение, то давай, открывай новую вкладку, регистрируй аккаунт на HTB Academy, открывай модуль и возвращайся сюда. Прочитаешь после моих пластов текста.
Надо ли полностью отказываться от внешнего контента?
Не знаю. Думаю, надо оставлять место для вдохновения и мыслей, расширяющих понимание возможного, но не позволять теории превышать практику.
Эти люди существуют!
Побывав на Standoff Talks и Hacks, понял, что крутые безопасники - не фантастические существа из интернета, а реальные люди, не сильно отличающиеся от меня.
Причём, мне необязательно быть крутейшим хакером в комнате, чтобы приятно пообщаться с триажерами VK, Тинькофф, Standoff365, авторами крутейших каналов по безопасности и продукт овнерами багбаунти платформ BI.ZONE и Standoff365
В голове произошел окончательный ментальный сдвиг : :
Если они смогли, то и я смогу. Если у них получается, значит я что-то делаю не так и надо продолжать пытаться.
Тоже самое относится и к тебе. У тебя тоже получится.
Зачем сдавать информативы?
За весь хакс, нашёл лишь один жидкий-low баг, позволяющий включить администратору функционал (старые версии API), недоступные через UI.
По итогу, не смог раскрутить до "импакта" и не сдал, ибо "нет же импакта, да и в описании программы сказано, что не принимают возможность сделать действие, недоступное через UI без выявленных рисков безопасности"
ОДНАКО! Позже спросил у триажеров про этот "баг", на что получил:
- Знаем такой, его уже сдали. Тоже бы мог сдать и получить дубликат.
- В описании программы, в пункте про "действия не через UI", подразумевались только unreleased features, найденные в где-то в коде фронтенда.
Казалось бы, только я потерял баг, но нет, это повторилось у нескольких других хакеров с хакса. До сих пор очётливо помню, как автор самого пивного канала по безопасности, сказала : :
Если бы я сдала тот информатив, то мне бы заплатили 150к...
Выводы? Точно ли надо сдавать информативы?
- Во-первых, стоит написать триажеру с вопросом "стоит ли сдавать", после действовать в зависимости от ответа.
- Если нет контакта триажера и нет идей как раскручивать, то сдать "информатив".
БОНУСНЫЕ ЭПИЗОДЫ
Про синдром самозванца
До и во время хакса, во мне впервые разыгрался синдром самозванца. Он постоянно напирал : :
УУУ, я не найду багов и они узнают, что я не такой крутой багхантер и тогда будет плохо, УУУ
Когда же всё закончилось, всем было плевать. Мой мир не схлопнулся и отношение ко мне не изменилось, когда я не сдал багов. В этот самый момент, синдром самозванца исчез и пообещал не возвращаться.
Как я 90 минут подключал ноут к VPN в финале хакса
Считаю это апогеем тупых ситуаций со мной, но от того не менее смешной и интересной одновременно. Назвал бы его "хакатон костылей".
В тексте всё просто и прозаично, но за кадром я успел сгореть, уйти в депрессию, восстать из пепла, снова сгореть и собрать один большой костыль из маленьких (лего) костылей.
Ближе к делу. Больше года я работал на стареньком Thinkpad T420 с Arch Linux без всяких проблем. Получалось даже запускать EVE-NG с 5 виртуалками одновременно!
Впрочем, на финальный день хакса, решил сменить слабенький Thinkpad T420 на рабочий ноутбук, обосновывая "тот мощнее + там лицензионный бурп и WSL с настроенными инструментами".
Принёс, подключил, и стал ждать, пока Толя поведает нам секретный скоуп финального дня хакса. Спустя пару десятков минут, Толя поднимается на сцену и говорит : :
Cегодня будем ломать настолько секретный скоуп, что вам понадобится OpenVPN! Ещё, в удаленной сети нет DNS, поэтому вам придётся добавить хосты в hosts
Казалось бы, надо просто поставить OpenVPN, добавить хосты в файл и подключиться... и тут до меня доходит, что на тот момент, мне ещё не выдали права локального администратора, нужные для установки OpenVPN и редактирования hosts
файла
Пришлось выкручиваться. Задача стояла следующая : :
Предоставить ноутбуку доступ к хостам в удаленной сети, без установки OpenVPN (для установки нужны права админа) и настроить обращение к виртуальным хостам сервера через /etc/hosts
На опыте предыдущих проёбов stupid situations (расскажу в другой раз), я знал, что "предоставить ноутбук доступ к хостам в удаленной сети без установки VPN клиента" возможно через подключение телефона к VPN и раздачи точки доступа через VPN tethering. При таком сетапе, все подключенные устройства будут иметь доступ к удаленной сети VPN'a.
По памяти быстренько скачал приложение VPN Hotspot, раздал точку доступа и подключил к ней ноутбук. Пропинговал хост в скоупе, на что пришёл ответ.
Далее, нужно придумать как закинуть хосты файл c:\windows\system32\drivers\etc\hosts
+ настроить проксирования траффика браузера через бурп.
Точно есть расширение браузера, имитирующие hosts файл.
Перепробовал несколько расширений Chrome браузера для имитации изменения файла hosts
, но все они не работали как надо.
Что если отредактировать/etc/hosts
на виртуалке и поднять прокси сервер (mitmproxy) на той же виртуалке, чтобы виртуалка была выходным узлом для траффика и применяла на него свой локальный/etc/hosts
Окей, а как впихнуть сюда бурп?
Учитывая, что бурп - тот же прокси сервер, то как и в других прокси-серверах, в них возможно настроить перенаправление траффика на другой прокси сервер!
В бурпе это тоже возможно. За это отвечает функционал Upstream Proxy, в разделе настроек Proxy, заставляющий бурп - отправлять все запросы через указанный прокси.
Открыл настройки, перешёл к Upstream Proxy и настроил отправку запросов через прокси на виртуалке, с отредактированным /etc/hosts
.
Осталось проверить.
Вбиваю домен в адресную строку,
жму enter и ОНО РАБОТАЕТ!
И да, виртуалка заменилась на WSL, ибо виртуалка в VMware почему-то зависала каждые 10 минут.
Итого, чтобы вставить кавычку на сайте, кавычке приходилось проходить путь "хром -> бурп -> виртуалка -> хост в удалённой сети, будучи подключенным к точке доступа телефона, раздающей VPN соединение" и обратно.
Сколько времени ушло на это? От объявления скоупа и до получения доступа с ноутбука к доменам скоупа прошло 1 час и 26 минут из доступных 4ч похека + 80% ментальных сил.
Следующие 3ч34мин прошли в режиме "распыление", где на оставшиеся 20% ментальных сил, я пытался ухватиться за low-hanging fruits.
Что дальше?
Остаётся написать на бумаге I have failed, but I will try again tomorrow и не сдаваться. Ты тоже не сдавайся. Все совершают ошибки, все проебываются и попадают в тупые ситуации, но лишь некоторые учаться на них, становясь лучше.
Надеюсь какие-то из этих мыслей и ситуаций помогут в нужный момент, или уже помогли и ты зарядился энергией делать то, что к чему постоянно готовился.
Как появятся вопросы, предложения, мемы или захочешь что-нибудь обсудить, смело пиши мне на @tokiakasus + подписывайся на @hackthishit, чтобы видеть БОЛЬШЕ контента по безопасности веба, инфры и головы.