Pwn
別名: Pwnable, Binary Exploitation
脆弱性のあるプログラムが動いているサーバーに対して攻撃を行い、任意コード実行などでフラグを奪取するジャンル
例えばRTAで見る「無の取得を使って任意コード実行をする」もPwnの一例である
Pwnの用語で表現すると、「Use After Freeを利用して関数ポインタを上書きし、事前に用意したShellcodeに飛ばして任意コードを実行する」になる
【翻訳記事】時のオカリナにおける任意コード実行について https://cma2819.hateblo.jp/entry/2019/12/04/003438
https://www.youtube.com/watch?v=XQFH3aKPY4g
バイナリの知識が必要
バイナリがどうやって動いているか
C言語のバイナリとして出題されることが多い
ソースコードが提供されない場合は、バイナリをReversingすることも必要
現実ではOSやブラウザ、サーバーや仮想マシンへの攻撃など広範囲にPwnの技術が適用できる
攻撃領域
User-land pwn
よく出題されるのはこれ
kernel exploit
browser exploit
sandbox escape
防御機構
ASLR
Canary
RELRO
PIE
NX Bit (DEP)
攻撃手法
Buffer Over Flow
Use After Free
Format String Bug
Out of bounds
Heap Exploit
テクニック
Return-Organized Programming
ret2shellcode
ret2libc
ret2vuln
ret2csu
ret2dlresolve
GOT Overwrite
.fini_array Overwrite
link_map
One gadget
hook
Heap系
Unlink attack
tcache poisoning
large bin attack
House of XXX系
ツール
pwntools https://github.com/Gallopsled/pwntools
Pwnのexploitを書く時に便利なライブラリ
簡単に通信処理をしたり、payloadを記述できたりする
Pwntoolsの機能と使い方まとめ https://qiita.com/8ayac/items/12a3523394080e56ad5a
gdb拡張
gdbを強力にする拡張機能
色々試して肌に合うのを見つけましょう
gdb-peda https://github.com/longld/peda
pwngdb https://github.com/scwuaptx/Pwngdb
pwndbg https://github.com/pwndbg/pwndbg
gef https://github.com/hugsy/gef
bataさんの改造gef https://github.com/bata24/gef
one_gadget
TODO
checksec
TODO
ROPgadget / rp++
TODO
libc database https://github.com/niklasb/libc-database
各バージョンのlibcをダウンロードできるツール
libcに対応したldもダウンロードできる
アドレスからバージョンを特定できたりもする
Web版 https://libc.blukat.me/
patchelf https://github.com/NixOS/patchelf
バイナリの依存を変更するツール
バイナリを配布されたlibcとldで動かしたいときに便利
資料
Pawnyable https://pawnyable.cafe/
ptr-yudaiさんが書いている中〜上級者がpwn(Binary Exploitation)を勉強するための資料
まだ工事中で、2022/9/24の時点ではKernel Exploitの資料がある
Kernel Exploitで使える構造体集 https://ptr-yudai.hatenablog.com/entry/2020/03/16/165628
ptr-yudaiさんの記事
C++のpwn/revで使うSTLコンテナの構造とバグパターン一覧 https://ptr-yudai.hatenablog.com/entry/2021/11/30/235732
ptr-yudaiさんの記事
how2heap https://github.com/shellphish/how2heap
Heap Exploitのまとめ
バージョンごとに使える攻撃が整理されていてありがたい
ここにないテクニックもある
Overview of GLIBC heap exploitation techniques https://0x434b.dev/overview-of-glibc-heap-exploitation-techniques/
Heap Exploitの解説記事
elixir.bootlin.com https://elixir.bootlin.com/glibc/latest/source
Linux Kernelやglibcなどのソースコードを閲覧・検索できるサイト
Heap exploitやKernel exploitのときに便利
X86 Opcode and Instruction Reference http://ref.x86asm.net/coder64.html
x86、x86_64のOpcode一覧
制限されたshellcodeを書くときに便利かもしれない
ももいろテクノロジー https://inaz2.hatenablog.com/
inaz2さんが公開しているブログ
少し古いが、丁寧 + 圧倒的情報量
"Pwn"とは?
Pwnは元々ネトゲスラングで、ownの誤字からきている
読み方はぽーん、ぽうん、ぴゅーん、ぱわん、███など諸説ある(各々好きに読んでます)