3

Smashing the Stack for Fun and Profit ( http://insecure.org/stf/smashstack.html ) を読み、さらに詳しく調べたいと思います。次に、このコードを見つけました: https://github.com/yangsu/Stack-Smashing

ここに記載されている原則を非常に明確に理解しており、手順を綿密に実行しましたが、エラーが発生しました。2つの端末を開きました。

最初のターミナル: (他のターミナルで「cat」行を入力すると、「Segmentation fault」行が表示されます)

$ sudo sysctl -w kernel.randomize_va_space=0
$ gcc -z execstack -fno-stack-protector webserver.c -o server
$ ./server 5000
Segmentation fault.  Shutting down peacefully, then rebooting.
$

第二ターミナルでは、

$ g++ generate.cpp -o generate
$ ./generate
$ cat data.dat | nc 127.0.0.1 5000
$ 

エラーの原因は、「cat」行のフォーマットまたはパラメーターの誤りでしたか? それとも他の原因?

また、関数sigsegvに書かれているように、サーバーは 2 秒後に再起動する必要があります。しかし、ここでの私の処刑ではそうではありませんでした。どうしてこれなの?

どうもありがとうございました!

4

1 に答える 1

2

スタックを粉砕することを学ぶことは、細部に注意を払うことから始まります。
エクスプロイトの成功と単純なプロセスのクラッシュは、ほぼ同じです。細かい違いを見つけて、エクスプロイトを変更する必要があります。

クラッシュしたプログラムをデバッグすることから始めます。
なぜそれは正確にクラッシュしたのですか?スタックのどこに何が書かれていますか?
リターン アドレスが変更されたためにクラッシュしたのでしょうか (この場合は途中まで来ています)、それとも他の理由でしょうか?

これらの質問に答えることができなければ、うまくいったとしても何も学べません。

于 2012-05-28T14:12:06.253 に答える