GWS - App Scripts
Сценарії застосунків
Сценарії застосунків - це код, який буде запускатися, коли користувач з дозволом редактора отримує доступ до документа, з яким пов'язаний App Script, і після прийняття запиту OAuth. Їх також можна налаштувати на виконання через певний час власником App Script (Стійкість).
Створення App Script
Є кілька способів створення App Script, хоча найпоширеніші - з Google Document (будь-якого типу) та як самостійний проект:
Сценарій App Script
Створення Google Sheet з App Script
Почніть з створення App Script, моя рекомендація для цього сценарію - створити Google Sheet і перейти до Extensions > App Scripts
, це відкриє новий App Script для вас, пов'язаний з аркушем.
Витік токену
Для надання доступу до токену OAuth вам потрібно клацнути на Services +
та додати обсяги, такі як:
AdminDirectory: Доступ до користувачів та груп каталогу (якщо у користувача достатньо дозволів)
Gmail: Для доступу до даних Gmail
Drive: Для доступу до даних Drive
Google Sheets API: Для роботи з тригером
Щоб змінити необхідні обсяги самостійно, ви можете перейти до налаштувань проекту та увімкнути: Show "appsscript.json" manifest file in editor
.
Для захоплення запиту ви можете просто запустити:
Дозволи, запитані для виконання App Script:
При зовнішньому запиті також запитатиметься дозвіл на доступ до зовнішніх кінцевих точок.
Створення Тригера
Після того, як App прочитано, клацніть на ⏰ Тригери, щоб створити тригер. Як функцію для виконання виберіть getToken
, запускайте при розгортанні Head
, у джерелі подій виберіть З таблиці
і тип події виберіть При відкритті
або При редагуванні
(згідно з вашими потребами) та збережіть.
Зверніть увагу, що ви можете перевірити виконання App Scripts во вкладці Виконання, якщо ви хочете відлагодити щось.
Поділ
Для запуску App Script потерпілому потрібно підключитися з доступом Редактора.
Токен, використаний для виконання App Script, буде тим, який створив тригер, навіть якщо файл відкрито як Редактор іншими користувачами.
Зловживання документами, які були спільно використані зі мною
Якщо хтось поділився з вами документом з App Scripts та тригером, використовуючи Head App Script (не фіксоване розгортання), ви можете змінити код App Script (додавши, наприклад, функції крадіжки токенів), отримати до нього доступ, і App Script буде виконано з дозволами користувача, який поділився документом з вами! (зверніть увагу, що токен OAuth власника матиме доступ до областей, які були вказані при створенні тригера).
Повідомлення буде відправлено власнику скрипта, що показує, що хтось змінив скрипт (А що на рахунок використання дозволів gmail для створення фільтра, щоб запобігти сповіщенню?)
Якщо зловмисник змінює області App Script, оновлення не будуть застосовані до документа, поки не буде створено новий тригер зі змінами. Таким чином, зловмисник не зможе вкрасти токен власника з більшими областями, ніж ті, які він встановив у тригері, який він створив.
Копіювання замість спільного використання
Коли ви створюєте посилання для спільного використання документа, створюється посилання, схоже на це: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit
Якщо ви зміните закінчення "/edit" на "/copy", замість доступу google запитає вас, чи хочете ви створити копію документа:
Якщо користувач скопіює його та отримає доступ, вміст документа та App Scripts будуть скопійовані, проте тригери ні. Тому нічого не буде виконано.
Спільне використання як веб-додаток
Зверніть увагу, що також можливо спільно використовувати App Script як веб-додаток (у Редакторі App Script, розгорнути як веб-додаток), але з'явиться сповіщення, подібне до цього:
За яким слідує типове сповіщення OAuth, яке запитує необхідні дозволи.
Тестування
Ви можете протестувати зібраний токен, щоб перелічити електронні листи за допомогою:
Список календаря користувача:
Скрипт додатка як постійність
Одним з варіантів постійності може бути створення документа та додавання тригера для функції getToken та поділ документа з зловмисником, щоб кожного разу, коли зловмисник відкриває файл, ексфільтрувався токен жертви.
Також можна створити скрипт додатка та встановити тригер на виконання через X часу (наприклад, кожну хвилину, годину, день...). Зловмисник, який отримав доступ до облікових даних або сесії жертви, може встановити тригер часу для скрипта додатка та витікати дуже привілейований OAuth токен щодня:
Просто створіть скрипт додатка, перейдіть до Тригерів, натисніть на Додати тригер та виберіть як джерело події Time-driven та виберіть опції, які найкраще підходять вам:
Це призведе до відправлення електронної пошти з попередженням про це та повідомлення на ваш мобільний пристрій.
Обхід непідтвердженого запиту на спільний документ
Більше того, якщо хтось поділився з вами документом з доступом редактора, ви можете створити скрипти додатків всередині документа, а ВЛАСНИК (створювач) документа буде власником скрипта додатка.
Це означає, що створювач документа буде виглядати як створювач будь-якого скрипта додатка, який будь-хто з доступом редактора створює всередині нього.
Це також означає, що скрипт додатка буде довіряти середовищу Workspace створювача документа.
Це також означає, що якщо скрипт додатка вже існує і люди надали доступ, будь-хто з дозволом Редактор на документ може змінити й зловживати цим доступом.
Щоб зловживати цим, вам також потрібно, щоб люди викликали скрипт додатка. І один цікавий трюк - опублікувати скрипт як веб-додаток. Коли люди, які вже надали доступ до скрипта додатка, отримають доступ до веб-сторінки, вони викличуть скрипт додатка (це також працює за допомогою тегів <img>
).
Last updated