问题标签 [fortify-source]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
9365 浏览

ld - 我可以欺骗 libc (GLIBC_2.13) 加载它没有的符号(来自 GLIBC_2.15)吗?

在我尝试让“Steam for Linux”在 Debian 上运行时,我遇到了一个问题。libcef(Chromium Embedded Framework)可以很好地使用GLIBC_2.13(Debian 测试中的 eglibc 可以提供),但需要一个讨厌的额外功能GLIBC_2.15(eglibc 无法提供):

我的攻击计划是LD_PRELOAD创建一个仅提供这些功能的 shim 库。这似乎不起作用。我真的很想避免安装GLIBC_2.17(因为它在 Debian 实验中;即使 Debian sid 仍然有GLIBC_2.13)。


这是我尝试过的。

fdelt_chk.c基本上是从 GNU C 库中偷来的:

我的Versions脚本如下所示:

然后我按如下方式构建库:

但是,如果我然后运行 ​​Steam(首先使用一堆额外的东西让它工作),加载器仍然拒绝找到符号:

.so但是,我刚刚构建的版本也提供了版本符号:

在这一点上,我不知道我能做些什么来欺骗加载程序(谁?)选择我的符号。我是否朝着正确的方向前进?

0 投票
1 回答
4636 浏览

c - 缓冲区溢出 - 普通用户中的 SegFaults

下面是我的代码,包括易受攻击的程序(stack.c)和我的漏洞利用程序(exploit.c)。此代码适用于教授发送给 Windows 用户的预打包 Ubuntu 9(我有一个朋友在他的计算机上对其进行了测试),但是在我在 iMac 上运行的 Ubuntu 12 上,当我尝试执行此操作时会出现段错误在普通用户中。

这是堆栈:

并利用:

为了在 Ubuntu 12 中编译这些,我使用了:

同样,它适用于 root 用户,而不是普通用户; 例子

无论如何,这是在午夜到期的,我在这个限制下一瘸一拐地完成了剩下的任务,但如果有人有建议,我宁愿正确地完成它。我想在认输之前先请专家。我正在寻找为什么此代码无法在普通用户中运行(因为它应该在旧版本的 ubuntu 上运行)但在 root 用户中运行。我还需要更改什么才能在普通用户中进行这项工作。

0 投票
2 回答
15914 浏览

c - 缓冲区溢出漏洞实验室问题

我有一个实验室任务,我被困住了。基本上,我必须利用缓冲区溢出来生成具有 root 权限的 shell。我必须使用 2 个单独的 .c 文件。这是第一个:stack.c

这是第二个:exploit.c

我只能修改第二个。以下是我所做的更改:

然后我从命令行执行以下

然而,虽然它确实会生成一个包含实际数据和外壳的“坏文件”,但该外壳仅具有基本用户权限。之前,我确实在 root 中执行了以下操作:

实验室说我需要在 root 中执行以下操作:

但是,如果我这样做,那么当我执行“堆栈”时,我会收到“非法指令”错误。有人可以帮我解决这个问题吗?

0 投票
7 回答
49348 浏览

c - 缓冲区溢出在 gdb 中有效,但不是没有它

我在 CentOS 6.4 32 位上并试图在程序中导致缓冲区溢出。在 GDB 中它可以工作。这是输出:

但是,当我单独运行程序堆栈时,它会出现段错误。为什么会这样?

0 投票
1 回答
436 浏览

perl - Perl 脚本遇到随机 __fortify_fail 错误,但继续运行而没有任何错误。我应该担心吗?

我目前正在 Amazon EC2 服务器上运行一个非常密集的 Perl 脚本。脚本应该需要几周时间才能完成。

该脚本从大量文件中读取信息,处理并将我需要的信息输出到文本文件中,并在终端上打印一点状态信息。它似乎运行良好,输出似乎是正确的。然而,在每个文本文件的处理接近尾声时,由于某种莫名其妙的原因,该脚本正在将一堵文本墙转储到终端上:

终端输出

文本似乎是内存地址,但我不知道为什么会发生这种情况。我应该担心吗?任何帮助深表感谢!


编辑:STDERR 和 STDOUT 被打印到文本文件中。我更仔细地梳理了输出,似乎缺少一些信息。我在脚本中添加了 close(STDERR) 和 close(STDOUT),以查看是否存在某种打印错误。该脚本现在打印以下错误*** buffer overflow detected ***: Perl terminated

新的终端输出

0 投票
4 回答
14828 浏览

c - GCC如何检测堆栈缓冲区溢出

由于 gcc 中有一个选项-fstack-protector-strong可以检测堆栈粉碎。但是,它不能总是检测堆栈缓冲区溢出。对于第一个函数 func,当我输入多 10 个字符的字符串时,程序并不总是崩溃。我的问题是哪里有检测堆栈缓冲区溢出的方法。

0 投票
2 回答
21923 浏览

c - 使用 fgets 导致缓冲区溢出

我正在试验缓冲区溢出,并尝试用 fgets 的某个输入覆盖堆栈的返回地址

这是代码:

在正常执行时,程序只会返回您的输入。我希望它在不修改代码的情况下输出 foo() 。

我的想法是buf通过输入 20'A'秒来溢出缓冲区。这有效并导致分段错误。我的下一个想法是找出其中的地址foo()并将其\x4006cd附加到 20 'A's。

据我了解,这应该覆盖堆栈的返回地址并使其跳转到foo. 但这只会导致段错误。

我究竟做错了什么?

更新:汇编程序转储主要

酒吧:

0 投票
1 回答
283 浏览

c - 无法写入堆栈(堆栈溢出)

我正在试验一些安全性的东西,特别是试图理解一个 ret2ret 漏洞。我正在试验的代码:

在我的测试期间,ASLR、N^X 和堆栈金丝雀已关闭。我用 gcc 将它编译成 32 位。我不知道为什么,但我无法得到通常的“0x41414141 in ?? ()”,说我已经覆盖了 $eip。所以我决定用 gdb 调试,并在函数“cop”的 ret 上放一个断点,奇怪的是,即使在写了 300 多个“A”之后,堆栈也是这样的:

与缓冲区对应的 64 个字符在这里,但其余的没有写入.. 我不知道为什么?是因为某种更新吗?

编辑:buff[64] 的 GDB 日志

编辑 2:buff[20] 的 GDB 日志

0 投票
1 回答
2177 浏览

c - How to turn off FORTIFY_SOURCE patch using format string bug

This question is relative to : A Eulogy for Format Strings from phrack (http://www.phrack.org/issues.html?issue=67&id=9)

I don't understand in their article how providing a fmt string like %1$*269168516$ it can toggle off _IO_FLAGS2_FORTIFY bit in the stdout FILE structure ?

Is it because when we overflow the integer offset, args_type[offset] can point anywhere in memory, and specifically on stdout->_flags2 to set it to 0 ?

If so, how can we know that we managed to toggle it off ? because when I try with this code I can't get a segfault like specified in the article. (compiling option: gcc -m32 -z execstack -fno-stack-protector -ggdb -O2 -D_FORTIFY_SOURCE=2 -o prog test.c)

0 投票
2 回答
2775 浏览

c - Android 4.4,未定义对 __printf_chk 的引用

我正在将一些库从 Android 4.3 移动到 Android 4.4

以前在 Android 4.3 中编译的项目现在在使用 Android 4.4 源编译时会出现以下错误

/home/vishallocal/TI/android/kitkat/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/sysroot/usr/include/bits/stdio2.h:105:错误:未定义引用'__printf_chk' /home/vishallocal/TI/android/kitkat/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/sysroot/usr/include/bits/stdio2.h:105:错误:未定义对“__printf_chk”/home/vishallocal/TI/android/kitkat/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/sysroot/usr/include/bits/stdio2.h:105 的引用: 错误:未定义对“__printf_chk”/home/vishallocal/TI/android/kitkat/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6/sysroot/usr/include/bits/stdio2 的引用。 h:105:错误:未定义对“__printf_chk”的引用 collect2:错误:ld 返回 1 退出状态

有关解决此问题的任何指示?