前言
在网络安全领域, 内网渗透技术相较于外网攻击技术, 往往不易掌握, 因为内网数据一般较为敏感, 安全从业者不易取得渗透测试授权, 从而难以积累经验, 本文将阐述如何使用 VMware 搭建较一个较复杂的企业内网环境, 便于安全从业者练习内网渗透或者 ctf 组织方搭建内网渗透环境.
0*01 网络拓扑
完整的网络拓扑图如下:
图中黄色部分的网络完全由 VMware 虚拟机实现, 环境搭建需要一台最低配置为 32G 内存 8 核 CPU,120G 空余磁盘空间的主机, 搭建完毕后, 渗透练习者只需按图左侧部分准备一台 Windows 实体机, 安装渗透测试软件及 kali 虚拟机, 然后与已经搭建好渗透测试平台的主机进行连接, 即可进行环境配置及练习.
架设过程中用到的系统镜像下载地址如下:
虚拟路由 : https://www.ikuai8.com/component/download
- kali : https://cdimage.kali.org/kali-2019.2/kali-linux-2019.2-amd64.iso
- windows_server_2008: ed2k://|file|cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso|3368839168|D282F613A80C2F45FF23B79212A3CF67|/
- CentOS7: http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso
- windows7: ed2k://|file|cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso|3265574912|E9DB2607EA3B3540F3FE2E388F8C53C4|/
- windows10: ed2k://|file|cn_windows_10_business_editions_version_1903_x64_dvd_e001dd2c.iso|4815527936|47D4C57E638DF8BF74C59261E2CE702D|/
- sqlserver2008 R2:ed2k://|file|cn_sql_server_2008_r2_enterprise_x86_x64_ia64_dvd_522233.iso|4662884352|1DB025218B01B48C6B76D6D88630F541|/
0*02 架设过程
首先架设公网部分, 即下图中蓝色部分:
公网部分包含攻击者的公网出口路由, 企业的公网出口路由, 攻击者使用的公网 Windows(win7)和 Linux(kali). 下面为具体架设过程:
1. 在虚拟机的虚拟网络编辑器中添加 4 个虚拟网段(VMnet2,VMnet3,VMnet4,VMnet5):
注意将 4 个网段均设置为 "仅主机模式", 且都要取消 "将主机虚拟器适配器连接到此网络" 以及 "使用本地 DHCP 服务将 IP 地址分配给虚拟机" 选项, 4 个网段 ip 设置及作用如下:
VMnet2 111.111.0.0 mask 255.255.0.0 作用: 模拟公网网段
VMnet3 172.168.2.0 mask 255.255.255.0 作用: 模拟第一层内网网段
VMnet4 10.10.10.0 mask 255.255.255.0 作用: 模拟第二层内网网段
VMnet5 192.168.222.0 mask 255.255.255.0 作用: 模拟第三层内网网段
2. 架设本地出口路由(攻击者的出口路由)
环境中的虚拟路由用的都是爱快路的镜像, 安装完毕后的界面如下(系统版本号可能与下载的不太一样, 我用的是两年前下载的镜像, 不过操作应该是一样的):
安装完毕后, 将其初始网卡设为桥接模式, 然后再为其添加一张网卡, 设为 VMnet2 模式, 同时将两张网卡的 Mac 地址记录下来, 因为后面要在虚拟路由设置界面中设置哪张网卡是 wan, 哪张是 lan:
然后选择虚拟路由菜单选项 8 重启(如果不重启可能导致读取 Mac 地址不正常).
重启过后, 选择菜单 1 设置网卡绑定, 这里需要根据刚才记录下来的 Mac 地址来判断哪张是桥接模式的网卡, 哪张是 VMnet2 的网卡, 将那张桥接模式的网卡设置为 lan1,VMnet2 那张网卡设置为 wan1,lan1 就是与第一层内网相连的网卡, wan1 就是与公网网段相连的网卡, 如判断 eth0 为桥接模式的网卡, 则用 "set lan1 eth0" 来将其设为 lan1, 然后 "set wan1 eth1" 将 eth1 设为虚拟路由的 wan 口:
然后选择软路由菜单 2 设置 lan 地址, 依据网络拓扑图, 我这里设置路由器 1 的出口地址为 192.168.1.120:
然后选择虚拟路由菜单 3 设置 Web 端口, 我这里设置为 8080, 随后就可以通过本地实体机访问 http://192.168.1.120:8080/ 来继续配置路由器(注意本地实体机要访问虚拟公网, 有两种方法: 1 是设置默认网关为 192.168.1.120;2 是执行 route add 111.111.0.0 mask 255.255.0.0 192.168.1.120 添加一条路由):
默认用户名, 密码均为 admin, 登录后, 进入外网设置菜单,
设置参数如下图, 将 router1 的 wan 口地址设置为 111.111.111.1:
这样, 本地出口路由就设置完毕!
3. 架设攻击者的公网 VPS
安装公网 win7 及 kali 都很简单, 安装完 win7 后, 设置其网卡模式为 VMnet2, 进入系统后, 设置其 ip 地址为 111.111.111.2, 设置密码, 并为其开启远程桌面; 安装完 kali 后, 设置其网卡模式为 VMnet2, 进入系统, 设置其 ip 地址为 111.111.111.4, 然后 / etc/init.d/networking restart 重启网络服务, 但由于 kali 默认没有开启 SSH 远程登录, 需要按下列步骤为其配置 SSH 远程连接:
(1)修改 / etc/SSH/sshd_config 文件, 将 #PasswordAuthentication no 的注释去掉, 并将 NO 修改为 YES, 将 PermitRootLogin without-password 修改为 PermitRootLogin yes
(2)重启 SSH 服务:/etc/init.d/SSH restart
(3)设置系统自启动 SSH 服务: update-rc.d SSH enable
配置完毕后, 在本地攻击机远程桌面公网 win7, 成功则配置正常, 在本地用 SSH 软件 (推荐 xshell) 远程连接公网 kali, 成功则配置正常.
4. 架设软路由 router2(企业的出口路由)
配置 router2 的过程大致与 router1 相同, 注意将其初始的网卡模式设为 VMnet2, 然后为其添加一块网卡模式为 VMnet3, 同样记下两张网卡的 Mac 地址, 用于稍后的网卡绑定, 在网卡绑定中, 设置 VMnet3 模式的网卡为 LAN1, 设置 VMnet2 模式的网卡为 WAN1, 然后配置 LAN1 的地址为 172.168.2.3,Web 管理端口为 8080:
随后进一步的配置需要同样处于 VMnet3 模式的一台主机访问 http://172.168.2.3:8080/ 才能进行, 所以我们先安装第一层内网中的一台 win7(也就是 IP 地址为 172.168.2.200 的那台 win7), 安装完毕后, 将在虚拟机设置中将这台 win7 其网卡模式配置为 VMnet3, 进入系统, 设置 ip 为 172.168.2.200, 掩码 255.255.255.0, 默认网关 172.168.2.3(router2 的 lan1 的地址), 设置完成后, 通过浏览器访问 http://172.168.2.3:8080/ , 默认用户名 admin 密码 admin 登录路由 Web 界面, 配置 router2 的外网地址如下图:
配置完毕后, 从本地攻击主机 ping 111.111.111.3 这个地址(即 router2 的 wan1 地址), 如果正常, 则说明配置成功.
至此, 模拟环境的公网部分配置完毕了, 接下来配置第一层内网, 也就是下图中黄色部分:
该层内网中有 1 台 server2008(172.168.2.2)服务器, 充当企业对外的门户网站, 一台 win7 作为管理员主机, 1 台双网卡的 centos7(172.168.2.120&&10.10.10.110), 代替路由作为第一层与第二层的桥梁. Win7 刚刚已经配置过, 下面配置 server2008 与 centos7,
安装完毕 server2008 后设置其网卡模式为 VMnet3,ip 地址设为 172.168.2.2, 掩码 255.255.255.0, 默认网关 172.168.2.3(即 router2 的 lan1 地址), 然后在其上安装 phpstudy, 并架设一个存在漏洞的 cms, 作为外网突破点, 为了让外网能够访问这台 server2008 上的 Web 服务, 必须在 router2 上做一端口映射, 具体操作如下, 利用 ip 地址为 172.168.2.200 的 win7 登录 router2 的 Web 管理界面 http://172.168.2.3:8080/ , 做一个端口映射:
让 server2008 的网站能够暴露在公网上, 端口映射配置参数如下:
配置完成后, 从本地攻击机访问 http://111.111.111.3, 可以看到, 我们已经可以访问到内网中 server2008 上的网站了.
然后在 172.168.2.200 这台 win7 上启动一个机器人脚本, 其内容如下:
- While True
- set obj = createobject("wscript.shell")
- obj.run "cmd /c iexplore http://172.168.2.2/pdf1.html"
- WScript.Sleep(1000*30)
- obj.run "taskkill /IM iexplore.exe"
- WScript.Sleep(1000*30)
- Wend
这个脚本的作用是每隔一段时间访问 server2008 网站上的指定页面, 因为等我们拿下 server2008 后需要对 win7 做钓鱼, 所以做个机器人比较方便.
然后安装 centos7, 为了减小系统开销, 我用的是最小化安装, 安装完毕后将其初始网卡模式配置为 VMnet3, 其为再添加一块网卡, 模式配置为 VMnet4,centos7 配置双网卡工作的坑稍多, 说一下步骤:
进入系统, 首先输入命令 "ip addr", 查看两张网卡名称, 这里分别为 ens33 与 ens37:
根据 Mac 地址, 判断哪张网卡需要连接第一层内网, 另一张则连接第二层内网, 例如确定 ens33 这张网卡连接第一层内网, 则
"cd /etc/sysconfig/network-scripts/" 进入网络配置文件目录, ls 查看,
这里的 ifcfg-ens33 这个配置文件对应 ens33 这张网卡的配置, 我们要配置 ens33 的网络参数, 就要编辑这个文件, vi ifcfg-ens33, 编辑文件内容如下:
然后退出 vi, 下面要编辑 ens37 这张网卡, 先 cp ifcfg-ens33 ifcfg-ens37, 复制一份配置文件, 然后 vi ifcfg-ens37, 编辑文件内容如下图:
注意: 里面的 UUID 可能需要用 uuidgen 命令生成.
配置好 ens37, 使用命令 "nmcli con up ens37", 启动 ens37, 如果没有报错, 则 "service network restart" 重启网络服务, 然后用该层内网中 win7 ping 172.168.2.120, 如果回显正常则说明配置成功.
然后为 win7 安装 SSH 软件, 登录 centos7, 将其密码改为 win7 相同的密码(因为我们要实现一个同密码攻击).
至此, 第一层内网配置完毕.
下面配置第二层内网, 即下图中黄色部分:
这一层内网模拟企业办公网, 所有主机均在域中, 首先安装域控主机, 即 ip 为 10.10.10.56 的 server2008 主机.
安装完毕 server2008 系统后, 将其网卡模式配置为 VMnet4,ip 地址设为 10.10.10.56, 掩码设置为 255.255.255.0, 默认网关设为 10.10.10.254,DNS 设为 127.0.0.1(因为域中一定需要一台 DNS 服务器, 我们稍后会将 DNS 服务也安装到这台域控上, 所以这里可以设置为 127.0.0.1), 然后用服务器管理器 "添加角色", 添加 Active Directory 域服务 (域名称为 domainTest1.com) 以及 DNS 服务器(DNS 服务器也可以安装在其他 server 级别的主机上, 不过如果将两者分开安装, 需要先安装 DNS 服务, 并在 DNS 服务的正向查找区域中添加要安装 Active Directory 域服务的域解析记录, 并在安装 Active Directory 域服务之前正确设置域控主机的 dns 服务器地址, 比较麻烦, 所以这里采用域控与 DNS 服务合并的办法), 安装完毕后, 需要在 DNS 的正向查找区域中添加一条主要区域(即域的解析记录):
区域名称填:
添加完成后, 域就可以正常工作. 如果对这一部分不太清楚, 可以读一读《Windows server2008R2 Active Directory 配置指南》的 1-3 章相关内容.
域控安装完毕后, 我们继续安装该层内网中的其他主机: ip 地址为 10.10.10.3 的 win7 与 10.10.10.88 的 server2008, 安装完毕后将它们的网卡模式均配置为 VMnet4,ip 地址依照拓扑图上设置, 掩码 255.255.255.0, 网关 10.10.10.254, 注意 DNS 都要设置为域控的 ip 地址即 10.10.10.56, 设置完毕后, 登录两台主机将它们加入域, 以 win7 为例, 加入域的方法为:
右击计算机 ->计算机名称, 域与工作组设置 ->更改设置 ->计算机名选项页 ->更改, 将 "隶属于" 单选框切换到 "域" 选项:
输入域的名称 domainTest1.com, 点确定, 弹出对话框:
这里输入域管理员的账户及密码, 确定后, 弹出如下对话框:
表明这台 win7 成功加入了域 domainTest1.com 域, 重启 win7, 以域内账号登陆即可.
Server2008 加入域的步骤与 win7 类似, 不再赘述, 待 server2008 加入域后, 以域管理员账户登陆, 安装 phpstudy, 在 8080 端口上架设一个企业内部的 OA 系统:
然后在这台 server2008 上利用服务器管理器添加角色, 安装 iis, 使其在 80 端口上能够被第二层内网正常访问, 为其添加一个 asp 页面. 该页面通过第三个虚拟路由 router3 连接到第三层内网的 sqlserver2008. 至此, 第二层内网环境架设完毕.
接下来架设第三层内网, 第三层内网模拟企业的核心数据网, 与第二层之间使用路由器进行隔离, 下图中黄色部分为第三层内网部分:
首先架设虚拟路由, 依然先安装爱快路虚拟路由, 安装完毕后, 虚拟机设置中将其初始网卡模式设为 VMnet4(与 LAN2 相连), 然后再为其添加一张网卡, 模式设为 VMnet5(与 LAN3 相连), 记录下两张网卡的 Mac 地址, 然后进入虚拟路由设置界面, 设置网卡绑定为: VMnet4 模式的网卡为 lan1,VMnet5 模式的网卡为 lan2:
在设置 lan 地址中设置 lan1 地址为 10.10.10.200, 设置 Web 端口为 8080, 然后用第二层内网中的 win7 访问 http://10.10.10.200:8080, http://10.10.10.200:8080/ 设置 lan2 的地址为 192.168.222.22
第二层内网的 server2008(10.10.10.88)需要访问第三层 sqlserver2008 数据库 (192.168.222.200:1433), 而第三层的 win10(192.168.222.77) 需要访问第二层的 server2008 上的 Web 服务(10.10.10.88:80), 所以需要分别在虚拟路由的 lan1 与 lan2 的高级设置中设置 "允许其他 LAN 访问此 LAN":
但如果只是打开 LAN 互访控制, 则第二层内网与第三层内网就会无限制相互访问, 降低了安全性, 所以添加 6 条 ACL 规则:
添加并启用后, 可以保证第二层内网内只有 ip 为 10.10.10.88 的主机能够访问第三层内网的 192.168.222.200 的 1433 端口, 在第三层内网中只有 192.168.222.77 的主机能够访问第二层内网的 10.10.10.88 的 80 端口.
第三个虚拟路由安装完毕后, 接下来安装第三层内网中的 server2008 与 win10, 安装完系统后, 分别依照拓扑图设置 ip, 掩码 255.255.255.0, 默认网关 192.168.222.22. 然后在 server2008 上安装 sqlserver2008, 并创建名为 "test" 数据库, 执行 test.sql 数据库脚本, 导入 test.data 的数据, 并配置 sqlserver2008 可以为外网访问, 这里配置稍微繁琐, 简答介绍一下:
打开 SQLserver 配置管理器, 如下图设置 SQLServer 网络配置:
然后双击 TCP/IP 协议, 切换到 IP 地址选项卡, 将所有的 IP 地址下的 "活动","已启用" 均切换为是, 也就是让 SQLserver 在所有 IP 地址上监听:
最后, 在这台主机的 "高级安全 windows 防火墙" 配置中添加一条规则, 设置通过 1433 端口:
最后安装 ip 地址为 192.168.222.77 的 win10, 安装完毕后, 配置网卡模式为 VMnet5,ip 地址为 192.168.222.77, 掩码 255.255.255.0, 网关 192.168.222.22, 然后用浏览器访问 http://10.10.10.88/index.asp?id=1, 出现如下界面, 说明第三层内网配置成功.
最后在 win10 上启动一个 vbs 脚本机器人, 让其自动访问 http://10.10.10.88/ 上的页面, 因为我们那些第二层内网后要对第三层内的 win10 做钓鱼攻击.
至此这个三层内网的渗透靶场架设完毕, 至此本文的篇幅已经够长了, 所以这个靶场的 writeup 就不仔细写了, 下面简单介绍一下攻击思路.
0*03 攻击思路
1. 外网突破
扫描 111.111.111.0/24 段, 发现 111.111.111.3:80 开放, 登录发现网站, awvs 扫描发现网站存在 SQL 注入漏洞, 于是注入获取用户名及密码, 登录成功后获取网站物理路径, 在网站后台中试图上传 webshell 不成功, 通过御剑扫描网站, 发现 phpmyadmin, 用弱口令登录 phpmyadmin, 试图用 MySQL 写 webshell, 发现 MySQL 开启了 secure-file-priv 开关限制了写文件目录, 使用 MySQL 开启日志文件, 将日志文件的位置设置为刚才在后台中发现的网站物理路径位置, 在 sql 查询语句中写 webshell, 成功拿到 webshell.
2. 第一层内网渗透
利用 webshell 上传反向 socks5 代理软件 frpc 等, 在公网 Windows 上运行 frps, 使得这台 webshell 主机的代理客户端与公网 Windows 主机上的代理服务端相连接, 这样在本地 Windows 攻击机上安装 Proxifier,SocksCap64 等软件(kali 用 proxychains), 就可以将攻击流量发送至第一层内网.
通过在本地扫描 webshell 网段, 可以发现 172.168.2.200(Linux),172.168.2.120(Windows)两台主机, 在 webshell 主机的 apache 日志中可以发现 172.168.2.120 这台主机在不断访问 http://172.168.2.2/pdf1.html 这个页面(robot.vbs 的作用), 于是用 CVE-2018-8174 对 172.168.2.120 进行钓鱼(用法详见压缩包), 钓鱼成功后, 获取 172.168.2.120 的 msf 反弹回话, 上传 getpass 进行密码抓取, 然后利用 msf 的远程桌面开启脚本转出 3389 到公网 kali, 远程桌面登录后发现管理员桌面上有 SSH 软件, 联想到该层内网还有一台 Linux 主机, 所以猜测这台主机的密码与 Linux 相同, 于是尝试用相同密码登录, 登录成功, 于是拿下 Linux, 第一层内网渗透完毕!
3. 第二层内网渗透
在 Linux 上搜集信息发现双网卡, 在 10.10.10.0/24 网段上进行扫描发现 3 台主机存活, 并且 10.10.10.88 这台主机上开放了 80,8080 端口, 访问 http://10.10.10.88:8080/ 发现 phpoa 系统, 利用任意文件上传 POC 拿到 webshell, 然后判断环境为域环境, 并且当前登录账户为域管理员账户, 于是上传 getpass 拿到域控密码, 利用 ipc 入侵, 拿下域内其他两台主机, 第二层内网渗透完毕!
4. 第三层内网渗透
在 10.10.10.88 上发现还打开了 80 端口, 上面运行着 iis 服务, 并且连接着 192.168.222.200 上的 sqlserver 数据库, 于是利用 sqlserver 存储过程执行命令, 不过由于 router3 的 acl 规则很严格, 所以无法进行回话反弹. 另外审查 10.10.10.88 的 iis 日志, 发现 192.168.222.77 的 IE 浏览器对其有规律性的访问记录, 所以可以利用 CVE-2018-15982 对其进行钓鱼, 不过需要注意的一点是 192.168.222.77 是一台 win10, 自带杀毒软件, 所以需要对可执行 payload 进行免杀处理.
架设过程中用到的素材我已上传到网盘: 链接: https://pan.baidu.com/s/1NIOIZgVDLgkg7j6Ch5pjwA 提取码: kws9 , 如果在架设过程中遇到问题, 欢迎私信联系我.
来源: http://www.tuicool.com/articles/NJzUr2v