gpt4 book ai didi

c - 在 Ubuntu 13.04 中用 C 语言演示缓冲区溢出

转载 作者:太空宇宙 更新时间:2023-11-04 08:46:25 25 4
gpt4 key购买 nike

作为我作业的一部分,我必须在我的 linux 机器上演示 stackoverflow。

我的盒子配置:操作系统:Ubuntu 13.04

海湾合作委员会版本:4.6.3

我尝试使用标志 -fno-stack-protector 编译程序,程序成功执行,但当我触发堆栈溢出时出现段错误。我怎样才能显示实际的 o/p。缓冲区溢出 Pgm:

int main(int argc, char**argv)
{
int authentication=0;
char cUsername[10], cPassword[10];
strcpy(cUsername, argv[1]);
strcpy(cPassword, argv[2]);
if(strcmp(cUsername, "admin") == 0 && strcmp(cPassword, "adminpass") == 0)
{
authentication = 1;}
if(authentication)
{
printf("Access granted");}
else
{
printf("Wrong username and password");
}return 0;}

如果我给一个 IP 像 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA A然后它应该显示 Access granted 但现在它显示 segmentation fault

最佳答案

如果您使用以下参数启动该程序,这就是我的C编译器的情况:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa b>>

int main(int argc, char**argv)
{
int authentication=0;
char cUsername[10], cPassword[10];

strcpy(cUsername, argv[1]);
// now cUsername contains "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
// and authentication contains "0x41414141" because it has been overwritten because of the
// buffer overflow of cUsername

strcpy(cPassword, argv[2]);
//now cPassword contains "B"

if(strcmp(cUsername, "admin") == 0 && strcmp(cPassword, "adminpass") == 0)
{
// strings are different so we don't get here
authentication = 1;
}

if (authentication)
{
// authentication still contains 0x41414141 therefore we get here
printf("Access granted");
}
else
{
printf("Wrong username and password");
}

// here we will get a segmentation fault, because the return adress which is on the
// stack will have been overwritten with 0x41414141 which is most probably an
// invalid address
return 0;
}

顺便说一句,如果你的代码格式正确,它会更容易阅读。

重要

根据您的系统,“Access granted”可能不会被打印出来,因为如果输出被缓冲,输出缓冲区通常会在 从 main 函数返回后清空,并且由于程序段错误以前,输出缓冲区永远不会清空,也永远不会显示消息。尝试在“Access granted\n”字符串的末尾添加一个\n。

关于c - 在 Ubuntu 13.04 中用 C 语言演示缓冲区溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21525626/

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