FTZ level13 Write-Up

2019. 7. 24. 00:06
728x90
728x90
728x90

FTZ level13 풀어보자.

 

[사진 1]

hint를 보면 bof 문제인 것을 알 수 있다. level12와 다른 점은 변수 i를 0x1234567로 초기화하고 함수를 종료하기 전에 i의 값이 변조되었는지 검사한다. 변수 i의 값이 변조되었다면 프로그램을 종료시킨다.

 

 

[사진 2]

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

그리고 gdb를 통해 attakme 파일을 실행시키면 ebp 레지스터의 값이 바뀌는 것을 알 수 있다.

따라서 환경변수를 사용하여 shellcode를 스택에 저장하고 ret를 shellcode의 주소로 변조하자.

 

 

[사진 3]

main 함수의 어셈블리어 코드를 보면 ebp-0xc 주소에 0x1234567을 저장하는 것으로 보아 이 곳이 변수 i의 공간임을 알 수 있다. 그리고 strcpy 함수를 호출하기 전에 ebp-0x418 주소를 eax 레지스터에 저장한다.

즉, ebp-0x418 이 곳이 buf 변수의 시작점이다.

 

 

[사진 4]

따라서 스택은 위와 같이 형성될 것이다. buf 변수부터 ebp까지의 크기는 1,052bytes이다.

 

 

[사진 5]

위와 같이 gdb를 통해 임의의 값 "\x90"을 1,052개 넣어주면 ebp까지 "\x90" 값으로 변조된 것을 확인할 수 있다.

그리고 프로그램을 쭉 실행시키면 "Warnning: Buffer Overflow !!!" 문자열이 출력되고 종료된다.

이러한 것을 스택가드라고 하는데, 버퍼 오버플로우 공격을 막기 위해 미리 설정해둔 값이 변조되면 프로그램을 종료하는 것이다. 여기서 미리 설정된 값은 변수 i의 값인 0x1234567이므로 입력 값을 조금 수정해보자.

 

 

[사진 6]

위와 같이 변수 i 직전까지 임의의 값 "\x90"을 1,036개 넣어주고 변수 i의 값으로 0x1234567을 넣어준다. 그리고 임의의 값 "\x90"을 12개 넣어주면 ebp까지 "\x90" 값으로 변조된 것을 확인할 수 있다.

즉, shellcode의 주소를 뒤에 입력해주면 ret는 변조되고 shellcode가 실행될 것이다.

 

 

[사진 7]

먼저 환경변수로 shellcode를 입력하자. 사용한 shellcode는 다음과 같다.

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80

shellcode 앞에 "\x90" nop 6bytes를 입력하였는데, 이 것은 shellcode가 다른 opcode와 섞이지 않도록 분리하기 위함이다. 환경변수로 입력된 shellcode의 주소를 알아내는 방법은 다음 링크를 참고하면 된다.

참고 링크: https://jade9reen.tistory.com/48

 

리눅스 환경에서 환경변수로 저장한 shellcode 주소 알아내기

bof 문제를 풀다보면 스택에 ASLR이 걸려있어 스택에 shellcode를 입력할 경우 shellcode의 주소를 정확히 알아내기 매우 어렵다. 이럴 때 환경변수에 shellcode를 저장해두고 getenv 함수로 shellcode의 주소를..

jade9reen.tistory.com

 

 

[사진 8]

그리고 위와 같이 임의의 값 "\x90"을 1,036개, 스택가드의 역할을 하는 변수 i의 값으로 0x1234567, 임의의 값 "\x90"을 12개, shellcode의 주소를 입력하면 ret는 변조되어 level14 계정의 권한으로 쉘을 실행할 것이다. 그리고 my-pass 명령어로 level14 계정의 password를 확인할 수 있다.

728x90
728x90

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

FTZ level15 Write-Up  (0) 2019.07.24
FTZ level14 Write-Up  (0) 2019.07.24
FTZ level12 Write-Up  (0) 2019.07.23
FTZ level11 Write-Up  (0) 2019.07.23
FTZ level10 Write-Up  (0) 2019.07.23

+ Recent posts