HOME/Articles/

フォーマット文字列攻撃

Article Outline

フォーマット文字列攻撃

フォーマット文字列攻撃について学習したため、そのまとめここに整理する。

フォーマット文字列攻撃とは

  • printfの引数として与える、フォーマット文字列が外部から指定可能な際に成立する。
    • 入力値をそのまま引数として使用している場合など

主な攻撃内容

  • %xや%pを用いた、メモリ内容の出力
    • printf関数は%xや%pを指定することで、フォーマット文字列が存在するスタックの内容を出力することができる
  • %nを用いた、メモリの書き換え
    • printf関数は%nを指定することで、それまで出力した文字数をメモリに書き込むことができる (フォーマット文字列以降の引数で、書き込むアドレスを指定)
    • %3$nなどのように指定することで、スタックの上から任意の位置を指定して書き込むことも可能
    • %nは4byte単位での書き込みだが、%hn(2byte), %hhn(1byte)も指定可能 (hはharfから?)