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/views
,RAILS_ROOT
和系统根目录中搜索能访问的文件。
因此我们可以读取主机上的敏感目录,如/etc/passwd
尝试在新版本的Ralis上新建一个控制器和视图文件
rails generate controller users dashboard
修改控制器
能正常访问
但是漏洞已经不存在,只能在老版本中操作,实际上漏洞也属于文件包含漏洞
此外当传入的URL包含恶意代码时可以执行想要的命令
<%=%>之间可以写入服务器端代码
URL传入编码的参数
<%= \`ls\` %>
则会执行查看目录下文件,同理最终可以得到shell