#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 함수에 시드 값이 없으므로 random 함수의 결과값이 랜덤이 아닐 것임을 추측할 수 있다. random 함수의 결과값은 gdb로 확인하면 0x6b8b4567이다. 따라서 양쪽에 random 값을 xor을 해주면 아래와 같은 식이 성립한다.
(key ^ 0x6b8b4567) = 0xdeadbeef => key = 0xdeadbeef ^ 0x6b8b4567 = B526FB88 = 3039230856
'시스템 해킹 > pwnable.kr' 카테고리의 다른 글
[Pwnable.kr] shellshock (0) | 2021.07.27 |
---|---|
[Pwnable.kr] input (0) | 2021.07.27 |
[Pwnable.kr] passcode (0) | 2021.07.27 |
[Pwnable.kr] cmd1 (0) | 2021.04.21 |
[Pwnable.kr] mistake (0) | 2021.04.21 |
댓글