-
[L.O.B] Level 13 - darkknightWargame/L.O.B 2022. 11. 4. 01:48반응형
Level 13 - darkknight를 풀어보자.
새로운 공격 기법이 나타났다!!
소스 코드를 보면 다음 Level은 bugbear이고, RTL1이라는 힌트가 있다.
제약 조건은 간단하다.
argv[1]의 48번째 값이 \xbf가 아니면 된다.
RTL1이라는 힌트가 있으니, 이것을 이용해 공격을 시도해보자.

<bugbear 소스 코드의 내용> 우선, gdb 분석을 통해 스택에 어떻게 입력이 되는지 확인을 한다.


<bugbear 파일 gdb 분석> RTL은 Return-To-Libc의 약자이다.
이 공격 기법은 앞으로도 중요한 공격 기법이기 때문에 정리를 해보도록 하자.
[RTL 공격]
더보기RTL은 스택에 NX-bit 보안 기법이 적용되어 있을 때 사용하는 공격 기법이다.
NX는 Never eXecute stack을 의미하는 것으로, 스택에서 코드를 실행할 수 없게 하는 방어 기법이다.
그렇기 때문에 이번 문제에서는 스택에서 쉘 코드를 실행시킬 수 없다.
RTL은 공유 라이브러리의 함수 주소를 가져와 RET에 삽입하여 이를 호출하는 공격 기법이다.
공유 라이브러리의 함수 주소는 이미 메모리에 적재되어 있으므로, 공격에 사용이 가능하다.
함수를 호출할 때, 함수의 인자 값과 함수의 호출에 대한 것을 알고 있어야 RTL을 이해할 수 있다.
이 부분은 생략하도록 하자. (기본적인 내용이기도 하고, 얼마든지 찾을 수 있다.)
간략하게 중요한 것만 말하자면 ebp+8 주소에 함수의 인자가 들어간다!! 라고 할 수 있다.
RTL 공격을 하기 위해서 system 함수를 사용하도록 하자.
알아야 할 정보는 system 함수의 주소, 인자로 넣을 /bin/sh의 주소, buffer에서 RET까지의 거리이다.
여기서 buffer에서 RET까지의 거리는 44이다. (dummy가 없음)
다음으로 system 함수의 주소를 알아보자.
main 함수에 break를 걸고, 실행을 시킨 후 p(print) system을 입력한다.
system 함수의 주소는 0x40058ae0으로 나온다.
다음으로 /bin/sh의 주소를 알아야 하는데, find 명령어를 잘못 쓰기는 했지만 이 버전에는 명령어 자체가 없다.
(사용법 : find 시작 주소, 주소 범위, 검색어 -> find 0x40058ae0, +99999999, "/bin/sh")
그렇다면 /bin/sh의 주소는 다른 방법으로 알아보도록 하자.

<system 함수의 주소> system 함수 안에는 execve 함수가 있고, 이것을 이용해 입력한 커맨드를 실행시킬 수 있다.
/bin/sh를 찾기 위해 이 system 함수를 이용해보자.
소스 코드를 생성하는데, 그 내용은 이러하다.
먼저, system 함수의 주소를 변수에 저장한다.
그 주소 값을 memcmp 함수를 이용해 system 함수의 시작 주소부터, /bin/sh를 만나기까지 1씩 늘린다.
그 후 변화된 주소 값을 출력하는 것으로 /bin/sh의 주소를 알 수 있을 것이다.

</bin/sh 주소를 알기 위한 소스 코드> 생성한 소스 코드를 컴파일 하고, 실행시키면 /bin/sh의 주소를 알 수 있다.
/bin/sh의 주소는 0x400fbff9이다.

</bin/sh의 주소> 이제 필요한 정보는 다 알게 되었다.
이것들을 이용해 페이로드를 작성해보자.
페이로드는 먼저 buffer와 SFP의 크기인 44 바이트를 NOP로 채운다.
다음으로 system 함수의 주소를 넣고, 4 바이트의 NOP, /bin/sh의 주소를 넣는다.
이런 페이로드가 나온 이유는 SFP가 끝나는 곳에서 8 바이트만큼 거리에 함수의 인자가 쌓이기 때문이다.
이렇게 페이로드를 작성하고, 프로그램을 실행시키면 bugbear의 권한으로 쉘이 실행된다.
my-pass를 입력하면 비밀번호가 나타난다.

<나타난 비밀번호> 반응형'Wargame > L.O.B' 카테고리의 다른 글
[L.O.B] Level 15 - giant (0) 2022.11.06 [L.O.B] Level 14 - bugbear (0) 2022.11.05 [L.O.B] Level 12 - golem (1) 2022.11.02 [L.O.B] Level 11 - skeleton (2) 2022.11.01 [L.O.B] Level 10 - vampire (0) 2022.10.20