zoukankan      html  css  js  c++  java
  • 漏洞挖掘 利用漏洞控制程序执行流程

    #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!
    
    ");
    
        }
    
        else
    
        {
    
            printf("Congratulation! You have passed the verification!
    ");
    
        }
    
        fclose(fp);
    
        getchar();
    
    }

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

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

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

    用16进制编辑器  

    爱程序 不爱bug 爱生活 不爱黑眼圈 我和你们一样 我和你们不一样 我不是凡客 我要做geek
  • 相关阅读:
    Shader Forge学习
    Unity 编辑器扩展
    DoTween
    游戏AI之群组行为
    Unity与服务区交互数据
    NGUI制作流光效果
    NGUI组件整理总结
    Resharp使用简记
    C#使用LitJson对Json数据解析
    BehaviorDesigner学习
  • 原文地址:https://www.cnblogs.com/yifi/p/6275088.html
Copyright © 2011-2022 走看看