Securing Keys

[Linux] pwnable.kr passcode 풀이 본문

IT/Linux

[Linux] pwnable.kr passcode 풀이

GRACE_MJ 2022. 4. 3. 02:38

pwnable.kr 다섯번째 단계: passcode 풀이를 시작하겠다.

문제에서 제공한 쉘에 접속해보니 앞선 문제들과 마찬가지로 소스코드와 실행파일 그리고 플래그값이 존재하는 파일이 있었다.

소스코드를 보면, passcode1과 passcode2를 scanf를 통해 입력값으로 받아들이는데, 입력값을 각 변수의 주소값에 저장하고, 이들은 초기화되어 있지 않기 때문에 문제에서 제시한 것과 같이 오류가 날 수 밖에 없다.

welcome() 함수를 확인해보면 기존에 이름을 입력받는 scanf는 -0x70(%ebp)에 입력값을 저장하고 있고,

 

login() 함수를 살펴보면 passcode1을 입력받는 scanf는 -0x10(%ebp)에 입력값을 저장하고 있음을 알 수 있다.

-0x70(%ebp) 에서 -0x10(%ebp)까지는 96byte만큼 차이가 나기 때문에 여기는 A로 채워주면 된다.

하지만 여기서 멈추는 것이 아니라, 그 이후에 수행되는 함수가 fflush이기 때문에 이걸 login 함수 밑에 있는 system 함수의 시작주소로 변경까지 해줘야 우리가 원하는 플래그를 확인할 수 있을 것이다.

fflush의 0x8048430을 확인해보니 0x804a004로 jump 시키는 것을 확인할 수 있었다. 따라서 여기에 system 함수의 시작주소를 넣어주도록 하겠다. 앞서 login 함수에서 봤다시피 system의 시작주소는 0x80485e3이다.

0x80485e3은 정수로 134514147이므로

위와 같이 passcode를 실행해주면 플래그값을 얻을 수 있다.

'IT > Linux' 카테고리의 다른 글

[Linux] pwnable.kr random 풀이  (0) 2022.04.03
[Linux] pwnable.kr flag 풀이  (0) 2022.04.03
[Linux] pwnable.kr bof 풀이  (0) 2022.04.03
[Linux] pwnable.kr collision 풀이  (0) 2022.04.02
[Linux] pwnable.kr fd 풀이  (0) 2022.04.02
Comments