GOTをほげほげする NX+ASLR+PIE+SSP(ProPolice) の突破デモ


これの続きです。さて、

  • NXあり (exec-shield)
  • ASLRあり (exec-shield-randomize)
  • SSPあり
  • PIEあり
  • RELROなし
  • FORTIFY_SOURCEなし

という条件で、

  1. format string bug を利用して、PIEなバイナリが貼り付けられたアドレスを知り
  2. format string bug を利用して、<__stack_check_fail@plt>が参照しているGOTを塗りつぶしてSSPを無効にして
  3. stack based buffer overflow で return into libc して*1、shellをexecする

というのをやってみます。CTスキャンして(1.)、麻酔して(2.)、手術(3.)みたいな感じです。ほとんど檻脱出系のイリュージョンかなんかに近いですな...。


(あとで書く。もしうまくいかなければ没 :-)

対策


最近のFedoraのように、デフォルトで gcc -D_FORTIFY_SOURCE=2 を指定し、かつ(できるだけ) ld -z relro を指定するようにすれば、「このケースでは」かつ「私の知る限りでは」大丈夫そうです。


とりあえず、「NXだけで大丈夫」とか「NXとSSPで完璧さ!」とかいう風潮はどうかなー、ということで。ひとつ。

*1:return into __dl_runtime_resolve のほうが格好いいんですが、面倒なのでパス