level15

 

 힌트를 확인해보면 14번 문제와 비슷하지만, 포인터 변수를 오버플로우 시켜야 한다는 것을 확인할 수 있다. 

 

 gdb로 살펴봐도 역시 동일하게 56 byte를 할당받아 [ebp-16]을 가져오므로 40byte+a로 오버플로우 시킬 수 있다. 이때 주의깊에 볼 것은 cmp 부분이다. [eax]라고 레지스터가 [] 사이에 둘러싸여 있는데 이는 이 주소값에 있는 값을 가져온다는 의미이다. 따라서 "\xdeadbeed"라는 값을 가진 환경변수를 생성하고, 이 환경변수의 주소값을 오버플로 시켜 check에 대입해야 한다. 

 

 환경변수를 만들고 환경변수의 주소값을 프린트하는 프로그램을 생성해 환경변수의 주소값을 확인했다. 

 

 위에서 구한 주소값을 임의의 40 byte 뒤에 붙여주면 check 변수가 오버플로우 되며 환경변수의 값을 가져오게 된다. cat으로 프로그램이 종료되지 않도록 잡아두고 my-pass 명령어를 사용하면 패스워드를 구할 수 있다. 

 

 

 about to cause mass

 

728x90

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

해커스쿨 FTZ level17  (0) 2020.09.29
해커스쿨 FTZ level16  (0) 2020.09.24
해커스쿨 FTZ level14  (0) 2020.09.22
해커스쿨 FTZ level13  (0) 2020.09.22
해커스쿨 FTZ level12  (0) 2020.09.17