반응형
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을 입력하면 된다.
실제로 입력해본다.
되넹
반응형