<< 27/52 >>
First Last

反撃手法 - SSP

canary を推測されたら終わり
狙ったメモリを出力しちゃうようなバグがあるとやばい

一番ひどい(便利な)情報源が glibc の中に

  extern char **__libc_argv;
  void __fortify_fail (msg)
       const char *msg;
  {
    /* The loop is added only to keep gcc happy.  */
    while (1)
      __libc_message (2, "*** %s ***: %s terminated\n",
                      msg, __libc_argv[0] ?: "<unknown>");

__libc_argv は stack を指してるので stack overflow してる時は
書き換えられる場合があり、 __libc_argv[0] に canary のアドレスを指定してやれば

 *** stack smashing detected ***: <canaryの値> terminated

などと大変攻撃側に親切な死に方をしてくれる
まぁその後即死するからこれだけなら問題無いとも言えるけど
connection ごとに fork とかしてるプログラムだと
同じ canary を使いまわしてる…はず(たぶん)