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
