Write up (Wargame)/Pwnable

[pwnable.kr] random 풀이

그믐​ 2023. 9. 12. 00:57
반응형

analysis


 

amd 64바이너리고,

RELRO, canary, PIE가 없다.

 

#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;
}

신기하게도 stdlib를 선언하지 않고 rand 함수를 사용한다. 뭐 gcc가 알아서 넣어줬겠지..?

 

rand 함수에서 seed를 정하지 않았다. 같은 프로그램을 실행시키면 계속 같은 값이 나올 거라 예상된다.

디버거로 확인해본다.

 

 

0x6b8b4567이 rand값이고

이 값과 xor해서 0xdeadbeef가 나와야하므로 필요한 값은 0x6b8b4567 ^ 0xdeadbeef이다.

 

rand에서 시드를 지정하지 않았으므로 다시 실행해도 rand 값이 같을 것이다.

 

solution


 

 

이렇게 계산해서 3039230856을 입력하면 된다. 

실제로 입력해본다.

 

되넹

 

반응형