Во-первых, что такое "D-Bus шина пользователя"? Коротко о том, что такое D-Bus, можно прочитать в [1]. В большинстве десктопных Linux-систем для пользовательских сессий запускается по отдельному экземпляру D-Bus. Стандартно, к нему можно подключиться через unix-сокет /run/user/$UID/bus. От доступа посторонних пользовательскую D-Bus шину защищают две вещи: 1. На уровне файловой системы: /run/user/$UID 0700, это не позволяет другим пользователям открыть сокет; 2. _Политика_ D-Bus, по умолчанию не позволяющая клиентам с другими UID открыть соединение. Проверка UID клиента происходит через SCM_RIGHTS / SCM_CREDENTIALS (man 7 unix). Подробнее о политиках: man 1 dbus-daemon. Отдельные сервисы могут делать дополнительные проверки. В рамках задачи нужно было и изолировать команду от уязвимых сервисов (не дать "grep-нуть"), и дать доступ к шине. Для этого оба базовых слоя безопасности были намеренно "пробиты": через ACL пользователю команды был дан доступ к сокету на уровне ФС, а дополнительное правилов в D-Bus политике разрешало ему любые операции с шиной. Теперь, как этим воспользоваться и где флаг? В условии упоминалось "Secrets API". Это стандартизированный интерфейс [2], который реализуют программы для хранения секретов. В том числе Gnome Keyring, установленный по умолчанию в Ubuntu 20 и запущенный для каждой команды. Нужно было заметить "интересный" сервис и (пользуясь спецификацией) раскопать, что в нём есть. Подробнее: 1. Нацелиться на D-Bus шину своего уязвимого пользователя: export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$VICTIM_UID/bus 2. Через busctl / dbus-send увидеть сервис org.freedesktop.secrets: busctl --user tree 3. Через busctl / dbus-send получить список коллекций: busctl --user get-property org.freedesktop.secrets /org/freedesktop/secrets org.freedesktop.Secret.Service Collections 4. Дальше (по спецификации) нужно открыть "сессию" и в рамках сессии извлечь секреты из коллекции. Для этого busctl / dbus-send уже недостаточно: они не позволяют сделать обе операции за одно соединение. Можно написать скрипт на питоне, например, [3]. Флаг в единственном text/plain секрете единственной коллекции, скрипт выводит его в виде последовательности байт: fsp{EffectiveModernTalking/MoriaIsCalling} [1] Introduction to D-Bus: https://freedesktop.org/wiki/IntroductionToDBus [2] Secrets API Specification: https://freedesktop.org/wiki/Specifications/secret-storage-spec/secrets-api-0.1.html [3] Пример решающего скрипта: https://bcskda.ru/gnome-secrets/dbus-get-secret.py