본문 바로가기

WARGAME/FTZ [system]

ftz level 11 [level11]

 

 

 

 

 

 

이번에도 힌트는 소스! 딱봐도 strcpy 를 써서 오버플로우 취약점을 이용해서 쉘을 따내는 문제 같다.

 

 

 

 

 

 

 

한번 ls로 attack 실행파일을 확인하고 실행시켜보자.

세그먼테이션 폴트.. 

 

 

 

 

 

 

 

 

 

 

/tmp 로 이동해 힌트의 소스를 긁어 attack.c 를 만들고 컴파일하여 디버깅 해보자.

 

 

 

 

 

 

 

컴파일까지 해서 gdb 로 확인해보면,

 

스택의 형태가 아마

0x080483c7 <main+51>: lea         eax, [ebp-264] 에서 264 바이트를 할당해주고 있는 것을 볼 수있고, 

str 은 256 바이트이기 때문에 둘의 차이인 8바이트가 더미의 크기가 될 것이다.

 

 

혹은 

 

0x08048397 <main+3> : sub        esp, 0x108 과 (264)

0x080483a7 <main+19>: sub        esp, 0x8 을 보고 (8)

즉, 총 272 바이트 만큼 스택을 할당해주었고 str [256] + 더미 [?] + SFP[4] + RET[4] =272  를 가지고 더미가 8바이트라고 알아낼 수도 있다.

 

 

 

 

                                              low

str [256]
dummy [8]
SFP [4] 
RET [4]

                                              high

 

 

스택으로 그려보면 이런 형태가 될 것이다.

 

 

 

 

암튼 우리는 str에  nop과 쉘코드를 입력해두고, str 의 시작 주소를 알아내어 RET 자리에 str 의 주소가 들어가게하면 쉘을 딸 수 있다.

 

 

 

 

 

 

 

 

그러나 str 의 주소는 계속 변경된다.

 

**Address Space Layout Randomization. (ASLR) 

 : 메모리상의 공격을 어렵게 하기 위해 스택이나 힙, 라이브러리 등의 주소를 랜덤으로 프로세스 주소 공간에 배치함으로써

   실행할 때 마다 데이터의 주소가 바뀌게 하는 기법

 

 

 

 

 

따라서 우회를 위해 RTL 사용 할 것이다.

 

** Return To Library (RTL)

 : 스택에 실행 권한을 없애 스택에 쉘 코드를 올리는 것을 막는 오버플로우 대응책을 우회할 수 있는 기법

 : 프로세스의 ret 주소를 다른 함수의 주소로 변조시켜 해당 함수로 jmp하여 해당 함수 실행 

 

 

 

 

 

 

 

 

 

 

환경 변수는 고정된 주소 값을 갖게 되기 때문에 가장 먼저해야할 일은 환경 변수에 쉘코드 담기가 될 것이다.

 

 

 

이렇게 환경 변수에 nop 을 넉넉히 넣고 익스 코드를 담아주고, (뒤에 짤림)

 

 

 

 

 

 

환경 변수 주소를 출력해주는 소스도 짜자.

형태는 인자로 환경 변수 명을 입력하면 해당 환경 변수의 주소를 출력해주도록!

 

이런 식으로 말이다.

 

 

 

 

 

 

컴파일 한 후 실행시켜 보자.

익스 코드 (쉘코드) 가 저장된 환경 변수의 주소를 알아내었으니

이제 attack 을 실행시키는데 인자로 nop*268 을 입력하고 끝에 이 주소를 리틀엔디언 방식으로 입력하자.

 

 

 

 

 

 

 

 

 

level12 password "it is like this" 획득.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'WARGAME > FTZ [system]' 카테고리의 다른 글

ftz level 13 [level13]  (0) 2020.04.30
ftz level 12 [level12]  (0) 2020.04.30
ftz level 10 [level10]  (0) 2020.04.30
ftz level 9 [level9]  (0) 2020.04.30
ftz level 8 [level8]  (0) 2020.04.30