ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [L.O.B] Level 16 - assassin
    Wargame/L.O.B 2022. 11. 6. 08:19
    반응형

    Level 16 - assassin을 풀어보자.

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

     

    소스 코드를 보면 다음 Level은 zombie_assassin이고, FEBP라는 힌트가 있다.

    이번 Level의 제약 조건은 앞과 비슷하지만, 마지막에 strncpy 함수를 사용해 정확한 갯수를 복사한다.

    <zombie_assassin 소스 코드의 내용>

     

    gdb 분석을 통해 간단하게 dummy 값 정도를 확인한다.

    dummy 값은 없고, 문제를 어떻게 풀 지를 생각해보자.

    <zombie_assassin 파일 gdb 분석>

     

    소스 코드에 FEBP라는 힌트가 있다.

    이번 Level은 FEBP를 활용하여 풀어보도록 하자.


    [FEBP]

    더보기

    FEBP란 Fake-EBP를 의미한다.

    문자 그대로, EBP를 조작해 원하는 코드를 실행할 수 있도록 하는 공격 기법이다.

     

    이 공격 기법은 함수의 에필로그 과정에서 (leave-ret) gadget를 이용한다.

    leave는 mov esp,ebp -> pop ebp의 과정을 거쳐 실행된다.

    그 결과 ebp는 SFP를 가리키고, esp는 RET를 가리키게 된다.

     

    위의 leave를 수행한 후, RET에 (leave-ret) gadget을 넣어 다시 leave가 수행되게 하면 어떻게 될까??

    esp는 ebp가 가리키는 SFP를 가리킨 후, pop에 의해 다시 RET를 가리키게 된다.

    그 후 eip가 RET에 있는 주소값의 명령어를 실행한다.

     

    이렇게 되면 정상적으로 결과가 실행되는 것과 다름없지만, 이 과정에서 한 가지를 조작한다.

    처음 leave를 수행한 후 ebp가 가리킬 SFP에 (공격자가 원하는 주소 - 4)를 넣는 것이다.

    그렇게 하면 esp는 ebp가 가리키는 (공격자가 원하는 주소 - 4)를 가지게 된다.

    그 후 다시 한 번 수행되는 leave의 pop에 의해 공격자가 원하는 주소의 명령어 주소를 가진다.

     

    그 결과, eip가 esp가 가리키는 공격 주소를 수행하여 공격이 수행되는 것이다.


    이번 Level의 풀이를 위해 필요한 정보는 buffer의 주소, (leave-ret) gadget이다.

     

    먼저 간단하게 구할 수 있는 (leave-ret) gadget을 알아보자.

    gdb를 실행한 후, disas main 명령어만으로도 알아낼 수 있지만 새로운 명령어를 사용해보자.

    objdump -d ./zombie_assassin 명령어를 이용해 각 어셈블리가 실행되는 주소를 알 수 있다.

    아래의 사진을 보면, (leave-ret) gadget은 0x080484df에 있다는 것을 알 수 있다.

    (gadget은 간단히 설명하자면, 바이너리에 존재하는 push, pop, ret, leave 등의 어셈블리 코드이다.)

    <leave의 주소>

     

    다음으로, buffer의 주소를 알아보도록 하자.

    strncpy 함수가 끝나는 <main+139>에 break를 걸고 python 명령어를 입력한다.

    그 다음 x 명령어로 buffer의 주소를 찾으면, buffer의 주소가 0xbffffaa0인 것을 알 수 있다.

    <buffer의 주소>

     

    이제 알아낸 정보들을 바탕으로 페이로드를 작성해보자.

    페이로드는 (&buffer+4) + 쉘 코드 + NOP*11 + leave + (&buffer-4)로 구성된다.

    작성한 페이로드를 넣어 프로그램을 실행하면 zombie_assassin의 권한으로 쉘이 실행된다.

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

    <나타난 비밀번호>

    반응형

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

    [L.O.B] Level 18 - succubus  (0) 2022.11.10
    [L.O.B] Level 17 - zombie_assassin  (1) 2022.11.10
    [L.O.B] Level 15 - giant  (0) 2022.11.06
    [L.O.B] Level 14 - bugbear  (0) 2022.11.05
    [L.O.B] Level 13 - darkknight  (0) 2022.11.04

    댓글

Designed by Tistory.