lab2-2

通過(guò)gdb調(diào)試,可以看到main函數(shù)調(diào)用一個(gè)函數(shù),這個(gè)函數(shù)內(nèi)調(diào)用兩次myRead進(jìn)行輸入字符串,

通過(guò)查看,可以看到輸入緩存區(qū)的地址,第一個(gè)輸入緩存區(qū)地址為0x804a060,是一個(gè)真實(shí)地址,

image.png

第二個(gè)緩存區(qū)是棧中的地址,

image.png

因?yàn)榈诙€(gè)緩存區(qū)是棧中的地址0xffffcfb0,方便進(jìn)行與ebp相減,0xffffcfd8-0xffffcfb0得出長(zhǎng)度為40個(gè)字節(jié)。也就是我們需要44個(gè)字節(jié)才可以把覆蓋到ebp,后面的4個(gè)字節(jié)是ret的地址。

然后需要開(kāi)始寫(xiě)shellcode,寫(xiě)shellcode的關(guān)鍵就是進(jìn)入到/bin/sh目錄下,需要用到函數(shù)execv,我是從網(wǎng)上找了一個(gè)最簡(jiǎn)單的shellcode修改了一下,編譯完測(cè)試是可以正常執(zhí)行的。

image.png
image.png

然后獲得這個(gè)shellcode的字節(jié)碼

image.png

最后需要把shellcode輸入,然后ret處寫(xiě)入shellcode的地址。我把shellcode作為第二次輸入,然后用a把剩下的字節(jié)補(bǔ)齊,再把第二個(gè)輸入緩存區(qū)的地址寫(xiě)在后面,“a”*19的原因是字節(jié)碼已經(jīng)占了25位,一共需要44位,所以剩下的19位用a填充

image.png

但是發(fā)現(xiàn)一直無(wú)法執(zhí)行,對(duì)進(jìn)程debug后,發(fā)現(xiàn)這個(gè)緩存區(qū)地址是無(wú)法訪(fǎng)問(wèn)的,

image.png

于是想改寫(xiě)shellcode把地址往棧外引,但是發(fā)現(xiàn)第一個(gè)緩存區(qū)地址是真實(shí)的地址,于是將shellcode在第一個(gè)緩存區(qū)寫(xiě)入,第二個(gè)緩存區(qū)進(jìn)行溢出,ret處的地址寫(xiě)第一個(gè)緩存區(qū)的地址,

image.png
image.png

于是可以成功拿到shell

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容