当前位置: 首页 > news >正文

网络安全之任意文件读取利用

0 概述

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

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

但引起我关注的漏洞是 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工具已经公开

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 漏洞利用纵深

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

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

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

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

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

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

剩下的大家都猜的出来了,通过 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密码等等,如下:

没想到任意文件读取漏洞还能这么玩吧?

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

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

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

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

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

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

/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

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

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

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

6 总结

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

http://www.lryc.cn/news/571260.html

相关文章:

  • 如何在应用中实现地图关键字搜索和标记聚合功能?
  • 图扑软件 | 3D 场景视频嵌入应用
  • 【pytest进阶】Pytest之conftest详解
  • Kafka网络模块全链路源码深度剖析与设计哲学解读
  • RAG 架构地基工程-Retrieval 模块的系统设计分享
  • 测试:网络协议超级详解
  • 国产数据库KingbaseES零基础实战:Oracle兼容功能从入门到精通
  • 探索KingbaseES在线体验平台:国产数据库新体验
  • 力扣Hot100每日N题(19~24)
  • 性能测试|数据说话!在SimForge平台上用OpenRadioss进行汽车碰撞仿真,究竟多省时?
  • 页面配置文件pages.json和小程序配置
  • 金仓数据库在线体验平台:开启国产数据库云端探索之旅
  • 【万元大奖】2025年第二届教育信息技术应用创新大赛——操作系统技能创新挑战赛 开始报名啦!!!
  • 资产结构分析怎么做?以固定资产和存货为例
  • LLM大模型系列(十):深度解析 Prefill-Decode 分离式部署架构
  • 红队攻防渗透技术实战流程:信息打点-Web应用源码泄漏开源闭源指纹识别GITSVNDS备份
  • 项目的难点
  • 接雨水 - 困难
  • Java 常用类 Time API:现代时间处理的艺术
  • GPU算力应用迈出关键一步:DPIN与南洋生物科技合作落地
  • 如何设置端口映射? 常见本地计算机内网ip端口映射给公网外网访问的详细方法步骤
  • 深入剖析Spring Cloud Gateway,自定义过滤器+断言组合成拦截器链实现Token认证
  • Win32 专栏停更公告
  • 讲透 RNN 到 Transformer !!!
  • k8s 收集event事件至Loki
  • Kafka 简介(附电子教程资料)
  • 云计算-Raft算法报告-raft与paxos对比
  • 【MySQL基础】表的功能实现:增删查改详细讲解
  • 第十七届山东省职业院校技能大赛中职组网络建设与运维赛项
  • php在线生成pdf选民证系统支持中文(小工具)