首页 > 代码库 > 漏洞挖掘 堆栈的溢出实践

漏洞挖掘 堆栈的溢出实践

#include <stdio.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];    while(1)    {        printf("please input password:     ");        scanf("%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");            break;        }    }    getchar(); }

在xDbg中 加载后 在strcpy(buffer,password);这句后加断点 查看ESP中的内存

技术分享

发现字符串最后一个反斜杠0刚好淹没在返回值上 所以输入8个ascll字符会返回验证成功

 

技术分享

 

 

 

原理图

技术分享

 

漏洞挖掘 堆栈的溢出实践