3

私の友達はCSの1年生の先生です。バッファオーバーフローの悪用を示したいと思います。しかし、最新のディストリビューションは単純なバッファオーバーフローから保護されています。

HOME=`perl -e "print 'A'x269"`  one_widely_used_utility_is_here --help

debianで(それを非難する)

Caught signal 11,

現代の商用redhat

*** buffer overflow detected ***: /usr/bin/one_widely_used_utility_is_here terminated
======= Backtrace: =========
/lib/libc.so.6(__chk_fail+0x41)[0xc321c1]
/lib/libc.so.6(__strcpy_chk+0x43)[0xc315e3]
/usr/bin/one_widely_used_utility_is_here[0x805xxxc]
/usr/bin/one_widely_used_utility_is_here[0x804xxxc]
/lib/libc.so.6(__libc_start_main+0xdc)[0xb61e9c]
/usr/bin/one_widely_used_utility_is_here[0x804xxx1]
======= Memory map: ========
00336000-00341000 r-xp 00000000 08:02
2751047    /lib/libgcc_s-4.1.2-20080825.so.1
00341000-00342000 rwxp 0000a000 08:02
2751047    /lib/libgcc_s-4.1.2-20080825.so.1
008f3000-008f4000 r-xp 008f3000 00:00 0          [vdso]

同じ検出器は、インターネットからのより合成的な例では失敗します。

最新の非GPLディストリビューションでバッファオーバーフローをどのように実証できますか(クラスにはDebianはありません)

どうしたらいいの

  • スタック内のカナリアワードチェックを無効にしますか?
  • strcpy / strcatのバリアントのチェックを無効にしますか?
  • 作業バッファオーバーランを使用した例(プレーンC)を記述しますか?
4

3 に答える 3

4

glibcからの文字列関数のチェックを無効にするには、悪用可能な例を変更する必要があります。strcpyからのバリアントをチェックして、およびその他の関数へのすべての呼び出しを変更します。

strcpy(dst, src);

(strcpy)(dst, src);

これにより、マクロのチェックが魔法のように無効になります。

gcc保護をオフにするには、オプションを使用します

-fno-stack-protector
-fnomudflap
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0

非常勤スタックをオフにするには、

execstack -s ./programme 

またはgcc-linkerオプションとして

-Wl,-z execstack  
于 2010-04-15T21:50:05.553 に答える
2

私のセキュリティとプライバシーのクラスでは、カナリアを持たない古いバージョンのGCCでコンパイルされた脆弱なプログラムを備えた仮想マシンを使用していました。また、新しいバージョンのGCCを使用し、コマンドラインスイッチを使用して、スタックスマッシング検出などのセキュリティ機能を無効にすることもできます。

いずれにせよ、最新のLinuxディストリビューションを使用している場合は、プログラムを再コンパイルする必要があります。

于 2010-04-15T21:33:09.710 に答える
0
#include <stdio.h>

int main()
{ int x = 0; char buffer[8]; strcpy(buffer, "test hello world;-)"); return 0; }

strcpy()の後、xにこの文字列からいくつかのASCIIがありますが、この文字列が長すぎる場合、ESPアドレスを上書きし、プログラムが失敗してこれから保護できず、より良いイラストバッファオーバーランが発生します。xを宣言する前に、大きなバッファを宣言する必要があります。 espアドレスからオーバーフローを保護します。(変数がスタックアレンジのメモリで宣言しているため、xの前)。

編集:StackOverflowロゴからそれを説明することができます!!

于 2010-04-15T21:38:29.923 に答える