문제 주소에 접속하여 문제의 소스코드를 보면 다음과 같다.
rand 함수를 이용해 변수 random에 값을 저장하는데, rand()함수만 사용하면 프로그램이 생성될 때 값이 정해지기 때문에 계속 실행해도 같은 값이 저장되어 있다. key를 입력받아서 key ^ random 값이 0xdeadbeef면 시스템 함수로 flag를 읽을 수 있다. random 값을 알아야 하기 때문에 gdb로 프로그램을 실행시켜 main 함수를 보면 다음과 같다.
rand 함수가 실행되고 난 후(main+18)에 breakpoint를 걸고 실행한 후에 현재 레지스터를 확인해주면 다음과 같다.
산술연산 및 함수 반환값은 rax에 들어가기 때문에 0x6b8b4567이 rand()함수로 반환된 값이다.
0x6b8b4567과 0xdeadbeef를 xor한 값이 passcode에 key로 입력되면 if 조건문을 만족시킬 수 있을 것 같다.
두 값을 xor 연산 후 10진수로 변환하면 3039230856이 나온다. random 을 실행하고 10진수로 변환한 값을 넣으면 플래그를 획득할 수 있다.
'Project H4C Study Group' 카테고리의 다른 글
[Project H4C] C언어 코딩도장(15) (0) | 2021.04.11 |
---|---|
[Project H4C][pwnable.kr] mistake (0) | 2021.04.09 |
[Project H4C][pwnable.kr] passcode (1) | 2021.04.06 |
[Project H4C] 포너블(시스템 해킹) 문제 서버 만들기(xinetd 활용) (0) | 2021.04.06 |
[Project H4C][pwnable.kr] flag (0) | 2021.04.02 |