min-camlのプログラムからシェルが取れるか?

問題文

副作用も、libcもいなくなったとき残るのは、型安全で純粋な素晴らしい世界のはずだった......

nc external.pwn.ctf-day3.tsg.ne.jp 31000

接続すると、min-camlのプログラムをサーバーに提出でき、サーバーはmin-camlコンパイラコンパイルして実行をしてくれます。シェルを取れるようなプログラムを提出してフラグを得てください。ただし、min-camlコンパイラには問題を成立させるための以下に示すパッチが入っています。

パッチの概要

  • glibcを呼び出すような関数をlibmincaml.Sから削除
  • stub.cをglibcを用いないように書き換え
  • Arrayの代入構文を削除

!!追記!!

やや僕の想定したものとは異なる方法で解けることが分かり、せっかくなのでさらにパッチを入れる自己満足をしました。具体的にはArrayのGetの構文も消しました。

nc external.pwn.ctf-day3.tsg.ne.jp 32000

コンテストサイト

駒場祭のときのシステムを借りました(くっきー さん、さとすさん、ありがとうございます)

https://ctf-day3.tsg.ne.jp/

問題関連ファイル

上のコンテストサイトからもダウンロードできますが、以下に添付します

https://gist.github.com/moratorium08/cb5a3de6d8249c512fb26b433955d3fc

補足

この投稿は、ISer Advent Calendar 2018 の2日目として書かれました。 昨日の記事はjoeさんのPolicy Based Data Structures でした。

理学部情報学科では、世に言う「CPU実験」で、独自アーキに対してプログラムをコンパイルするために、コンパイラを作るのですが、このときベースとなるのが、住井英二郎先生が作った min-caml であり、このコンパイラの詳細について(無駄に?)詳しくなります。まぁもっともフルスクラッチしたり、LLVMしたりしている人がいるわけですが。

実験をやっているうちに、いくつかpwnとして問題にできそうな話を考えたんですが、ところでmin-camlというマイナーなものを使って問題を出しても基本需要が無いということで、理学部情報学科のアドベントカレンダーで供養しました。

アドベントカレンダーが埋まっていなければ、23日くらいにwriteupを書く記事を出します。

暇があったらぜひ解いてみてください(フラグが取れたら、上のコンテストサイトにぜひ投稿してください)