この記事は、タイトル通りに私が個人的に「よく使うなぁ・他のwriteupでよく見るなぁ」と感じたテクニックの紹介です。heapの挙動について詳細な説明は特にしないです。テクニックが何故通用するのかは各自でソースコード読んで理解してください。glibcのバージョンによっては通用しないものもあるので注意してください。テクニックの名前自体はクソ適当です。前から汎用的に使われているテクニック。fastbinに繋がれたチャンクをmalloc()などで取り出す時に、チェックが甘いことに起因する。bssにあるデータを利用して、その付近のメモリをmalloc()で取得するテクニック。bofなどで、free済みのチャンクのfdを任意に制御できる0x59から0x68までのサイズでmalloc()を呼べるlibcのアドレスが分かっている(これが絶対かは問題による)やり方x64のlinuxでは、libcなどのライブラリが配置されるアドレスは、0x7fXX_XXXXXXXXとなっている。アドレスをズラして見ると、0x7fと見ることができ、fastbinに繋げられるchunkのsizeとしてvalidになる。fastbin関連のチェックをすり抜けられる。__malloc_hookをターゲットとした例を説明する。今回の__malloc_hookが存在するアドレスは、0x7ffff7dd1b10となっている。それよりも前のメモリがどうなっているか調べると、いくつか0x7fXX_XXXXXXXXとなる値が存在する。これを数byteズラして見ると、0x7fをサイズとして利用できる。0x0000000000000000今、0x70のチャンクがfastbinに繋がっている。このチャンクのfdに先ほどのアドレス(0x7ffff7dd1aed)を書き込み、リストに繋げる。malloc()していくと、その領域を取ることができる。sizeが0x70のchunkが1つ存在しfreeされて、fastbinに繋がっている。region概要これも結構前からあるテクニック。attackは、結果として任意の箇所に0x7fXX_XXXXXXXXとなる値を書き込むことができるが、どこに対して書き込むのかという話。stdin/stdoutのバッファのポインタを書き換えて、バッファの範囲を変えると良い。attackができるlibcのアドレスが分かっているやり方よくやる/見るのが、stdinが持つbufのポインタに対して。pwnで出題されるバイナリは、入出力のバッファリングを無効にしているケースが多い。無効といっても、stdin/stdoutが持つメンバである_shortbufをバッファとして使用している。scanf()などが呼ばれると、_shortbufにデータが書き込まれている。attackで上書きして、バッファと見なす範囲を広げて不正に上書きできる状態を作り出すのが、このテクニックの肝である。例を上げて流れを説明する。attackで上書きする。NULL)を実行した後のstdinの状態は以下のようになっている。read/write用のバッファは、stdinの内部に持っている_shortbufを指している。times>}今、0x110byteのサイズを持つチャンクがunsortedbinに繋がっている。attackが発生する。stdinの内部に書き込まれた0x7ffff7dd1b78をバッファの終端として使用するようになるため、大きくlibcの中身に書き込める状態を作れた。unsortedbinが1つ存在している。0x602010stdinの状態を確認すると、_IO_buf_endが書き換わっている。"\200!`",_IO_str_jumpsstdin/stdoutなどにはvtableのポインタがあり、制御を奪取する際の狙い目である。そのためかポインタが正常なものかチェックが入るようになった。回避方法として、_IO_str_jumpsは手軽で汎用性が高い。詳しくは以下のリンク先を参照veritas501.spaceおわりにということで、以上が個人的によく使うテクニックでした。さんの「各種OSのUserlandにおけるPwn入門」です。windowsやlinux以外のosについても紹介されそうなタイトルで、楽しみですね。calendarというのを細々とやっています。そちらも良かったら読んでいってください。calendarは失敗しました。calendarの7日目です。TokyoWesternsで参加した。TokyoWesternsで参加して14161.47ptの8位だった。writeup月別アーカイブはてなブログをはじめよう!hama7230さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。