2017-10-26 30 views
0

私はトピック:buffe roverflow attackを使ってシステムセキュリティプロジェクトを進めています。 私はプログラムを持っており、私はroot権限を得るべきソースコードを持っています。 私は初めに、ランダムカナリアによって引き起こされている問題は、乱数ジェネレータを初期化するプログラムをotの:バッファオーバーフロー攻撃で、ランダムなカナリアンを再生できますか?

srand(time(NULL)^(getpid() << 16)); 

後でカナリアには

canary = rand(); 

で私の質問を設定します:ですカナリアを再生することは可能ですか?私は塩を再生成したいと思います(time(NULL)は1970年からの秒数を返し、pidはプログラムの開始時に一定です)、次にrand()を呼び出してカナリアを取得します。 私はスクリプト言語に精通していないし、Linuxの経験が豊富ではないので、決してうまくいかないソリューションで時間を無駄にしないことを願っています。 ありがとうございます! :)

答えて

0

はい、可能です。あなたが知る必要があるのは、プログラムの開始時刻とプロセスIDだけです。この情報はコマンドラインからps -eo pid,cmd,lstart | grep «program-name»と入力して取得できます。たとえば、あなたがtestと呼ばれているに興味を持っているプログラムを考える:

$ ps -eo pid,cmd,lstart | grep test 
    26798 ./test      Thu Oct 26 22:03:52 2017 

出力行の先頭の数は、プロセスIDであり、このプロセスが開始された時刻は、の末尾にありますライン。これをUnixのタイムスタンプに簡単に変換できます:

$ date --date='Thu Oct 26 22:03:52 2017' '+%s' 
1509055432 

前回私がチェックしたとき、PHPはまだ同じ乱数ジェネレータを使用していました。だから、カナリアを計算するためにPHPを使用することができます。

$ php -r 'srand(1509055432^(26798 << 16)); echo rand()."\n";' 
1670313680 

(あなたがPHPを持っていない場合、あなたは簡単にあなたのためにこの計算を行うために、独自のCアプリケーションをロールバックできます。)

をそれは非常にする必要があります推測が困難な値を生成したい場合は、srand(time(NULL))はまったく役に立たないことが明らかです。より良いアプローチは、代わりに\dev\urandomからバイトを取得することです。

+0

phpとcは同じrand-generatorを使用していますか?私自身の書かれたCアプリケーションで試してみると動作しますが、PHPではそれはありません。 – C4ptainC4mp

+0

'rand()'の実装はプラットフォームに依存しているようです。 Debianでは、私はCとPHPで同じ結果を得ています。 OS Xでは、Cプログラムは別の結果をもたらします。ターゲットアプリケーションと同じライブラリを使用してプログラムをコンパイルしていれば、大丈夫です。 –