「Exploiting Ruby deserialization using a documented gadget chain」が解けなかったので

Portswigger社のWebSecurityAcademyのInsecure deserializationの問題。

問題としては、以下の通りで。

 

「This lab uses a serialization-based session mechanism and the Ruby on Rails framework. There are documented exploits that enable remote code execution via a gadget chain in this framework.

To solve the lab, find a documented exploit and adapt it to create a malicious serialized object containing a remote code execution payload. Then, pass this object into the website to delete the morale.txt file from Carlos's home directory.

You can log in to your own account using the following credentials: wiener:peter」

 

機会翻訳すると、、

 

「このラボでは、シリアル化ベースのセッションメカニズムとRuby on Rails フレームワークを使用します。このフレームワークでは、ガジェット チェーンを介してリモート コード実行を可能にするエクスプロイトが文書化されています。

ラボを解決するには、文書化されたエクスプロイトを見つけて、それを応用して、リモートコード実行ペイロードを含む悪意のあるシリアル化されたオブジェクトを作成します。次に、このオブジェクトを Web サイトに渡して、Carlos のホーム ディレクトリから morale.txt のファイルを削除します。

次の認証情報を使用して自分のアカウントにログインできます: wiener:peter」

 

ということで、まずはLabへアクセスし。

 

 

いつもの様にwiener:peter のクレデンシャルでログインを。

burpsuiteでログイン後のリクエストを確認すると、Cookieにsessionの値があり。

 

これをDecoderに送ると、、、

 

シリアル化されているRubyのオブジェクトがあって

↓のサイトから、ペイロードを作成するためのスクリプトをコピーしてコンパイラーへ。

 

https://devcraft.io/2021/01/07/universal-deserialisation-gadget-for-ruby-2-x-3-x.html

 

↓このスクリプトをコピーし。

 

ここからがAcademyのSolution通りやっても解けないポイントで。
Community Solutionsではコンパイラーに以下のサイトを使っていて。

 

https://www.onlinegdb.com/online_ruby_compiler

 

ただ、上記でなんどやってもBase64ペイロードが作成されず。
どうにもならないので、Portswiggerへ問い合わせたら以下のサイトを紹介され。

 

https://onecompiler.com/ruby

 

どうやらRubyのバージョンの関係でうまくペイロードが生成されなかったよう。
後者のRubyのバージョンは、最新の2.3.1 のようで。
(実際のところ、2023年8月現在での最新版はもっと進んでて)

 

onecompilerでコンパイルするにあたり以下のように変更し。

id → rm /home/carlos/morale.txt

最後の2行を、「puts Base64.encode64(payload)」に書き換え

 

Runを押すと、

Base64エンコードされたペイロードができ。

これをコピーして、さらにURLエンコードを。

 

 

先ほどのRepeater中のsessionの値をURLエンコードしたものに置き換える。

 

 

すると、、

 

 

でけた。

 

ほなほな。