Ruby On Ralis远程代码执行研究(CVE-2016-0752)

环境搭建参考:https://www.b1uew01f.net/learnnotes/tips/281.html

环境

1.什么是Ruby?

Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,上世纪90年代由一位日本人设计。

2.搭建

环境久远,现在Ruby的更新使得一些内容不支持,搭建成功的环境也可能无法复现漏洞

提示:不知道Ruby on Ralis环境运行方式的话,就无法从根本解析漏洞,因此环境还是需要搭建的

上面文章也有些微小的错误,且文章久远环境版本会出错,我搭建的步骤如下:

RVM安装环境

sudo gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 13E2069D6956105BD0E739499BDB
curl -L https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
rvm -v #查看版本

RVM安装Ruby环境

rvm install 2.4.2

或是自动安装

apt install ruby-full

设置默认版本

rvm 2.4.2 --default

安装bundler

  gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ #gem切换可用的源

  gem install bundler

安装Rails

gem install rails

随便新建一个文件夹进入,用以下命令创建一个应用

rails new hello_world_2

修改/hello_world_2文件夹下的/config/boot.rb文件,使得监听在 0.0.0.0 

启动web server,访问网页报错

解决办法,修改目录下Gemfile

然后

bundle update

访问ip:12345正常出现的网页:

创建名为“welcome”的控制器和一个名为“index”的动作

修改视图为任意网页内容,访问后可正常显示

漏洞的存在

参考乌云:https://wooyun.x10sec.org/static/drops/papers-12519.html

渲染机制

动态渲染路径的问题,控制器中的代码:

def show
  render params[:template]
end

对比自己的控制器:

渲染视图时,采用渲染 template 参数指定 view 模板,即会对目录下相关文件进行读取,像上面搭建视图时,读取的就是app/views/welcome/index.html.erb文件。

但是不同的是如果它无法找到文件,则会在RAILS_ROOT/app/viewsRAILS_ROOT和系统根目录中搜索能访问的文件。

因此我们可以读取主机上的敏感目录,如/etc/passwd

尝试在新版本的Ralis上新建一个控制器和视图文件

rails generate controller users dashboard

修改控制器

能正常访问

但是漏洞已经不存在,只能在老版本中操作,实际上漏洞也属于文件包含漏洞

此外当传入的URL包含恶意代码时可以执行想要的命令

<%=%>之间可以写入服务器端代码

URL传入编码的参数

<%= \`ls\` %>

则会执行查看目录下文件,同理最终可以得到shell

posted @ 2021-02-16 22:22  ch0bits  阅读(250)  评论(0编辑  收藏  举报