zoukankan      html  css  js  c++  java
  • pwnable.kr第六题:random

    0x000打开环境
    查看源码

    #include 
    
    int main(){
        unsigned int random;
        random = rand();    // random value!
    
        unsigned int key=0;
        scanf("%d", &key);
    
        if( (key ^ random) == 0xdeadbeef ){
            printf("Good!
    ");
            system("/bin/cat flag");
            return 0;
        }
    
        printf("Wrong, maybe you should try 2^32 cases.
    ");
        return 0;
    }

    从源码中可以看出,没有加随机种子,那么rand产生的就是伪随机数,每次运行出来的随机数都是一样的,随机种子初始化诸如“srand( (unsigned)time( NULL ) )”,则每次产生的随机数都是不同的。

    0x001 漏洞利用

    我们就可以找出该随机数的值,再和0xdeadbeef异或,就可以得到我们该输入的值,因为异或是可逆的,知道任意两个值都可以异或出第三个值。
    用gdb调试下,先打印出main函数

     不难看出,rbp-8是我们输入的值,rbp-4是random产生的值,则在*0x40062f设置断点。

     查看rbp-4地址的值即为random数据。

    再将该值和0xdeadbeef相与,结果即为我们要输入的数据。

     

  • 相关阅读:
    Win7下用IIS发布网站
    进程的端口被占用的解决方案
    JS event loop
    慕课网
    angular js
    PowerDesign生成数据库
    CodeSmith 代码生成器
    微信小程序开发学习资料
    SSO 单点登录
    面试
  • 原文地址:https://www.cnblogs.com/DennyT/p/11622768.html
Copyright © 2011-2022 走看看