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
  • 相关阅读:
    连续子数组的最大和
    最小的K个数
    数组中出现次数超过一半的数字
    字符串的排列
    二叉搜索树与双向链表
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    Xcode5下去除Icon高光
    Unity3D-基本导航(NavMesh)功能实现
  • 原文地址:https://www.cnblogs.com/yifi/p/6275088.html
Copyright © 2011-2022 走看看