我目前正在为 CTF 比赛练习,练习挑战之一是缓冲区溢出漏洞利用。在这次挑战之前,我对这些漏洞利用一无所知,但我一直在阅读它们并试图了解基础知识。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void win(void)
{
system("cat flag.txt");
return;
}
int main(int argc, char *argv[])
{
printf("Give me some data: \n");
fflush(stdout);
char buffer[32];
gets(buffer);
printf("You entered %s\n", buffer);
fflush(stdout);
return 0;
}
所以到目前为止我所知道的是我需要重定向到该win()函数并且有一个 32 个字符的缓冲区。我把程序分解成汇编,发现win()函数的地址是0x080484fd. 之后,我连接到程序的服务器并输入 32 个字符和函数的地址。程序只返回我的输入,并没有重定向到win()函数。我做了更多阅读并尝试使用以下命令从另一个 shell 执行此操作:
sudo python -c 'print "a"*32 + "\x08\x04\x84\xfd"' >& /dev/pts/2
可悲的是,这并没有让我进入这个win()功能。我究竟做错了什么?我已经完全阻塞了,不知道还能尝试什么。任何建议和帮助将不胜感激。





