Невозможно отучить людей изучать самые ненужные предметы.
Введение в CSS
Преимущества стилей
Добавления стилей
Типы носителей
Базовый синтаксис
Значения стилевых свойств
Селекторы тегов
Классы
CSS3
Надо знать обо всем понемножку, но все о немногом.
Идентификаторы
Контекстные селекторы
Соседние селекторы
Дочерние селекторы
Селекторы атрибутов
Универсальный селектор
Псевдоклассы
Псевдоэлементы
Кто умеет, тот делает. Кто не умеет, тот учит. Кто не умеет учить - становится деканом. (Т. Мартин)
Группирование
Наследование
Каскадирование
Валидация
Идентификаторы и классы
Написание эффективного кода
Вёрстка
Изображения
Текст
Цвет
Линии и рамки
Углы
Списки
Ссылки
Дизайны сайтов
Формы
Таблицы
CSS3
HTML5
Блог для вебмастеров
Новости мира Интернет
Сайтостроение
Ремонт и советы
Все новости
Справочник от А до Я
HTML, CSS, JavaScript
Афоризмы о учёбе
Статьи об афоризмах
Все Афоризмы
Помогли мы вам |
Этот способ мы применили по заказу одного очень крупного российского холдинга в ходе комплексной операции Red Team. Заказчик настоял на реализации следующего сценария: нас «устраивают» в компанию по согласованной легенде как внешних сотрудников на удаленке с выданным MacBook в качестве рабочего ноута.
Так как привилегии обычных сотрудников на «маках» в организации сильно урезаны, обращения к техподдержке по большей части состоят из писем вроде «админ, помоги мне установить такую‑то программу». Из этого родилась идея воспользоваться этой особенностью рабочего процесса для повышения привилегий на «маке» до рута и заполучить служебную учетку из /
для развития дальнейших атак на AD.
В паблике есть мануал по написанию вредоносного расширения, которое умеет само стартовать при запуске VS Code и светить назойливым окном в глаза ненавистному админу, клянча его пароль.
Достоинство этого метода в том, что можно получить креды привилегированной учетки в открытом виде. Расширение пишется в пользовательскую директорию ~/.
, поэтому, даже если у админа стоит чистый VS Code, запуск модульного окна сохранится.
Недостаток в том, что надо поймать очень уставшего админа, чтобы предприятие взлетело, — диалоговое окно рисуется с помощью AppleScript, поэтому выглядит весьма халтурно и серьезно отличается от встроенных окон запроса расширенных привилегий. В связи с этим мы решили найти другой способ абьюзить VS Code.
Несмотря на то что VS Code можно запускать с привилегиями пользователя, внутри есть дополнительные функции, которые требуют прав администратора. Например, интеграция команды code
в консоль (для этого вносятся изменения в системный PATH
). В VS Code это делается командой из Command Palette (Command-Shift-P).
Хотя разработчики Code настоятельно не рекомендуют изменять встроенные системные команды, хакеры любят жить опасно, поэтому способ есть.
Грепнув каталог с VS Code по строке command
, найдем отсылку к JS-функции installCommandLine
:
$ pwd
/Applications/Visual Studio Code.app
$ grep -r 'command in PATH'
./Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js:... class S extends I.Action2{constructor() {super({id:"workbench.action.installCommandLine",title:{value:(0,t.localize)(1,null,L.default.applicationName),original:Install '${L.default.applicationName}' command in PATH
} ...
Далее, грепнув по installCommandLine
, найдем само тело исполняемой команды.
$ grep -r 'installShellCommand'
./Contents/Resources/app/out/vs/code/electron-main/main.js:... async installShellCommand(T){const{source:U,target:H}=await this.n();try{const{symbolicLink:re}=await p.SymlinkSupport.stat(U);if(re&&!re.dangling){const Y=await(0,u.realpath) (U);if(H===Y)return}await p.Promises.unlink(U)}catch(re){if(re.code!=="ENOENT")throw re}try{await p.Promises.symlink(H,U)}catch(re) {if(re.code!=="EACCES"&&re.code!=="ENOENT")throw re;const{response:Y}=await this.showMessageBox(T,{type:"info",message:(0,y.localize) (0,null,this.h.nameShort),buttons:[(0,y.localize)(1,null),(0,y.localize)(2,null)]});if(Y===0)try{const ne=osascript -e "do shell script "mkdir -p /usr/local/bin && ln -sf '${H}' '${U}'" with administrator privileges"
;await(0,O.promisify)(E.exec) (ne)}catch{throw new Error((0,y.localize)(3,null,U))}}} ...
Как видишь, ничто не мешает нам добавить собственное действие к команде osascript
, но надо придумать, что именно мы можем сделать для сохранения и последующего восстановления привилегированного доступа.
&& ln -sf '${H}' '${U}'"with administrator privileges"
Курс Offensive Security «EXP-312: Advanced macOS Control Bypasses» предлагает изменить настройки PAM-модуля (а именно перечня обязательных критериев при аутентификации через sudo), чтобы имперсонировать root без пароля. Это делается с помощью изменения файла настроек /
.
К сожалению, этот способ не взлетел в macOS 13.2.1, поскольку теперь недостаточно быть рутом, чтобы менять содержимое чувствительных файлов на диске (все, что связано с кредами и аутентификацией). Для этого у процесса, который запрашивает такие изменения, должна быть привилегия Full Disk Access, которая навешивается только через GUI.
|
|