level16

 

 힌트를 확인해보면 shell 함수와 printit 함수가 존재한다. 또한 main 함수 실행 시 printit 함수를 실행하게 되는데, 이를 shell 함수를 실행하도록 변경하면 될 것 같다. 

 

 main 함수를 살펴보면 "0x8048500"을 ebp에 넣었다가, eax에 넣는다. 그리고 그 eax를 실행하게 된다. 

 

 printit 함수와 shell 함수를 살펴보니 주소값을 확인할 수 있었는데, main에서 다루는 값이 printit의 주소값인 것을 확인할 수 있었다. 이를 shell의 주소값으로 변경해보기로 했다. 

 

 esp의 값들을 살펴보면 이전과 동일하게 40 byte의 임의의 값이 존재하고, 그 다음 4 byte에 함수의 주소값이 존재했다. 

 

 gdb에서 40 byte의 임의값과 shell의 주소값을 인자로 넣어 해당 위치가 쉘 함수의 주소값으로 바뀌는 것을 확인했다. 

 

 

 cat으로 프로그램을 잡아두고 my-pass 명령을 실행하니 패스워드가 출력되었다.

 

 

 

king poetic

728x90

'CTF > 시스템' 카테고리의 다른 글

해커스쿨 FTZ level18  (0) 2020.10.29
해커스쿨 FTZ level17  (0) 2020.09.29
해커스쿨 FTZ level15  (0) 2020.09.24
해커스쿨 FTZ level14  (0) 2020.09.22
해커스쿨 FTZ level13  (0) 2020.09.22