GWS - App Scripts
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
App Scripts to kod, który zostanie uruchomiony, gdy użytkownik z uprawnieniami edytora uzyska dostęp do dokumentu, z którym powiązany jest App Script i po zaakceptowaniu monitu OAuth. Mogą być również ustawione do wykonywania co pewien czas przez właściciela App Script (Persistence).
Istnieje kilka sposobów na stworzenie App Script, chociaż najczęstsze to z dokumentu Google (dowolnego typu) i jako projekt samodzielny:
Zacznij od stworzenia App Script, moją rekomendacją w tym scenariuszu jest stworzenie arkusza Google i przejście do Rozszerzenia > App Scripts
, to otworzy nowy App Script powiązany z arkuszem.
Aby uzyskać dostęp do tokena OAuth, musisz kliknąć Usługi +
i dodać zakresy takie jak:
AdminDirectory: Uzyskaj dostęp do użytkowników i grup w katalogu (jeśli użytkownik ma wystarczające uprawnienia)
Gmail: Aby uzyskać dostęp do danych gmail
Drive: Aby uzyskać dostęp do danych dysku
Google Sheets API: Aby działało z wyzwalaczem
Aby samodzielnie zmienić potrzebne zakresy, możesz przejść do ustawień projektu i włączyć: Pokaż plik manifestu "appsscript.json" w edytorze
.
Aby przechwycić żądanie, wystarczy uruchomić:
Permissions requested to execute the App Script:
Gdy zostanie złożone zewnętrzne żądanie, okno OAuth również poprosi o pozwolenie na dostęp do zewnętrznych punktów końcowych.
Po odczytaniu aplikacji kliknij ⏰ Triggers, aby utworzyć wyzwalacz. Jako funkcję do uruchomienia wybierz getToken
, uruchamiaj w wdrożeniu Head
, w źródle zdarzenia wybierz From spreadsheet
a w typie zdarzenia wybierz On open
lub On edit
(zgodnie z potrzebami) i zapisz.
Zauważ, że możesz sprawdzić wykonywanie skryptów aplikacji w zakładce Wykonania, jeśli chcesz coś zdebugować.
Aby wyzwolić App Script, ofiara musi połączyć się z dostępem edytora.
Token użyty do wykonania App Script będzie tokenem twórcy wyzwalacza, nawet jeśli plik jest otwarty jako Edytor przez innych użytkowników.
Jeśli ktoś udostępnił Ci dokument z App Scripts i wyzwalaczem używającym Head skryptu aplikacji (nie stałego wdrożenia), możesz zmodyfikować kod App Script (dodając na przykład funkcje kradnące token), uzyskać do niego dostęp, a App Script zostanie wykonany z uprawnieniami użytkownika, który udostępnił Ci dokument! (zauważ, że token OAuth właściciela będzie miał zakresy dostępu te, które zostały nadane, gdy wyzwalacz został utworzony).
Powiadomienie zostanie wysłane do twórcy skryptu informujące, że ktoś zmodyfikował skrypt (co powiesz na użycie uprawnień gmail do wygenerowania filtru, aby zapobiec powiadomieniu?)
Jeśli atakujący zmodyfikuje zakresy App Script, aktualizacje nie zostaną zastosowane do dokumentu, dopóki nie zostanie utworzony nowy wyzwalacz z wprowadzonymi zmianami. Dlatego atakujący nie będzie w stanie ukraść tokena właściciela z większymi zakresami niż te, które ustawił w wyzwalaczu, który utworzył.
Gdy tworzysz link 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 skopiuje go i uzyska do niego dostęp, zarówno zawartość dokumentu, jak i App Scripts zostaną skopiowane, jednak wyzwalacze nie, dlatego nic nie zostanie wykonane.
Zauważ, że możliwe jest również udostępnienie App Script jako aplikacji internetowej (w Edytorze App Script, wdroż jako aplikację internetową), ale pojawi się alert taki jak ten:
Następnie pojawi się typowe okno OAuth proszące o potrzebne uprawnienia.
Możesz przetestować zebrany token, aby wylistować e-maile za pomocą:
Lista kalendarza użytkownika:
Jedną z opcji na utrzymanie 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, ekstrahował token ofiary.
Możliwe jest również stworzenie App Script i ustawienie go tak, aby wyzwalał się co X czasu (na przykład co minutę, godzinę, dzień...). Atakujący, który **skompromentował dane uwierzytelniające lub sesję ofiary, mógłby ustawić wyzwalacz czasowy App Script i codziennie ujawniać bardzo uprzywilejowany token OAuth:
Po prostu utwórz App Script, przejdź do Wyzwalaczy, kliknij Dodaj Wyzwalacz i wybierz jako źródło zdarzenia Czasowe oraz wybierz opcje, które najlepiej Ci odpowiadają:
To spowoduje utworzenie powiadomienia o bezpieczeństwie w formie e-maila oraz wiadomości push na Twoim telefonie, informującej o tym.
Co więcej, jeśli ktoś udostępnił Ci dokument z dostępem edytora, możesz generować App Scripts wewnątrz dokumentu, a WŁAŚCICIEL (twórca) dokumentu będzie właścicielem App Script.
To oznacza, że twórca dokumentu będzie się pojawiał jako twórca każdego App Script, który ktokolwiek z dostępem edytora utworzy wewnątrz niego.
To również oznacza, że App Script będzie zaufany przez środowisko Workspace twórcy dokumentu.
To również oznacza, że jeśli App Script już istniał i ludzie przyznali dostęp, ktokolwiek z uprawnieniami Edytora w dokumencie może zmodyfikować go i nadużyć tego dostępu.
Aby nadużyć tego, potrzebujesz również, aby ludzie wyzwalali App Script. A jednym z fajnych trików jest opublikowanie skryptu jako aplikacji internetowej. Gdy ludzie, którzy już przyznali dostęp do App Script, odwiedzą stronę internetową, wyzwolą App Script (to działa również przy użyciu tagów <img>
).
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)