30
安安安安安安 Noip2 Stack based buffer overflow 安安安 安安安 安安安 安安安 安安安 安安安

Noip2 stack buffer overflow

Embed Size (px)

Citation preview

Page 1: Noip2 stack buffer overflow

安全程式設計Noip2

Stack based buffer overflow第五組:林昱辰陳宗暉蘇才維吳尚浩閻昱萱

Page 2: Noip2 stack buffer overflow

漏洞出處

Page 3: Noip2 stack buffer overflow

軟體介紹: Noip

Noip 是全球最知名的動態 DNS 提供商,他們的動態更新客戶端存在於眾多的系統、軟體和嵌入式軟體中

Page 4: Noip2 stack buffer overflow

漏洞成因:

Page 5: Noip2 stack buffer overflow

Summary:

File Format:ELF 32 bitDynamically linkedNot Stripped

Page 6: Noip2 stack buffer overflow

Payload = (292 - 21)*nop + shellcode + ret_address ↑ buffer 到 ret address 的 bytes 數 – shellcode bytes 數

Shellcode 21 個 bytes ↓

Page 7: Noip2 stack buffer overflow

SCRIPT

Page 8: Noip2 stack buffer overflow

Nop Slide

Page 9: Noip2 stack buffer overflow

DEMO

Page 10: Noip2 stack buffer overflow

結束

Page 11: Noip2 stack buffer overflow

才怪

Page 12: Noip2 stack buffer overflow

因為 shellcode 出了點意外,換了好多個都無法提權, SO…… 我們決定做個小彌補

Page 13: Noip2 stack buffer overflow

Noip2Stack based buffer overflow BETA

利用 ret2ibc+ROP 繞過 NX

Page 14: Noip2 stack buffer overflow

DEPData Execution Prevention可寫的地方不可執行,可執行的地方不可寫gcc: -zexecstack( 關閉 NX)

Page 15: Noip2 stack buffer overflow

shellcode

shellcodeshellcode

shellcode

STACK

Page 16: Noip2 stack buffer overflow

ROPReturn Oriented Programming返回導向編程執行針對性的機器語言指令序列 (=Gadget)RET 到自身含有 ret 的代碼上

Page 17: Noip2 stack buffer overflow

Gadget名詞:小機具、小組件一段一段由 ret 組成的程式碼片段

Page 18: Noip2 stack buffer overflow

CODE:Func(argv1, argv2)

STACK

argv2ESP→

Assembly:PUSH argv2

Page 19: Noip2 stack buffer overflow

STACK

argv2argv1ESP→

CODE:Func(argv1, argv2)

Assembly:PUSH argv2PUSH argv1

Page 20: Noip2 stack buffer overflow

STACK

argv1argv2

Ret addrESP→

CODE:Func(argv1, argv2)

Assembly:PUSH argv2PUSH argv1call Func

Page 21: Noip2 stack buffer overflow

STACK

argv2argv1

Ret addrPrev ebpESP→ CODE:

Func(argv1, argv2)

Assembly:PUSH argv2PUSH argv1call Funcpush EBP

Page 22: Noip2 stack buffer overflow

argv2argv1

Ret addrPrev ebpEBP=ESP→ CODE:

Func(argv1, argv2)

Assembly:PUSH argv2PUSH argv1call Funcpush EBPMOV EBP,ESP

Page 23: Noip2 stack buffer overflow

STACK

argv2argv1

Ret addrPrev ebpbuffer

EBP→ CODE:Func(argv1, argv2)

Assembly:PUSH argv2PUSH argv1call Funcpush EBPMOV EBP,ESPSUB ESP,8

ESP→

Page 24: Noip2 stack buffer overflow

Ret2Libc

執行 C 語言程式通常都會載入Libc 裡面有很多好用的 function

覆蓋返回地址為現有函數地址※ 不能 return 到 shellcode ,就 return 到現有函式上偽造堆疊,建立函數呼叫

AAAA system() ret_addr ptr“/bin/bash”

STACK

HIGH

LOW

Ret_addr

Page 25: Noip2 stack buffer overflow

Libc Function = Libc Base Address + Function Offset ↑ ↑ 動態載入決定 固定不變 (NoASLR→ 固定 )

Page 26: Noip2 stack buffer overflow

SCRIPT

Page 27: Noip2 stack buffer overflow

AAAAgets_func@libc

pop_retgets_argv_addr

system@libcAAAA

gets_argv_addr

Padding

讀 /bin/bash 字串進來清空 stack + Chain

存 /bin/bash 字串在 bss segment

執行不重要隨便打system 的參數 ( 跟上面那個同地址 )

Page 28: Noip2 stack buffer overflow

DEMO

Page 29: Noip2 stack buffer overflow

結束

Page 30: Noip2 stack buffer overflow

真的啦