WAPT или Тестирование Веб-Приложений на проникновение

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

Вот и я хочу поведать Вам о замечательном курсе, который выбрал для себя для того, чтобы подтянуть отстающие навыки в веб-хакинге, такие как SQL-injection, XSS, XXE и другие. Скажу сразу, обзор делаю крайне независимым от мнений и принадлежности себя как части форума Codeby.net мне действительно «до лампы» мнения окружающих, мне важно лишь собственное ощущение удовлетворенности от полученного и что самое важное закрепления навыка. И еще, все описанное ниже, ничто иное как мой личный взгляд на вещи и это исключительно описание моих эмоций от курса и все придирки и критика — сугубо мое личное мнение)

Преамбульное вступление содержит пояснение и душевные переживания ровно для того, чтобы Вы не совершали ряд ошибок, которые содержатся дальше по тексту.

Замечу, хоть курс и позиционирует на уровне «Тестирование Веб-Приложений на проникновение с нуля», для меня он был местами очень сложным, где-то даже простоватым, но общее впечатление от курса и от экзамена очень позитивные и положительные.

Откуда сложились впечатления спросите Вы, только из личного опыта. На данный момент являюсь активным игроком на именитой СТФ площадке HackTheBox и на протяжении года постоянно тренирую новые навыки и до сих пор (07.04.2020) держусь в TOP 10. На ряду с работой и семейной жизнью, занимаюсь помощью в проведении тестирований на проникновение и имею уже с десяток завершенных крупных успешных проектов, так что опыт в процессе поиска уязвимостей веб сервисов и поднятия привилегий присутствовал до начала курса.

HTB_Top10

 

Положительными эмоциями я лично считаю КПД от самой деятельности обучения, а не красоты обложки и брендовости различных курсов типа CEH, который считаю может сдать каждый, просто зазубрив теоретическую часть. Поверьте я говорю не просто так, 2 года назад проходил курс по форензике CHFI от EC-Council стоимость которого составила почти миллион тенге за 3 дня обучения, и это без экзамена за который нужно было заплатить еще порядка 1000 долларов. Сам курс был простым с неплохими лабараторными задачами и очень продуманной инфраструктурой, по таскам было множество хинтов и практически нужно было просто читать методичку и «тыкать» на кнопки для успешной сдачи. Самое ужасное от такого метода обучения — Вы выполнив все таски даже раньше всех, выйдя из здания и занявшись своей повседневной деятельностью —  полностью забываете все эти прелести обучения. Ну остались лишь некоторые знания в рамках методики проведения расследования инцидентов и умение пользоваться рядом утилит типа volatility, которым я уже пользовался не раз решая различные СТФ задания до обучения. Для меня лично стоимость полученных знаний не соответствует полученным навыкам. Поэтому подавив свое желание завладеть именитым сертификатом CEH, я решил получить реальный навык тестирования на проникновение и ни минуты не жалел об этом и занимался вместе со всем потоком взахлеб курсом WAPT.

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

До начала обзора, вся информация по курсу содержится на форуме Codeby.net где есть видеоматериал, в том числе и по получению сертификата одним из участников курса который успешно прошел обучение и сдал экзамен. Прошу обратить внимание на качество сертификата и подарки которые идут в нагрузку к сертификату.

Итак, у форума есть отдельный портал посвященный обучению, который предлагает участникам получить различные навыки, нас интересует WAPT — пентест веб-приложений

Codeby_School

Полное оглавление раздела курса составляет более 135 пунктов, не считая видео уроков и лабораторий. Очень важное примечание, возьмите за привычку все документировать, не только в виде текстовых записей но и вместе со скриншотами. Составьте структуру курса, наполняйте информацией разбивая по главам и подглавам, так же ставьте метки, чтобы Вы могли легко и самое важное быстро в любой момент времени обратиться к нужному участку текста. У меня же структура всего курса с экзаменом в Cherry Tree выглядит следующим образом

WAPT-CherryTree

Это один из самых сильных курсов за всю историю рунета по теме Web Application Penetration Testing (WAPT) как заявляют нам создатели с чем я по завершению курса соглашусь не задумываясь.

Я пропустил ряд пунктов которые предназначены больше для новичков, которым необходимо подготовить рабочее окружение и ознакомиться с общей теорией, но честно скажу представленные данные достаточно содержательны. Стоимость курса это не просто качественные и содержательные методички. Сам курс длится примерно 3 месяца, за которые Вы должны не просто освоить представленный материал, но еще и набрать минимально количество очков в лабораторной среде, необходимые для прохождения к следующей главе.

В данном курсе все очень понятно и структурировано представлено

WAPT-2

Приступил к курсу 4 декабря 2019 года и в тот момент времени находился в командировке по работе, так же вперемешку с реальными тасками, этим курсом умудрился осуществить свою давнюю мечту, попасть в TOP 10 на Pentestit Lab 14 и занял 5 место и не мог полноценно поучаствовать в начальном этапе обучения и главы пассивной и активной разведки делались «на коленке». Но в полной мере пришлось ощутить всю боль выполнения ряда заданий. Поясню, что я имею ввиду.

По курсу Вас никто не ведет за руку и не протаскивают, как это обычно бывает при наличии знакомства. Вы сели, получили материал и огонь. В состоянии освоить представленный материал и подтвердить это — проходите дальше, нет — до свидания.

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

  • Во первых из-за невозможности проходить материал и глубоко изучать предмет в отведенное время, в связи с чем скопилось отставание, которое необходимо было наверстать.
  • Во вторых частично возникло недопонимание о лицах одобряющих выполнение главы. Я искренне считал, что люди указанные в личном кабинете в разделе Команда курса — все как один могут осуществлять поддержку процесса и одобрение выполненных заданий. Но основным преподавателем и техническим консультантом процесса был Артем, на которого ложилась огромная нагрузка и он просто не успевал за всеми следить и отвечать на вопросы.
  • В третьих в самом начале Пассивного фаззинга я не верно понял представленные задания и производил попытки «взлома» веб-сервисов не относящихся к курсу, так сказать соседей по IP и в этой части вижу недоработку инструктирования студентов. С этой частью возникали проблемы не только у меня, поэтому данный этап необходимо немножко доработать.

В главе Активного фазинга затруднения вызвали только некоторые задания, в которых необходимо было использовать определенный словарь, который автор тасков считает дефолтным словарем, что меня несколько удивило — это словарь утилиты dirbusterdirectory-list-2.3-medium.txt. Я по определению, не пользовался ранее ни дирбастером ни wfuzz, но некоторые таски дали мне понять насколько же мощным может быть к примеру невзрачный на первый взгляд wfuzz.

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

WAPT-LabsONE

Тут тоже возникали сложности на первом этапе, что сканировать и какой диапазон брать. Ребята в телеграм-канале курса пояснили тонкости управления.

Но в целом разобравшись с интерфейсной частью и привыкнув к управлению далее проблем информативного характера больше не возникало.

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

WAPT-Statistic

Как Вы можете заметить каждому участнику присваивается статичный IP адрес и статичный диапазон портов доступных заданий только Вам.

Хочу дать советы, тем у кого возникли сложности

При вводе команды taskВы видите все доступные на текущем этапе таски.

При вводе команды task 1 start — запускается таск для Вас.

Для того, чтобы сократить время на поиск открытого порта и не трогать порты других участников, необходимо сразу оградить сканер портов от лишнего к примеру следующим образом:

nmap -sS -Pn --open -p60161-60165

Указанные в nmap порты различны для каждого участника и значение необходимо поменять на соотвествующие порты доступные после ввода команды status

Для того, чтобы выключить таск при завершении вводите task stop  как бы это не странно не выглядело. Т.е. не task 1 stop a именно task stop

Уже ближе к завершению, один из участников потока курса tri3r подсказал мне крутую команду, которой нет в справке — statistic stream которая показывает Вашу текущую позицию среди всех участников потока, TOP-10 участников,

WAPT-Top10

а так же данные о том кто взял FB (первую кровь) в том или ином задании,

WAPT-StatisticTasks

что для меня лично стало дополнительным мотиватором решать таски быстрее всех и не пропускать даже самые сложные и уже ближе к концу действительно удалось наверстать упущенные темы и набрать ценные балы. Забегаю вперед, хочу сказать, что эти самые балы могут пригодиться на экзамене, до описания которого мы еще с Вами дойдем дальше.

Итак коротко о главах, пассивный и активный фаззинг мы с Вами уже коротко осмотрели, и добавлю лишь пару слов о самых для меня сложных заданиях с чем пришлось столкнуться

в пассивном фаззинге — это таск под названием «С соседями надо дружить» — который просто поломал мою психику и мировоззрение.

В активном фаззинге — это таск под названием «Вспомнить все», где реально пришлось применить все полученные знания на предыдущих тасках каскадно. За что разработчикам задания огромное спасибо. Но в этом же задании на первых этапах самым отвратительным на мой взгляд было то, что для брута необходимо было использовать огромный словарь rockyou, который в последствии пришлось делить на куски, чтобы успеть в отведенное для жизни порта время. Делалось это командой split -n 16 /usr/share/wordlists/rockyou.txt и брутил 16 раз по 2 часа на одном порту, затем стопорил таск на уже не действующем порту и запускал задание снова и снова брутил и это при скорости 50 потоков. Естественно это зависит от мощности ноутбука или ПК, но мой i3 3-го поколения не справлялся быстрее.

Далее глава с SQL инъекциями для меня далась с болью и потом. Первые 2 таска были сделаны буквально мгновенно. По ходу решения заданий этой главы местами было смешно, Рамазан автор тасков нарядно угарнул с фильтрацией. Напомню, что для выполнения заданий запрещена всякого рода автоматизация типа sqlmap и приходилось реально вручную вычислять уязвимости, обходить ваф или фильтрацию и добывать флаги. Особо запомнились предпоследний и последний таск с названием «Обойди с обратной стороны», повторюсь, для меня лично это было болью и я без помощи друзей не справился бы, возможно для людей которые работают с ручным анализом SQL инъекций покажется легкой прогулкой.

Глава с XXE для меня лично стала новостью и откровением того, что подобного рода уязвимость довольно часто встречается и раскручивается достаточно просто.

WAPT-xxe-tag2 WAPT-xxe-tag

Данная глава научила меня вычислять уязвимые теги и на сам термин тег — пришлось взглянуть с иной точки зрения и запомнить раз и навсегда что это такое. В целом было очень полезно не только познакомиться с данной уязвимостью, но и взглянуть на возможности реализации LFI, RFI и даже RCE под разным углом, ведь все задания практически не повторяются и авторы постарались подойти к подмастерию очень грамотно, чтобы студенты воочию расширили кругозор.

Раздел с Command Injection по началу показался легкой прогулкой, пока я опять не напоролся на таск с точкой входа через SQL-инъекцию, притом, что это был предпоследний таск под названием «Kronos return», а последний дался куда проще. Сложилось полное впечатление, что я никудышен в SQL и придется уделить большое количество времени для ручной «раскрутки скуля».  В целом задания были крутые и с практической точки зрения выглядели реальными уязвимостями, в СТФ сообществе называется Real-Life boxes которые затрагивают обширную ветку OWASP в части мисконфигов, которые допускают администраторы веб-сервисов из-за лени. У себя на youtube канале я запечатлел один из вариантов исполнения.

Про раздел с SSTI даже говорить нечего, отличные таски, местами даже интересные и красочные. На youtube канале пример.

Раздел PHP порадовал меня еще больше и тема вошла на ура. Но таск под номером 35 который называется «LevelUpWAFbypass» вывел меня из себя, размотал клубень моей нервной системы до нитки. Даже пришлось воспользоваться впервые хинтом к таску task 35 hint.  Тут один просто хороший человек, Дмитрий преподал мне урок, которого мне не хватало для понятия смысла всех связок. От того, что я мисконфигами получал первые части флагов не понимая как именно — данный таск не решишь.
Оказывается нужно просто вернуться к истокам, понять что происходит на каждом этапе и без этого картину не составить — этот таск заставляет это сделать как ничто другое. Ведь в жизни мы привыкли срать фазерами, долбить ваф байпасами и подобным мусором который делает все сам и если не находит мы идем дальше. Так вот Дима, дал мне понять, что пока я не пойму что происходит и как я получаю части флагов дальше просто не пройти, так как это выглядит как угадайка, но в обычной жизни те же фортики настроены очень круто и не дадут такое делать. Вот привожу пример своих заметок по данному таску, чтобы у Вас возникало представление как в порыве бессонных ночей приходилось мыслить, психовать, возвращаться назад, еще раз переосмысливать предмет и снова пробовать:

«Первую часть мы поняли и это сразу стало понятно, ковычки. Дальше в ковычках перебрав все символы, цифры и спец символы был определен объем фильтруемого и не фильтруемого в ковычках. Так вот второй шаг зависит чутко от определенного не фильтруемого количества символов латинских букв, а именно от abcdefx. Именно этот набор используется в хексе и не важно что мы туда запихнем. В итоге дальше определяем что мы будем делать на следующем шаге, у меня вторую часть флага тоже получалось выводить тупым перебором и было по названию таска понятно, что это функция и непосредственно функция пыхи по фразе. Там, внутри, сущее e v [ i ] l() и сравните с функциями get_defined_functions()[internal][FUZZ](whoami). Слово system, да и любое другое слово содержит в себе буквы, а они фильтруются. Именно поэтому здесь мы можем применить способ обхода фильтра с помощью PHP-функции. А как проверить не блочится функция?
Только опытным путём. У нас есть лазейка, часть букв не попадает под фильтр, а эти буквы входят в состав хекса. Значит мы может захексить функцию и проверить.
Т.е если ты попытаемся обойти system через get_defined_functions в хексе https://www.browserling.com/tools/utf8-to-hex получим \x67\x65\x74\x5f\x64\x65\x66\x69\x6e\x65\x64\x5f\x66\x75\x6e\x63\x74\x69\x6f\x6e\x73 и получим вторую часть флага, далее пытаемся добавить данные функции () но по факту при добавлении чего либо нас кидает назад.»

28.01.2020 официально данный таск был упрощен о чем уведомили в телеграм канале потока, т.к. на протяжении долгого времени весь поток и в том числе лидеры «общего зачета» не могли приблизиться к решению. Я был реально в нескольких шагах от победы, но уведомление о упрощении таска откатило меня вновь к истокам. В итоге я быстро справился с заданием и взял свою первую «first blood» к 11 часам дня, т.е. спустя час после уведомления об упрощении. Последний таск этой главы тоже был не простым, но все же попил куда меньше крови. Море эмоций, я зарядился на такие же сложные таски еще больше и настроение было на высоте от победы над такими сложными заданиями.

Дойдя до главы System (Системные уязвимости) я не знал чего ждать от этого раздела. В итоге не успев начать, данный невероятно интересный раздел был завершен. Не знаю что ответить, наверняка опыта в данной сфере у меня было немного больше остальных участников благодаря активным проектам, а так же постоянному участию в СТФ конкурсах.

Посмотрев статистику группы, к удивлению для себя обнаружил целую серию личных FB.

WAPT-System_FB

Раздел AuthBypass (Обход авторизации) дался так же успешно, как и предыдущий раздел и с чувством скорби от того, что супер интересные таски завершились — обнаружил новую коллекцию FB.

Раздел Misconfiguration прям разочаровал маленьким количеством интереснейших тасков дополнив коллекцию FB. Тематика последних 3-х глав была родной, какой то теплой и уютной средой в которой не приходилось чему-то новому учиться. Хотя некоторые участники отзывались об этих разделах не очень лестно, в основном кодеры и вэберы, которые крутили скуля как боги, а на этих разделах малец застряли.

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

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

Освободившись от текущих проектов, продолжил с последний перед экзаменом разделом — ПостЭксплуатация, который мне лично очень понравился. В нем были комбинированы и активный фазинг, и мисконфиги, задача которого заключалось не только раскрутить точку входа и войти на машину и забрать флаг, но и поднять привилегии. Но и этот раздел был простым, опять же выражаю мысль со «своей колокольни» имея какой никакой опыт в подобных манипуляциях. Естественно не выполнив 2 таска из раздела XSS, с первого места скатился на 3, но попросту уже было не так азартно.

WAPT-Final

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

Финальным и самым тяжелым этапом лично для меня стал экзамен.

WAPT-Exam-1

Кто бы что не говорил, лично для меня, как участника форума были установлены правила обязательной сдачи всех представленных заданий на экзамене. Так же, видимо произошло разногласие или недопонимание с преподавателем по дате начала экзамена и у меня оставалось менее 12 часов до окончания экзамена, вместо положенных 24.

Экзамен представляет из себя 16 тасков, 11 якобы базовой направленности и 5 тасков повышенной сложности.

WAPT-Exam-2

Начал я в 9 утра по времени Астаны (+6 GMT) с первого базового задания и к удивлению решил его буквально не успев начать, дальше столкнувшись с проблемами переключился на следующий, пропустив третий и как оказалось не зря. По факту сдачи экзамена самое сложное было войти в «режим берсерка» ну или по простому включить режим предельной концентрации, что в домашних условия, при активной удаленной работе было крайне не просто. Так же предварительно зная количество заданий экзамена, я распределил временные метки на выполнение того или иного задания. Получилось, что на 1 задание по оставшемуся времени у меня должно уйти не более 30-40 минут.

WAPT-Exam-PRE

На вроде бы базовом таске 4-1 я убил огромное количество времени и пришлось на ходу менять стратегию и пытаться решить что-то более сложное и ценное по очкам, в итоге 3 таска подряд из раздела повышенной сложности меня успокоили. Но тут световой день уже подходил к концу, у меня были зацепки на целую череду тасков, т.к. я начал делать все подряд пытаясь хоть что-то решить, бегло в попытках наверстать утерянное время на серьезные таски оставляя заметки по заданиям и скриншоты.

В целом, в режиме безвылазного решения тасков почти 10 часов не вставая, глаза уже не воспринимали эти картинки и записи и что-то приходилось делать по второму кругу, где-то возникали ощущения дэжавю, что я это уже когда-то делал, где-то приступив снова к таску — решал его мгновенно. Да стоит заметить, что решение 3-4 заданий я видел сразу, но не мог решить их быстро, т.к. у меня попросту отсутствовал внешний VPS сервер, с помощью которого используя сплоиты мог взять таск в считанные минуты. Но я только благодарен этому, т.к. в короткое время пришлось освоить ручную эксплуатации того-же hal_json для CMS Drupal и ряда других уязвимостей, которые по определению привык делать автоматизированными средствами.

Почему же так, да потому, как все задания лаборатории мы решали через VPN и не нужно было заботиться о сложных решениях и пробрасывать подсети до внешнего сервера за белым IP. Все решалось сразу, используя мощности и инструментарий того-же кали (kali linux).

Тут или сказывается усталость либо какие-то необъяснимые факторы или включение всех органов чувств на предельном уровне. Решив большинство заданий, я осознал, что оставшегося времени мне не хватит для решения последних базовых заданий, пошел на перекур и вернувшись понял, что стоит хотя бы попробовать.

В итоге успешная сдача всех заданий.

WAPT-Exam-FULL

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

WAPT-Exam-Results1

Указанное время в таблице не соответствует времени моей геопозиции, но отражает факт времени сдачи того или иного флага, что очень удобно

WAPT-Exam-Results

Руки тряслись, эмоции зашкаливали и я до сих пор еще не осознал, что все это завершилось, причем успешно для меня лично.

За все время существования данного курса, из более чем 300 участников, только ~50 дошли до экзамена и только 16 успешно сдали экзамен.

WAPT-SUCCESS-16

Хочу выразить огромную благодарность организаторам курса, всем ребятам кто принимал участие во всех технических вопросах, ребятам которые мне помогали осваивать не поддающийся SQL, особенно @exp1726 и @tri3r, ну и конечно же лично @BadBlackHat (Тимур ты лучший).

Так держать, курс получился офигенным и с высоким КПД от потраченного времени и иных ресурсов.

Я действительно считаю данный курс достойным и оцениваю его лучшим из тех, которые до этого только проходил.

По прибытию сертификата с подарками, обязательно в 2-х словах опишу ощущения и надеюсь к тому времени осознаю то, что для меня эта катка завершилась успешно. Сейчас только чувствую опустошение, не потому что меня курс вымотал, а наверное потому, что я хочу еще раз пройти это все снова и снова и считаю это высшей степени наградой организаторам, когда у студентов развивается зависимость к действительно стоящим продуктам…