power-girl0-0

[pwnable] random 풀이 본문

War game/pwnable.kr

[pwnable] random 풀이

power-girl0-0 2022. 2. 13. 02:19
728x90

 

안녕하세용(. ❛ ᴗ ❛.)

 


1. 문제

바이너리 파일과 c코드가 주어진다.

아래는 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;
}

 

2. 풀이

문제 코드를 확인해보면, 랜덤함수인 rand( )를 사용하는데 난수값을 설정하지 않았다.

이는 프로그램이 실행될 때마다 랜덤값이 같다는 것을 예측할 수 있다.

(이해가 되지 않는다면, rand함수에 대해 공부하고 오는 것을 추천한다. )

 

따라서, 프로그램이 실행되었을 때의 랜덤값을 알아내면 된다.

필자는 gdb를 통해서, 랜덤값을 확인하였다.

랜덤값을 구했으니, key값을 구해보자!

문제 코드 10줄을 보면, key와 랜덤값을 xor해서 0xdeadbeef 값이 나오면 flag를 얻을 수 있다.

 

즉, 반대로 랜덤값과 0xdeadbeef값을 xor하면 key값을 구할 수 있다는 의미이다.

랜덤값 1804289383를 hex값으로 바꾼 뒤, 0xdeadbeef와 xor연산을 하면, 아래와 같이 결과값을 구할 수 있다.

이제 나온 값을 10진수로 바꿔, 바이너리에 입력하면 flag획득이 가능하다.

 

3. flag 획득

 


 

안녕히 계십쇼  (~ ̄▽ ̄)~

728x90

'War game > pwnable.kr' 카테고리의 다른 글

[pwnable] cmd1 풀이  (0) 2022.02.20
[pwnable] mistake 풀이  (0) 2022.02.16
[pwnable] flag 풀이  (0) 2022.02.12
[pwnable] collision 풀이  (0) 2022.02.09
[pwnable] input 풀이  (0) 2022.02.07
Comments