重回网鼎之城——第二届网鼎杯线下决赛靶场复盘

重回网鼎之城——第二届网鼎杯线下决赛靶场复盘

8月 3, 2021 阅读 497 字数 4983 评论 0 喜欢 0

author:haya

原文见:https://mp.weixin.qq.com/s/rXqSfjTFUQJsirkhi1hmHQ

前言

​ 最近尝试对一些大赛进行复现,几番周折联系到了网鼎杯赛方,在春秋GAME的支持下,按照原来的靶场环境进行复刻,搭建了一个与第二届网鼎杯线下总决赛类似环境的靶场,复盘了整个比赛。

​ 在整个复盘中,可以感觉到整个靶场规模是非常大的,后来从赛事支持人员口中了解到,实际比赛中为每个队伍准备了一个独占的靶场环境,这意味着同时有几千个节点同时运行,难度可想而知,可以感受到赛方的诚意,也充分体现了赛事运维水平。能够有机会再次近距离地接触这样的靶场,我觉得是一个很好的内网渗透练习机会,在本次内网渗透中,收益颇多,特此记录下来。

一. 靶场介绍

1.简介

本靶场是通过真实场景构建的城市网络安全仿真靶场,以企业网络架构,引用真实网络安全攻击事件,模拟了 广诚市 城市发展集团有限公司 (Urban Development Group Co., Ltd)内部网络拓扑结构。

2. 攻击路线图

高清图见http://www.hayasec.me/wp-content/uploads/2021/07/route.jpg

3. 网络限制

​ DMZ区可与选手网段互通,GCUD域单独隔离对外仅能访问特定资源,STAFF域可通过代理服务器对外访问,GCUDCITY域和STAFF域网络互通,核心区单独隔离。

4. 知识点

​ 靶场模拟了从外部打点到内网渗透最后拿下核心数据库的完整过程,涉及Wordpress漏洞利用(php)、SScms漏洞利用(C#)、代理隧道转发、内网信息收集、内网横向移动、权限提升、基于资源的委派、约束委派、跨域攻击、Exchange后渗透利用、Windows Defender绕过等内网常见的知识点。

二、靶场题解(Write up)

1. 模拟本机环境

主机1:windows 10.100.100.233
主机2:ubuntu 10.100.100.25

2. 攻击Web1(WordPress)

首先,靶机(10.100.100.47)开放了80端口,是一个wordpress。

如下图,插件目录配置不当存在目录遍历,可以看到安装了asismet、editor、jquery-html5-file-upload三款插件。

两款插件均是github最新版,但是jquery-html5-file-upload能够上传jpg文件,site editor存在官方未修复的CVE-2018-7422任意本地文件包含,两个漏洞组合即可getshell。(日志文件包含不可用)

首先,curl上传一句话shell.jpg

然后,通过如下payload,包含curl上传的文件

http://10.100.100.47/wp-content/plugins/editor-1.1.0/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=../../../../../../../wp-content/uploads/files/guest/shell.jpg

最后结果如下图,获取到web1的apache权限。

3. 攻击mysql

查看站库分离的web1 wordpress的配置文件wp-config,发现了主机192.168.200.40的mysql数据库密码



使用ew等工具进行内网穿透。

mysql-client远程连接192.168.200.40,发现存在两个root密码的hash,其中本地root hash未知。

使用hashcat本地破解可知密码为www123456,字典仅使用top100password即可。

通过代理,使用任意扫描器扫描同网段存活主机

发现存在以下端口:

通过收集到的两个密码,hydra尝试其他主机密码,发现192.168.200.4 192.168.200.40密码同mysql

4. Web2(.NET Core)

使用hydra获得的192.168.200.4,代理ssh登录,简单信息收集后,发现80端口运行着服务。

查看网络连接不难发现,web2连接到了另外一个网段192.168.60.200的1433。

sscms是一个.net core开发的跨平台开源cms,数据库配置文件为sscms.json

5. MSSQL1(突破DMZ区)

突破DMZ区,我们需要找到1433的用户名和密码,那么就需要解密sscms.json。

打包源码到本地,通过审计不难发现,主要加密逻辑代码如下:

引用sscms中的DesEncryptor.cs,编写解密代码如下:

using System;
using System.Dynamic;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceString = "waYqL4BMzqNZDj482zaIOf2TTYQ8y5s0slash0CnoR9uZ3XMDhsvE0add0pQ3s42ImUAGdahxxYzu76C7dlCFhZ290slash00qmt2g0equals00equals00secret0";
            string key = "7425c715db412656";
            var s = DecryptStringBySecretKey(sourceString, key);
            Console.WriteLine("sourceString"+sourceString);
            Console.WriteLine("key:"+key);
            Console.WriteLine(s);
            Console.ReadKey();
        }

        public static string DecryptStringBySecretKey(string inputString, string secretKey)
        {
            if (string.IsNullOrEmpty(inputString)) return string.Empty;

            inputString = inputString.Replace("0secret0", string.Empty).Replace("0add0", "+").Replace("0equals0", "=").Replace("0and0", "&").Replace("0question0", "?").Replace("0quote0", "'").Replace("0slash0", "/");

            var encryptor = new DesEncryptor
            {
                InputString = inputString,
                DecryptKey = secretKey
            };
            encryptor.DesDecrypt();

            return encryptor.OutString;
        }
    }
}

解密出192.168.60.200(MSSQL1)的数据库密码为[email protected] (当然,爆破也是有可能的)

因为防火墙只允许DMZ区主机与1433端口通信,,MYSSQL可以反向访问到DMZ。这里我们可以使用xp_cmdshell执行命令,反弹个meterpreter,或者上传工具进行下一步渗透。

启用xp_cmdshell:

6. 探测GCUD域

探测MSSQL所在网段 192.168.60.1/24,发现存在GCUD域

上传kerbrute,通过常用的用户字典进行预认证爆破,发现存在test用户:

随后通过DMZ搜集到的密码进行密码喷洒攻击,成功爆破出普通域用户凭据:



通过Powerview等工具对域信息进行收集不难发现存在:

PRE-ERP TEST1-SERVER TEST-SERVER都使用域用户test加域,ms-ds-creatorsid相同,明显存在资源委派攻击。

由于无法直接远程登录到域内主机,所以需要在本机代理打资源委派。

DMZ的代理无法正向直接连接到GCUD域所在的网段,所以需要在MSSQL主机上进行代理,然后DMZ区主机转发。

代理成功后,首先通过addcomputer.py添加一台机器账户

然后配置evilcomputer到PRE-ERP的基于资源约束的委派

然后通过impacket套件中的getST.py申请一张ticket并且导入,模拟administrator。

至此,我们我们就可以登录到主机PRE-ERP了

随后发现用户GCUD\hanbin登录到了PRE-ERP,然后上传mimikatz.exe,抓取密码,得到hanbin的hash。

8. 横向移动到运维服务器IT-SERVER

对用户hanbin进行侦查,不难发现hanbin还登录到了主机:IT-SERVER

使用hanbin PTH登录到IT-SERVER,发现域管GCUD\gcadmin也登录到了IT-SERVER

同样用mimikatz抓取密码,得到了域管gcadmin的hash。

9. 横向移动到域控DC1

使用域管gcadmin PTH登录域控,拿下整个域

10. EXCHANGE信息搜集

因为域内存在Exchange服务器,可以pth登录到邮件服务器,添加Exchange管理单元,搜寻统计password关键字的邮件。

搜索发现administrator邮箱内有一封包含pass的邮件,New-MailboxexportRequest导出pst格式的邮件(注:这里smbexec.py报错是字符集问题,但是命令已经正确执行)

下载回本地打开pst文件,发现可以看到如下内容:

11. 横向移动到堡垒机jumpsrv

解密加密压缩文件,可以获得堡垒机、LIMING-PC的ip地址 和密码。

12. 探测STAFF域

因为GCUD域无法直接和LIMING-PC通信,我们先尝试登录堡垒机172.19.70.100。

同样使用ew等工具,配置一个多级代理,探测LIMING-PC所在的网段,不难发现存在STAFF域。

试用wmiexec.py等工具远程登录到LIMING-PC

使用impacket套件中的GetUserSPNs.py,查询域内服务账户,进行Kerberoasting攻击,本地破解hash可以获得域服务账户print的密码为[email protected]

继续对服务账户进行侦查,可以发现print配置了到OFFICE-PC的委派,明显存在约束委派攻击。

13. 攻击公用办公服务器OFFICE-PC

这里直接申请一张ST,即可在OFFICE-PC模拟administrator,拿下主机。

14. 拿下员工STAFF域

在OFFICE-PC进行信息搜集,我们发现了域管登录进程:

这里方法很多,主机装有杀软Windows Defender,可以选择procdump等工具dump出lsass.exe

本地还原密码,可以得到STAFF\administrator的hash

15. 移动到父域GCCITYUD

通过收集域信任关系,发现这里存在父域GCCITYUD.com.

由于隐式双向信任,可以构造金票跨到父域GCCITYUD.com。

构造金票需要如下信息:

krbtgt hash
STAFF域sid
GCCITYUD域sid

具体操作如下:

通过使用mimikatz ptt,即可跨到GCCITYUD(注:由于域内有Windows Defender,所以需要免杀mimikatz)

随后net use等方式拿下GCCITYUD域的域控DC01

16. 获取GCCITYUD域服务器

拿下GCCITYUD域控后,由于防火墙原因·,常规横向手法不可用,可通过下发木马等形式来解决。

细心侦查ie浏览器注册表可以发现存在一台squid代理服务器,可以直通到选手网段,直接上线。

17. 攻击ADMIN-PC

在STAFF域控DC1上进行信息搜集,可以发现3389连接记录,通过Dpapi即可解密凭据,获取到ADMIN-PC的3389密码。

18. 拿下核心区服务器

通过DPapi获取到的密码,远程登录到ADMIN-PC(因为Remote UAC限制,也可以使用mstsc SharpRDP等工具)

登陆后发现主机存在xshell,通过Xdecrypt解密,可以获取到核心区三台服务器root密码,并成功登录。

至此,整个靶场渗透结束。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注