noip2 stack buffer overflow

Post on 15-Apr-2017

95 Views

Category:

Education

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

安全程式設計Noip2

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

漏洞出處

軟體介紹: Noip

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

漏洞成因:

Summary:

File Format:ELF 32 bitDynamically linkedNot Stripped

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

Shellcode 21 個 bytes ↓

SCRIPT

Nop Slide

DEMO

結束

才怪

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

Noip2Stack based buffer overflow BETA

利用 ret2ibc+ROP 繞過 NX

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

shellcode

shellcodeshellcode

shellcode

STACK

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

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

CODE:Func(argv1, argv2)

STACK

argv2ESP→

Assembly:PUSH argv2

STACK

argv2argv1ESP→

CODE:Func(argv1, argv2)

Assembly:PUSH argv2PUSH argv1

STACK

argv1argv2

Ret addrESP→

CODE:Func(argv1, argv2)

Assembly:PUSH argv2PUSH argv1call Func

STACK

argv2argv1

Ret addrPrev ebpESP→ CODE:

Func(argv1, argv2)

Assembly:PUSH argv2PUSH argv1call Funcpush EBP

argv2argv1

Ret addrPrev ebpEBP=ESP→ CODE:

Func(argv1, argv2)

Assembly:PUSH argv2PUSH argv1call Funcpush EBPMOV EBP,ESP

STACK

argv2argv1

Ret addrPrev ebpbuffer

EBP→ CODE:Func(argv1, argv2)

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

ESP→

Ret2Libc

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

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

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

STACK

HIGH

LOW

Ret_addr

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

SCRIPT

AAAAgets_func@libc

pop_retgets_argv_addr

system@libcAAAA

gets_argv_addr

Padding

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

存 /bin/bash 字串在 bss segment

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

DEMO

結束

真的啦

top related