GOTをほげほげする NX+ASLR+PIE+SSP(ProPolice) の突破デモ
これの続きです。さて、
- NXあり (exec-shield)
- ASLRあり (exec-shield-randomize)
- SSPあり
- PIEあり
- RELROなし
- FORTIFY_SOURCEなし
という条件で、
- format string bug を利用して、PIEなバイナリが貼り付けられたアドレスを知り
- format string bug を利用して、<__stack_check_fail@plt>が参照しているGOTを塗りつぶしてSSPを無効にして
- 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 のほうが格好いいんですが、面倒なのでパス