Pwnable.kr [Toddler's Bottle]의 6번째 문제인 random 입니다.
바로 파일 확인하고 C코드 해석해보겠습니다.
#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;
}
분명 random코드지만 헤더 <stdlib.h>이 포함 되어 있지 않고 seed값도 들어있지 않기 때문에 rand함수에서 나오는 난수는 항상 규칙적일 것입니다.
이제 코드를 요약해보자면 저희가 필요한 값은 입력한 값, rand() 함수를 xor 한 값이 0xdeadbeef여야 한다는것입니다.
리눅스 환경에서 rand 코드를 실행시켜 보면 항상 규치적으로 난수가 나옴을 알 수 있습니다.
rand 함수에서 처음 나온 값인 1804289383 과 0xdeadbeef를 xor 연산해보면 3039230856이라는 값이 나옵니다.
이 값을 ./random 함수를 실행시킨 뒤 입력시켜주면 성공적으로 Flag를 얻을 수 있습니다.
FLAG: Mommy, I thought libc random is unpredictable...
'Hacking > [Toddler's Bottle]' 카테고리의 다른 글
Pwnable.kr leg 풀이, Write Up :: Archan (0) | 2019.08.30 |
---|---|
Pwnable.kr Input 풀이, Write Up :: Archan (0) | 2019.08.29 |
Pwnable.kr PassCode 풀이, Write Up :: Archan (0) | 2019.08.28 |
Pwnable.kr Flag 풀이, Write Up :: Archan (0) | 2019.08.26 |
Pwnable.kr Bof 풀이, Write UP :: Archan (0) | 2019.08.26 |