美文网首页
pwnable.kr [Toddler's Bottle

pwnable.kr [Toddler's Bottle

作者: Umiade | 来源:发表于2017-06-14 23:01 被阅读34次

    Daddy, teach me how to use random value in programming!

    ssh random@pwnable.kr -p2222 (pw:guest)

    c语言中取随机数函数rand()为伪随机,需要依赖srand()提供的随机数种子seed。如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。没有置随机数种子直接调用rand(),得到的结果也是一样。
    题目源码如下:

    /* ssh random@pwnable.kr -p2222 (pw:guest) */
    #include <stdio.h>
    
    int main(){
        unsigned int random;
        random = rand();    // random value!
    
        unsigned int key=0;
        scanf("%d", &key);
    
        if( (key ^ random) == 0xdeadbeef ){
            printf("Good!\n");
            system("/bin/cat flag");
            return 0;
        }
    
        printf("Wrong, maybe you should try 2^32 cases.\n");
        return 0;
    }
    
    

    使用gdb调试查看random的值,或者本体直接跑rand()得到固定的一个random的值。(这里需要严格在Linux中取指,不同的操作系统会影响这个定值的结果。)
    笔者在这里使用本地调试取这个random的值:(这里注意数据定义为unsigned int 或long,因为结果3039230856>2^31,超出了int的上限)

    #include <stdio.h>
    
    int main()
    {
        unsigned int random;
        random = rand();
        unsigned int temp = 0xdeadbeef ^ random;
        printf("%u\n", random);
        printf("%u\n", temp);
        return 0;
    }
    

    结果如下:

    ./random
    1804289383
    3039230856
    
    

    正确输入后即可得到flag。

    相关文章

      网友评论

          本文标题:pwnable.kr [Toddler's Bottle

          本文链接:https://www.haomeiwen.com/subject/rroeqxtx.html