0x01 漏洞点
1 | 分析能够发现程序有两处漏洞,一处是栈溢出,一处是格式化字符串漏洞 |
1 | 程序有Canary保护,这个保护就是在栈上面抱一个标志canary,在程序执行结束后,会检测这个标志是否发生变化,若发生变化则程序报错,这个canary通常是在ebp的上面,同一个程序在每一次执行时这个标志canary是不同的,但是在执行过程中这个标志是不会发生变化的 |
0x02 攻击
1 | 首先计算一下格式化字符串的偏移,偏移为5,由于程序是64位的,所以%x不可以使用,改用%llx |
1 | 由于buf的大小为0x90,并且标志canary是在ebp的上面,也就是buf的最低处,所以标志canary的偏移就是23 |
0x03 exp
1 | from pwn import *context.arch = "amd64" |