gpt4 book ai didi

c - 覆盖局部变量的缓冲区溢出

转载 作者:太空狗 更新时间:2023-10-29 15:40:50 26 4
gpt4 key购买 nike

我正在做一个缓冲区溢出练习,其中给出了源代码。该练习允许您更改输入程序的参数 vector 的数量,以便您可以轻松解决 null 问题。

然而,该练习还提到可以仅使用 1 个参数 vector 来破坏此代码。我很想知道如何做到这一点。任何有关如何处理此问题的想法将不胜感激。

这里的问题是需要覆盖长度,以便发生溢出并破坏返回地址。据我所知,您不能真正在字符串中使用 NULL,因为它们是通过 execve 参数传入的。所以长度最终会变成一个非常大的数字,因为你必须写一些非零数字导致整个堆栈爆炸,这与返回地址的情况相同。我错过了一些明显的东西吗?是否需要利用 strlen。我看到了一些对有符号数的算术溢出的引用,但我不确定转动局部变量是否有任何作用。

代码贴在下面并返回到一个主函数,该函数然后结束程序并在关闭所有堆栈保护的小端系统上运行,因为这是信息安全的介绍性练习:

int TrickyOverflowSeq ( char *in )
{
char to_be_exploited[128];
int c;
int limit;

limit = strlen(in);
if (limit > 144)
limit = 144;

for (c = 0; c <= limit; c++)
to_be_exploited[c] = in[c];

return(0);
}

最佳答案

我不知道 arg 来自哪里,但由于您的缓冲区只有 128 字节,并且您将最大长度限制为 144,在将in复制到to_be_exploited时,只需要传入一个超过128字节的字符串就会导致缓冲区溢出。任何恶意代码都将位于从位置 129144 的输入缓冲区中。

这是否会正确设置返回到不同位置取决于许多因素。

关于c - 覆盖局部变量的缓冲区溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21396095/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com