从CVE-2025-30208看任意文件读取利用

从CVE-2025-30208看任意文件读取利用

AabyssZG
2025-03-30 / 0 评论 / 999 阅读 / 正在检测是否收录...

0# 概述

师傅们好久不见!最近不是特别忙,就研究研究最新的漏洞。

刚好最近一大批漏洞都爆出来了,比如 CVE-2025-1097, CVE-2025-1098, CVE-2025-24514, CVE-2025-1974 Kubernetes Ingress-Nginx Admission Controller RCE Escalation,是危害性极大的高危漏洞,在内网渗透中能直接击穿K8S集群。

这些高危漏洞其实分析文章很多,看国内外众多大佬的分析都非常精彩,这里我也不献丑了。

CVE-2025-30208-title.png

但引起我关注的漏洞是 CVE-2025-30208 Vite Development Server Arbitrary File Read 这个任意文件读取漏洞。

其实我们很多时候都轻视了任意文件读取漏洞,特别是很多刚入行学习网安的师傅,往往瞧不上任意文件读取漏洞,其实这是一种偏见。

今天就从 CVE-2025-30208 发散去讲任意文件读取漏洞,这种漏洞是有操作空间的,况且 CVE-2025-30208 利用简单、覆盖面广,那就有必要拎出来和大家交流一下,今天我就来抛砖引玉一下。

1# 漏洞原理?

CVE-2025-30208 漏洞原理非常简单,就简单提一下:

Vite 开发服务器提供 @fs 机制,用于防止访问 Vite 允许列表之外的文件。然而,由于 URL 解析时的正则表达式处理不当,攻击者可以通过 ?raw???import&raw?? 等查询参数绕过访问限制,从而读取任意文件。

在 Vite 服务器的 URL 处理逻辑中,@fs 机制原本用于限制对非白名单目录的访问,例如:

server: {
  fs: {
    allow: [path.resolve(__dirname, 'src')]
  }
}

Vite 在 URL 解析过程中会移除部分特殊字符,而未正确考虑查询参数的影响,导致攻击者可以构造类似如下的请求绕过安全检查:

GET /etc/passwd?raw??
GET /etc/passwd?import&raw??
GET /@fs/etc/passwd?raw??
GET /@fs/etc/passwd?import&raw??

由于 Vite 解析 URL 时未正确处理这些参数,导致绕过 server.fs.allow 限制,并返回任意文件内容。

按理说,此漏洞仅影响明确将 Vite 开发服务器暴露到网络的应用程序,即使用 --hostserver.host 配置选项的情况。

但经过公网的资产测绘来看,涉及的数量非常可观,且实际测试的结果发现成功率较高,怪不得各家厂商都打上了高危的标签。

该漏洞Exploit工具已经公开,Github地址:https://github.com/ThumpBo/CVE-2025-30208-EXP

3# 什么是bash_history?

众所周知,Linux用户的根目录是有区别的,root用户的根目录在 /root,而其他用户的根目录一般在 /home/用户名,比如我有一个名叫 demo 的用户,那这个用户的根目录在 /home/demo 下。

在Linux系统下每个用户的根目录下,都有四个bash隐藏文件,需要使用 ll -a 参数才会显示出来:

-rw-------   1 demo demo      1710 Jan 22 16:20 .bash_history
-rw-r--r--   1 demo demo        28 Oct 3 09:07 .bash_logout
-rw-r--r--   1 demo demo       237 Jan  12 12:53 .bash_profile
-rw-r--r--   1 demo demo       331 Oct 11 08:07 .bashrc

其中今天要说的主角是 .bash_history,它是Linux 命令的历史记录,会持久化存储,默认位置是当前用户根目录的 .bash_history 文件。

当 Linux 系统启动一个 Shell 时,Shell 会从 .bash_history 文件中,读取历史记录,存储在相应内存的缓冲区中。

我们平时所操作的 Linux 命令,都会记录在缓冲区中。包括 history 命令所执行的历史命令管理,都是在操作缓冲区,而不是直接操作 .bash_history 文件。

当我们退出 Shell,比如按下 Ctrl+D 时,Shell 进程会把历史记录缓冲区的内容,写回到 .bash_history 文件中去。

4# 漏洞利用纵深

好了,上面把基础部分说完了。既然理论存在,那就实践开始!

注明:以下内容均为外网重点目标的实际利用(说句实话,这次在该漏洞的应急上,某大国居然比我国表现差),请在遵守当地法律的情况下合理学习利用

CVE-2025-30208-1.png

首先通过该漏洞读取 /etc/passwd 文件,发现该Linux上存在的用户信息,通过搜索 /home/ 关键词找到Linux上的实际用户,然后尝试读取 /root/.bash_history 文件,如下:

CVE-2025-30208-2.png

会发现显示 permission denied, open '/root/.bash_history' 这是因为不是所有业务都是用 root 账户起的(有些目标还是可以的),所以并没有权限读取 /root/.bash_history 文件,那接下来就要尝试其他用户,如下:

CVE-2025-30208-3.png

哦哟,你看我发现了什么?SSH服务的公钥 authorised_keys.ssh/ 文件夹路径!

其实刚看 .bash_history 很糊,内容都缩成一团了,但可以通过编辑器工具对内容进行格式化:

CVE-2025-30208-4.png

CVE-2025-30208-5.png

剩下的大家都猜的出来了,通过 CVE-2025-30208 读取 /home/d*****in/.ssh/id_rsa 成功拿到了私钥,成功拿下该服务器,其实也可以直接猜测路径:

/root/.ssh/id_rsa?import&raw??
/root/.ssh/id_ed25519?import&raw??
/@fs/root/.ssh/id_rsa?raw??
/@fs/root/.ssh/id_ed25519?import&raw??

通过尝试拼接这个URL,可以批量去尝试读取对方机器的SSH私钥,但不一定在 /root 下,如果是在其他用户的目录下,就需要像上面一样尝试从 /etc/passwd 拿到用户名,并读取 /home/用户名/.ssh/id_rsa 拿到私钥。

同时不止是找到SSH私钥,还可以在 .bash_history 找到数据库账号密码,认证需要的Key,以及SSH密码等等,如下:

CVE-2025-30208-6.png

没想到吧?

5# 任意文件读取还能这么玩?

好了,通过上面你应该认识到任意文件读取漏洞的危害了~

既然都说到任意文件读取漏洞了,接下来我要分享之前在某高校平台提交的任意文件读取组合技实现GetShell的实战报告(PS:该漏洞目前已经上报修复啦,且我不是在SRC平台提交的,有相关授权,说泄露报告的师傅就不必了,本次披露仅做警示作用!

通过信息搜集和模糊测试,对核心平台头像地址进行探测,发现敏感地址 /stu/common/getPic?path=/2023/图片名,模糊测试发现任意文件读取漏洞(且该接口无鉴权),链接如下:

https://xxxxxxxx.cn/system/common/getPic?path=/../../../../../../../../../../../../../../../../../etc/passwd

CVE-2025-30208-7.png

尝试对 root 账户和 *****admin 账户的历史执行命令进行读取:

CVE-2025-30208-8.png

/root/.bash_history 文件中,发现Tomcat的绝对路径,同样在 /home/*****admin/.bash_history 也找到类似的目录

于是对tomcat的敏感路径进行读取,发现Tomcat日志路径,链接如下:

https://xxxxxxxx.cn/system/common/getPic?path=/../../../../../../../../../../../../usr/local/apache-tomcat-8.5.50/logs/localhost_access_log.2023-10-25.txt

CVE-2025-30208-9.png

在Tomcat的日志文件中,可以清晰的看到平台登录的传参!!!在核心平台登录过程中,居然使用Get进行登录明文传输,而不是Post进行加密传输!

通过编写Python脚本利用该任意文件读取漏洞,可以批量下载日志文件:

CVE-2025-30208-10.png

再通过编写Python脚本对下载的TXT进行正则匹配和输出,最终得到18万行的核心平台用户的账户和明文密码,后续通过登录平台找到其他漏洞成功GetShell!

6# 总结

今天我就是来抛砖引玉,详细的讲解了任意文件读取漏洞的攻击利用链,任意文件读取漏洞一直是我们日常所忽视的漏洞,大部分情况下它可能是鸡肋的,但有时候就能作为神助攻,成功祝你GetShell!

如果师傅们还有一些骚姿势,可以在评论区秀出来,也可以和我友好交流哈哈~

17

评论 (0)

取消