oj level2_x64 簡單棧溢出(64)

一開始就看一下這道題的保護機制和位數
由於NX是保護的,所以棧上的數據沒有執行權限
防止攻擊手段:棧溢出 + 跳到棧上執行shellcode 在這裏插入圖片描述因爲這道題是64位的,不是32位,32位和64位的主要區別在於函數參數傳遞的方式,
32位程序函數的參數是壓在棧中的,而64位程序的前6個參數是存在寄存器中的,第7個開始才壓入棧中。就是前6個是從左到右,多於6個的時候時,就是從右到左壓入堆棧,
64位主要時edi寄存器傳參,來覆蓋edi的值
在這裏插入圖片描述
在這裏插入圖片描述就可以看到這是棧溢出,其實本來就80h,然後返回就是200,這就是存在溢出,
用到read函數,
在ida裏看一下,函數bin_sh地址,和system addr
在這裏插入圖片描述
這就可以找到system的函數,
只要有binsh和system的地址,我們從而構造一個函數,system就是ret的地址,
又因爲64位是通過寄存器來傳參,
system地址就是ret addr
binsh地址就是pop_ ret

其實這道題是棧的溢出
拉入ida裏就可以查看的data的地址,是binsh_addr = 0x600A90 ,就可以利用bin/sh的地址來得到
system 的地址是40063E
利用ROPgadget --binary level2_x64 --only “pop|ret”|grep rdi
可以得到4006b3,

附:方法可以得到也可以使用ROPgadget進行gadget搜索
ROPgadget --binary --only ‘pop|ret’ | grep 'ebx’
ROPgadget --binary ret2syscall --string '/bin/sh

腳本:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章