level13

 

 먼저 힌트를 확인했다. 여태까지 풀었던 버퍼오버플로우 문제들과 비슷했는데, 한 가지 다른 점은 변수 i를 두어서 그 값이 변하면 버퍼오버플로우 경고를 띄우며 프로그램이 종료되도록 설계되었다. 

 

 gdb로 프로그램을 살펴보면 총 418 byte(10진수로 1048)만큼 할당하고 마지막 12 byte는 0x1234567로 채운다. 

 

 프로그램을 먼저 실행해 어느 부분에서 경고가 발생하는지 확인했는데, 1048에서 12를 뺀 1036 byte의 인자를 넣었을 때는 경고가 발생하고 그보다 작은 1035 byte의 인자를 넣었을 때는 경고가 발생하지 않았다. 

 

 다음으로는 gdb에서 1035 byte의 인자를 대입한 후 값이 어떻게 변하는지 확인해보았다. 

 

 41으로 값이 채워지며, 마지막에 i의 값인 0x01234567이 들어있는 것을 확인할 수 있었다. 

 

 그리고 i 값이 변조되는 것을 막기 위해 "0x01234567"을 대입해주었다. 리틀 앤디안 방식으로 정리해서 대입했는데, 67이 원래 자리가 아니라 그 앞에 붙었다. 

 

 "A"를 1035 byte에서 1036 byte로 늘려주니 정상적으로 값이 들어갔다. 

 

 메모리를 확인했으니 쉘을 실행하기 위해 지난 번과 같이 환경변수를 만들고 그 주소를 찾았다.

 

 

해커스쿨 FTZ level11

level11  문제 화면이다. uid를 설정하고 strcpy를 실행한다. strcpy buffer overflow 문제라 구글링하여 방법을 찾아 진행하였다.  gdb로 살펴보면 str의 크기를 확인할 수 있다. sub $0x108, %esp에 해당되..

assb.tistory.com

 

 i의 값이 변조되지 않도록 1056 byte를 채우고 쉘 주소를 붙여주니 쉘이 실행되어 패스워드를 구할 수 있었다. 

 

 what that nigga want?

 

728x90

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

해커스쿨 FTZ level15  (0) 2020.09.24
해커스쿨 FTZ level14  (0) 2020.09.22
해커스쿨 FTZ level12  (0) 2020.09.17
해커스쿨 FTZ level11  (0) 2020.09.17
해커스쿨 FTZ level10  (0) 2020.08.27