狠狠撸

狠狠撸Share a Scribd company logo
MCC CTF講習会
ー pwn編2 ー
2017/07/10
@TUAT
hama (@hama7230)
??紹介
?hama (@hama7230)
?CTFは趣味
?TokyoWesterns
l pwn担当
?最近、pwnの基礎基本
が分かってきような気
がする程度の実?
1
最初に注意
今?の内容を、許可されていないシ
ステムに対して実?は犯罪です
やるならCTFでやりましょう
2
今?と来週の内容
?先週の内容
1. 簡単なCTFの説明
2. 簡単なpwnの説明
3. pwnのやり?
4. 軽く実践
?今?の予定
1. 簡単なテクニックの紹介
2. とにかく実践
3
初?者向けテクニック集
?pwnはある領域をoverwriteすることに
よって制御を奪うジャンル
l 例外はあります(Ex. Race Condition)
?では、どこを書き換えると制御を奪える
のか?
l 今?はよくあるテクニック、攻め筋を紹介
4
eip(rip)を奪う?法
?eip(rip)は実?している命令のアドレス
を指すレジスタ
l このレジスタを任意に制御したい
l あるところを書き換えると制御を奪える
5
Return Address Overwrite
?return address overwrite
l スタックにあるリターンアドレスを書き換える
l 関数の終わりに制御を奪える
l 任意の箇所に制御を移せるのでシェルコードへ
ジャンプ
l ret2plt, ret2libcなどのROPに繋がって?く
?StackでのBuffer OverFlowがある場合狙
える
?canaryがある場合は注意
l canaryのleakが必要
6
GOT Overwrite
?解決したライブラリ関数のアドレスを保
持しておくのがGlobal Offset Table
?GOTを書き換えておくと、その関数が呼
ばれたときに制御を奪える
?ユーザの??をそのまま渡すatoi(),
strlen()などをsystem()に書き換えるパ
ターンはよく使う
7
.fini_array Overwrite
?main関数が終了した後に呼ぶ処理のア
ドレスは、.fini_arrayに格納する
?ここを書き換えてくと、main関数終了
後に制御を奪える
8
.fini_array Overwrite
?スクショだと、.fini_arrayは0x8049ec0
?writableなので書き込み可能
9
_IO_jump_t Overwrite
?stdinやstdoutの実体はFILE構造体
?FILE構造体は関数テーブルのポインタ
を持っている
?関数テーブルのポインタを書き換えるか、
stdin/stdout/stderrの指す先を書き換
えて偽造すれば制御を奪える
10

More Related Content

MCC CTF講習会 pwn編2