Похек
16.4K subscribers
2.08K photos
110 videos
243 files
3.06K links
All materials published on the channel are for educational and informational purposes only.

Мнение автора ≠ мнение компании, где работает автор

Чат: @poxek_chat

Реклама: @szybnev или
https://telega.in/c/poxek

РКН: https://clck.ru/3FsVhp
Download Telegram
Forwarded from 🕷 BugBountyRu
🤯 Каждый багхантер хотя бы раз сталкивался с проверками при загрузке файлов: расширения, MIME-тип, структура файла, магические байты. Но задумывались ли вы, как можно обойти ограничения на загрузку файлов для эксплуатации Client-Side Path Traversal (CSPT)?

Команда Doyensec поделилась исследованием, раскрывающим кейсы эксплуатации слабых мест проверок для выполнения сложных атак, включая CSPT, CSRF и XSS.

1⃣ JSON как инструмент для обхода

JSON — популярный формат передачи данных, который можно использовать для обхода проверок загрузки. Многие приложения проверяют загружаемые файлы, используя библиотеки и инструменты для проверки MIME-типа и структуры. Однако правильно сформированный JSON может пройти эти проверки и быть обработан на стороне клиента.

2⃣ Обход проверок PDF

Исследование показывает, как создать файл, который будет распознаваться как PDF, но при этом оставаться валидным JSON для клиента:
mmmagic (обычно используется в приложениях Node.js для определения типов файлов): достаточно поместить заголовок %PDF в первые 1024 байта.
pdflib: Использование допустимой структуры PDF с минимальными корректировками (например, замена %0A на %20).

3⃣ Проблемы с командой file

Команда file ограничивает количество байтов для анализа. Это ограничение можно использовать, добавив в файл большое количество пробелов. Проверка файла завершится ошибкой, и файл классифицируется как PDF.

4⃣ Обход проверки изображений (WEBP)

Создание JSON-файла с магическими байтами WEBP в нужном месте позволяет пройти проверку формата изображения:

{"aaa": "WEBP", "_id": "../../../../CSPT?"}


🎯 Ключевые методы обхода

Что использовать:
• Создание файлов, которые валидны сразу для нескольких форматов.
• Анализ исходного кода библиотек проверки (например, mmmagic, pdflib, file-type).
• Эксплуатация технических ограничений, таких как лимиты чтения данных.

Где применимо:
• CSPT → обход путей на стороне клиента.
• CSRF → выполнение межсайтовых запросов.
• XSS → внедрение вредоносного JavaScript.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍21
[РФ] У вас работают сайты, кроме .ru
Final Results
39%
Да
61%
Нет
😁2
Похек
[РФ] У вас работают сайты, кроме .ru
Бу, испугались? Не бойтесь, уже все работает
👾27🌚6🔥2
🔓 Десериализация в PHP: как это эксплуатируют и как защититься
#php #десер #десериализация #deserialization

Десериализация — это процесс преобразования строки обратно в объект. В PHP для этого используются функции serialize() и unserialize(). Однако, если десериализовать данные из ненадёжных источников, это может стать серьёзной уязвимостью.

Как работает атака?
Рассмотрим пример кода, где используется класс с magic method (если и другие) __wakeup() — он автоматически вызывается при десериализации объекта:
<?php
class Injection {
public $payload;

function __wakeup() {
eval($this->payload);
}
}

if (isset($_REQUEST['data'])) {
$obj = unserialize($_REQUEST['data']);
// Дальнейшая работа с $obj
}
?>

Злоумышленник может передать специально сформированный сериализованный объект через параметр data:
O:9:"Injection":1:{s:7:"payload";s:21:"phpinfo(); // payload";}

При десериализации будет выполнена команда phpinfo(), что может открыть доступ к конфиденциальной информации о веб сервере. Более сложные payload'ы могут привести к RCE и другим атакам.

⭐️Как защититься?

➡️Избегайте использования unserialize() для входящих данных.
➡️Для обмена данными используйте более безопасные форматы, такие как JSON.
➡️Ограничьте доступные классы. Начиная с PHP 7, можно указать, какие классы разрешено десериализовать:
data = unserialize($input, ['allowed_classes' => ['SafeClass']]);

➡️Фильтруйте данные. Перед десериализацией проверяйте данные на соответствие ожидаемому формату. Не допускайте наличие кода или неожиданных объектов.
➡️Регулярно обновляйте PHP. Новые версии часто содержат исправления для известных уязвимостей. Используйте актуальную версию PHP.
➡️Проверяйте используемые библиотеки на наличие уязвимостей. К сожалению десер достаточная частая уязвимость, но не часто эксплуатируемая. На скрине вы сами видите сколько было только зарегано CVE с десериализацией. А о скольких мы не знаем?

Ваш опыт?
Сталкивались ли вы с такой багой на проектах? Какие рекомендации давали по защите? Делитесь своим опытом в комментариях)

Дополнительное чтиво
Небезопасная десериализация в PHP: Как создать собственный эксплойт - это статья от моего хорошего знакомого wr3dmast3r
Сериализация и десериализация: что это такое и как это работает - а это базовое чтиво по десеру в пыхе
PayloadsAllTheThings | PHP Deserialization - тут и так понятно что будет)

🌚 @poxek | 📺 YT | 📺 RT | 📺 VK | 🌚 Магазин мерча
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍72
Коллега @r00t_owl выложил очередной охрененный пересказ своего проекта по физическому пентесту. Я считаю, что каждый из его рассказов имеет сюжет не хуже последних фильмов Миссия Невыполнима)

https://teletype.in/@r00t_owl/s6R2ahs79eO

Приятного чтения! А в комментариях расскажите какие у вас были ситуация со случайным или осозннаым физическим пентестов) Будет интересно послушать
🔥345👍2😁2👾2
Предложите темы по ИБ для постов на канале или направление куда думать
😑 Threat Intelligence: зачем это нужно?
#threatintelligence #кибербезопасность #TI

Threat Intelligence (TI) — это сбор и анализ информации о киберугрозах, который помогает компаниям предугадывать действия злоумышленников и защищаться заранее.

Почему это важно?
Представьте, что у вас есть данные о том, где, как и когда враг готовится атаковать. TI предоставляет информацию о новых уязвимостях, фишинговых кампаниях, вредоносных программах и тактиках атакующих. Мне эта тема стала интересна давно, причем я на неё смотрю не с точки зрения защиты, а как пентестер.

Как это помогает?
Для blue team: Позволяет обновлять защиту до того, как станет поздно.
Для руководителей: Обучает сотрудников распознавать современные угрозы.
Для CISO: Помогает прогнозировать атаки и снижать потенциальные риски.
Для пентестеров/багхантеров: Максимально быстро узнавать о 0/1 day эксплойтах. Можно развернуть на своих серверах интересное для себя ПО, к примеру VMware Horizon, 1C Bitrix и анализировать как атакуют такие системы.

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

А вы используете TI в своей практике? Делитесь опытом в комментариях)

Если вам интересна эта тема, ставьте ❤️

🌚 @poxek | 📺 YT | 📺 RT | 📺 VK | 🌚 Магазин мерча
Please open Telegram to view this post
VIEW IN TELEGRAM
39😁4👍3
🖥 Препарируем NextJS
#tip #tips #bugbounty #nextjs #vercel

Есть небольшой лайфхак, так сказать, который позволяет одномоментно вывести все существующие роуты в NextJS приложении.
В Инструментах разработчика > Консоль > allow pasting >
console.log(__BUILD_MANIFEST.sortedPages.join('\n'));


Скрин1 был честно украден из X, т.к. скрины с проекта нельзя показывать, иначе вы слишком быстро поймёте что за компания))
Скрин2, это из моей платформы обучения. Как видите, у меня это уже не работает :)

👩 Работа этой строки очень проста. Берётся __BUILD_MANIFEST, в котором перечисленны все страницы и просто через join их выводим. Работает ли это до сих пор? Да, буквально недавно на одном из проектов попалось это. На главной странице отдавался 404, попытки активно или пассивно профаззить не дали результатов.


Пришлось выйти в интернет с этим вопросом и немного покопаться в документации, чтобы прийти к этой команде. Также ещё по опыту своей разработки и отслеживания как разрабы пишут код, хочу заметить что очень редко отключают console.log, console.error и т.д. на продакшен версиях сайта. А сделать это очень легко:
module.exports = {
compiler: {
removeConsole: process.env.NODE_ENV === "production",
},
};


🐇 Есть ещё классное браузерное расширение Next.js Explorer. У меня о нём спрашивали на Bugs Zone. Вот решил напомнить. Оно позволяет показывать какие данные хранятся в приложении. Иногда может подсветить даже какие-то секреты, если они указаны не в .env


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

🌚 @poxek | 📺 YT | 📺 RT | 📺 VK | 🌚 Магазин мерча
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥164👍3
Forwarded from Denis Sexy IT 🤖
This media is not supported in your browser
VIEW IN TELEGRAM
Как выглядит интерфейс DDOS-атаки на сервер в 2025 году

👏
Please open Telegram to view this post
VIEW IN TELEGRAM
😁70🔥11👍53
Как вы считаете, что важнее на собеседовании на позицию стажёра/джуна?
Final Results
52%
Софт скилы (общение, личные качество)
62%
Хард скилы (знание технологий, мат части)
👍5😁3
👱‍♂️ Хард скилы VS софт скилов: что важнее?
#softskills #hardskills #карьера #софтскилы #хардскилы #найм

➡️ Результаты опроса
▪️Софт скилы: 229 голосов (45.6%)
▪️Хард скилы: 273 голоса (54.4%)
Общая тенденция от подписчиков: хард скилы по-прежнему остаются в приоритете.

➡️ Что обсуждали в чате?
➡️Софт скилы: В обсуждении отмечают, что умение адаптироваться, работать в команде и слушать фидбэк помогает быстрее влиться в коллектив. Такие навыки часто компенсируют недостаток опыта.
➡️Хард скилы: Ожидается, что даже начинающий сотрудник должен владеть базовыми техническими знаниями. Это фундамент, без которого сложно выполнить даже простые задачи.
➡️Баланс: Многие сходятся во мнении, что лучший вариант — это комбинация навыков: хард скилы дают уверенность в задачах, а софт скилы — гибкость и потенциал для роста.

Почему HR предпочитают софт скилы на начальных этапах?
Если речь идёт о найме стажёров или джунов, софт скилы выходят на первый план:

➡️Адаптивность и желание учиться: Для новичка важнее способность к обучению и усвоению новых знаний, чем владение техническими навыками, которые можно наработать.
➡️Работа в команде: Хорошие коммуникативные навыки помогают быстрее освоиться в коллективе и начать эффективно взаимодействовать.
➡️Потенциал на будущее: HR-специалисты чаще оценивают поведенческие качества как индикатор успешности в долгосрочной перспективе. Понятно, что HR не будет далее работать напрямую с этим человеком, а ей приоритетнее чтобы он не ушёл, когда ему абстрактные негативные технологии предложат х2 по зп и он сразу к ним убежит.

🚩 А что если расширить список вариантов ответов?

Это сделал мой коллЭга-админ Ильдар у себя на канале и по итогу его подписчики выбрали багбаунти \ CVE. На счёт багбаунти понятно, но CVE вызывает следующее лицо 😐. Я бы переформулировал на багбаунти \ ресерч в рамках какой-то технологии. Т.е. соискатель может показать результат/продукт своей практики. Но к сожалению таких ребят очень мало, но рад видеть, что они начинают больше появляться)

⚡️ А как по факту работает? Расскажу про свой опыт, речь будет только про джунов.

➡️Во время собеса мне важен всё таки баланс между софт и хард скилами. Но если говорить прям про стажёра, то важнее софт скилы. Потому что кому потом с этим чебуреком работать? Мне. Кто будет его потом терпеть учить? Я. Поэтому важнее софт скилы, дума стало понятно почему.
➡️ А если говорить про хард скилы, то я перед собеседованием вспоминаю как собесили меня и что мне запомнилось/понравилось. Бывают собесы после которых у тебя может наступить экзистенциальный кризис из-за того, что тебя передушили и ты думаешь, что ничего не знаешь (мои собесы в бизон). Или к примеру, как было в Awillix, спрашивали вообще все темы, но не душили прям. Нравятся вопросы, когда дают кейс и спрашивают а как бы ты сделал (но не как у Каспера).
➡️Как правильно отметил в ЛС мой хороший знакомый, часто бывает, что пытаются успеть загуглить и выдать это за свой ответ. Я нормально к этому отношусь, если соискатель не палится)) Такие финты легко контрятся с помощью, вот тебе пример из жизни, как бы ты его выполнял/разбирал/ломал/исправлял/защищал(нужное подчеркнуть)

Если бы мне пришлось начинать заново путь в ИБ, то качал бы софт скилы 60%, хард скилы 40%. Затем в течение года 30% софт скилы, 70% хард скилы - это позволит быстрее вырасти, как специалист. Затем выравнивать, в зависимости личностных предпочтений, интровертам одно, экстравертам другое.

👩 Если вы HR или принимаете участие при найме, то делитесь своим мнением в комментариях: что важнее именно для вас — софт или хард скилы?

🌚 @poxek | 📺 YT | 📺 RT | 📺 VK | 🌚 Магазин мерча
Please open Telegram to view this post
VIEW IN TELEGRAM
👾124👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁39
This media is not supported in your browser
VIEW IN TELEGRAM
🌕 В уличной драке побеждает тот кто:
1. Разобьет стеклянную дверь кувалдой.
2. Успеет взломать и сделать все что надо до того как охрана надает по тыкве.

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

Представляю вашему вниманию⬇️

😱 Red Team против умного замка: взламываем биометрическую СКУД при помощи скрепки и магнита
#redteam #bastion #СКУД #RFID

Удержаться от знакомства с новой СКУД оказалось поистине «невыполнимой» миссией. В конце концов, кто, если не мы, протестирует безопасность компании, которая отвечает за безопасность других? «Мы» — это эксперты Бастиона по программно-аппаратному взлому: Иван Глинкин и Алексей Петренко.

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

➡️ Читать дальше

📺 Ребята очень постарались и записали видос — это маст хев к просмотру)

🌚 @poxek | 📺 YT | 📺 RT | 📺 VK | 🌚 Магазин мерча
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26👾3👍2😁1
Forwarded from BlackFan
Небольшая заметка про уязвимую конфигурацию nginx при проксировании запросов на S3, которое позволило в том году налутать немного уязвимостей на BugBounty.

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

Virtual-hosted–style
GET /object-name HTTP/1.1
Host: bucket-name.s3endpoint


Path-style
GET /bucket-name/objectname HTTP/1.1
Host: s3endpoint


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

location / {
set $s3_name "company-bucket";
set $s3_host "storage.yandexcloud.net";

rewrite ^(.*)$ /$s3_name$1 break;

proxy_pass https://$s3_host;


В nginx rewrite применяется к нормализованному пути и если в нем присутствует символ переноса строки %0A, то данное регулярное выражение не сработает, поскольку в нем используются якоря начала и конца строки.

http://example.tld/test/test.html
=
https://storage.yandexcloud.net/company-bucket/test/test.html


http://example.tld/test/foo%0Abar
=
https://storage.yandexcloud.net/test/foo%0Abar


Что в результате приведет к возможности указать любое имя бакета в запросе. Причем декодированный символ %0A в имени объекта не помешает, так как S3 это не файловая система и такие имена разрешены.

Таким образом, если используется публичное объектное хранилище, атакующий может создать в нем свой бакет с произвольным именем и загрузить на него файл foo%0Abar с XSS. Символ %0A в имени объекта должен быть декодированным, поэтому проще всего загрузить объект на него с помощью PUT запроса.

В данном запросе подпись формируется с помощью Hackvertor тегов расширения для Burp Suite.
PUT /bucket-name/foo%0Abar HTTP/2
Host: storage.yandexcloud.net
Content-Type: text/html
Authorization: AWS ##ACCESS_KEY##:<@base64><@hex2ascii><@hmac_sha1('##SECRET-KEY##')><@d_burp_url>PUT%0A%0Atext/html%0A<@date("EEE, dd MMM yyyy HH:mm:ss z","GMT")/>%0A/bucket-name/foo%250Abar<@/d_burp_url><@/hmac_sha1><@/hex2ascii><@/base64>
Date: <@date("EEE, dd MMM yyyy HH:mm:ss z","GMT")/>
Content-Length: 25

<script>alert(1)</script>


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


Но чаще встречается ситуация, когда проксирование запросов производится только из одной папки, например:
location /static/ {
set $s3_name "company-bucket";
set $s3_host "storage.yandexcloud.net";

rewrite ^(.*)$ /$s3_name$1 break;

proxy_pass https://$s3_host;


Но даже в данном случае конфигурация будет уязвима из-за разницы обработок переданного пути. Правило location и rewrite работают с нормализованным путем, а proxy_pass, в котором указан URI без пути, отправит ненормализованное значение.

Таким образом для эксплуатации уязвимости необходимо отправить запрос, который в нормализованном виде попадет в location /static/, но будет начинаться с бакета, который контролирует атакующий.
http://example.tld/attacker-bucket/..%2Fstatic/foo%0Abar
=
https://storage.yandexcloud.net/attacker-bucket/..%2Fstatic/foo%0Abar


Как и в прошлом примере наличие в имени объекта символов %0A и /../ не помешают эксплуатации, так как это не файловая система и такой объект можно создать PUT запросом.

Также, если вы планируете искать подобные мисконфиги блэкбоксом, то нужно учитывать, что ошибки NoSuchObject и NoSuchBucket часто заменяют на дефолтную страницу 404, что может помешать.
Обойти это можно вызывая ошибки с кодом, отличным от 404, например отправляя PUT запрос без указания Content-Length.

PUT /attacker-bucket/..%2Fstatic/foo%0Abar HTTP/1.1
Host: example.tld
Connection: close
🔥12👍4🌚2😁1
Точно, сегодня же день студента, а коли большая часть моей аудитории студенты - поздравляю вас всех, мои дорогие, желаю вам автоматов в зачетке, а не в руках, успешного закрытия сессий, зачётов, экзаменов и сдачи дипломов.

Вы наше будущее в ИБ, поэтому уж постарайся исправить все косяки за нами :}

С днём студента!
🔥8319👍8🌚21
Испытываете ли вы проблемы с трудоустройством (комментарии к посту выше)
Final Results
50%
Да. Почему?
50%
Нет. Почему?
6
На моё искреннее удивление 0_0 ответы поделились практически по ровну 50/50

Я выделил некоторые проблемы, с котороыми сталкивались вы или я сам и как их можно решить

Часть 1
Часть 2

➡️У меня нет опыта работы, а все требуют проекты и достижения
Решение:
▪️Участвуйте в CTF (Capture the Flag) соревнованиях. Даже начинающие задачи могут быть значимым вкладом в портфолио.
▪️Опишите выполненные учебные проекты, например, анализ уязвимостей или создание простых систем безопасности.
▪️Учавствуйте в BugBounty, сейчас этот рынок РФ быстро растёт и уже с прошлого года вижу как в вакансиях появился новый пункт в разделе Будет плюсом об участии в багбаунти. Понятно, что надо и баги найти, а не просто зарегаться :D


➡️Я не знаю, что добавить в портфолио, чтобы это заинтересовало работодателей
Решение:
▪️Пишите writeup'ы (райтапы) по лабам HackTheBox/TryHackMe/PortSwigger Academy. С помощью грамотного описания как вы поломали что-то вы улучшите: понимание темы/уязвимости/системы, навык написания отчётов (что нужно не только для техписов/аналитиков), грамотную подачу мыслей.
▪️Документируйте свои исследования: анализ уязвимостей, best practice использование инструментов, какие-то автоматизации. К примеру был кейс, когда пришёл одному парню в компании1 дали задачу написать крутой сетевой сканер (типо naabu от Project Discovery, только тогда naabu ещё не существовало)). В итоге парня сократили в компании1, т.к. сказали что разработка больше не нужна. Он пришёл на собес к одной из ИБ компаний в России и чё-то как-то начал рассказывать и когда он сказал, чем он занимался и что у него уже есть на руках, то его практически сразу взяли на работу. Ведь наши знаний, как кандидата на место в компанию, могут стоить для компании кратно дороже, чем мы их сами оцениваем)


➡️Я не умею правильно оформить своё портфолио
Решение:
▪️Используйте GitHub, как платформу для публикации проектов. Систематизируйте репозитории по категориям. Делитесь с сообществом своими наработками, компаниям это нравится.
▪️Не надо думать, что вы дофига дизигнер и нарисуете сами или через какой-то сервис генерации красивое, красочное резюме. Когда ко мне приходят с оценкой резюме и я вижу каракули — практически всегда это выглядит как детская поделка на субботнем утренике. У нас есть генератор резюме на hh, как стандарт. HRы в крупных компаниях тратят буквально несколько секунд на беглый осмотр вашего резюме. Всё что не укладывается в стандартизированный формат, будет либо скипнуто, либо запомниться недовольством о вашем резюме.


➡️Мои проекты выглядят слишком простыми — как показать свой потенциал?
Решение:
▪️Сходи к психологу и проработай свой синдром самозванца. Скромным не дают много деняг, потому что они не умеют требовать.
▪️Добавляйте пояснения, чего вы хотели достичь проектом и какие выводы сделали. Например: "Задача проекта — понять механизмы SQL-инъекций и предложить эффективные защиты."
▪️Покажите процесс решения задачи: от поиска проблемы до её устранения. Т.е. опишите ваш flow (не переводится) мышления, тогда либо вашему будущему руководителю, либо HRу будет понятно, как вы думаете и подходит ли ваше мышление для отдела.
▪️Если всё ещё счиатете проекты простыми, то выходите из зоны комфорта и ставьте цели кратно сложнее. Даже если не добъётесь конечного результата, за вами уже будет ковровая дорожка.

🌚 @poxek | 📺 YT | 📺 RT | 📺 VK | 🌚 Магазин мерча
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍21🔥3🌚22
На моё искреннее удивление 0_0 ответы поделились практически по ровну 50/50

Я выделил некоторые проблемы, с котороыми сталкивались вы или я сам и как их можно решить

Часть 1
Часть 2

➡️Я боюсь, что мои работы никто не заметит
Решение:
▪️Продвигайте свои проекты: публикуйте ссылки на Github, активно участвуйте в профильных чатах, а не read-only формат.
▪️Ведите личный блог в виде сайтика или Telegram-канала, где будете делиться своими наработками.
▪️Ребята уже в 16 лет выступают на крупных конфах, чем вы хуже? Абсолютно точно ничем. Поэтому, даже если есть страх выступления/сцены, то возможно его стоит перебороть.

➡️Я не знаю, как рассказать о своём вкладе в командные проекты
Решение:
▪️Описывайте конкретные задачи, за которые вы отвечали. Это же относиться к резюме. Например: "Я в команде Аудита занимался автоматизацией, т.к. мне были выданы доступы к N сотен объектов, безопасность которых нужно проверять постоянно." Что-нибудь в таком духе)
▪️Упоминайте, какие навыки вы использовали или приобрели в процессе работы. К примеру у меня первая запись в трудовой книжке - это работа младшим аналитиком. Я занимался ручной разметкой сырых данных для нейросети. Изучал алгоритмы и подходы машинного обучения.

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

P.S. важная сноска. Последнее время много пишут с просьбой оценить резюме. Ребят, это занимает достаточно времени. Поэтому в порядке очереди + по настроению на это отвечаю. Для всего остального есть расчётный счёт :)

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

🌚 @poxek | 📺 YT | 📺 RT | 📺 VK | 🌚 Магазин мерча
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍23🔥74🌚1
Forwarded from Hunt Or Be Hunted (Alexey Kosmachev)
(PHP) Type Juggling

Этот пост начну с предповествования.
У различных языков программирования разный подход к типизации - то есть к тому, насколько строго ЯП будет относиться к типам переменным (int, float, string и т.д.). Здесь будет идти речь о свободно типизированных языках программирования (eng: loosely typed), а в частности о PHP, как о ЯП, который собрал в себе наиболее интересные штуки, о которых рассказано далее. Данные языки стараются "предугадывать", что имел в виду программист или пользователь и делать внутри неявное преобразование переменных в другие типы. К слову, некоторые подходы могут быть применимы и к другим свободно типизорованным ЯП, например Perl, JavaScript, но у них есть своя специфика, о которой здесь рассказывать не буду.

Итак,

🟪Type Juggling - автоматическая конвертация типов в свободно типизированных языках программирования.

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

🟣Тип:
Programming Language, Web, Server-Side.

Наибольший интерес в данном ключе вызывают операции сравнения. В PHP их два вида:

📝свободное (loose): == или !=
📝строгое (strict): === иди !==

И самые интересные моменты всплывают как раз в первом типе.

🟣Пример уязвимого кода:


if (md5($user_input) == '0e732793752744629114494286417663') { ...


В данном случае если пользователь введет что-то, что при преобразовании в int будет давать 0 (например GTJ3YSmZ в md5 будет 0e{digits...}), то условие будет истинным, так как для PHP обе эти строки будут конвертироваться в 0 (данный синтаксис возводит 0 в огромную степень, что результирует в 0).

Еще один интересный пример 'abc' == 0. Данное условие будет истинным, так как в первой строке PHP будет смотреть на ее начало в поиске цифр, по ненахождению которых он будет считать строку нулем. То есть следующее условие также будет истинным: '23abc' == 23

Больше подобных сравнений я поместил в скрине к посту (источник)

🟣 Влияние:
Такие штуки помогают обходить разные условные конструкции и критичность будет зависеть от расположения подобной проблемы в коде. Один из наиболее базовых и критичных импактов - возможность обходить контроль доступа при авторизации (сравнение хешей паролей) - тут и появилось понятие "магических хешей" (magic hashes).

🟣 Как защититься?
Использовать строгое (`===`) сравнение и использовать функции password_hash(), password_verify() и hash_equals() для работы с хешами и паролями. (Ну и md5 не используйте для этих целей - он уже давно признан старым, оставьте в покое старичка).

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

#edu #vuln #programming #web #php #php_type_juggling #magic_hashes #type_juggling
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥2