практикум

by rebrain

Онлайн-практикум от команды Fevlake,
8 лет обслуживаем IT-инфраструктуры
различных компаний

90% практики

Онлайн-практикум для освоения инструментов тестирования на проникновение

45 заданий

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

Онлайн-практикум

Проходите, когда вам удобно

white
hacking

10 из 10

актуальных вакансий специалистов по безопасности на hh.ru требуют навык проведения тестирования на проникновение и анализа инцидентов

26 397

телефонных номеров было заблокировано ФинЦЕРТ из-за попытки использования украденных персональных данных за 2020 год

более чем В 2,5 раза

выросла доля шпионского ПО за 2020 год

Ваш путь в программе

by REBRAIN

как
проходит?

start here

Получаем задание

01

Читаем наш материал для его выполнения

02

Если есть вопросы, задаем команде кураторов

03

Выполняем задание, если есть вопросы, смотрим материалы

04

За 24 часа получаем развернутый комментарий проверяющего

05

Вносим правки

06

Переходим к следующему заданию

07

почему
rebrain?

Эффектив-ность

Вы своими руками сможете
проводить атаки и защищаться
от них в реальном времени

Отвечаем быстро

если есть вопрос по заданию, спросите у
авторов практикума и экспертов в закрытом
чате Telegram

Проверка за 24 часа

быстрая проверка заданий инженерами,
максимальное время проверки – 24 часа

Мастер–классы

живые мастер-классы от
действующих специалистов

45+ рабочих задач

поэтапно проходите более 45 заданий,
к каждому прилагаются необходимые
материалы для его выполнения

Чат с авторами

и действующими
специалистами в
облачной архитектуре

Финальный проект

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

Реальные задания

реальные кейсы атак
на инфраструктуру

кому подходит?

Специалисты по безопасности

системные администраторы

сетевые инженеры

DevOps-инженеры

архитекторы IT-инфраструктуры

разработчики

тестировщики

Требуемые знания:
Базовые знания Linux
Базовые знания сетевых протоколов
Базовые навыки языков программирования
Базовые навыки работы с базами данных / SQL
Представление о работе веб-приложений
Для кого программа:
Для всех, кто хочет наконец-то понять, как работают "хакеры"
Для тех, кто хочет научиться разрабатывать более защищенные системы
Для тех, кто хочет научиться проводить тестирование безопасности
Системные администраторы
Разработчики приложений
DevOps инженеры

программа
практикума:

  • Основы тестирования на проникновение. Defense in Depth
  • Методология: recon
  • Методология: scan. Утилита nmap
  • Методология: enumeration
  • Методология: exploitation
  • Методология: post-exploitation

  • Web среди остальных сервисов. OWASP Top 10. Burp Suite
  • SQL-инъекции. Утилита sqlmap
  • Blind SQL-инъекции
  • NoSQL инъекции
  • XML инъекции
  • Server Side Template Injection
  • Broken Authentication
  • Sensitive Data Exposure
  • Broken Access Control
  • Security Misconfiguration
  • Stored Cross-Site Scripting(SXSS)
  • Reflected Cross-Site Scripting(RXSS)
  • HTML injection
  • Insecure Deserialization
  • Using Components with Known Vulnerabilities
  • Server Side Request Forgery
  • Cross-Site Request Forgery
  • Local/Remote File Inclusion

  • Эксплуатация FTP
  • Эксплуатация SMTP
  • Эксплуатация LDAP
  • Эксплуатация MsSQL (Windows)
  • Denial of Service (Windows)
  • Эксплуатация Kerberos (Windows)

  • Основы постэксплуатации
  • Сбор информации
  • Brute Force
  • Работа со словарями
  • Buffer Overflow
  • Race Condition
  • Use-After-Free
  • Man in the Middle
  • SSL Attacks

  • Open Source Intelligence
  • Почтовые рассылки
  • Написание отчёта
  • Контрольная работа

Примеры заданий
из практикума:

В предыдущем задании Вы познакомились с основами проведения разведки (Reconnaissance), сбором информации о цели из открытых источников и использованием онлайн сканеров. Сегодня Вы познакомитесь с основами сканирования хостов, различными типами сканирования и получения информации от сетевых сервисов целевой организации.

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

Для идентификации активных узлов в локальной сети можно использовать различные протоколы сетевого и транспортного уровня, такие как ICMP, TCP и UDP.

Основные понятия

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

Наиболее известные сетевые модели:

Модель OSI, она же Модель ВОС, Взаимосвязь открытых систем. Эталонная модель. — теоретическая модель, описанная в международных стандартах и ГОСТах.

Модель Department of Defense (DOD) (Модель TCP/IP) — практически используемая модель, принятая для работы в Интернете.

Далее следует разбор указанных выше моделей и основных используемых протоколов.

Теперь давайте разберем основные инструменты исследования сети.

1. ICMP как инструмент исследования сети

Протокол ICMP служит для выявления проблем, связанных с сетевым уровнем. Как правило, в локальных сетях его не блокируют, так как он часто используется самими администраторами для поиска неполадок в сети (это не всегда так, см. далее). Благодаря этому с помощью ICMP можно производить исследование работающих в сети сервисов.

Сообщения ICMP передаются в виде IP-датаграмм, то есть к ним прибавляется заголовок IP. Подробнее протокол передачи команд и сообщений об ошибках описан здесь.

Все типы сообщений ICMP можно условно поделить на 2 группы:

  • сообщения об ошибках (например, Destination Unreachable);
  • запросы и ответы (например, Echo Request и Echo Reply).

Наилучшим методом определения доступности узла является посылка сообщения ICMP Echo Request (Type 8). Если система работает и отсутствует фильтрация трафика данного типа, то в ответ придет сообщение ICMP Echo Reply (Type 0). Идентификация (обнаружение) сетевых устройств с помощью протокола ICMP может быть выполнена двумя способами:

  • посылкой запроса, получением ответа;
  • вызовом ситуации ошибки, получением сообщения об ошибке.

В основу идентификации заложен следующий принцип. Узел, отправляющий ICMP-запрос, устанавливает значения полей Identifier, эти значения позволяют определить ответы, пришедшие от разных узлов. А для того чтобы отличить несколько ответов, пришедших от одного узла, используется поле Sequence Number. В поле Code записывается ноль, поле данных произвольно (например, алфавит). Отвечающая сторона должна заменить значение поля Type на 0 и отправить датаграмму обратно. Для выполнения обнаружения узла обычно используется утилита ping, входящая в состав большинства ОС. в качестве параметра ping указывается IP/имя хоста(ов), в результате будет получен ответ удаленной системы. Однако у нее есть существенный недостаток — все узлы опрашиваются последовательно, что существенно увеличивает продолжительность опроса.

Обращение сразу к нескольким узлам (диапазону адресов) с использованием ICMP-запросов (Echo) называется ICMP Sweep, или Ping Sweep. Для исследования большой сети потребуется утилита, способная посылать ICMP-запросы параллельно. Однако, говоря о Ping Sweep, стоит отметить, что из-за параллельной отправки множества ICMP-запросов системы обнаружения атак легко определят такое сканирование.

Рассмотрим несколько из них в качестве примера.

2. Утилита fping

Утилита fping позволяет производить исследование сети при помощи протокола ICMP, также возможен параллельный опрос сразу нескольких узлов, список которых может быть задан непосредственно пользователем или получен из файла.

Синтаксис:
fping [опции ] [узлы... ]

Список наиболее используемых опций:

  • -c — количество отправляемых пакетов к каждому из узлов;
  • -b — количество байт в отправляемом пакете;
  • -g — указание списка сканируемых узлов;
  • -f — указание файла со списком сканируемых узлов.

Пример:

Сканирование сети 192.168.1.0/24

Сканирование сети класса С можно осуществить с помощью задания маски fping -g 192.168.1.0/24

а можно с помощью задания диапазона сканируемых адресов:
fping -g 192.168.1.1 192.168.1.254

Также с помощью данной утилиты можно осуществить сканирование с использованием посылки одного пакета:
fping -g 192.168.1.1 192.168.1.254 -c 1 > alive-hosts

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

Метод Ping-разведки является наиболее универсальным методом обнаружения сетевых узлов, однако по ряду причин данный метод может оказаться неэффективным. Например, в случае, когда обследуемая сеть защищена межсетевыми экранами, блокирующими ICMP-сообщения, или если пользователи защищены персональными межсетевыми экранами.
Кроме Ping-разведки существуют другие методы получения списка сетевых узлов. Рассмотрим некоторые из них более подробно.

6. Утилита nmap

Для поиска живых хостов, сканирования портов и идентификации версий ОС и сервисов можно использовать утилиту nmap.
Пример. Сканирование сети 192.168.1.0/24 на наличие живых хостов будет выглядеть:
nmap -sn 192.168.1.1-254 или же nmap -sn 192.168.1.0/24
Ключ -sn указывает nmap не сканировать какие-либо порты, заставляя его полагаться в первую очередь на пакеты ICMP Echo (или запросы ARP в локальной сети, если nmap запущен с помощью sudo или напрямую от имени пользователя root) для определения доступности хостов. В дополнение к эхо-запросам ICMP, ключ -sn также заставит nmap отправить TCP SYN-пакет на 443-й порт цели, а также пакет TCP ACK (или TCP SYN, если запускается не от имени root) на 80-й порт цели.
Ниже приведена таблица дополнительных параметров, которые помогут провести сканирование намного эффективнее. Эта таблица содержит не все возможные параметры, а только самые основные. Более подробную информацию можно получить в документации к данной утилите.

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

14. CDP-разведка

Данный метод позволяет обнаружить и получить информацию об устройствах, работающих по протоколу CDP (Cisco Discovery Protocol — протокол обнаружения Cisco) и находящихся в одном сетевом сегменте. Информацию о CDP-узлах можно получать, непосредственно подключаясь к консоли активного сетевого устройства производства фирмы Cisco Systems, либо перехватывая CDP-объявления (например, с использованием утилиты cdpr от MonkeyMental.com).

15. Прослушивание сети

Данный метод заключается в перехвате сетевых пакетов из некоторого сетевого сегмента и в последующем анализе используемых IP-адресов. Для реализации данного метода можно использовать утилиту Wireshark

16. Меры защиты

Собственно, набор средств защиты от сканирования сети не слишком обширен. Это фильтрация трафика и использование систем обнаружения вторжений. Фильтрация трафика основывается на запрете всех протоколов, которые не используются для работы легальных служб и приложений. Это относится прежде всего к UDP-пакетам для экзотических приложений. Вряд ли в пользовательских сегментах на компьютерах пользователей применяются Syslog или SNMP. поэтому такой трафик можно отфильтровывать, оставив лишь DNS.
Что касается систем обнаружения вторжений, то лучше всего протестировать на практике те программы, которые приводятся в разделе, и настроить свои IDS на обнаружение сканирования.

Выявите сетевые узлы в локальном сетевом сегменте
с использованием:
  • утилиты fping
  • утилиты ping и широковещательной ICMP-посылки
  • утилиты icmpush (ICMP-сообщение TIMESTAMP)
  • утилиты ping и многоадресной рассылки
  • утилиты hping3 и методов TCP- и UDP-разведки
  • утилиты arp и метода ARP-кэша
  • утилиты nmap с ключами для поиска живых хостов и вывода в формате, удобном для поиска утилитой grep или ей подобными, результаты работы утилиты nmap сохраните в /tmp/task3/ в следующем формате: /tmp/task3/nmap_live_hosts
По результатам выполнения сканирования вышеуказанными утилитами однозначно идентифицируйте сетевые узлы в исследуемой сети и составьте отчет

В прошлом задании вы узнали об основных видах WEB уязвимостей, познакомились с OWASP Top 10, научились основам работы с Burp Suite. Пришло время приходить к практике! В данном задании вы подробно узнаете о том, что такое SQL инъекции, какие они бывают, как и где их искать, а также как их эксплуатировать.

Краткий экскурс в SQL.

Для тех, кто не очень хорошо знаком с данной технологией, SQL (Structured Query Language) - язык структурированных запросов, позволяющий управлять данными в реляционных базах данных. Для управления базами данных используются системы управления базами данных(СУБД). Наиболее популярными СУБД являются:

  • MySQL
  • Oracle
  • PostgreSQL
  • SQL Server
  • SQL Lite

Базы данных используются для эффективного хранения данных, и SQL как раз используется для их управления.

Данные в реляционных БД хранятся в объектах, которые представляют собой таблицы. Каждая таблица состоит из полей, а поле - это колонка таблицы, предназначенная для хранения информации о записи в таблице. Пример:

Таблица Users

user_id user_login user_pass user_name user_surname user_role
1 admin admin Ivan Dorn 1
2 user1 pass1 Petr Pankov 2
3 user2 pass2 Irina Chernova 2

Таблица Roles

role_id role_name
1 administrator
2 subscriber

Так, у нас есть 2 таблицы Users и Roles. Как видно, таблица Users содержит информацию о пользователях, в ней есть поля user_id, user_login, user_pass, user_name, user_role. Причем поле user_role ссылается на таблицу Roles. Так будет выглядеть команда на SQL для создания этих двух таблиц в MySQL.

CREATE TABLE Roles
(
role_id int NOT NULL,
role_name char(50),
CONSTRAINT roles_pk PRIMARY KEY (role_id)

)

CREATE TABLE Users
(
user_id int NOT NULL,
user_login char(50) NOT NULL,
user_pass char(50),
user_name char(50),
user_cname char(50),
CONSTRAINT users_pk PRIMARY KEY (user_id),
CONSTRAINT fk_roles
FOREIGN KEY (role_id)
REFERENCES Roles(role_id)

);
SQL запросы

Для извлечения данных из БД используется оператор SELECT. Например, чтобы получить всю информацию из таблицы users, необходимо выполнить следующую команду

SELECT * FORM Users;

SQL запросы должны заканчиваться ; , комментарии в разных СУБД обозначают разные символы. Практически везде -- обозначает строчный комментарий. Знак * указывает, что мы хотим получить все поля из таблицы. Но мы можем задать только определенные поля для получения.

SELECT user_login, user_pass FROM Users; -- Вернет только поля user_login и user_pass

Также можно задавать условия для выборки, например

/* Вернет информацию о пользователях, id которых больше 2 с ролью администратора */
SELECT * from Users where user id > 1 and user_role = 1;

С помощью оператора UNION можно объеденить результат двух запросов. Например:

SELECT * FROM Users WHERE id = 1 UNION SELECT * FROM Users WHERE user_pass = 'pass1';

выведет

user_id user_login user_pass user_name user_surname user_role
1 admin admin Ivan Dorn 1
2 user1 pass1 Petr Pankov 2

Необходимо, чтобы количество полей, которые возвращают запросы, совпадало, иначе произойдет ошибка.

SQL инъекции

SQL инъекция - очень часто встречаемая уязвимость веб приложений, возникающая по причине недостаточной фильтрации пользовательского ввода, используемого в SQL запросах. С помощью подачи специально сформированных данных, мы можем выбраться из оригинального запроса, созданного разработчиками и выполнить собственные.

SQL инъекции - достаточно серьезная уязвимость, которая может привести к утечке конфиденциальных данных, а в некоторых случаях и к полной компрометации системы.

Разберем пример, как разработчики допускают подобные ошибки.

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

Пример таблицы Products

product_id product_name product_price product_count
1 apple 60 100
2 banana 55 92
3 oranges 70 84

Для реализации данной функции, разработчик при получении GET запроса /search?name=<искомое имя> должен выполнить запрос к базе данных и вернуть его результат. Для этого разработчик пишет следующий код на псевдоязыке:

product_name = request.data['name']

result = db.raw_query("SELECT * FROM Products WHERE product_name LIKE '%" + product_name + "%';")

return render_template('product_list.html', result)

Оператор LIKE позволяет осуществлять поиск по маске, данный запрос вернет все строки, в которых поле name содержит product_name

Таким образом, если не фильтровать пользовательские данные, злоумышленник может отправить следующий запрос

/search?name='+or+1=1+;+--

Тогда, при подставлении получится следующий запрос

result = db.raw_query("SELECT * FROM Products WHERE product_name LIKE '%' or 1=1 ; --%';")

return render_template('product_list.html', result)

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

Обнаружение SQL инъекциий

Для того, чтобы обнаружить SQL инъекцию, необходимо понять, где происходит запрос к базе данных и как мы можем на него повлиять. Интуитивно понятно, что наверняка обращения к БД происходят при авторизации, получении списка постов, продуктов, билетов, сохранении пользовательских данных и так далее, список можно продолжать бесконечно. Теперь появляется вопрос, как обнаружить, существует ли в данном месте уязвимость или нет. Для этого необходимо использовать технику фазинга, то есть подавать на вход такие данные, которые сервер не ожидает увидеть и анализировать нестандартное поведение сервера на запрос. Например, сервер может выдать SQL ошибку, время ответа может увеличиться, сайт может начать тормозить и так далее. Для фазинга потенциальной SQL инъекции используются специальные словари, содержащие команды SQL для разных СУБД. Примеры подобных словарей вы можете найти в полезных ссылках

Типы SQL инъекций

Существует 3 типа SQLi

**In-Band SQLi **

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

У данного типа существует 2 подтипа

  • Error-based SQLI - специально сформированные запросы вызывают ошибки на стороне сервера, которые видны атакующему. Этого уже достаточно для того, чтобы вытащить информацию из БД
  • Union-based SQLI - иногда с помощью команды UNION, атакующий может добавить к возвращаемым данным дополнительные данные из других таблиц, что может привести к утечке данных

Blind SQLi

Более сложный для эксплуатации тип SQLi, отличетсся от In-Band тем, что атакующий не видит никаких ошибок и не может увидеть вывод SQL запроса. Таким образом, для эксплуатации уязвимости необходимо анализировать ответы сервера и пытаться восстановить структуру базы данных. Хоть эксплуатация Blind SQLi и более сложна, занимает значительно больше времени, ее критичность не ниже чем у In-Band SQLi.

Есть 2 подтипа Blind SQLi

  • Boolean-based Blind SQLi - данная техника применима когда SQL запрос возвращает как результат только True или False, и этот результат запроса влияет на то, изменится страница или нет.
  • Time-based Blidn SQLi - атакующий отправляет специальные SQL команды, вынуждающие сервер возвращать данные только спустя какое-то время в зависимости от заданных условий. Вынудить сервер отвечать дольше может как специальная SQL команда SLEEP, так и выполнение сложных вычислений, например, многократное вычисление хэша строки.

Out-of-band SQLi

Наиболее редко встречаемый тип SQLi, так как может сработать только при определенных настройках сервера. Смысл данной техники заключается в выполнении с помощью SQL команды HTTP или DNS запроса на внешний сервер и выкачивания информации с помощью этих запросов.

Эксплуатация UNION-based SQLi

Вы узнали, что такое SQL, что такое SQLi, какие типы бывают. Теперь научимся их экспуатировать.

Вернемся к нашему примеру. Допустим, у нас есть еще одна таблица Users

user_id user_login user_pass
1 admin super_secret_uncracked_password
2 user UllNeverGetMyP@ss!!11

Рассматриваем данную ситуации с точки зрения атакующего. Мы не знаем, какой запрос к БД выполняется на сервере, не знаем структуру таблиц и их названия, но исходя из логики работы приложения мы можем предположить, что существует таблица с информацией о продуктах и сущесвует таблица, в которой хранятся пользовательские данные.

Мы обнаружили, что при подставлении ' в запрос /search?name=<параметр>, сервер возвращает ошибку Invalid SQL syntax. Нам необходимо вытащить пользовательские данные.

Из того что при отправке ', нарушается синтаксис SQL, можно предположить появление незакрытой пары ' в SQL запросе. В данном случем у нас UNION-based SQLi, так как с помощью оператора UNION, мы можем добавить результат любого другого запроса к нашему выводу. Для того, чтобы правильно применить оператор UNION, нам нужно знать следующее:

  • Сколько колонок возвращает изначальный запрос к БД. Так как если количество столбцов у двух запросов не совпадает, то к ним оператор UNION применить нельзя.
  • Название таблицы с пользовательскими данными
  • Название колонок в интересующей таблице

Для определения числа столбцов можно пользоваться следующими методами

' UNION SELECT 1, 2, 3, ... , n; --
' UNION SELECT NULL, ... , NULL; --

В обоих случаях смысл заключается в подборе такого параметров во втором запросе, чтобы оно совпало с первым и не возникла ошибка. В ручную это удобно делать с помощью Burp Suite Intruder. В нашем случае в таблице Products 4 колонки и следующие запросы не выдадут ошибку команды UNION:

' UNION SELECT 1, 2, 3, 4; --
' UNION SELECT NULL, NULL, NULL, NULL; --

Определив количество столбцов в запросе, мы можем извлечь имена таблиц. В каждой СУБД есть стандартные служебные таблицы, содержащие информацию о существующих базах данных. Например, в MySQL в БД INFORMATION_SCHEMA есть таблица Tables, которая содержит информацию о всех таблицах в БД. Таким образом, мы можем сделать второй запрос к INFORMATION_SCHEMA.TABLES и получить имена таблиц.

' UNION SELECT NULL, TABLE_NAME, NULL, NULL FROM INFORMATION_SCHEMA.TABLES ; --

Зачастую сервер возвращает пользователю не все данные, полученные из БД. Например, сервер может возвращать только названия продуктов. В таком случае нужно менять номер колонки, в которой возвращаются запрашиваемые данные.

Информацию о колонках таблицы можно также получить из стандартных таблиц. Например,

' UNION SELECT NULL, COLUMN_NAME, NULL, NULL FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='Users'; --

Если сейчас вам кажется это очень сложным, то не переживайте, в задании вам предстоит самостоятельно проэксплуатировать UNION-based SQLi и вы поймете, что ничего в этом сложного нет.

Тему Blind SQLi и автоматического поиска и эксплуатации SQLi мы затронем в следующем задании

Наши друзья решили запустить свой сайт с курсами и попросили тестировать его по ходу разработки. В обмен мы попросили использовать уязвимые версии их сайта для обучения участников нашего практикума. Таким образом, в данном задании вам будет предоставлено 3 версии сайта с различными вариациями SQL инъекций.
В первом задании вам необходимо проэксплуатировать SQL инъекцию и получить значение колонки flag из таблицы Secret. Во втором задании вам необходимо проэксплуатировать уязвимость в авторизации и получить флаг из профиля пользователя admin. В третьем задании вам необходимо проэксплуатировать SQL инъекцию и получить значение колонки flag из таблицы Secret. Но будьте внимательны, это будет не так просто, мы добавили кое-что, чтобы вам помешать
Полученные флаги сложите в файл /tmp/flags на вашей Kali

Не секрет, что современные системы могут быть очень сложными и сильно распределёнными. При общении компонентов инфраструктуры между собой бинарные данные уже могут быть не идеальным вариантом. Здесь на помощь приходит сериализация и десериализация.

Сериализация - процесс перевода структуры данных в последовательность байтов(как правило в строку). Обратной операцией сериализации является десериализация - создание структуры данных из битовой последовательности.

Сериализация зачастую используется в архитектурах, которые используют API, микросервисы и архитектурах типа MVC. Когда данные, которые сериализуются и десериализуются, являются доверенными(находятся под полным контролем веб-приложения), вероятность риска минимальна.

Как только данные, которые подвергаются сериализации и десериализации, могут быть модифицированы пользователем, как правило возникает уязвимость небезопасной десериализации. Уязвимость возникакет в тот момент, когда происходит операция восстановления данных из сериализованного вида(строки). Чаще всего, данная уязвимость приводит к исполнению кода на целевой системе.

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

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

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

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

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

Давайте рассмотрим несколько примеров из различных языков программирования.

1. PHP

PHP достаточно прочно закрепился в лидерах языков разработки веб-приложений, хоть уже и по-тихоньку начинает устаревать. В данном языке программирования используется наиболее "читаемый" формат сериализованных данных. Предположим, у нас существует объект Book со следующими атрибутами:

$book->title = "War & Peace";
$book->in_stock = true;

Сериализованные данные будут выглядеть следующим образом:

O:4:"Book":2:{s:5:"title":s:11:"War & Peace"; s:8:"in_stock":b:1;}

Расшифровывается данная запись достаточно просто:

  • O:4:"Book" - объект, название класса которого состоит из 4 символов, название класса Book;
  • 2 - объект имеет 2 атрибута;
  • s:5:"title" - название первого атрибута состоит из 4 символов и называется title;
  • s:11:"War & Peace" - значение первого атрибута это строка длиной 11 символов со значением War & Peace;
  • s:8:"in_stock" - название второго атрибута состоит из 8 символов и называется in_stock;
  • b:1 - второй атрибут имеет тип Boolean и равен True(1).

Стандартные методы PHP работающие с данным функционалом называются serialize() и unserialize(). Если есть доступ к исходному коду, то первым делом нужно искать именно метод unserialize().

Давайте представим, что некоторое веб-приложение для отображения необходимого функционала пользователю опирается на его cookie. В качестве cookie хранится сериализованный объект User под Base64, в котором находятся основные поля, открывающие пользователю доступ к тем или иным полям:

// Заголовок пользователя:
Cookie:
Tzo0OiJVc2VyIjo0OntzOjg6InVzZXJuYW1lIjpzOjg6ImF0dGFja2VyIjsgczoxMDoic2Vzc2lvbl9pZCI6aTo2NDM1OyBzOjEyOiJpc19tb2RlcmF0b3IiOmI6MCwgczo4OiJpc19hZG1pbiI6YjowO30=

// Снимаем base64:
O:4:"User":4:{s:8:"username":s:8:"attacker"; s:10:"session_id":i:6435; s:12:"is_moderator":b:0, s:8:"is_admin":b:0;}

Код, разбирающий данный тип cookie:

// Снимается base64
$user_obj_string = base64_decode(__COOKIE);

// Десериализуется полученный объект из строки
$user = unserialize($user_obj_string);

// Предоставление необходимого интерфейса пользователям
if $user->is_admin {
show_admin_UI();

}

if $user->is_moderator {
show_moderator_UI();

}

Всё, что необходимо сделать атакующему в данном случае для получения административного доступа к приложению это снять Base64 с cookie, изменить значение поля is_admin в True и, навесив Base64 на получившуюся строку, подставить в свой запрос к веб-приложению.

Подобные уязвимости называются манипуляцией атрибутов объекта, что даёт атакующему возможность измененять критические параметры различных объектов и управлять ходом веб-приложения в своих интересах.

Ещё один интересный трюк, связанный с десериализацией в PHP связан с подстановкой неправильных типов данных. Такие уязвимости чаще всего возникают, когда в критически важных местах, вместо типизированного сравнения === разработчик использует обычное ==.

Работает в данном языке программирования это следующим образом - выражение 5 == 5 очевидно вернёт true. Но при этом выражение 5 == "5" также вернёт true. Работает это потому, что интерпретатор пытается конвертировать строку "5" в число, начиная с начала строки. Таким образом, выражение 5 == "5 и ещё какая-то странное продолжение строки" также будет равняться true. Самое забавное то, что выражение 0 == "строка без цифр" также будет равняться true, т.к. интерпретатор считает, что раз цифр нет, то "строка без цифр"равняется числу 0.

Таким образом, допустим, приложение сверяет введённый пароль следующим образом:

// десериализуем ввод пользователя
$auth_info = unserialize($__POST['auth']);

// берём пароль для необходимого пользователя, например из БД
$password = get_password_for_login($auth_info['login']);

if ($auth_info['password'] == $password) {
// пройти аутентификацию успешно

}

То атакующий может изменить вводимые данные так, что в поле password будет содержаться число 0. Это означает, что для любого пользователя можно обойти аутентификацию и продолжить свою работу в веб-приложении от него.

Самый интересный сценарий, это определять магические методы для объекта. Магические методы (magic methods) - специальные методы, которые переопределяют действие PHP по умолчанию, когда над объектом выполняются определённые действия. Самым простым примером в PHP будет __construct() - метод, который выполняется при инициализации объекта класса (конструктор). Данный метод переопределяется разработчиками для первоначальной инициализации атрибутов объекта. Если у атакующего появляется возможность переопределять магические методы для объекта, то можно переопределить метод __wakeup(), который ищет функция unserialize(), и записать в него любой код, который может нести за собой критические последствия на системе. Данный сценарий открывает огромную дверь в мир куда более сложных эксплойтов.

2. Python

В целом, при смене языка программирования не меняются подходы к эксплуатации небезопасной десериализации - меняются лишь названия функций и некоторые нюансы. Например, в Python стандартным средством для сериализации и десериализации объектов является библиотека pickle. Соответственно первым делом, имея перед собой код приложения стоит поискать использование данной библиотеки и её метода picke.loads(). Также в Python достаточно популярны такие методы сериализации данных как JSON и YAML. Для них в коде нужно искать yaml.load() и json.loads() соответственно.

Главным отличием здесь будет то, какой именно будет выходная строка после сериализации. Например, при сериализации объекта simple мы получим следующие результаты:

import pickle
import yaml
import json

simple = dict(int_list=[1, 2, 3], text='string', number=3.44, boolean=True, none=None)

pickle.dumps(simple)

# Сериализованный pickle в стандартном формате объект:
'''
"(dp1\nS'text'\np2\nS'string'\np3\nsS'none'\np4\nNsS'boolean'\np5\nI01\nsS'number'\np6\nF3.4399999999999999\nsS'int_list'\np7\n(lp8\nI1\naI2\naI3\nas."
'''

yaml.dump(simple)

# Сериализованный yaml объект:
'''
boolean: true
int_list:
- 1
- 2
- 3
none: null
number: 3.44
text: string
'''

json.dumps(simple)

# Сериализованный json объект:
'''
{
"int_list":[
1,
2,
3

],
"text":"string",
"number":3.44,
"boolean":true,
"none":null

}
'''

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

Как и в PHP, для Python объектов можно переопределять магические методы, которые будут вызываться на стадии десериализации объектов. Например, для pickle магический метод класса называется __reduce__(self). Этот метод возвращает строку или кортеж и не принимает никаких аргументов, что позволяет атакующему подставить в десериализатор что-то на подобие:

class Exploit(object):
def __reduce__(self):
return (os.system, ('whoami',))


pickle.dumps(Exploit())

# Сериализованный объект:
'''
b'\x80\x04\x95!\x00\x00\x00\x00\x00\x00\x00\x8c\x05posix\x94\x8c\x06system\x94\x93\x94\
x8c\x0
6whoami\x94\x85\x94R\x94.'
'''

Далее данная строка подаётся на вход веб-приложению, которое отправляет её в функцию pickle.loads() и в момент десериализации выполнится системная функция whoami.

Для YAML формата есть специальный метод yaml.safe_load(), который считается безопасным. При нахождении обычного метода yaml.load() можно использовать следующую нагрузку:

foo: !!python/object/apply:subprocess.check_output ['whoami']
3. Java

Веб-приложения на Java также подвержены данной уязвимости. Стандартный интерфейс для работы с сериализацией в Java называется java.io.Serializable. Для сериализации и десериализации используются методы writeObject() и readObject() соответственно.

Как правило, сериализованные данные в Java начинаются со строки AC ED 00 05 или rO0 под Base64. При этом же, если сериализованные данные будут отправлены в качестве параметров HTTP запроса, то заголовок Content-typeбудет выставлен в application/x-java-serialized-object. При поиске сериализованных данных в веб-приложениях на Java стоит учитывать, что сериализованный объект содержит множество спецсимволов, поэтому может быть закодирован различными способами, чтобы быть доставленным по протоколу HTTP.

Для того, чтобы перевести уязвимость Insecure Deserialization в Remote Code Execution, иногда не получается просто передать необходимый код на исполнение. Для этого создаются цепочки из гаджетов (относится не только к Java). Гаджет это машинные инструкции, которые уже присутствуют в оперативной памяти сервера(Более подробно рассмотрим в одном из следующих модулей). Для автоматизации генерации нагрузки в java существует инструмент ysoserial. Она использует известные цепочки гаджетов в популярных стандартных библиотеках Java. Генерация пейлоада может выглядеть следующим образом:

# Шаблон команды
java -jar ysoserial.jar [gadget chain] '[command to execute]'

# Использование цепочки гаджетов CommonsCollections1
# для вызова калькулятора на целевой системе
java -jar ysoserial.jar CommonsCollections1 calc.exe

Для защиты от небезопасной десериализации может помочь только один совет - никогда не десериализуйте данные, которые могут контролировать обычные пользователи. Если же это необходимо, то данные стоит проверять ещё на стадии строки, а не после того, как объект был создан. Чтобы предотвратить данную уязвимость через куки, сохраняйте состоянии сессии на сервере, вместо того, чтобы полагаться на заголовки в пакетах пользователей.

В данном задании мы рассмотрим уже известную уязвимость.
  • Перейдите на веб выданной вам машины, определите версию установленного там ПО;
  • Изучите уже открытые уязвимости по теме данного урока;
  • Прочитайте про уязвимость CVE-2020-10977;
  • Повторите манипуляции с issue для получения файла secrets.yml;
  • Заберите из полученного файла значение secret_key_base;
  • Установите себе локально или на выданную Вам Kali Linux docker и установите подверженный данной уязвимости image, затем подключитесь к нему:

    docker pull gitlab/gitlab-ce:12.8.1-ce.0

    docker run --detach --hostname gitlab --name gitlab gitlab/gitlab-ce:12.8.1-ce.0

    docker exec -it gitlab bash
  • В контейнере, замените полученный secret_key_base в нужном файле;
  • С помощью описанных в репорте действий, сгенерируйте пэйлоад для исполнения кода. В качестве нагрузки используйте Reverse Bash Shell;
  • На Kali Linux поднимите listener с помощью утилиты nc.
  • На выданный Вам GitLab дайте запрос с выставленным cookie experimentation_subject_id;
  • Проверьте, что на Ваш listener поступило соединение с GitLab. В полученной оболочке заберите флаг из корневой директории;
  • С помощью локальной gitlab-rails консоли смените пароль пользователю administrator и заберите его флаг с приватного репозитория;
  • Полученные флаги сохраните в файле /tmp/flags на выданной Вам Kali Linux и отправляйте задание на проверку.

в процессе
вы изучите

BurpSuite, NMap, SQLMap, Impacket, Metasploit Framework,
DNSrecon, Netcat, Nikto.pl, Wireshark, THC Hydra, PEASS, Shodan.

После нашего практикума
вы научитесь:

  • Собирать информацию из открытых источников
  • Тестировать инфраструктуру на наличие уязвимостей
  • Предотвращать атаки и защищать инфраструктуру
  • Использовать методику социальной инженерии
  • Составлять отчет после проведения аудита безопасности

с какими задачами приходят на практикум?

Познакомиться с основами проведения аудита безопасности, его основными понятиями в рамках тестирования на проникновение

01

Научиться работать с уязвимостями различных систем и протоколов разного уровня OSI

02

Выяснить типы атак на системы и людей

03

Понять, что есть возможность предотвращения вышеуказанных атак

04

Разобрать известные уязвимости, которые нанесли глобальный урон

05

Развить профессиональные навыки, которые однозначно пригодятся в работе

06

Отзывы

Юрий / 28 лет

Digital marketing >>> Junior DevOps

@youmedv

До практикума я работал в сфере Digital Marketing - удаленно занимался рекламой, маркетингом. Ранее работал инженером связи, от механика и до ведущего инженера, поэтому IT мне близко, и я всегда хотел развиваться в этом направлении и вернуться в профессию. Потому заинтересовался открытым уроком по DevOps, который предложила мне таргетная реклама. После урока желание изучать DevOps усилилось - привлекли перспективы и сложная, но интересная работа. Так я решил пойти дальше на практикум. И уже в середине курса устроился в аутсорсинговую компанию по администрированию инфраструктуры и дорос до Junior DevOps.

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

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

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

Сергей / 32 года

Junior DevOps

@KernelVrn

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

В целом ожидания оправдались, я особо нигде в таком формате не практиковался.
Очень удобен формат без привязки к конкретному времени сдачи заданий и участия в вебинарах, т.к. на работе бывает вообще нет времени, я чаще всего могу начать заниматься после 23. Приезжаю в 20, потом надо с ребенком поиграть. Ну а на себя время только ночью нахожу)

Наталья / 32 года

Support Engineer

@Natalia_mm

Практикум я решила проходить как дополнение к текущей работе. Хотелось изучить все инструменты DevOps в целом. Например, по работе мне был нужен Docker. Мой коллега проходил практикум DevOps by Rebrain, и он рассказывал, как это круто, и что можно в случае, если не подойдет, вернуть деньги в течение 2 недель. Я заинтересовалась и решила попробовать.
Я очень боялась, что не пройду по стартовым знаниям, все-таки я совсем не системный администратор. Но проблем у меня не было. Все есть в гугле. Если нужно что-то сделать и не знаю как, то просто открываю гугл и ищу. Считаю, что это необходимость такого формата, как практикум. За то время, что его прохожу, уже добавила себе определенную базу знаний по разным темам. Сейчас прохожу практикум не спеша, 1-2 задания в неделю, периодически делаю перерывы. Очень нравится за счет того, что это практика, нет скучных лекций. Василий Озеров проводит позитивные, классные мастер-классы. На мой взгляд, цена практикума совершенно адекватна.
Из пожеланий - хотелось бы улучшить SLA. И есть некоторые задания в модуле DevOps, где сложно понимать формулировки. Из моментов, что нравятся, это - очень большое количество инструментов, которое нужно при работе с практикумом. То, что задачи близки к “боевым”. Хорошо, что могу заниматься, когда хочется, без привязки ко времени. Мне не подходит время мастер-классов, чтобы смотреть их онлайн, тут есть возможность посмотреть их в записи.
Отдельно хочется отметить обаяние Василия. Он так просто рассказывает сложные вещи, что кажется, и я, и любой другой так сможет.

Я рекомендовала бы практикум системным администраторам, заинтересованным в автоматизации.

Руслан / 34 года

Системный администратор

@Ruslan Zuiev

Решил изучать Linux т.к. мне нравится открытая идеология этой ОС и я давно хотел работать на должности, связанной с настройкой ОС.
На практикуме Rebrain в итоге остановился, в первую очередь, благодаря менеджеру Александре, которая дала мне профессиональную консультацию относительно практикума, чётко отвечала на все вопросы. Также, в сравнении с конкурентами, Rebrain позволил мне самому выстраивать график обучения, а не как у других, выдавать информацию маленькими порциями, чтобы растянуть курс на длительный срок.
Но я не был уверен в состоятельности практикума, т.к. ни один человек на тот момент не прошел его полностью. В итоге, я настолько доволен практикумом, что считаю, что там всё так и должно быть. Только сертификат хотелось бы более презентабельный, чтобы можно было на стену повесить. Особенно отмечу возможность выполнять сразу несколько заданий в день, отзывы кураторов, саму структуру практикума.
Рекомендовал бы практикум людям, которые любят решать «загадки» и им нравится работать за компьютером.
Спустя пару недель подготовки подготовки к собеседованиям и составления резюме (с этим, кстати, опять же очень помог Rebrain!) я получил 2 оффера от международных компаний. В итоге, из них я выбрал ту, работа в которой более связана с моим запланированным направлением - DevOps. Как оказалось, не зря я дополнительно занимался английским языком, это стало дополнительным и очень важным скилом в поиске работодателя.
На этом не планирую останавливаться и хочу уже в скором времени приобрести курс DevOps by Rebrain, чтобы поскорее освоится на новом рабочем месте и ускорить свой прогресс. Тем более, если я не ошибаюсь, Rebrain предоставляет скидку "постоянным покупателям" :)

Айгерим

@baigabul

Можно я скажу большое человеческое спасибо за ваш труд и практикумы.
Не могу молчать уже 😂 Ещё мне далеко до конца их, но блин, благодаря им кучу нового узнала и уже сижу девопсом.
Спасибо ребятам, которые запросто отвечают на вопросы, даже если не по заданиям.
Купила их просто так, от нечего делать, немного заскучав в дба. А теперь вот сижу много на работе, но очень круто и интересно. Многие многие вещи с практикума и вебинаров очень пригодились. Спасибо))

Сергей

Архитектор по информационной безопасности

@SergeyErmakov

На практикум пошел, потому что захотелось уложить в голове разрозненные знания по современным информационным технологиям типа Kubernetes, Docker. Сначала увидел статью на хабре, посмотрел один открытый практикум с Василием. После него мне начали регулярно приходить письма с предложением пройти практикум. Сначала мне это было неактуально, но письма с седьмого я все таки решил записаться. Из плюсов для меня - то, что используется реальная инфраструктура и приближенность заданий к реальности.
Многие вещи я уже знал, практикум помог их систематизировать. Но могу сказать что кривая практикума в некоторых заданиях все же крутовата. Из разряда - вот тебе винтик и гаечка, теперь собери из них самолет, иногда не хватает промежуточных шагов. Я уже и так знаю, как сделать быстро и неправильно, а хотелось бы узнать правильные пути.
Хотелось бы больше обратной связи и более прямой помощи от кураторов. Иногда их объяснения в чате слишком непрямые и недостаточно подробные. Я понимаю, что таким образом кураторы пытаются всеми силами подтолкнуть к поиску решения самостоятельно, но иногда все таки стоит указать прямо в ответ, ученик меньше времени потеряет.
В целом, практикум полезен мне для работы - лучший способ взаимодействовать с DevOps инженерами и администраторами, понимать подробности их деятельности. Рекомендовал бы практикум человеку, который с технологиями представленными в нем, напрямую не работал, - он будет полезен эникейщикам, безопасникам, сисадминам.

Иван

Системный администратор >>> Junior DevOps Engineer

@Skensel

Я перешел на Junior DevOps Engineer меньше месяца назад. До этого был системным администратором. Практикум дал большой толчок для моего роста как технического специалиста.
Раньше увлекался программированием, но понял, что это не мое, меня больше интересовала работа с инфраструктурой и автоматизацией. Два года назад начал узнавать что же это такое "DevOps". А год назад уже взялся за изучение инструментов и практик.
Сперва занимался саморазвитием, но зашёл в тупик и не мог понять как применять полученные знания. На Ютубе наткнулся на открытые практикумы Василия Озерова. Понравилось, как Василий рассказывает лекции и сразу показывает живые примеры. Позже начал искать информацию о практикуме. Примерно месяц думал, потом купил доступ.
Преимущества формата практикума - то, что это именно практикум, задания чисто практические. Можно заниматься, когда тебе удобно. Нет жестких рамок в виде лекций. Когда возникает проблема, можно спросить у куратора. Если задаю вопрос, обратная связь приходит быстро. Сейчас я прежде всего делаю упор на вещи, которые пригождаются в работе.
Практикум подойдет как программистам так и системным администраторам желающим получить новые навыки или карьерные движения. Практикум стоит своих денег и уже окупается:)

Сергей / 47 лет

Начальник отдела ИТ >>> DevOps-инженер

@rasdva3

В первый раз я наткнулся на открытый практикум Rebrain примерно в начале 2019 года. Первые впечатления: круто, мало что понятно, нужно разбираться, хочу еще. Направление выбрал из-за личного интереса и денежной мотивации. Работал я тогда начальником отдела информационных технологий в одной коммерческой организации и первой мыслью у меня было — надо брать, а лучше затаскивать на этот курс еще как минимум одного из моих бойцов. Но руководство обучение не поддержало, а стоимость единственного тогда курса DevOps была выше моей месячной зарплаты. Тогда я взял паузу на несколько месяцев… Регулярно смотрю открытые практикумы, облизываюсь на суммы зарплат, которые мелькают на hh.ru. И вот в последнюю пятницу июля 2019 года я решил — беру практикум DevOps! Квалификацию нужно повышать, а спасение утопающих — дело рук самих утопающих. Тем более на мой взгляд, альтернатив практикуму DevOps by Rebrain просто нет. Главное его преимущество — много практики.
Прошло почти полтора года с тех пор, как я впервые сделал пуш в свой репозиторий на gitlab.rebrainme.com, и каковы результаты:
- DevOps: 60%
- Docker: 100%
- Kubernetes: 80%
- Резюме на hh.ru, профиль на LinkedIn, регулярно читаю @devops_jobs
И вот оно! — «Здравствуйте, ваш опыт нас заинтересовал». Созваниваемся с HR, затем с руководителем департамента программных решений, на следующий день мне говорят, что меня берут, и на пятый день после первого звонка я уже работаю в проекте, с оплатой почти в четыре раза большей, чем на прошлом месте работы. И вот уже полтора месяца я фигачу как полноценный devops engineer (одна штука) в команде разработки.

Александр / 33 года

Ведущий инженер-программист

@berem

Большую часть своей карьеры я провел в админах. Сейчас догоняю знания - и по программированию, и по технологиям.
Почему выбрал Девопс? Так сошлись звезды. Эта сфера мне интересна, хочу в ней развиваться.
Когда выбирал практикум, сомнения были, и финансовые, и определенный скепсис к онлайн-практикуму. Поэтому присматривался к практикуму очень давно, был на бесплатных практикумах Василия Озерова. После них и решил, что это мое. К покупке подтолкнуло появление рассрочки, тогда и понял, что пора вкладываться в свое образование.
Практикум очень сильно нравится. Меня очень сильно заинтересовал формат. До этого был на курсах, где только лекции. А здесь именно практические занятия. Теория без практики - это ничто.
Начальных знаний для старта практикума хватило, влился быстро и мне было интересно.
Сейчас иногда удивляюсь людям, которые не нравится такой формат. Я наоборот рад, что нужно много копаться самому. Ищешь информацию и сам развиваешься в процессе поиска. Мне кажется, иначе ничего не запоминается и когда столкнешься с задачей в работе, начнешь все искать с “чистого листа”.
Замечательно, что в практикуме нет ограничения по времени и ограниченных сроков. Хотя кому-то это может быть сложно - ведь тут контролируешь себя сам.
Конечно, встречаются задачи, которые прямо не хочется делать. Ходишь вокруг нее день-два, а потом соберешься и делаешь за час. Если бывают какие-то недопонимания по заданиям, то кураторы всегда подскажут.
Из пожеланий - хотелось бы больше заданий по облакам, Google Cloud и Amazon Cloud.
Практикум прохожу с июня, сейчас прошел почти до конца. В сентябре ходил на собеседование на DevOps-инженера. Мне сказали, что нужно подтянуть знания по технологиям и английский язык. В январе сходил повторно и получил оффер на зарплату в два раза большую, чем у меня сейчас. Поэтому финансовыми вложениями в прохождение практикума доволен. Осталось получить 1 сертификат и буду переходить на новую работу.

Практикум подойдет админам и программистам, заинтересованным в автоматизации рутинных операций.

Илья / 28 лет

Старший системный администратор >>> DevOps-инженер

@ilbka

Хотел изучить Кубернетес, так как эта технология очень востребована. Увидел рекламу бесплатного практикума Rebrain, поучаствовал в нем. До этого уже был опыт обучения от mail.ru, поэтому был поражен, насколько выше уровень Rebrain, даже на бесплатных занятиях.
Для моего региона цена практикума достаточно высокая. Но теперь совершенно не жалею потраченных денег, жалею только, что не пошел на практикум раньше.
Понравилось, что материал составлен грамотно, были интересные кейсы, практикум полностью готовит к сдаче экзамена по куберу. Хотелось бы субтитры к материалу (так как много материала на английском) и более развернутой обратной связи от кураторов.
Практикум будет полезен любому сисадмину, который хочет достичь чего-то большего.

Анатолий / 34 года

Системный администратор >>> Системный архитектор

tolik8621@list.ru

DevOps-практиками заинтересовался за счет необходимости иметь широкий кругозор. А так же нравиться их идеология, то есть необходимость плотного взаимодействия различных команд.
Практикум Rebrain выбрал из-за уклона в практическую часть. Сомневался, пригодятся ли полученные знания и не потрачу ли я время в пустую. Это сомнение отмел, так как любые инвестиция в себя полезны. Было сомнение о качестве заданий. Будет ли они достаточно хорошо проработаны. Его так же отмел, все хорошо. Думал, стоит ли связываться с рассрочкой, ну это сугубо личное не желание связываться с кредитами и т.п. Сейчас рассрочку уже закрыл, сомнение снято.
Практикум нравится. Особенно уклон в практику, видео от Василия Озерова, получается строго лаконично и по делу. И то, что проверяющие заинтересованы в качественной проверке, дополняют твои ответы комментариями
Мне кажется, стоит SLA для повторных попыток сделать 12 часов, но по всей видимости сейчас это не реализуемо. Проверяющих не хватает и так.
Ну а так в общем все хорошо, к формулировкам заданий вопросов нет. Мне кажется это сделано намеренно чтобы посмотреть как человек мыслит и до чего дойдет в своих рассуждениях. Можно так же задать уточняющий вопрос проверяющему, не вижу проблем, либо обсудить с ним спорный момент, это работа с людьми и это нормально.
Рекомендовал бы практикум наверное администраторам, для расширения кругозора, да в общем и программистам тоже.

Получите
консультацию

или пройдите вступительный тест

наши программы проходят
сотрудники из следующих компаний:

что ждёт
в конце?

certificat

получаете сертификат

По окончании практикума вам выдается электронный
именной сертификат, подтверждающий, что вы
успешно прошли все задания

ваше резюме
после прохождения практикума:

incognito

  • John doe
  • security-engineer + white hacking
  • технологический стек:

    • BurpSuite,
    • NMap, SQLMap,
    • Impacket,
    • Metasploit,
    • Framework,
    • DNSrecon,
    • Netcat,
    • Nikto.pl,
    • Wireshark,
    • THC Hydra,
    • PEASS,
    • Shodan.

    авторы
    программы

    Василий Озеров

    Руководитель международной команды Fevlake
    василий озеров

    Спикер RootConf / DevopsConf
    Co-Founder REBRAIN
    Ex SVP of Infrastructure AirPush
    Более 5 лет опыта проектирования и внедрения

    Fevlake icon

    команда инженеров
    fevlake

    С 2012 года мы упорно работаем над IT-инфраструктурами наших заказчиков с применением DevOps-практик

    Security icon

    команда
    Security Team

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

    практикум

    by rebrain

    Стоимость:
    7.083 р/мес

    в рассрочку на 12 месяцев

    Стоимость: 85.000р

    Если вы хотите оплатить от юридического лица, мы составим договор и отправим вам на согласование

    Lifetime лицензия

    Доступ к практикуму останется с вами навсегда

    Money back 14 дней

    Вернем средства без объяснения причин

    Доступна рассрочка
    на 12 месяцев

    tinkoff icon

    Lifetime лицензия

    Доступ к практикуму останется с вами навсегда

    Money back 14 дней

    Вернем средства без объяснения причин

    faq

    В 2018 году мы провели 3 потока по системе 2-3 лекции в неделю + домашка. Со всех 3-х потоков мы собирали обратную связь, чтобы сделать практикум более эффективным и удобным для пользователей. И в каждом потоке мы видели, что ребятам недостаточно практики. Как дело доходит до ДЗ, сразу же возникает куча вопросов и непонятно, как выполнить задание. Тогда мы и пришли к тому, что двигаемся от практики, но подкрепляем это лекционным форматом. Поэтому ответ - Да, мы считаем наш формат практикума самым эффективным и подходящим для всех. Если вдруг формат вам не подойдет, в первые две недели вы можете полностью вернуть средства без объяснения причин.

    При загрузке 4-6 часов в неделю вы пройдете все задания за 7 месяцев. Вы занимаетесь онлайн в удобное для вас время, без привязки к конкретной дате и получаете обратную связь кураторов по вашим заданиям в течение 24 часов. Смотреть теоретические видеоматериалы можно по очереди или все сразу.

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

    Мы предоставляем 2 рассрочки от банков-партнеров - Тинькофф и Альфа, у них идентичные условия: 0 рублей первоначальный взнос, ежемесячный платеж на 10 месяцев 3800 рублей (после окончания скидки – 6000 рублей), комиссий, штрафов и скрытых платежей нет. Все расходы на обслуживание мы берем на себя. Полностью внести остаток и закрыть рассрочку можно в любой момент, также без штрафов. Чтобы оформить рассрочку нажмите на кнопку «Рассрочка» в блоке «Стоимость».

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

    Мы понимаем, что мы все разные, и кому-то может не подойти наш формат, поэтому мы даем возможность в первые 14 дней практикума сделать возврат средств без объяснения причин. Причем вернуть можно и при единовременной оплате и при оформлении рассрочки от банка.

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

    Rebrain

    Мы разработали инновационную модель онлайн-практикумов для
    IT-специалистов.

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

    Fevlake

    Международное агентство Devops-практик. Занимаемся
    проектированием и обслуживанием
    IT-инфраструктур с 2012 года.

    Наши клиенты:
    IMPROVE MEDIA, КупиКупон,
    CRYPTO EXCHANGE, NEWS360 и др.

    Файлы куки

    При использовании данного сайта, вы подтверждаете свое согласие на использование файлов cookie и других похожих технологий в соответствии с настоящим Уведомлением.