ブログ未満のなにか

ブログなのか誰にも分からない

CTFでのLinuxのユーザランド以外の問題についてまとめる

はじめに

これはCTF Advent Calendar 2019の1日目です。執筆時点でまだまだたくさん空きがあるので、埋めていきましょう。 adventar.org

CTFで出題されたユーザランドでの簡単な問題を除く少し特殊な問題についてまとめる。 とりあえず、まとめられるだけまとめて後からこの系統の問題はどうすればいいか足掛かりになりそうな情報やリンクを自分のためにまとめた。

時間が全然足りないので、とりあえず2019年に出題されたものを中心にまとめた。時間ができれば追記する予定である。

インデックス

Linux Kernel

1118daysober from Insomni'hack teaser 2019

CVE-2015-8966。armのlinux kernelにおいて、あるシステムコールの処理の最中にfsをkernel dsに変更するが、元のユーザのものに戻さずに終了するバグが存在した。これを利用すると、ユーザランドからカーネルランドに対して任意の読み書きが可能になる。

p4fmt from CONFidence CTF 2019 Teaser

独自フォーマットの実行バイナリを実行するカーネルモジュール

Hfsipc from Midnight Sun CTF 2019 Quals

ノート管理するカーネルモジュール。作成時にoff-by-oneのオーバーフローがあるので、それを利用して、解法済みのチャンクに存在するリンクを破壊し、AAW/AARを作る。

hack_me from * CTF 2019

ノート管理系のカーネルモジュール。読み書き時にオフセットとサイズを指定するが、そのチェックが甘く、想定される領域外も読み書き可能。

Brainfuck64 from Security Fest 2019

kpets from Facebook CTF 2019

Fast&Furious, Fast&Furious2 from 0CTF/TCTF 2019 Finals

KrazyNote from Balsn CTF 2019

PoE II - Cord from HITCON CTF 2019 Quals

PoE III - TPU from HITCON CTF 2019 Quals

oob-v8 from * CTF 2019

speedrun-012 from DEF CON CTF Qualifier 2019

JSエンジンであるduktapeにバグを仕込まれている。

Exploit 400 ChakraCore from Trend Micro CTF 2019 - Raimund Genes Cup - Online Qualifier

Appetizer from Real World CTF 2019 Quals

ChakraCore

accessible from Real World CTF 2019 Quals

v8

Interpreter

Rust Jail from SpamAndFlags Teaser 2019

Rustのコードをビルドして実行してくれる。unsafeが使用できない。flagファイルの中身を読めれば勝ちで、マクロの include_str! を使う。

plang from 0CTF/TCTF 2019 Quals

JSに似た独自言語のインタプリタ。配列の添字のチェックが甘く、負数を入れるとout-of-boundsが発生する

Gomium Browser from Google CTF 2019 Finals

Golangで書かれたソースコードをビルドして実行してくれる。fmtしかimportできない制限下で電卓を起動する問題。Golangには、sliceなどにlockがなくdata raceを起こせるので、それを用いてメモリ破壊を起こし任意コード実行に持ち込む。

MAL from SECCON 2019 Online CTF

Rustの実行系の内部で使われるallocate/deallocateが独自に書き直されている。制限がかかった状況で、こちらのRustのコードをビルドして実行してくれるので、メモリ破壊を起こして任意コード実行に持ち込む。 lockがないので、適当に2つのスレッドでmallocをさせると、両方のスレッドで同じ領域を取ることができた。