Еще при зарождении канала я обещал рассказать про замечательнейший (вероятно, даже must-have) ресурс от PortSwigger по освоению веб-пентестинга – BurpSuite Web Security Academy. Добро пожаловать на образовательный пост! 🐈⬛
Авторы ресурса приняли наиболее правильное решение – сфокусировались на одном, пусть и объемном, но все же очень конкретном направлении – и создали masterpiece на основе своего опыта работы и коммуникации с экспертами.
Академия состоит из топиков – для получения сертификации BurpSuite придется пройти их все, но ресурс также можно использовать в качестве шпаргалки. К каждому из топиков прилагается детальный теоретический конспект и набор лаб (вы можете увидеть все темы и количество практических заданий на скриншотах), и, что самое ценное, разборы для каждой из лаб.
Всего на ресурсе порядка 250 лаб – уровня apprentice, practitioner и expert. И они постоянно пополняются!
Еще одним свежим нововведением стали learning paths, организующую всю имеющуюся в Академии информацию в единый курс, по завершении которого можно овладеть всеми ключевыми концептами веб-пентестинга, жизненно необходимыми, например, для решения этой категории CTF'а. Да и в целом, это good start! :)
А еще на платформе существуют так называемые "mystery labs", которые не привязаны к конкретному топику и могут содержать даже несколько подходов – это пространство для вашего творчества и изобретательности. В таком же формате проходит и экзамен-сертификация BurpSuite, ведь он наиболее приближен к реальной практике пентеста.
#education #web_security #vulnerabilities
Авторы ресурса приняли наиболее правильное решение – сфокусировались на одном, пусть и объемном, но все же очень конкретном направлении – и создали masterpiece на основе своего опыта работы и коммуникации с экспертами.
Академия состоит из топиков – для получения сертификации BurpSuite придется пройти их все, но ресурс также можно использовать в качестве шпаргалки. К каждому из топиков прилагается детальный теоретический конспект и набор лаб (вы можете увидеть все темы и количество практических заданий на скриншотах), и, что самое ценное, разборы для каждой из лаб.
Всего на ресурсе порядка 250 лаб – уровня apprentice, practitioner и expert. И они постоянно пополняются!
Еще одним свежим нововведением стали learning paths, организующую всю имеющуюся в Академии информацию в единый курс, по завершении которого можно овладеть всеми ключевыми концептами веб-пентестинга, жизненно необходимыми, например, для решения этой категории CTF'а. Да и в целом, это good start! :)
А еще на платформе существуют так называемые "mystery labs", которые не привязаны к конкретному топику и могут содержать даже несколько подходов – это пространство для вашего творчества и изобретательности. В таком же формате проходит и экзамен-сертификация BurpSuite, ведь он наиболее приближен к реальной практике пентеста.
#education #web_security #vulnerabilities
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7
Привет! Многие из вас использовали Flask. Более того, многие из вас решали CTFные машинки и научены, что Flask в режиме отладки (🐈⬛
Сегодня обсудим, как, заполучив уязвимость LFI (Local File Inclusion, когда сервер отдает содержимое своего локального файла в ответ на запрос) на Linux, однозначно восстановить Werkzeug Debugger Pin – и, как следствие, получить RCE (Remote Code Execution)! А еще во вложении вас будет ждать разбор medium-машинки с платформы Hack The Box, в котором используется этот трюк ;D
Но прежде отметем идею брутфорса – ведь миллиард значений для пина могут показаться вполне перебираемыми. Но не для веба. Хваленый Turbo Intruder позволяет организовать эту атаку со скоростью 100 тысяч запросов в минуту – что неплохо, но для наших целей не годится (ETA – неделя). А еще этот показатель может быть уменьшен в несколько порядков добавлением к запросу простенького параметра-подписи, который необходимо было бы пересчитывать перед каждым запросом.
Исследователи обнаружили, что алгоритм генерации пин-кода Werkzeug публичен – он основывается на получении хеша из публичного (имя пользователя, имя модуля, имя приложения и путь до исполняемого файла Flask) и приватного (MAC-адрес интерфейса, уникальный ID ПК и имя внутреннего сервиса) блоков информации. Таким образом, многие поля публичного блока угадываются из опыта (вернемся к этому позже), а приватный блок целиком достается из интересных (и не требующих суперправ для доступа) файлов Linux'а – в частности,
В Windows и macOS, справедливости ради, ситуация значительно лучше – там подобные приватные данные хранятся в реестрах, доступ к которым уже требует возможности исполнять команды (формально, пресловутого RCE, ради которого и затевалась вся сегодняшняя игра). Однако не стоит забывать, что в искусственных условиях (например, созданных авторами-инфобезниками машинках для взлома) может быть дан доступ исключительно к определенным фрагментам реестров в рамках Flask-приложения – и тогда игра снова стоит свеч!🐈⬛
И мы наконец переходим к самому интересному – эксплоиту! Полный скрипт можно достать в прикрепленном исследовании Бена Грюэлла или pdf'ке со статьей из Хакера – я же покажу, как может выглядеть конфигурация для ОС Windows и Linux:
Не забудьте заглянуть в статью Хакера – там правда интересная машина!
До скорых встреч ;D
debug=True
) – дьявол. И, как подобает любому уважающему себя дьяволу, он совершенствует свои навыки искушения. Так, пользователям было предложено защитить свои интерактивные консоли Python 9-ти значным пин-кодом, генерируемым самим приложением. Вот она, безопасность! Или это лишь ловушка, чтобы заманить больше разработчиков в сети уязвимости, которую никто не собирается исправлять? Сегодня обсудим, как, заполучив уязвимость LFI (Local File Inclusion, когда сервер отдает содержимое своего локального файла в ответ на запрос) на Linux, однозначно восстановить Werkzeug Debugger Pin – и, как следствие, получить RCE (Remote Code Execution)! А еще во вложении вас будет ждать разбор medium-машинки с платформы Hack The Box, в котором используется этот трюк ;D
Но прежде отметем идею брутфорса – ведь миллиард значений для пина могут показаться вполне перебираемыми. Но не для веба. Хваленый Turbo Intruder позволяет организовать эту атаку со скоростью 100 тысяч запросов в минуту – что неплохо, но для наших целей не годится (ETA – неделя). А еще этот показатель может быть уменьшен в несколько порядков добавлением к запросу простенького параметра-подписи, который необходимо было бы пересчитывать перед каждым запросом.
Исследователи обнаружили, что алгоритм генерации пин-кода Werkzeug публичен – он основывается на получении хеша из публичного (имя пользователя, имя модуля, имя приложения и путь до исполняемого файла Flask) и приватного (MAC-адрес интерфейса, уникальный ID ПК и имя внутреннего сервиса) блоков информации. Таким образом, многие поля публичного блока угадываются из опыта (вернемся к этому позже), а приватный блок целиком достается из интересных (и не требующих суперправ для доступа) файлов Linux'а – в частности,
/sys/class/net/eth0/address
, /etc/machine-id
и /proc/self/cgroup
– при помощи вышеупомянутого LFI.В Windows и macOS, справедливости ради, ситуация значительно лучше – там подобные приватные данные хранятся в реестрах, доступ к которым уже требует возможности исполнять команды (формально, пресловутого RCE, ради которого и затевалась вся сегодняшняя игра). Однако не стоит забывать, что в искусственных условиях (например, созданных авторами-инфобезниками машинках для взлома) может быть дан доступ исключительно к определенным фрагментам реестров в рамках Flask-приложения – и тогда игра снова стоит свеч!
И мы наконец переходим к самому интересному – эксплоиту! Полный скрипт можно достать в прикрепленном исследовании Бена Грюэлла или pdf'ке со статьей из Хакера – я же покажу, как может выглядеть конфигурация для ОС Windows и Linux:
usernames = ['John']Разумеется, имя пользователя и используемую версию Python'а придется подправить. Чем еще интересен предоставленный скрипт, так это возможностью указывать несколько опций для каждого из полей – в конечном итоге будут выведены все варианты кодов с использованием
modnames = ['flask.app', 'werkzeug.debug']
appnames = ['wsgi_app', 'DebuggedApplication', 'Flask']
flaskpaths = ['C:\\Users\\John\\AppData\\Local\\Programs\\Python\\Python311\\Lib\\site-packages\\flask\\app.py']
nodeuuids = ['345...176']
machineids = ['faf02cd3-...-9da454b0373b']
itertools.product
– таким образом, вручную придется перебрать не больше 6 кодов (appnames
даны, кстати, в принципе все возможные в реальном продакшен-использовании Flask'а). usernames = ['kali']Надеюсь, вам понравился трюк, который я вам сегодня принес =)
modnames = ['flask.app', 'werkzeug.debug']
appnames = ['wsgi_app', 'DebuggedApplication', 'Flask']
flaskpaths = ['/usr/lib/python3/dist-packages/flask/app.py']
nodeuuids = ['522...924']
machineids = ['5519...c0d9session-3.scope']
Не забудьте заглянуть в статью Хакера – там правда интересная машина!
До скорых встреч ;D
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🐳4❤🔥2
Digital Security Cat
Замысловатая и интересная атака на iOS-устройства происходит прямо на наших глазах – и имя ей "Операция Триангуляция"! Сегодня, 22 июня, Apple выпустила патч безопасности для трех zero-day уязвимостей* (CVE-2023-1840..1842; к слову, к одной из них приложил…
Продолжение разбора и анализа атаки "Триангуляция" от команды Касперского: https://securelist.ru/triangulation-validators-modules/108202/
#vulnerabilities
#vulnerabilities
securelist.ru
Триангуляция: валидаторы, модули и активность после компрометации
В этом отчете «Лаборатория Касперского» описывает валидаторы, используемые в кампании «Операция Триангуляция», активность TriangleDB после компрометации, а также некоторые из дополнительных модулей.
❤2🐳1
Друзья, привет! Возвращаюсь после долгого-долгого перерыва... Возвращаюсь, чтобы рассказать, чем я вообще был занят – помимо учебы, разумеется.
И с хорошими новостями о том, что я все-таки не забросил канал, а постараюсь на регулярной основе писать о том, что мне нравится =)
Как некоторые из вас знают, мы играем [почти] неизменным составом k1tt3n5, они же котята (пользуясь моментом, ребят, вы очень крутые!)
В ноябре нам довелось поучаствовать в attack-defens'e, организованном menad'ом в Иннополисе (в рамках InnoCTF Junior)
Первое наше серьезное A/D, и, я считаю, достойное выступление – поделили второе место, получили дипломчики и мерч
Кому интересно, что там происходило: https://github.com/hackforces/juniors23finals
Looking forward to выбраться на финал "серьезного" Inno Open
Но он от той "серьезности" и проигрывает – РСОШ устанавливает крайне противные ограничения, вроде того, что в олимпиаде должен присутствовать личный тур, или что результаты участников не могут влиять друг на друга (что на корню отсекает увлекательные форматы вроде A/D)
Тогда же, в ноябре, случился M*CTF для школьников, на котором присутствовали некоторые из моих тасков, чем я, безусловно, очень доволен
Забавный опыт общения с пареньком из Турции (который оказался ни много ни мало security engineer'ом Apple), который нашел соревнование на CTFtim'e и закрыл его приблизительно за ночь
Приятно, что мой таск оказался последним в этом win streak'e 🥰
Fast forward на декабрь
Где мы выступали в Кубке CTF России, организованном C4T BuT S4D ;D
Заняли вновь вторую строчку топа – но, к сожалению, формат Кубка это формат "все или ничего"
Если кому интересны материалы (а некоторые задачки там правда содержательные): гит квалов и гит финалов!
И, наконец, к концу подходят новогодние каникулы, а я заканчиваю пост для Хабра :)
На том – надеюсь – не прощаюсь!)
И с хорошими новостями о том, что я все-таки не забросил канал, а постараюсь на регулярной основе писать о том, что мне нравится =)
Как некоторые из вас знают, мы играем [почти] неизменным составом k1tt3n5, они же котята (пользуясь моментом, ребят, вы очень крутые!)
В ноябре нам довелось поучаствовать в attack-defens'e, организованном menad'ом в Иннополисе (в рамках InnoCTF Junior)
Первое наше серьезное A/D, и, я считаю, достойное выступление – поделили второе место, получили дипломчики и мерч
Кому интересно, что там происходило: https://github.com/hackforces/juniors23finals
Looking forward to выбраться на финал "серьезного" Inno Open
Но он от той "серьезности" и проигрывает – РСОШ устанавливает крайне противные ограничения, вроде того, что в олимпиаде должен присутствовать личный тур, или что результаты участников не могут влиять друг на друга (что на корню отсекает увлекательные форматы вроде A/D)
Тогда же, в ноябре, случился M*CTF для школьников, на котором присутствовали некоторые из моих тасков, чем я, безусловно, очень доволен
Забавный опыт общения с пареньком из Турции (который оказался ни много ни мало security engineer'ом Apple), который нашел соревнование на CTFtim'e и закрыл его приблизительно за ночь
Приятно, что мой таск оказался последним в этом win streak'e 🥰
Fast forward на декабрь
Где мы выступали в Кубке CTF России, организованном C4T BuT S4D ;D
Заняли вновь вторую строчку топа – но, к сожалению, формат Кубка это формат "все или ничего"
Если кому интересны материалы (а некоторые задачки там правда содержательные): гит квалов и гит финалов!
И, наконец, к концу подходят новогодние каникулы, а я заканчиваю пост для Хабра :)
На том – надеюсь – не прощаюсь!)
GitHub
GitHub - hackforces/juniors23finals
Contribute to hackforces/juniors23finals development by creating an account on GitHub.
🐳5❤1👍1
Digital Security Cat
Привет! С началом учебы находить время на написание постов непросто, но планы у меня по-прежнему наполеоновские, так что без контента я вас не оставлю, не надейтесь :D В одном из постов выше я упоминал уязвимость, про которую я должен был написать в конце…
Хабр
Как нашли бэкдор в радиосвязи TETRA — подробный разбор
Неприступных крепостей не бывает. Опасную брешь, точнее бэкдор, недавно обнаружили в шифрованном стандарте радиосвязи TETRA. А ведь он вот уже 25 лет используется военными, экстренными службами и...
👍3
UAC в Python'e (исполнение привилегированных команд Windows)
Все привыкли пользоваться
Для этого можно воспользоваться прямым доступом к функции стандартной библиотеки ОС, удобной реализованной с помощью
Первый аргумент отвечает за связанное с операцией окно, следует оставить
Второй – за производимую операцию, в данном случае нас интересует
Третий и четвертый аргументы – строки с исполняемым файлом (либо командой, если это бинарник из PATH) и аргументами соответственно
Пятый аргумент – рабочая директория (так же строка, либо
Последний аргумент – булевая переменная, определяющая, следует ли показывать окно командной строки пользователю
В рамках использования в Python-скрипте предпочтительно устанавливать 0 (
#tips
Все привыкли пользоваться
subprocess.Popen
, однако порой возникает потребность запустить шелл-команду с root-привилегиямиДля этого можно воспользоваться прямым доступом к функции стандартной библиотеки ОС, удобной реализованной с помощью
ctypes
:import ctypes
ctypes.windll.shell32.ShellExecuteW(None, 'runas', executable, args, None, 0)
Первый аргумент отвечает за связанное с операцией окно, следует оставить
None
(или null
в Си)Второй – за производимую операцию, в данном случае нас интересует
runas
, или вызов окна UACТретий и четвертый аргументы – строки с исполняемым файлом (либо командой, если это бинарник из PATH) и аргументами соответственно
Пятый аргумент – рабочая директория (так же строка, либо
None
/ null
в случае, если это не важно для операции)Последний аргумент – булевая переменная, определяющая, следует ли показывать окно командной строки пользователю
В рамках использования в Python-скрипте предпочтительно устанавливать 0 (
False
)#tips
🐳6🤔1👾1
Yet Another CPU Attack: GoFetch
Всем очевидно, что поиск side-channel атак на процессор – вопрос времени. Из самых простых примеров – timing атака, позволяющая извлекать данные из, казалось бы, корректно (но неэффективно) реализованной функции.
На этот раз "отличились" процессора Apple M-серии, причем все поголовно.
Не буду сгущать краски (как это делают многие СМИ!), утверждая, что эта атака повлияет на всех "яблочников" и не может быть исправлена. Это всего лишь PoC, и для успеха должно сойтись слишком много звёзд: час физического доступа к устройству – это немало. Но это ни в коем случае не делает атаку менее вдохновляющей – мне кажется, что это здесь наиболее уместное слово)
Пару дней назад исследователи опубликовали статью, в которой рассказали об уязвимом компоненте Data Memory-Dependent Prefetcher (DMP). Он подгружает в кэш разыменованные адреса памяти процесса, которые "выглядят как указатели".
Важно отметить, что реализация этого компонента не подразумевает constant-time исполнения (общепринятого стандарта защиты от timing атак), поскольку существенно влияет на производительность. Ровно поэтому и утверждается, что уязвимость невозможно закрыть – CPU значительно потеряет в производительности (однако на M3 свитч, отключающий DPM, все же присутствует).
Откуда могла взяться уязвимость? Атакующий может влиять на данные, сохраняемые в памяти процесса (пусть и косвенно, через набор операций над секретом). Каждый этап атаки на DMP определяет, "похож ли на указатель" частично подконтрольный нам фрагмент памяти (подгрузил ли его DMP в кэш). Side-channel атака, раскрывающая данные, хранимые другим процессом (а кэш-то общий!) налицо.
Исследователи сфокусировались на получении криптографических секретов стандартизированных реализаций алгоритмов.
Так, немногим меньше часа потребовалось на то, чтобы корректно восстановить 2048-битный ключ RSA из процесса OpenSSL.
Постквантовый алгоритм (в данном случае CRYSTALS) также под угрозой.
Ссылка на исследование: https://gofetch.fail/files/gofetch.pdf
Мне лично очень интересно найти время для детального осознания атаки)
Всем очевидно, что поиск side-channel атак на процессор – вопрос времени. Из самых простых примеров – timing атака, позволяющая извлекать данные из, казалось бы, корректно (но неэффективно) реализованной функции.
На этот раз "отличились" процессора Apple M-серии, причем все поголовно.
Не буду сгущать краски (как это делают многие СМИ!), утверждая, что эта атака повлияет на всех "яблочников" и не может быть исправлена. Это всего лишь PoC, и для успеха должно сойтись слишком много звёзд: час физического доступа к устройству – это немало. Но это ни в коем случае не делает атаку менее вдохновляющей – мне кажется, что это здесь наиболее уместное слово)
Пару дней назад исследователи опубликовали статью, в которой рассказали об уязвимом компоненте Data Memory-Dependent Prefetcher (DMP). Он подгружает в кэш разыменованные адреса памяти процесса, которые "выглядят как указатели".
Важно отметить, что реализация этого компонента не подразумевает constant-time исполнения (общепринятого стандарта защиты от timing атак), поскольку существенно влияет на производительность. Ровно поэтому и утверждается, что уязвимость невозможно закрыть – CPU значительно потеряет в производительности (однако на M3 свитч, отключающий DPM, все же присутствует).
Откуда могла взяться уязвимость? Атакующий может влиять на данные, сохраняемые в памяти процесса (пусть и косвенно, через набор операций над секретом). Каждый этап атаки на DMP определяет, "похож ли на указатель" частично подконтрольный нам фрагмент памяти (подгрузил ли его DMP в кэш). Side-channel атака, раскрывающая данные, хранимые другим процессом (а кэш-то общий!) налицо.
Исследователи сфокусировались на получении криптографических секретов стандартизированных реализаций алгоритмов.
Так, немногим меньше часа потребовалось на то, чтобы корректно восстановить 2048-битный ключ RSA из процесса OpenSSL.
Постквантовый алгоритм (в данном случае CRYSTALS) также под угрозой.
Ссылка на исследование: https://gofetch.fail/files/gofetch.pdf
Мне лично очень интересно найти время для детального осознания атаки)
❤3🐳1
Немножко о роли магии в программировании, или почему меня должны взять в Хогвартс
https://github.com/kgleba/portable_password_manager/commit/0d9992a7f63010ef6936c8710634d1c5c2be26f1
Решил я для своего проекта контейнеризовать сборку
Что-то в духе GitHub Actions, только локально
Ни в коем случае не претендую ни на какие best practices!! :D
Запущенный контейнер выполняет относительно шаблонные операции – склонировать удаленный репозиторий, подкачать сторонние ассеты, установить библиотечки, зипнуть результат и отдать пользователю в смонтированную папку
Специфика в том, что нужны две версии контейнера – под сборку для винды и линукса
Выполняется все, понятное дело, в рамках единого базового образа Debian'a (до эмуляции kvm'a, на основе которого построен "контейнер" винды, я благо не добрался)
И вот когда пришла пора ставить небезызвестную библиотеку
Ибо она OS-specific
Выход? precompiled .whl файл
Только вот
Решение: переименовать файл .whl в тот, в котором поставлялась бы аналогичная версия под Linux (в сущности, кажется, избавиться от подстроки
Установил без нареканий.
У меня все
https://github.com/kgleba/portable_password_manager/commit/0d9992a7f63010ef6936c8710634d1c5c2be26f1
Решил я для своего проекта контейнеризовать сборку
Что-то в духе GitHub Actions, только локально
Ни в коем случае не претендую ни на какие best practices!! :D
Запущенный контейнер выполняет относительно шаблонные операции – склонировать удаленный репозиторий, подкачать сторонние ассеты, установить библиотечки, зипнуть результат и отдать пользователю в смонтированную папку
Специфика в том, что нужны две версии контейнера – под сборку для винды и линукса
Выполняется все, понятное дело, в рамках единого базового образа Debian'a (до эмуляции kvm'a, на основе которого построен "контейнер" винды, я благо не добрался)
И вот когда пришла пора ставить небезызвестную библиотеку
pycryptodome
, все и навернулосьИбо она OS-specific
pip
в рамках докера, разумеется, будет ставить Linux-версию, несовместимую с Windows-сборкойВыход? precompiled .whl файл
Только вот
pip
наотрез отказался его ставить со словами "дружок, ну ты чего, ну не будет же работать"Решение: переименовать файл .whl в тот, в котором поставлялась бы аналогичная версия под Linux (в сущности, кажется, избавиться от подстроки
win
достаточно)Установил без нареканий.
У меня все
GitHub
Linux support and containerized build · kgleba/portable_password_manager@0d9992a
Contribute to kgleba/portable_password_manager development by creating an account on GitHub.
❤3👏2