Ruby On Ralis遠程代碼執行研究(CVE-2016-0752)

環境搭建參考:https://www.b1uew01f.net/learnnotes/tips/281.htmlhtml

環境

1.什麼是Ruby?

Ruby 是一種開源的面向對象程序設計的服務器端腳本語言,上世紀90年代由一位日本人設計。web

2.搭建

環境久遠,如今Ruby的更新使得一些內容不支持,搭建成功的環境也可能沒法復現漏洞shell

提示:不知道Ruby on Ralis環境運行方式的話,就沒法從根本解析漏洞,所以環境仍是須要搭建的ruby

上面文章也有些微小的錯誤,且文章久遠環境版本會出錯,我搭建的步驟以下:bash

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環境app

rvm install 2.4.2

或是自動安裝curl

apt install ruby-full

設置默認版本編碼

rvm 2.4.2 --default

安裝bundlerurl

  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