【W(wǎng)riteup】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隨機(jī)數(shù)異或后的結(jié)果等于0xdeadbeef,那么就可以得到flag了。
觀察代碼,發(fā)現(xiàn)這里的random隨機(jī)數(shù)是用rand()函數(shù)產(chǎn)生的一個偽隨機(jī)數(shù),每次運(yùn)行程序的時候產(chǎn)生的隨機(jī)數(shù)都是相同的,所以在/tmp目錄下創(chuàng)建一個ran.c求出那個隨機(jī)數(shù)就好了。代碼如下:

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

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

利用這段代碼得到了需要的key=0xb526fb88
這里有一個坑的地方就是一定要把這個書寫成十進(jìn)制的數(shù)字,即3039230856。
運(yùn)行./random 把3039230856輸入即可得到flag


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容