-
[L.O.B] Level 17 - zombie_assassinWargame/L.O.B 2022. 11. 10. 04:22반응형
Level 17 - zombie_assassin을 풀어보자.
소스 코드를 보면 다음 Level은 succubus고, calling functions continuously라는 힌트가 있다.
우선 함수들이 선언되어 있는데, 이름이 도, 개, 걸, 윷, 모인 것 같다.
main 함수에는 라이브러리 금지, 주소 체크, 스택 초기화의 조건이 있다.


<zombie_assassin 소스 코드의 내용> 그런데, 이 Level은 쉽게 해결할 수가 있다.
함수의 에필로그 과정을 이용하여 힌트처럼 함수가 연속적으로 실행이 되도록 하면 된다.
(각 함수의 RET에 다음 함수의 주소를 넣어 함수의 에필로그 과정에 의해 다음 함수가 실행되도록 한다.)
각 함수의 check 값과 if 문을 보면 도, 개, 걸, 윷, 모의 순서로 함수를 불러오면 된다.
우선 각 함수의 주소를 알아보도록 하자.
복사한 succubus 파일을 gdb를 이용해 break와 run 후 print로 각 함수의 주소를 알아낼 수 있다.

<각 함수의 주소> 다음으로 알아낸 주소를 이용해 페이로드를 어떻게 작성할 지를 생각해보자.
페이로드는 NOP*44 + &DO + &GYE + &GUL + &YUT + &MO + NOP*4 + &/bin/sh + "/bin/sh"일 것이다.
페이로드를 저렇게 작성하는 이유는 우선, 각 함수를 연속적으로 실행한다.
다음으로 MO 함수의 system 함수로 /bin/sh를 실행시키기 위해 그 인자를 넣어줄 것이다.
앞에서도 설명했듯 함수의 인자는 그 함수의 주소 + 8 부분에 들어간다.
따라서 NOP를 4 바이트 넣어주고, 문자열 "/bin/sh"를 따로 맨 뒤에 넣고, 이것의 주소를 알아내 넣어주면 된다.
필요한 정보는 문자열 "/bin/sh"의 주소이므로 그것을 알아보도록 하자.
main 함수의 strcpy 함수가 끝난 후인 <main+170>에 break를 걸고 파이썬 명령을 넣고 실행한다.
앞에서 작성할 페이로드를 설명했으니, 그에 맞는 길이대로 적어 주고 마지막에 "/bin/sh"를 넣어준다.
그렇게 알아낸 문자열 "/bin/sh"의 주소는 0xbffffa98이다.

<문자열 "/bin/sh"의 주소> 알아낸 정보를 바탕으로 페이로드를 작성해 프로그램을 실행해보자.
프로그램이 정상적으로 작동이 되지 않는다.
이유를 알아보기 위해 core 파일을 생성하도록 하자.
생성된 core 파일을 분석하여 다시 문자열 "/bin/sh"의 주소를 알아내니 0xbffffab8이다.

<core 파일 분석> 다시 알아낸 주소를 이용해 페이로드를 작성하여 프로그램을 실행하니 succubus의 권한으로 쉘이 실행된다.
my-pass를 입력하니 비밀번호가 나타났다.

<나타난 비밀번호> 반응형'Wargame > L.O.B' 카테고리의 다른 글
[L.O.B] Level 19 - nightmare (0) 2022.11.11 [L.O.B] Level 18 - succubus (0) 2022.11.10 [L.O.B] Level 16 - assassin (0) 2022.11.06 [L.O.B] Level 15 - giant (0) 2022.11.06 [L.O.B] Level 14 - bugbear (0) 2022.11.05