Top Banner
安安安安安安 Noip2 Stack based buffer overflow 安安安 安安安 安安安 安安安 安安安 安安安
30

Noip2 stack buffer overflow

Apr 15, 2017

Download

Education

b0920075
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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

真的啦