當(dāng)前位置:
首頁(yè) >
BUUCTF not_the_same_3dsctf_2016
發(fā)布時(shí)間:2023/12/20
36
豆豆
生活随笔
收集整理的這篇文章主要介紹了
BUUCTF not_the_same_3dsctf_2016
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
還是靜態(tài)鏈接的,一個(gè)文件,自己玩,所以打開(kāi)IDA找找能用到的函數(shù)就可以了,題目也非常簡(jiǎn)單,棧溢出
這里我特別解釋一下這個(gè)payload'a'.encode() * (0x2d) + p32(mprotect_addr) + p32(pop) + p32(bss_start_addr) + p32(0x100) + p32(0x7) + p32(read_addr) + p32(bss_start_addr) + p32(0) + p32(bss_start_addr) + p32(0x100)
- 首先0x2d是main函數(shù)中棧空間的大小,它的下一個(gè)位置就是ret指令對(duì)應(yīng)的返回地址了
- p32(mprotect_addr)就是mprotect函數(shù)的地址,接下來(lái)的p32(pop)是為了保持棧平衡而將后面壓入的三個(gè)參數(shù)從棧上彈出,彈出后我們并不使用它,就是為了控制棧的結(jié)構(gòu),p32(pop)的位置也同樣是執(zhí)行完mprotect后的返回地址,pop對(duì)應(yīng)的指令為pop esi ; pop edi ; pop ebp ; ret,最后ret就跳轉(zhuǎn)到p32(read_addr)這里了
- 同理,p32(read_addr)的下一個(gè)p32(bss_start_addr)也是執(zhí)行完read函數(shù)后跳轉(zhuǎn)的地址,后面是read的三個(gè)參數(shù)
整個(gè)思路就是,利用mprotect函數(shù)修改bss段為0x7即0b111,可讀可寫(xiě)可執(zhí)行權(quán)限,然后利用read函數(shù)讀入shellcode,最后跳轉(zhuǎn)到shellcode的位置,就成功拿到shell了
總結(jié)
以上是生活随笔為你收集整理的BUUCTF not_the_same_3dsctf_2016的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ZF标志
- 下一篇: ERP的概念、简介与发展历程