FTZ level16 Write-Up

2019. 7. 24. 01:22
728x90
728x90
728x90

FTZ level16 풀어보자.

 

[사진 1]

hint를 보면 main 함수는 buf 변수에 fgets 함수로 입력을 받고 printit 함수를 호출하고 종료된다.

정의된 shell 함수를 보면 level18 계정의 권한을 획득하고 쉘을 실행시키는데, printit 함수를 호출하는 공간의 주소를 shell 함수의 주소로 변조하면 될 것 같다.

 

 

[사진 2]

먼저 attackme 파일을 /home/level15/tmp/ 디렉터리에 복사한다.

그리고 gdb를 통해 main 함수의 어셈블리어 코드를 보면 ebp-0x10 주소에 0x08048500 값을 넣고 있다. 이 값은 아래 그림에서 확인해보면 printit 함수의 주소이다. 그리고 fgets 함수를 호출하기 전에 ebp-0x38 주소의 값을 eax 레지스터에 저장하고 있다.

즉, 이 곳이 buf 변수의 시작점이다.

 

 

[사진 3]

위와 같이 앞서 확인했던 printit 함수의 주소를 볼 수 있다. 그리고 shell 함수의 주소도 확인 할 수 있다.

 

 

[사진 4]

스택은 위와 같이 형성될 것이다. buf 변수부터 &printit 함수 주소 직전까지의 크기는 40bytes이다.

 

 

[사진 5]

따라서 임의의 값 "\x90"을 40개 넣어주고 앞서 확인했던 shell 함수의 주소를 입력하면 위와 같이 level17 계정의 쉘이 떨어진다. 그리고 my-pass 명령어로 level17 계정의 password를 확인할 수 있다.

728x90
728x90

'Wargame > FTZ' 카테고리의 다른 글

FTZ level18 Write-Up  (0) 2019.07.24
FTZ level17 Write-Up  (0) 2019.07.24
FTZ level15 Write-Up  (0) 2019.07.24
FTZ level14 Write-Up  (0) 2019.07.24
FTZ level13 Write-Up  (0) 2019.07.24

+ Recent posts