我的 friend 是一年级 CS 学生的老师。我们想向他们展示缓冲区溢出的利用。但是现代发行版可以防止简单的缓冲区溢出:

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

在 debian 上(归咎于它)
Caught signal 11,

在现代商业红帽上
*** 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 语言)?
  • 最佳答案

    要禁用 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
    

    关于c - 学生缓冲区溢出图示(linux,C),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2649089/

    10-12 07:27