您的位置:首页 > 其它

漏洞挖掘 利用漏洞控制程序执行流程

2017-01-11 20:33 429 查看
#include <stdio.h>

#include <windows.h>

#define PASSWORD "1234567"

int verify_password(char *password)

{

int authenticated;

char buffer[8];

authenticated = strcmp(password,PASSWORD);

strcpy(buffer,password);  //溢出就在这里

return authenticated;

}

void main()

{

int valid_flag =0;

char password[1024];

FILE *fp;

if (!(fp=fopen("password.txt","rw+")))

{

exit(0);

}

fscanf(fp,"%s",password);

valid_flag = verify_password(password);

if (valid_flag !=0)

{

printf("incorrect password!\n\n");

}

else

{

printf("Congratulation! You have passed the verification!\n");

}

fclose(fp);

getchar();

}


利用XDbg 当密码验证函数返回  此时的堆栈时



71717171 为qqqq 即PassWord.txt中的内容 现在只需要构建数据 将0029FA8C 出的地址淹没成我们需要跳转的地址即可

查看0029FA8C 所包含的地址 0040158A 可以得知这是调用完密码验证函数后 main函数下一步要执行的 将此处替换为验证成功即可



用16进制编辑器  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: