User

About This Section

本セクションでは、userlandの基礎的な技術について触れていきます。

主に以下のことを扱います:

  • stackの構造やx64のCalling Convention等の基礎知識
  • userlandにおける典型的な脆弱性とそのexploit手法
  • GDBおよびその拡張の基本的な使い方とデバッグ手法

扱うテーマ自体はuserlandに固有なものもありますが、 そこで扱う知識や技術・デバッグ手法等についてはkernel exploitに共通することが多いです。 Kernel Exploitの前段階として実際に手を動かしながら進めてください。

各章は、実際の問題(Challenge/Exercise)とそこで用いる知識・技術の解説から構成されています。 Challengeは実際にリモートサーバ(sc.skb.pw)上で動いており、Flagが奪取できれば正解です。 自身の現在持っている技術・スキルに合わせて進めてください。

Userland Exploit

本セクションでの基本的な目的は、ユーザシェルを奪取することとします。

そのための準備として、メモリREADやメモリWRITEプリミティブを取得することが中視点的な目標になります。

  • WRITEプリミティブ: コントロールフローを奪取するためには、なんらかの値を書き換える必要があります。
  • READプリミティブ: ASLR等のそのときどきの環境の不安定さを吸収するために何らかの値をリークする必要がある場合がほとんどです。

本セクションで提示される問題には、(問題なので)脆弱性が含まれています。 脆弱性の種類によって最初に出来ることが異なります。 exploitにおいては、最初の脆弱性からできるプリミティブを広げていき、 最終的に任意のアドレスに任意の値を書き込める(AAW)ようにするのが大体の目的になります。


FSB

Format String Bugを用いた攻撃とスタックのお話

ROP

Return Oriented ProgrammingとBuffer Overflowとlibc

heap: tcache

Heapの基礎とtcache poisoning

FSOP

FSOPと関数ポインタの書き換え

Last modified November 15, 2023: add warning about challenge server (55ad5da)