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 |