AWS - Lambda Enum
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
Lambda
Amazon Web Services (AWS) Lambda, sunucu sağlama veya yönetim gerektirmeden kodun çalıştırılmasını sağlayan bir hesaplama hizmeti olarak tanımlanır. Kodun çalıştırılması için gereken kaynak tahsisini otomatik olarak yönetme yeteneği ile karakterizedir ve yüksek kullanılabilirlik, ölçeklenebilirlik ve güvenlik gibi özellikler sunar. Lambda’nın önemli bir yönü, ücretlerin yalnızca kullanılan hesaplama süresine dayalı olmasıdır, bu da başlangıç yatırımları veya uzun vadeli yükümlülükler gerektirmediği anlamına gelir.
Bir lambda çağırmak için, istediğiniz kadar sık (Cloudwatch ile) çağırabilir, bir URL uç noktası açabilir ve onu çağırabilir, API Gateway üzerinden çağırabilir veya S3 kovasındaki verilere yapılan değişiklikler veya bir DynamoDB tablosundaki güncellemeler gibi olaylara dayalı olarak çağırabilirsiniz.
Bir lambdanın kodu /var/task dizininde saklanır.
Lambda Aliases Weights
Bir Lambda’nın birden fazla versiyonu olabilir.
Ve alias aracılığıyla 1’den fazla versiyon açığa çıkarılabilir. Bir alias içinde açığa çıkarılan her versiyonun ağırlıkları, hangi alias’ın çağrıyı alacağını belirleyecektir (örneğin %90-%10 olabilir).
Eğer bir alias’ın kodu açık ise, açık versiyonun istismarı alana kadar istekler gönderebilirsiniz.
.png)
Resource Policies
Lambda kaynak politikaları, örneğin, diğer hizmetlerin/hesapların lambdayı çağırmasına erişim vermek için kullanılır.
Örneğin, URL aracılığıyla açığa çıkarılan bir lambdaya herkesin erişmesine izin veren politika:
Veya bir API Gateway’in bunu çağırmasına izin veren bu:
Lambda Database Proxies
Yüzlerce eşzamanlı lambda isteği olduğunda, her birinin bir veritabanına bağlanması ve bağlantıyı kapatması gerekiyorsa, bu çalışmayacaktır (lambdalar durumsuzdur, açık bağlantıları sürdüremezler).
O zaman, eğer Lambda fonksiyonlarınız RDS Proxy ile etkileşime geçiyorsa, veritabanı örneğiniz yerine. Bu, eşzamanlı Lambda fonksiyonları tarafından oluşturulan birçok eşzamanlı bağlantının ölçeklenmesi için gerekli bağlantı havuzlamasını yönetir. Bu, Lambda uygulamalarınızın mevcut bağlantıları yeniden kullanmasına olanak tanır, her fonksiyon çağrısı için yeni bağlantılar oluşturmak yerine.
Lambda EFS Filesystems
Verileri korumak ve hatta paylaşmak için Lambdalar EFS’ye erişebilir ve bunları bağlayabilir, böylece Lambda ondan okuma ve yazma yapabilir.
Lambda Layers
Bir Lambda katmanı, ekstra kod veya diğer içerikleri içerebilen bir .zip dosyası arşividir. Bir katman, kütüphaneler, özel çalışma zamanı, veri veya yapılandırma dosyaları içerebilir.
Her fonksiyon için en fazla beş katman dahil etmek mümkündür. Bir fonksiyona bir katman dahil ettiğinizde, içerikler /opt dizinine çıkarılır.
Varsayılan olarak, oluşturduğunuz katmanlar AWS hesabınıza özeldir. Bir katmanı diğer hesaplarla paylaşmayı veya katmanı genel hale getirmeyi seçebilirsiniz. Fonksiyonlarınız, farklı bir hesap tarafından yayımlanan bir katmanı tüketiyorsa, fonksiyonlarınız katman silindikten sonra veya katmana erişim izniniz geri alındıktan sonra katman sürümünü kullanmaya devam edebilir. Ancak, silinmiş bir katman sürümünü kullanarak yeni bir fonksiyon oluşturamaz veya fonksiyonları güncelleyemezsiniz.
Bir konteyner görüntüsü olarak dağıtılan fonksiyonlar katmanları kullanmaz. Bunun yerine, görüntüyü oluşturduğunuzda tercih ettiğiniz çalışma zamanı, kütüphaneler ve diğer bağımlılıkları konteyner görüntüsüne paketlersiniz.
Lambda Extensions
Lambda uzantıları, çeşitli izleme, gözlemlenebilirlik, güvenlik ve yönetişim araçları ile entegre olarak fonksiyonları geliştirir. Bu uzantılar, .zip arşivleri kullanarak Lambda katmanları aracılığıyla veya konteyner görüntüsü dağıtımlarında eklenir ve iki modda çalışır: içsel ve dışsal.
- İçsel uzantılar, çalışma zamanı süreci ile birleşir, dil spesifik ortam değişkenleri ve sarmalayıcı betikler kullanarak başlangıcını manipüle eder. Bu özelleştirme, Java Correto 8 ve 11, Node.js 10 ve 12, ve .NET Core 3.1 dahil olmak üzere çeşitli çalışma zamanları için geçerlidir.
- Dışsal uzantılar, ayrı süreçler olarak çalışır ve Lambda fonksiyonunun yaşam döngüsü ile operasyon uyumunu sürdürür. Node.js 10 ve 12, Python 3.7 ve 3.8, Ruby 2.5 ve 2.7, Java Corretto 8 ve 11, .NET Core 3.1 ve özel çalışma zamanları gibi çeşitli çalışma zamanlarıyla uyumludur.
Enumeration
aws lambda get-account-settings
# List functions and get extra config info
aws lambda list-functions
aws lambda get-function --function-name <function_name>
aws lambda get-function-configuration --function-name <function_name>
aws lambda list-function-event-invoke-configs --function-name <function_name>
## Check for creds in env vars
aws lambda list-functions | jq '.Functions[].Environment'
## Download & check the source code
aws lambda get-function --function-name "<func_name>" --query 'Code.Location'
wget -O lambda-function.zip <url-from-previous-query>
# Get Lambda URL (if any)
aws lambda list-function-url-configs --function-name <function_name>
aws lambda get-function-url-config --function-name <function_name>
# Get who has permissions to invoke the Lambda
aws lambda get-policy --function-name <function_name>
# Versions and Aliases
aws lambda list-versions-by-function --function-name <func_name>
aws lambda list-aliases --function-name <func_name>
# List layers
aws lambda list-layers
aws lambda list-layer-versions --layer-name <name>
aws lambda get-layer-version --layer-name <name> --version-number <ver>
aws lambda get-layer-version-by-arn --arn <name> #Get external ARNs
# List other metadata
aws lambda list-event-source-mappings
aws lambda list-code-signing-configs
aws lambda list-functions-by-code-signing-config --code-signing-config-arn <arn>
Bir lambda çağır
Manuel
# Invoke function
aws lambda invoke --function-name FUNCTION_NAME /tmp/out
## Some functions will expect parameters, they will access them with something like:
## target_policys = event['policy_names']
## user_name = event['user_name']
aws lambda invoke --function-name <name> --cli-binary-format raw-in-base64-out --payload '{"policy_names": ["AdministratorAccess], "user_name": "sdf"}' out.txt
Açık URL üzerinden
aws lambda list-function-url-configs --function-name <function_name> #Get lambda URL
aws lambda get-function-url-config --function-name <function_name> #Get lambda URL
URL üzerinden Lambda fonksiyonu çağırma
Artık çalıştırılabilecek olası lambda fonksiyonlarını bulma zamanı:
aws --region us-west-2 --profile level6 lambda list-functions
.png)
“Level6” adında bir lambda fonksiyonu mevcut. Onu nasıl çağıracağımızı bulalım:
aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6
.png)
Artık ismi ve ID’yi bildiğinize göre, ismi alabilirsiniz:
aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75"
.png)
Ve sonunda, işlevi çağırarak erişim sağlayın (ID, Ad ve işlev adı URL’de göründüğünü unutmayın): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6
URL:https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>
Diğer Tetikleyiciler
Bir lambda’yı tetikleyebilecek birçok başka kaynak vardır.
.png)
Privesc
Aşağıdaki sayfada Lambda izinlerini kötüye kullanarak ayrıcalıkları artırma yöntemini kontrol edebilirsiniz:
Kimlik Doğrulaması Olmadan Erişim
AWS - Lambda Unauthenticated Access
Post Exploitation
AWS - Lambda Post Exploitation
Süreklilik
Referanslar
- https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-concepts.html#gettingstarted-concepts-layer
- https://aws.amazon.com/blogs/compute/building-extensions-for-aws-lambda-in-preview/
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

