티스토리 뷰




[pwnable.kr] Toddler's Bottle - random (1 pt) write-up




폰케알 random 문제입니다.


서버에 접속 해보겠습니다.



ls명령으로 확인 해보니, flag파일, 실행파일, 코드가 있습니다.


코드를 보겠습니다.




코드는 단순합니다.

random변수는 rand함수로 부터 난수를 받아오고, key값은 입력을 받습니다.

그러고 난 후, key와 random을 xor연산을 합니다.


xor연산 후 0xdeadbeef와 같으면 플래그를 띄어줍니다.


코드에는 srand함수가 없습니다.

그래서, 프로그램을 실행할 때 마다 random변수의 값은 일정합니다.


그렇다면, gdb를 이용해 브레이크포인트를 걸어놓고 random변수의 값을 찾으면 되겠네요.



main+56에서 rbp-0x8과 rbp-0x4 를 xor연산을 수행합니다.


main+33을 보면 rbp-0x8부터 key값이 저장됩니다.


따라서, rbp-0x4가 random의 값이 들어있겠네요.


브레이크포인트를 main+33에 지정하겠습니다.



그런다음 r을 이용해서 프로그램을 실행하고, rbp-0x4의 값을 보겠습니다.



random 값은 0x6b8b4567입니다.


0x6b8b4567 ^ 0xdeadbeef 한 값이 key값이 되야겠네요.



프로그램을 실행시키고, 3039230856을 입력해보겠습니다.



플래그가 나옵니다.

Comments