-
-
[已解决]
[悬赏]《0day安全 软件漏洞分析技术》2.4.2实验问题
18.00雪花
-
发表于:
2017-12-13 12:11
2833
-
[已解决] [悬赏]《0day安全 软件漏洞分析技术》2.4.2实验问题
18.00雪花
各位好!
很荣幸能在这里向大家提问问题,小弟不才,还请大家多多包涵,多多指教!
本人在2.4.2节这个实验中出现了一个问题,
问:按照书中的操作,buffer[44]数组
应该是(这里我写的是应该)溢出了,但是却无法覆盖EBP和返回地址,于是乎无法实现书中的效果!
分析:倒着来思考的话,如果没覆盖,那就是没溢出喽~ 为什么没溢出呢?我也不知道……
实验环境:
操作系统:windows xp sp2英文版
编译器:Microsoft Visual C++ 6.0英文版
实验源码:
#include <stdio.h>
#include <windows.h>
#define PASSWORD "1234567"
int verify_password(char *password)
{
int authenticated;
char buffer[44];
authenticated = strcmp(password, PASSWORD);
strcpy(buffer, password);
return authenticated;
}
main()
{
int valid_flag = 0;
char password[1024];
FILE * fp;
LoadLibrary("user32.dll");//prepare for messagebox
if(!(fp = fopen("password.txt", "rw+")))
{
exit(0);
}
fscanf(fp, "%s", password);
valid_flag = verify_password(password);
if(valid_flag)
{
printf("incorrect password!\n");
}
else
{
printf("Congratulation! You have passed the verification!\n");
}
fclose(fp);
}
下面是password.txt的内容,画红线部分是没有读进buffer数组里面,不知道为什么……
其中:0012FAF0是buffer数组的首地址 77D8050B是我本地MessageBoxA的函数地址
下面附上我的OllyICE的截图
如果使用11个4321填充buffer[44]是可以覆盖authenticated变量的
调用MessageBoxA不成功,
然后我就试着调用MessageBoxW成功了,原因可能是因为我的英文版的XP Pro Sp2为了支持中文而安装了语言包,导致调用MessageBoxA出了问题
截图:
但是,我卸载了语言包以及除去扩展字符支持,还是一样,无法调用MessageBoxA
然后我就使用了MessageBoxExA 能正常显示
[课程]Android-CTF解题方法汇总!