【Writeup】Pwnable.kr 0x06 random

0x06 random

题目描述:

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

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;
}

分析代码,本题主要是输入一个key,然后这个key与random随机数异或后的结果等于0xdeadbeef,那么就可以得到flag了。
观察代码,发现这里的random随机数是用rand()函数产生的一个伪随机数,每次运行程序的时候产生的随机数都是相同的,所以在/tmp目录下创建一个ran.c求出那个随机数就好了。代码如下:

#include<stdio.h>
#include<stdlib.h>

void main(){
    unsigned int random, result;
    random = rand();
    result = 0xdeadbeef ^ random;
    printf("%x", result);
}

利用这段代码得到了需要的key=0xb526fb88
这里有一个坑的地方就是一定要把这个书写成十进制的数字,即3039230856。
运行./random 把3039230856输入即可得到flag


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容