gpt4 book ai didi

buffer-overflow - 缓冲区溢出地址中的 NULL 字符

转载 作者:行者123 更新时间:2023-12-04 06:17:12 24 4
gpt4 key购买 nike

我正在尝试重现缓冲区溢出。我试图传入的地址中有两个空的十六进制字符(即 0x00547e00)。后面还有 4 个字节(即 0x11111111 和 0x22222222)。如果我使用 gdb 传递这些,它会在写入我想要的内存时跳过空字符(即 1111547e 22221111 2222####)。是否有我可以传入的不是空字符但不影响我的地址的字符?

我想到的一个解决方案是找到一些已经清零的内存,让第一个地址指向它,然后用垃圾覆盖,直到到达那个清零的内存,在那里我覆盖它。但是,这仅在我有 2 个字节的内存时才有效,并且我正在尝试传递 6 个字节。

最佳答案

如果你想避免 shellcode 中的零,几乎每个 shellcode 编写教程都涵盖了一些方法来做到这一点。

现在覆盖地址的最后部分将是棘手的,这取决于使用哪种缓冲区溢出。

memcpy 基于一个,\0 字符没问题,但是(并且您的问题足够模糊,我必须写这个)您很可能无法使用键盘/在命令行上将这些输入到标准输入中,因此您需要从其他来源输入数据,例如管道:./buffercrash < exploit.txt strcpy ,你不能有\0 字符,除了最后一个,因为它也会终止目标字符串,这意味着你可以完美地将最高有效字节设置为\0。现在你的问题仍然是最不重要的字节:如果它是一个堆栈地址,你可能会幸运地添加一些额外的环境变量,这样你的目标地址就会相应地改变。如果它只是shellcode的地址,您可以在地址中添加+1并在您的shell代码前面插入另一个填充字符。

所以这一切都取决于上下文和你想要做什么,但是一旦你有一个缓冲区溢出漏洞,\0 可能会停止直接的方法,但是如果有一些创造力,很可能甚至可以实现一些东西没有\0 字符。

关于buffer-overflow - 缓冲区溢出地址中的 NULL 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7080760/

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