gpt4 book ai didi

c - 缓冲区溢出利用更改函数调用

转载 作者:太空宇宙 更新时间:2023-11-04 02:39:11 24 4
gpt4 key购买 nike

我正在尝试执行缓冲区溢出以将调用从函数 A 更改为函数 B。这可行吗?我知道在我控制返回指针之前我必须弄清楚我必须输入多少字节,并弄清楚函数 B 的地址。是否可以更改它以便在“x==10”之后我们注入(inject)函数 B 的地址而不是函数 A?编辑:有没有可能调用fillbuff之后,不是返回main,而是发送给函数B?任何提示表示赞赏。

int fillBuff(int x){
char buff[15];
puts("Enter your name");
gets(buff);
return(x + 5);
}

void functionA(){
puts("I dont want to be here");
exit(0);
}
void functionB(){
printf("I made it!");
exit(0);
}


int main(){
int x;
x = fillbuff(5);
if (x == 10){
functionA();
}
}

最佳答案

这是一篇介绍如何操作的文章:http://insecure.org/stf/smashstack.html .

像这样编译您的程序:gcc -g -c program.c(使用 -g)并运行 gdb ./a.out。之后,运行命令 disas main。您应该看到代码的反汇编以及它在您的内存中的组织方式。您可以将 main 函数替换为任何其他函数并查看其代码。有关反汇编的更多信息,请参阅:https://sourceware.org/gdb/onlinedocs/gdb/Machine-Code.html

enter image description here

运行GDB,在我的电脑上反汇编函数,functionA()的地址是0x400679functionB的地址()40068a。如果你看到main函数的反汇编代码,有一个地址0x400679的调用,你想把它改成40068a。基本上,您必须在函数 fillBuff 中溢出缓冲区,并且在到达指针的空间后,您必须填充地址。这篇文章展示了如何做到这一点。

关于c - 缓冲区溢出利用更改函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33818079/

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