AWS - Lambda Enum

Support HackTricks

Lambda

Amazon Web Services (AWS) Lambda inafafanuliwa kama huduma ya kompyuta inayowezesha utekelezaji wa msimbo bila haja ya usambazaji au usimamizi wa seva. Inajulikana kwa uwezo wake wa kushughulikia kiotomatiki ugawaji wa rasilimali zinazohitajika kwa utekelezaji wa msimbo, kuhakikisha vipengele kama upatikanaji wa juu, kupanuka, na usalama. Kipengele muhimu cha Lambda ni mfano wake wa bei, ambapo malipo yanategemea tu muda wa kompyuta ulio tumika, kuondoa haja ya uwekezaji wa awali au wajibu wa muda mrefu.

Ili kuita lambda inawezekana kuikuta kila wakati unavyotaka (na Cloudwatch), kuweka wazi URL kiunganishi na kuikuta, kuitwa kupitia API Gateway au hata kulingana na matukio kama mabadiliko ya data katika S3 ndoo au masasisho kwa DynamoDB jedwali.

Msimbo wa lambda uhifadhiwa katika /var/task.

Lambda Aliases Weights

Lambda inaweza kuwa na matoleo kadhaa. Na inaweza kuwa na zaidi ya 1 toleo lililo wazi kupitia aliases. Uzito wa kila moja ya matoleo yaliyo wazi ndani ya alias utaamua ni alias ipi itakayopokea mwito (inaweza kuwa 90%-10% kwa mfano). Ikiwa msimbo wa moja ya aliases ni dhaifu unaweza kutuma maombi hadi toleo dhaifu lipokee shambulio.

Resource Policies

Sera za rasilimali za Lambda zinaruhusu kutoa ufikiaji kwa huduma/accounts nyingine ili kuweza kuita lambda kwa mfano. Kwa mfano hii ni sera ya kuruhusu mtu yeyote kufikia lambda iliyo wazi kupitia URL:

Au hii kuruhusu API Gateway kuitumia:

Lambda Database Proxies

Wakati kuna mamia ya maombi ya lambda yanayoendelea, ikiwa kila moja inahitaji kuungana na kufunga muunganisho na hifadhidata, haitafanya kazi (lambdas hazina hali, haiwezi kudumisha muunganisho wazi). Basi, ikiwa Lambda functions zako zinashirikiana na RDS Proxy badala ya mfano wako wa hifadhidata. Inashughulikia usimamizi wa muunganisho unaohitajika kwa kupanua muunganisho mengi ya wakati mmoja yanayotengenezwa na kazi za Lambda zinazofanyika kwa wakati mmoja. Hii inaruhusu programu zako za Lambda kutumia muunganisho uliopo, badala ya kuunda muunganisho mpya kwa kila mwito wa kazi.

Lambda EFS Filesystems

Ili kuhifadhi na hata kushiriki data Lambdas zinaweza kufikia EFS na kuziunganisha, hivyo Lambda itakuwa na uwezo wa kusoma na kuandika kutoka kwake.

Lambda Layers

Layer ya Lambda ni archive ya .zip ambayo inaweza kuwa na msimbo wa ziada au maudhui mengine. Layer inaweza kuwa na maktaba, runtime maalum, data, au faili za usanidi.

Inawezekana kujumuisha hadi tabaka tano kwa kazi. Unapojumuisha tabaka katika kazi, maudhui yanachukuliwa kwenye saraka ya /opt katika mazingira ya utekelezaji.

Kwa default, tabaka unazounda ni binafsi kwa akaunti yako ya AWS. Unaweza kuchagua kushiriki tabaka na akaunti nyingine au kufanya tabaka kuwa ya umma. Ikiwa kazi zako zinatumia tabaka ambayo akaunti tofauti ilichapisha, kazi zako zinaweza kuendelea kutumia toleo la tabaka baada ya kufutwa, au baada ya ruhusa yako ya kufikia tabaka kufutwa. Hata hivyo, huwezi kuunda kazi mpya au kusasisha kazi ukitumia toleo la tabaka lililofutwa.

Kazi zilizowekwa kama picha ya kontena hazitumii tabaka. Badala yake, unapakua runtime unayopendelea, maktaba, na utegemezi mwingine ndani ya picha ya kontena unapojenga picha hiyo.

Lambda Extensions

Lambda extensions huongeza kazi kwa kuungana na zana mbalimbali za uangalizi, ufuatiliaji, usalama, na utawala. Extensions hizi, zilizoongezwa kupitia .zip archives kwa kutumia tabaka za Lambda au zilizojumuishwa katika uzinduzi wa picha za kontena, zinafanya kazi katika hali mbili: ndani na nje.

  • Extensions za ndani huungana na mchakato wa runtime, zikibadilisha uzinduzi wake kwa kutumia mabadiliko maalum ya lugha na scripts za wrapper. Uboreshaji huu unatumika kwa aina mbalimbali za runtimes, ikiwa ni pamoja na Java Correto 8 na 11, Node.js 10 na 12, na .NET Core 3.1.

  • Extensions za nje zinafanya kazi kama michakato tofauti, zikidumisha ulinganifu wa operesheni na mzunguko wa kazi ya Lambda. Zinapatikana kwa runtimes mbalimbali kama Node.js 10 na 12, Python 3.7 na 3.8, Ruby 2.5 na 2.7, Java Corretto 8 na 11, .NET Core 3.1, na runtimes maalum.

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>

Itisha lambda

Kawaida

# 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

Kupitia URL iliyo wazi

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

Call Lambda function via URL

Sasa ni wakati wa kugundua kazi za lambda zinazoweza kutekelezwa:

aws --region us-west-2 --profile level6 lambda list-functions

Kuna kazi ya lambda inayoitwa "Level6". Hebu tuone jinsi ya kuitumia:

aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6

Sasa, kwamba unajua jina na ID unaweza kupata Jina:

aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75"

Na hatimaye piga simu kwa kazi kwa kufikia (angalia kwamba ID, Jina na jina la kazi yanaonekana kwenye URL): https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6

URL:https://<rest-api-id>.execute-api.<region>.amazonaws.com/<stageName>/<funcName>

Vichocheo Vingine

Kuna vyanzo vingi vingine vinavyoweza kuchochea lambda

Privesc

Katika ukurasa ufuatao unaweza kuangalia jinsi ya kutumia ruhusa za Lambda kuongeza mamlaka:

Ufikiaji Usio na Uthibitisho

Baada ya Kutekeleza

Kudumu

Marejeo

Support HackTricks

Last updated