ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.B] Level 15 - giant
    Wargame/L.O.B 2022. 11. 6. 03:54
    반응형

    Level 15 - giant를 풀어보자.

    새로운 공격 기법이 나타났다!!

     

    소스 코드를 보면 다음 Level은 assassin이고, no stack, no RTL이라는 힌트가 있다.

    RTL을 앞에서 해봤으니 쓰지 마라고 하는걸까..??

    아무튼 코드 하단을 보면 argv[1]의 48번째 값에 \xbf와 \x40을 사용하지 못하게 되어 있다.

    그리고 buffer와 sfp를 합한 44 바이트를 0으로 초기화한다.

    <assassin 소스 코드의 내용>

     

    gdb로 assassin 파일을 분석해보자.

    dummy 값은 없고, 앞의 Level들처럼 특별한 내용도 없는 것 같다.

    그렇다면 공격은 어떻게 해야 할까??

    <assassin 파일 gdb 분석>

     

    이번 Level에서 시도해 볼 공격은 RET Sled라고 불리는 공격 기법이다.


    [RET Sled]

    더보기

    RET Sled는 간단하게 설명하자면 RET에 RET 주소를 연속적으로 호출해 스택을 조작하는 공격 기법이다.

    이것은 함수의 에필로그 과정에서의 leave와 ret를 보면 이해할 수 있다.

     

    함수 에필로그의 과정에서 먼저 leave를 하면 ebp는 SFP를, esp는 RET를 가리키게 된다.

    다음으로 ret를 하면서 pop eip와 jmp eip를 수행하게 된다.

    이 과정에서 eip는 RET 주소의 명령을 실행하고, esp는 가리키고 있던 RET에서 +4 바이트만큼 이동한다.

     

    RET Sled는 이 과정을 이용하여 RET 바로 뒤에 공격자가 실행할 코드의 주소를 넣는 공격 기법이다.

    원래의 RET에 &RET를 넣어 한 번 더 실행이 되게 한다.

    그렇게 하면 eip는 esp가 가리키고 있는 &RET + 4에 넣은 공격자가 원하는 주소의 명령을 실행한다.

    그리고 위에서 설명했듯 이 기법은 RET 주소를 원하는 만큼 연속적으로 넣을 수 있다.


    쉘을 실행시키기 위해 환경변수를 선언해 그 주소를 넣을 수도 있지만, RTL 공격을 해보도록 하자.

     

    이번에 필요한 정보는 system 함수의 주소, /bin/sh의 주소이다.

    gdb를 이용해 system 함수의 주소를 알아내고, /bin/sh를 알기 위한 소스 코드를 만들어 컴파일한다.

    <system 함수의 주소, /bin/sh의 주소>

     

    이렇게 알아낸 정보들을 이용해 페이로드를 작성해보자.

    페이로드는 NOP*44 + RET의 주소 + system 함수의 주소 + NOP*4 + /bin/sh의 주소이다.

    작성한 페이로드를 입력하여 프로그램을 실행하면 assassin의 권한으로 쉘이 실행된다.

    my-pass를 입력하니 비밀번호가 나타났다.

    <나타난 비밀번호>

    반응형

    'Wargame > L.O.B' 카테고리의 다른 글

    [L.O.B] Level 17 - zombie_assassin  (1) 2022.11.10
    [L.O.B] Level 16 - assassin  (0) 2022.11.06
    [L.O.B] Level 14 - bugbear  (0) 2022.11.05
    [L.O.B] Level 13 - darkknight  (0) 2022.11.04
    [L.O.B] Level 12 - golem  (1) 2022.11.02

    댓글

Designed by Tistory.