CVE-2018-3760漏洞复现

CVE-2018-3760

    • 前言
    • 漏洞原理
    • 解题思路
    • 漏洞复现

前言

一、漏洞介绍:Ruby On Rails是一个著名的Ruby Web开发框架,它使用链轮作为开发环境中的静态文件服务器。Sprockets是一个编译和分发静态资源文件的Ruby库。
在Ruby 3.7.1和更低版本中,存在由辅助解码引起的路径遍历漏洞。攻击者可以使用%252e%252e/访问根目录并读取或执行目标服务器上的任何文件。
具体操作及原理接下来会详细描述。
二、影响版本:
4.0.0.beta7及更低版本
3.7.1及更低版本
2.12.4及更低版本

漏洞原理

问题出在sprockets,它用来检查 JavaScript 文件的相互依赖关系,用以优化网页中引入的js文件,以避免加载不必要的js文件。当访问如http://127.0.0.1:3000/assets/foo.js时,会进入server.rb:

解题思路

利用%252e%252e/进行目录穿越,读取passwd

漏洞复现

一、访问靶机
该漏洞在kali下进行复现
CVE-2018-3760漏洞复现_第1张图片

二、当我们使用/assets/file:///etc/passwd访问,发现//会被过滤,所以对其进行url编码,而/的url编码为%2f
三、CVE-2018-3760漏洞复现_第2张图片
报错的原因是:/etc/passwd is no longer under a load path,也就是说不再位于加载路径下
四、在ruby on ralis内部存在函数forbidden_request用来对path进行检查,是否包含..以防路径穿越
%252e%252e

private
    def forbidden_request?(path)
    # Prevent access to files elsewhere on the file system
    #
    #     http://example.org/assets/../../../etc/passwd
    #
    path.include?("..") || absolute_path?(path)
end

因为对..做了过滤,且当前环境存在二次编码,我们对../中的…进行二次编码
..第一次转码:%2E%2E,因为%也要进行二次编码,第二次编码就是:assets/file:%2f%2f/usr/src/blog/vendor/assets/javascripts/%252e%252e/%252e%252e/%252e%252e/%252e%252e/%252e%252e/%252e%252e/etc/passwd成功得到passwd文件内容。
CVE-2018-3760漏洞复现_第3张图片

你可能感兴趣的:(安全,ruby,开发语言)