CTF における Format String Attack (pwntools を用いた攻撃)

Format String Attack (書式文字列攻撃) について CTF で出題されたとき用の覚え書き

そもそも Format String 脆弱性とは

input = $INPUT
printf(input) # input に %p などが含まれるとフォーマット指定子として認識されてしまう
        

よく使われるフォーマット指定子

pwntools を用いた書き換え用ペイロードの作成

fmtstr_payload($OFFSET, {$TARGET_ADDRESS: $VALUE}, numbwritten=0, write_size="byte")
        

Format String Attack を用いた攻撃のシナリオ例

スタックのリーク

メモリ上の文字列の読み込み

GOT Overwrite

elf = ELF($FILE)
got_address = elf.got[$NAME]
        

注意事項 (ミスの事例)

context.binary = $FILE_NAME