GWS - App Scripts
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:
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
.
Aby przechwycić żądanie, wystarczy uruchomić:
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ą:
Lista kalendarza użytkownika:
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