3个月前 (08-31)  渗透注入 评论关闭  56 
文章评分 2 次,平均分 5.0

0×00 概述

对从业渗透测试的人员来说,保持技能更新是非常重要的,而更新技能的过程中,需要大量的去学习、实践和总结,比较传统的学习方式是通过虚拟机安装靶机来练习,这种方式往往缺少一种真实渗透中的网络环境,而拿真实的网络来搞事往往会面临很对未知的风险,比如被查水表什么的。在工作中,有时候测试一个内网转发脚本、恶意程序或避免影响业务需要一个沙箱环境,目前比较常见的是使用GNS3(网络设备模拟器)+虚拟机来模拟网络环境,随着云计算技术的兴起,无疑给建立虚拟环境多了一种选择,通过虚拟技术,可以建立更加复杂的测试环境,甚至仿真一个企业网络以便测试各种攻击场景。

0×01 环境准备

1.1 OpenStack

OpenStack是一个快源的云计算管理平台项目,由组件组合完成具体工作,详细介绍见OpenStack官网。OpenStack的部署方式分为手动部署和自动化部署,自动化部署工具主要有packstackdevstackFuel等,这里使用packstack在单机+单网卡的环境进行一键部署。

1.2 服务器环境

  • 磁盘容量: >= 500GB
  • 内存容量: >= 32GB
  • 操作系统: CentOS-7-x86_64-Minimal-1611
  • 网卡数量: 1

1.3 网络配置

系统安装完后,先给服务器配置一个静态IP:

<code class="hljs ini"><span class="hljs-comment"># vi /etc/sysconfig/network-scripts/ifcfg-em1</span>

<span class="hljs-attr">BOOTPROTO</span>=static
<span class="hljs-attr">ONBOOT</span>=<span class="hljs-literal">yes</span>
<span class="hljs-attr">IPADDR</span>=<span class="hljs-number">192.168</span>.<span class="hljs-number">20.7</span>
<span class="hljs-attr">GATEWAY</span>=<span class="hljs-number">192.168</span>.<span class="hljs-number">20.254</span>
<span class="hljs-attr">NETMASK</span>=<span class="hljs-number">255.255</span>.<span class="hljs-number">255.0</span>
<span class="hljs-attr">NDS1</span>=<span class="hljs-number">8.8</span>.<span class="hljs-number">8.8</span>
</code>

这里我使用192.168.20.7作为服务器IP,保存重启网络:

<code class="hljs cpp"><span class="hljs-meta"># systemctl restart network.service</span>
</code>

1.4 部署OpenStack

通过yum源进行安装packstack

<code class="hljs sql"># yum -y <span class="hljs-keyword">install</span> centos-<span class="hljs-keyword">release</span>-openstack-mitaka epel-<span class="hljs-keyword">release</span>

# yum -y <span class="hljs-keyword">install</span> openstack-packstack
</code>

使用packstack部署OpenStack:

<code class="hljs cpp"><span class="hljs-meta"># packstack --allinone</span>
</code>

安装时间大概15~30分钟左右。

1.5 桥接网卡

使用packstack安装后,如果重启系统,虚拟网络会无法连接外部网络,这时需要创建一个虚拟网卡:

<code class="hljs ini"><span class="hljs-comment"># vi /etc/sysconfig/network-scripts/ifcfg-br-ex</span>

<span class="hljs-attr">DEVICE</span>=br-ex
<span class="hljs-attr">DEVICETYPE</span>=ovs
<span class="hljs-attr">TYPE</span>=OVSBridge
<span class="hljs-attr">BOOTPROTO</span>=static
<span class="hljs-attr">IPADDR</span>=<span class="hljs-number">192.168</span>.<span class="hljs-number">20.7</span>
<span class="hljs-attr">NETMASK</span>=<span class="hljs-number">255.255</span>.<span class="hljs-number">255.0</span>
<span class="hljs-attr">GATEWAY</span>=<span class="hljs-number">192.168</span>.<span class="hljs-number">20.254</span>
<span class="hljs-attr">DNS1</span>=<span class="hljs-number">8.8</span>.<span class="hljs-number">8.8</span>
<span class="hljs-attr">ONBOOT</span>=<span class="hljs-literal">yes</span>
</code>

默认安装缺省IP段是172.24.4.225/28,这里修改为192.168.20.7/24,保存,同时修改em1网卡配置为:

<code class="hljs ini"><span class="hljs-attr">DEVICE</span>=em1
<span class="hljs-attr">TYPE</span>=OVSPort
<span class="hljs-attr">DEVICETYPE</span>=ovs
<span class="hljs-attr">OVS_BRIDGE</span>=br-ex
<span class="hljs-attr">ONBOOT</span>=<span class="hljs-literal">yes</span>
</code>

保存,重启网络服务,不成功直接重启服务器。

0×02 实例与映像

OpenStack默认使用VirtIO来管理实例映像,默认直接上传ISO文件会识别不了磁盘,这时需要使用含VirtIO驱动的映像,镜像说明文档见:

<code class="hljs dts"><span class="hljs-symbol">https:</span><span class="hljs-comment">//docs.openstack.org/image-guide/obtain-images.html</span>
</code>

这里统一制作qcow2格式的映像文件。

2.1 Linux qcow2映像

  • 手动制作

以制作Kali Linux为例,下载ISO文件kali-linux-light-2017.1-amd64.iso:

<code class="hljs sql"># qemu-img <span class="hljs-keyword">create</span> -<span class="hljs-keyword">f</span> qcow2 kali-linux-light<span class="hljs-number">-2017.1</span>-amd64.qcow2 <span class="hljs-number">10</span><span class="hljs-keyword">G</span>

# kvm -smp <span class="hljs-number">1</span> -<span class="hljs-keyword">m</span> <span class="hljs-number">512</span> -cdrom kali-linux-light<span class="hljs-number">-2017.1</span>-amd64.iso \
-drive <span class="hljs-keyword">if</span>=virtio,<span class="hljs-keyword">file</span>=kali-linux-light<span class="hljs-number">-2017.1</span>-amd64.qcow2 \
-net nic,<span class="hljs-keyword">model</span>=virtio -net <span class="hljs-keyword">user</span>
</code>

然后就像正常一样安装系统,安装完直接关掉。

  • 官方的映像文件

有些Linux发行版官方提供现成映像文件,下载过来就可以直接使用:

<code class="hljs dts"><span class="hljs-meta"># CentOS 7</span>
<span class="hljs-symbol">
http:</span><span class="hljs-comment">//cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2</span>

<span class="hljs-meta"># Debian 9</span>
<span class="hljs-symbol">
http:</span><span class="hljs-comment">//cdimage.debian.org/cdimage/openstack/current-9/debian-9-openstack-arm64.qcow2</span>

</code>

由于官方的云镜像是没有提供密码的,这时需要修改root密码,password:冒号后边为密码:

<code class="hljs python"><span class="hljs-comment"># virt-customize -a CentOS-7-x86_64-GenericCloud.qcow2 --root-password password:toor</span>
</code>

2.2 Windows qcow2映像

以Windows 2008 R2为例子,其他Win系统制作过程类似,由于Windows系统默认不带VirtIO驱动,先下载驱动程序:

生成映像文件:

<code class="hljs sql"># qemu-img <span class="hljs-keyword">create</span> -<span class="hljs-keyword">f</span> qcow2 Windows_2008_R2_x64.qcow2 <span class="hljs-number">20</span><span class="hljs-keyword">G</span>
</code>
  • 安装系统

命令行启动安装:

<code class="hljs coffeescript"><span class="hljs-comment"># kvm -m 2048 -cdrom cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso \</span>
-drive file=Windows_2008_R2_x64.qcow2,<span class="hljs-keyword">if</span>=virtio,boot=<span class="hljs-literal">on</span> -fda virtio-win<span class="hljs-number">-0.1</span><span class="hljs-number">.140</span>_amd64.vfd -boot d
</code>

手动加载驱动:【自定义(高级)】-【加载驱动程序】-【浏览】-【软盘驱动器】,选择对应操作系统版本选项,然后确定:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

安装完后关机。

  • 安装网卡驱动

重新命令启动虚拟机:

<code class="hljs cpp"><span class="hljs-meta"># kvm -m 1024 -drive file=Windows_2008_R2_x64.qcow2,<span class="hljs-meta-keyword">if</span>=virtio,boot=on -cdrom virtio-win-0.1.140.iso \
-net nic,model=virtio -net user -boot c</span>
</code>

找到【设备管理器】-【其他设备】-【以太网控制器】,右键更新驱动程序软件:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

【浏览】-【CD驱动器】,确定:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

安装完毕:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

注:不能关闭的情况下直接kill掉进程。

0×03 Horizon

Horizon是一个用于管理、控制OpenStack服务的Web控制面板,可以通过http://192.168.20.7/dashboard/进行登录,管理帐号是admin密码保存在/root/keystonerc_admin

3.1 上传映像

http://192.168.20.7/dashboard/登录后,【项目】-【计算】-【映像】-【创建映像】:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

Horizon控制面板添加映像支持2种方式,一种是通过HTTP/HTTPS直接下载,另一种是通过本地上传,在【映像源】选【映像文件】,将制作好的虚拟机上传到OpenStack:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

3.2 创建实例

在【映像】列表的Windows_2008_R2_x64后面点击【启动】,其中【详细信息】、【源】、【flavor】、【网络】这四项为必选项:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

创建完实例,在【实例】点击实例名称进入该实例的详细信息页面,切换到【控制台】即可对虚拟机进行操作:

OpenStack:建立虚拟的渗透测试实验环境 – 安装篇

3.3 开机恢复实例状态

默认情况下,如果重启OpenStack的机器,实例是不会自动恢复之前的状态的,这时需要修改一下配置文件:

<code class="hljs ini"><span class="hljs-comment"># vi /etc/nova/nova.conf</span>

<span class="hljs-comment"># 去掉注释,将false改成true</span>
<span class="hljs-attr">resume_guests_state_on_host_boot</span>=<span class="hljs-literal">true</span>
</code>

0×04 卸载

配置的过程中难免有时出错需要重新再来,保存以下脚本为unpackstack.sh

<code class="hljs bash"><span class="hljs-meta">#!/bin/bash
</span>
<span class="hljs-comment"># Warning! Dangerous step! Destroys VMs</span>
<span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> $(virsh list --all | grep instance- | awk <span class="hljs-string">'{print $2}'</span>) ; <span class="hljs-keyword">do</span>
    virsh destroy <span class="hljs-variable">$x</span> ;
    virsh undefine <span class="hljs-variable">$x</span> ;
<span class="hljs-keyword">done</span> ;

<span class="hljs-comment"># Warning! Dangerous step! Removes lots of packages</span>
yum remove -y nrpe <span class="hljs-string">"*nagios*"</span> puppet <span class="hljs-string">"*ntp*"</span> <span class="hljs-string">"*openstack*"</span> \
<span class="hljs-string">"*nova*"</span> <span class="hljs-string">"*keystone*"</span> <span class="hljs-string">"*glance*"</span> <span class="hljs-string">"*cinder*"</span> <span class="hljs-string">"*swift*"</span> \
mysql mysql-server httpd <span class="hljs-string">"*memcache*"</span> scsi-target-utils \
iscsi-initiator-utils perl-DBI perl-DBD-MySQL ;

<span class="hljs-comment"># Warning! Dangerous step! Deletes local application data</span>
rm -rf /etc/nagios /etc/yum.repos.d/packstack_* /root/.my.cnf \
/var/lib/mysql/ /var/lib/glance /var/lib/nova /etc/nova /etc/swift \
/srv/node/device*/* /var/lib/cinder/ /etc/rsync.d/frag* \
/var/cache/swift /var/<span class="hljs-built_in">log</span>/keystone /var/<span class="hljs-built_in">log</span>/cinder/ /var/<span class="hljs-built_in">log</span>/nova/ \
/var/<span class="hljs-built_in">log</span>/httpd /var/<span class="hljs-built_in">log</span>/glance/ /var/<span class="hljs-built_in">log</span>/nagios/ /var/<span class="hljs-built_in">log</span>/quantum/ ;

umount /srv/node/device* ;
killall -9 dnsmasq tgtd httpd ;

vgremove <span class="hljs-_">-f</span> cinder-volumes ;
losetup <span class="hljs-_">-a</span> | sed <span class="hljs-_">-e</span> <span class="hljs-string">'s/:.*//g'</span> | xargs losetup <span class="hljs-_">-d</span> ;
find /etc/pki/tls -name <span class="hljs-string">"ssl_ps*"</span> | xargs rm -rf ;
<span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> $(df | grep <span class="hljs-string">"/lib/"</span> | sed <span class="hljs-_">-e</span> <span class="hljs-string">'s/.* //g'</span>) ; <span class="hljs-keyword">do</span>
    umount <span class="hljs-variable">$x</span> ;
<span class="hljs-keyword">done</span>
</code>

卸载操作:

<code class="hljs cpp"><span class="hljs-meta"># sh unpackstack.sh</span>
</code>

卸载后就可以使用packstack重新部署,需要注意的是,该脚本并不是100%的清除,只是删除基本的文件,比如安装时加入的iptables规则是不会清除的,有强迫症的建议重装系统或在虚拟机里部署。

至此,部署OpenStack和制作映像文件基本完成了。

0×05 参考




//下面这个css和插件后台设置的主题有关系,如果需要换样式,则需要修改以下CSS名称

  *本文原创作者:zrools
关于
切换注册

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享