-
[L.O.B] Level 10 - vampireWargame/L.O.B 2022. 10. 20. 02:08반응형
Level 10 - vampire를 풀어보자.
소스 코드를 보면 다음 Level은 skeleton이고, argv hunter라는 힌트가 있다.
argv hunter라는 힌트는 앞의 Level 8 - orge에서 있었는데, 이번에는 조금 다른 내용이다.
무려 ultra argv hunter! 라고 한다..
그 내용으로는 argv가 몇 개인지 상관없이 모든 argv를 0으로 초기화해버린다.

<skeleton 소스 코드의 내용> 혹시 힌트가 있을까 싶어 gdb를 분석하면서 더 자세히 봤지만 특별한 부분이 없다.
아, <main+3>의 esp에서 48을 뺀 것은 int 형의 saved_argc가 선언되어서 그렇다.(더미 값은 없다.)



<skeleton 파일의 gdb 분석> 방법은 떠오르는 게 없기 때문에 무작정 부딪혀보는 수 밖에 없다.
break를 leave에 걸어 함수가 끝나기 전의 스택 상태를 보도록 하자.

<leave에 break를 걸어 스택 상태 확인> break를 걸기 위해 /tmp 디렉터리에 skeleton 파일을 복사해서 분석을 했는데 신기한 것이 있다.
스택이 거의 끝나는 부분에 해당 파일의 절대 경로가 있다.
앞의 부분들은 모두 초기화가 되어 공백인데, argv[0]의 절대 경로 부분이 초기화가 되어도 남아 있는 모양이다.
이것을 이용해 공격을 시도해보자.

<남아 있는 argv[0]의 절대 경로> 공격 방법은 orge를 풀 때와 비슷하다.
심볼릭 링크로 skeleton 파일과 연결할 새로운 파일을 NOP와 쉘 코드로 이루어진 이름으로 생성한다.
다음으로 Core Dumped 파일을 만들어 argv[0]의 정확한 주소를 알아낸다.
0xbfffff01 부분에 파일의 경로가 있는 것을 확인할 수 있다.
(분석을 위해 x/100s 0xbfffffff-0x100을 사용했는데, 스택의 끝 부분이므로 간단히 보기 위해 저렇게 입력했다.)

<Core Dumped 파일 분석> 홈 디렉터리의 skeleton과 심볼릭 링크를 걸 새로운 파일을 생성한다.
앞 뒤로 NOP를 넣은 이유는 입력한 쉘 코드의 내용이 스택의 범위를 넘어설 수도 있기 때문이다.
(NOP 200개 후 쉘 코드를 입력하니, Segmentation fault가 나타나 방법을 생각했고, 구글링 결과 방법이 맞았다.)
심볼릭 링크로 연결된 파일에 페이로드를 입력하며 실행을 시켜보니, skeleton 권한의 쉘이 실행되었다.
my-pass를 입력하니 비밀번호가 나타났다.

<나타난 비밀번호> 반응형'Wargame > L.O.B' 카테고리의 다른 글
[L.O.B] Level 12 - golem (1) 2022.11.02 [L.O.B] Level 11 - skeleton (2) 2022.11.01 [L.O.B] Level 9 - troll (0) 2022.10.20 [L.O.B] Level 8 - orge (0) 2022.10.20 [L.O.B] Level 7 - darkelf (0) 2022.10.14